> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zuba.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Money amounts are always major-unit decimal strings (e.g. "1000.00"), never floats and never minor units, in every request, response, and webhook payload.
> Authentication is OAuth 2.0 client credentials: exchange the Client ID and Client Secret at the Token URL for a 24-hour JWT and cache it; do not request a token per call.
> Set a unique clientRef on every money-moving request; it is the idempotency key, and retries return the original resource.
> Quotes are single-use, intent-locked, and expire fast: always read expiresAt, consume the quote with the executor matching its intent, and re-quote on expiry instead of retrying.
> Prefer webhooks over polling for payout, order, and deposit status tracking.
> Use the sandbox (api.sandbox.zuba.com) with its deterministic magic values before touching production.

# Submit an uploaded proof of payment for a settlement

> Attaches the uploaded payment confirmation to the order settlement when requirements.proofOfPayment=true and starts funding confirmation. Once the transfer is confirmed the order moves to funds_received and an order.funds_received webhook is sent. Re-submitting after confirmation has started is a no-op.



## OpenAPI

````yaml /openapi.json post /v1/orders/{id}/settlement/proof
openapi: 3.0.0
info:
  contact: {}
  description: >-
    Comprehensive payment platform API supporting fiat and crypto payments,
    currency conversion, and compliance management
  title: Zuba Payment Platform API
  version: '1.0'
servers: []
security: []
tags:
  - description: Manage M2M API keys and credentials
    name: API Keys
  - description: Internal ledger accounts and transactions
    name: Ledger
  - description: Handle incoming payments and deposits
    name: Pay-ins
  - description: Manage payouts, beneficiaries, and SEPA transfers
    name: Payouts
  - description: Manage outbound webhook endpoints and deliveries
    name: Webhooks
paths:
  /v1/orders/{id}/settlement/proof:
    post:
      tags:
        - Orders
      summary: Submit an uploaded proof of payment for a settlement
      description: >-
        Attaches the uploaded payment confirmation to the order settlement when
        requirements.proofOfPayment=true and starts funding confirmation. Once
        the transfer is confirmed the order moves to funds_received and an
        order.funds_received webhook is sent. Re-submitting after confirmation
        has started is a no-op.
      operationId: OrderController_submitProof
      parameters:
        - description: Order id
          in: path
          name: id
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitProofRequestDto'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitProofResponseDto'
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericErrorResponseDto'
          description: PROOF_KEY_NOT_FOR_THIS_SETTLEMENT / upload invalid
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericErrorResponseDto'
          description: >-
            insufficient_scope (missing create:orders) or Insufficient role
            (workspace viewers cannot act on orders)
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericErrorResponseDto'
          description: NO_SETTLEMENT (order has no settlement block)
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericErrorResponseDto'
          description: >-
            SETTLEMENT_NOT_OPEN / SETTLEMENT_EXPIRED /
            PROOF_OF_PAYMENT_NOT_REQUIRED
      security:
        - bearer: []
components:
  schemas:
    SubmitProofRequestDto:
      properties:
        proofKey:
          description: The key returned by the upload-URL endpoint
          example: order-settlements/1c9e.../proof-8af2...
          type: string
      required:
        - proofKey
      type: object
    SubmitProofResponseDto:
      properties:
        settlementId:
          description: Settlement id
          format: uuid
          type: string
        status:
          description: >-
            declared: funding confirmation is in progress and the order will
            move to funds_received once the transfer is confirmed. submitted:
            the proof is recorded and will be confirmed manually.
          enum:
            - declared
            - submitted
          type: string
      required:
        - status
        - settlementId
      type: object
    GenericErrorResponseDto:
      properties:
        error:
          description: Error type identifier
          example: BAD_REQUEST
          type: string
        message:
          description: Error message
          example: Bad Request
          type: string
        path:
          description: Request path that generated the error
          example: /v1/beneficiaries
          type: string
        statusCode:
          description: HTTP status code
          example: 400
          type: number
        timestamp:
          description: ISO timestamp when the error occurred
          example: '2024-01-15T10:30:00.000Z'
          type: string
      required:
        - statusCode
        - message
        - error
        - timestamp
        - path
      type: object
  securitySchemes:
    bearer:
      bearerFormat: JWT
      description: Enter Auth0 JWT token
      scheme: bearer
      type: http

````