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

# Submit Deposit

> Associates the broadcast on-chain stablecoin deposit with an offramp order by its transaction ID. This step is optional because Crossmint matches the deposit automatically by the order memo.



## OpenAPI

````yaml api-reference/_open-api/OfframpAPIs.json POST /2022-06-09/orders/{orderId}/payment
openapi: 3.0.1
info:
  description: |
    Offramp APIs for cashing out stablecoins to fiat.
  version: 1.0.0
  title: Offramp
  contact:
    name: Crossmint Offramp APIs
    url: https://www.crossmint.com
    email: support@crossmint.com
servers:
  - url: https://staging.crossmint.com/api
    description: Staging environment (testnets)
  - url: https://www.crossmint.com/api
    description: Production environment (mainnets)
security: []
tags:
  - name: Offramp
    description: APIs to cash out stablecoins to fiat (offramp)
  - name: Payment Methods
    description: Manage bank account payout methods for offramp.
paths:
  /2022-06-09/orders/{orderId}/payment:
    post:
      tags:
        - Offramp
      summary: Submit Deposit
      description: >
        Associates the broadcast on-chain stablecoin deposit with an offramp
        order by its transaction ID.


        This call is **optional**: the prepared transaction returned by Create
        Order already carries the order memo, so Crossmint matches the deposit
        to the order automatically once it is broadcast. Use this endpoint to
        explicitly attach the deposit transaction to the order (for example when
        you broadcast the transfer yourself and want to report the transaction
        ID immediately rather than waiting for automatic matching).


        **Authentication**: Use either a server-side API key with the
        `orders.update` scope, or the `clientSecret` returned when the order was
        created, passed as an `Authorization` header.
      operationId: submit-offramp-deposit
      parameters:
        - $ref: '#/components/parameters/orderId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProcessPaymentInput'
      responses:
        '200':
          description: Deposit submitted successfully. Returns the updated order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderObject'
        '400':
          description: >-
            Invalid arguments. Make sure you are following the API
            specification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/400Response'
        '403':
          description: Forbidden error. Ensure the credentials are correct.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/403Response'
        '404':
          description: Not found error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/404Response'
        '503':
          description: >-
            Try again in a few minutes. If the issue still persists, contact
            Crossmint support.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/503Response'
        '524':
          description: A timeout occurred.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/524Response'
      security:
        - apiKey: []
        - orderClientSecret: []
components:
  parameters:
    orderId:
      name: orderId
      in: path
      description: |
        The identifier of the offramp order, in UUID format.

        **Example:** `40f49812-123b-4d10-bdae-561e4ed2b990`
      required: true
      schema:
        type: string
  schemas:
    ProcessPaymentInput:
      type: object
      additionalProperties: false
      description: The on-chain deposit to associate with the order.
      required:
        - txId
      properties:
        type:
          type: string
          enum:
            - crypto-tx-id
          default: crypto-tx-id
          description: >-
            The payment type. For offramp this is always `crypto-tx-id`: the
            deposit is identified by its on-chain transaction ID.
        txId:
          type: string
          description: >-
            The transaction hash of the broadcast stablecoin deposit on the
            chain given by the order's `payment.method`.
          example: '0xc9537a0e4ee4794101514d30418bd20f09cf66c3ce86b82b0be916489a338e85'
    OrderObject:
      type: object
      properties:
        orderId:
          type: string
          example: 40f49812-123b-4d10-bdae-561e4ed2b990
        phase:
          type: string
          enum:
            - quote
            - payment
            - delivery
            - completed
          description: >-
            The current phase of the order lifecycle. For offramp the order
            starts in `payment` (awaiting the on-chain deposit) and moves to
            `completed` once the fiat payout is done.
          example: payment
        lineItems:
          type: array
          items:
            type: object
            properties:
              metadata:
                type: object
                properties:
                  name:
                    type: string
                    example: USD
                  description:
                    type: string
                    example: United States Dollar
                  imageUrl:
                    type: string
                    example: https://www.crossmint.com/assets/ui/flags/us.svg
              quote:
                type: object
                properties:
                  status:
                    type: string
                    example: valid
                  charges:
                    type: object
                    properties:
                      unit:
                        type: object
                        properties:
                          amount:
                            type: string
                            example: '1'
                          currency:
                            type: string
                            example: usdc
                      fees:
                        type: object
                        properties:
                          type:
                            type: string
                            example: exact
                          amount:
                            type: string
                            example: '0.002'
                          currency:
                            type: string
                            example: usdc
                  totalPrice:
                    type: object
                    properties:
                      amount:
                        type: string
                        example: '1'
                      currency:
                        type: string
                        example: usdc
              delivery:
                type: object
                description: The payout leg of the order.
                properties:
                  status:
                    type: string
                    enum:
                      - awaiting-payment
                      - in-progress
                      - completed
                      - failed
                    description: >-
                      Status of the fiat payout. `awaiting-payment` until the
                      on-chain deposit is received, then `in-progress`, then
                      `completed`. `failed` indicates the payout could not be
                      completed; contact Crossmint support if the order reaches
                      this state.
                    example: awaiting-payment
                  recipient:
                    type: object
                    properties:
                      locator:
                        type: string
                        example: paymentMethodId:d5e5c48a-7dec-44b1-8cf4-4615bf00c8fc
                      paymentMethodId:
                        type: string
                        example: d5e5c48a-7dec-44b1-8cf4-4615bf00c8fc
              executionMode:
                type: string
                example: exact-in
        quote:
          type: object
          properties:
            status:
              type: string
              enum:
                - valid
                - expired
                - requires-recipient
                - all-line-items-unavailable
              example: valid
            quotedAt:
              type: string
              example: '2026-06-17T21:48:49.059Z'
            expiresAt:
              type: string
              example: '2026-06-17T21:58:49.059Z'
            totalPrice:
              type: object
              properties:
                amount:
                  type: string
                  example: '1'
                currency:
                  type: string
                  example: usdc
        payment:
          type: object
          properties:
            status:
              type: string
              enum:
                - requires-quote
                - requires-crypto-payer-address
                - requires-recipient-verification
                - requires-kyc
                - manual-kyc
                - failed-kyc
                - pending-kyc-review
                - crypto-payer-insufficient-funds
                - crypto-payer-insufficient-funds-for-gas
                - awaiting-payment
                - in-progress
                - completed
              description: >-
                Status of the payment, used to determine the next action in the
                offramp flow. `requires-kyc`, `manual-kyc`, `failed-kyc`, and
                `pending-kyc-review` cover the identity verification step.
                `requires-crypto-payer-address` means a payer wallet is still
                needed. `awaiting-payment` means the deposit instructions are
                ready and the buyer can broadcast the deposit. `in-progress` and
                `completed` track the fiat payout.
              example: awaiting-payment
            method:
              type: string
              description: The chain the stablecoin deposit was made from.
              example: base-sepolia
            currency:
              type: string
              example: usdc
            preparation:
              type: object
              description: >-
                On-chain deposit instructions. Sign and broadcast
                `serializedTransaction` from the payer wallet; it already
                carries the order memo, so Crossmint matches the deposit
                automatically.
              properties:
                chain:
                  type: string
                  example: base-sepolia
                payerAddress:
                  type: string
                  example: '0xAa266270cf90FEEA9760617d9c7B5083e9f08984'
                serializedTransaction:
                  type: string
                  description: >-
                    The serialized stablecoin transfer to broadcast. Deserialize
                    it, then sign and send it from the payer wallet.
                  example: 0x02f9018e83014a34...
                transactionParameters:
                  type: object
                  properties:
                    amount:
                      type: string
                      example: '1000000'
                    memo:
                      type: string
                      example: '------BEGIN MEMO------...------END MEMO------'
            received:
              type: object
              description: >-
                The matched on-chain deposit. Populated once the payment is
                received.
              properties:
                chain:
                  type: string
                  example: base-sepolia
                txId:
                  type: string
                  example: >-
                    0xc9537a0e4ee4794101514d30418bd20f09cf66c3ce86b82b0be916489a338e85
                amount:
                  type: string
                  example: '1'
                currency:
                  type: string
                  example: usdc
            receiptEmail:
              type: string
              example: alice@example.com
    400Response:
      type: object
      properties:
        error:
          type: boolean
          example: true
        message:
          type: string
          description: Human-readable error message describing what went wrong
        code:
          type: string
          description: Machine-readable error code for programmatic handling
    403Response:
      type: object
      properties:
        error:
          type: boolean
          example: true
        message:
          type: string
          example: Malformed API key. / API key provided doesn't have required scopes.
    404Response:
      type: object
      properties:
        error:
          type: boolean
          example: true
        message:
          type: string
          example: Not found
    503Response:
      type: object
      properties:
        error:
          type: boolean
          example: true
        message:
          type: string
          example: >-
            Service temporarily unavailable. Try again in a few minutes. If the
            issue still persists, contact Crossmint support.
    524Response:
      type: object
      properties:
        error:
          type: boolean
          example: true
        message:
          type: string
          example: A timeout occurred.
  securitySchemes:
    apiKey:
      type: apiKey
      name: X-API-KEY
      in: header
    orderClientSecret:
      type: apiKey
      name: Authorization
      in: header
      description: >-
        The `clientSecret` returned when the order was created, used to read the
        order without a server-side API key.

````