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

# Submit optional pay-in proof

> Payment is auto-detected. Call this endpoint only if confirmation is delayed.

Submit proof against the **order** reference.

- **Fiat pay-in (onramp):** `{ "reference": "bank-tx-ref", "institution": "gtbank" }`
- **Crypto pay-in (offramp/swap):** `{ "tx_hash": "0x..." }`

**Auth:** Secret key + HMAC.

Optional `include` query param matches GET order (`payout`, `timeline`).




## OpenAPI

````yaml /openapi/partner-api.yaml post /v1/orders/{reference}/fulfill
openapi: 3.1.0
info:
  title: Liquidramp Partner API
  version: 2.0.0
  license:
    name: Proprietary
  description: >
    Public integration API for consumer partners: reference data, exchange
    rates, quotes, orders, and webhooks.


    ## Authentication


    - **Public key (`pk_*`)**: read requests (reference data, rate preview) — no
    HMAC

    - **Secret key (`sk_*`)**: backend only — reads and writes (quotes, orders,
    fulfilment). Every `sk_*` request requires HMAC signing with your `enc_*`
    encryption key


    Create keys in the [partner portal](https://dashboard.liquidramp.com). Never
    send `enc_*` as a Bearer token. Never use `sk_*` or `enc_*` in client-side
    code.


    ## HMAC canonical string


    `clientId|timestamp|METHOD|path|rawBody`


    Path includes the `/v1` prefix and any query string. Signature: `sha256=` +
    HMAC-SHA256(canonical, `enc_*`).
servers:
  - url: https://vibe-api.liquidramp.com
    description: Test
  - url: https://api.liquidramp.com
    description: Live
security: []
tags:
  - name: Health
    description: Service health checks
  - name: Reference
    description: Institutions, networks, currencies, and account lookup
  - name: Exchange Rates
    description: Market rates and quote preview
  - name: Orders
    description: Quotes, order creation, fulfilment, and management
  - name: Webhooks
    description: Outbound order lifecycle events delivered to your server
paths:
  /v1/orders/{reference}/fulfill:
    post:
      tags:
        - Orders
      summary: Submit optional pay-in proof
      description: >
        Payment is auto-detected. Call this endpoint only if confirmation is
        delayed.


        Submit proof against the **order** reference.


        - **Fiat pay-in (onramp):** `{ "reference": "bank-tx-ref",
        "institution": "gtbank" }`

        - **Crypto pay-in (offramp/swap):** `{ "tx_hash": "0x..." }`


        **Auth:** Secret key + HMAC.


        Optional `include` query param matches GET order (`payout`, `timeline`).
      operationId: fulfillOrder
      parameters:
        - $ref: '#/components/parameters/OrderReference'
        - name: include
          in: query
          schema:
            type: string
          example: payout,timeline
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/FulfillFiatRequest'
                - $ref: '#/components/schemas/FulfillCryptoRequest'
            examples:
              fiat:
                value:
                  reference: bank-tx-ref-001
                  institution: gtbank
              crypto:
                value:
                  tx_hash: '0xabc123def456789'
      responses:
        '200':
          description: Fulfilment acknowledged
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessEnvelope'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/OrderDetail'
        '422':
          $ref: '#/components/responses/ValidationError'
      security:
        - SecretKeyHmac: []
components:
  parameters:
    OrderReference:
      name: reference
      in: path
      required: true
      schema:
        type: string
      example: ORD-20260627-ABC123
  schemas:
    FulfillFiatRequest:
      type: object
      required:
        - reference
      properties:
        reference:
          type: string
        institution:
          type: string
    FulfillCryptoRequest:
      type: object
      required:
        - tx_hash
      properties:
        tx_hash:
          type: string
    SuccessEnvelope:
      type: object
      required:
        - status
        - message
      properties:
        status:
          type: boolean
          const: true
        message:
          type: string
        data: {}
        meta:
          $ref: '#/components/schemas/PaginationMeta'
    OrderDetail:
      allOf:
        - $ref: '#/components/schemas/OrderList'
        - type: object
          properties:
            recipient:
              oneOf:
                - $ref: '#/components/schemas/FiatRecipient'
                - $ref: '#/components/schemas/CryptoRecipientResult'
            payin:
              oneOf:
                - $ref: '#/components/schemas/FiatPayin'
                - $ref: '#/components/schemas/CryptoPayin'
            payout:
              type: array
              items:
                oneOf:
                  - $ref: '#/components/schemas/FiatPayout'
                  - $ref: '#/components/schemas/CryptoPayout'
            refund:
              oneOf:
                - $ref: '#/components/schemas/FiatRefund'
                - $ref: '#/components/schemas/CryptoRefund'
            timeline:
              type: array
              items:
                $ref: '#/components/schemas/TimelineEntry'
    PaginationMeta:
      type: object
      properties:
        total:
          type: integer
        per_page:
          type: integer
        current_page:
          type: integer
        last_page:
          type: integer
    OrderList:
      type: object
      properties:
        reference:
          type: string
        merchant_reference:
          type:
            - string
            - 'null'
        customer_reference:
          type:
            - string
            - 'null'
        type:
          $ref: '#/components/schemas/OrderType'
        from:
          $ref: '#/components/schemas/OrderLeg'
        to:
          $ref: '#/components/schemas/OrderLeg'
        pricing:
          $ref: '#/components/schemas/OrderPricing'
        fee:
          $ref: '#/components/schemas/OrderFee'
        metadata:
          type:
            - object
            - 'null'
        amount_paid:
          type: number
        amount_settled:
          type: number
        amount_refunded:
          type: number
        percentage_settled:
          type: number
        status:
          $ref: '#/components/schemas/OrderStatus'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    FiatRecipient:
      type: object
      required:
        - institution_code
        - account_number
        - account_name
      properties:
        institution_code:
          type: string
        account_number:
          type: string
        account_name:
          type: string
        memo:
          type: string
    CryptoRecipientResult:
      type: object
      properties:
        network:
          type: string
        address:
          type: string
        memo:
          type: string
    FiatPayin:
      type: object
      properties:
        currency:
          type: string
        account_name:
          type: string
        account_number:
          type: string
        institution_code:
          type: string
        amount:
          type: number
        tx_reference:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
        paid_at:
          type:
            - string
            - 'null'
          format: date-time
    CryptoPayin:
      type: object
      properties:
        asset:
          type: string
        address:
          type: string
        network:
          type: string
        amount:
          type: number
        tx_hash:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        expires_at:
          type:
            - string
            - 'null'
          format: date-time
        paid_at:
          type:
            - string
            - 'null'
          format: date-time
    FiatPayout:
      type: object
      properties:
        currency:
          type: string
        account_name:
          type: string
        account_number:
          type: string
        institution_code:
          type: string
        amount:
          type: number
        percentage:
          type:
            - number
            - 'null'
        tx_reference:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        paid_at:
          type:
            - string
            - 'null'
          format: date-time
    CryptoPayout:
      type: object
      properties:
        asset:
          type: string
        address:
          type: string
        network:
          type: string
        amount:
          type: number
        percentage:
          type:
            - number
            - 'null'
        tx_hash:
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        paid_at:
          type:
            - string
            - 'null'
          format: date-time
    FiatRefund:
      type: object
      properties:
        currency:
          type: string
        account_name:
          type: string
        account_number:
          type: string
        institution_code:
          type: string
        amount:
          type: number
        tx_reference:
          type:
            - string
            - 'null'
        refunded_at:
          type:
            - string
            - 'null'
          format: date-time
    CryptoRefund:
      type: object
      properties:
        asset:
          type: string
        address:
          type: string
        network:
          type: string
        amount:
          type: number
        tx_hash:
          type:
            - string
            - 'null'
        refunded_at:
          type:
            - string
            - 'null'
          format: date-time
    TimelineEntry:
      type: object
      properties:
        group:
          type: string
        event:
          type: string
        details: {}
        created_at:
          type: string
          format: date-time
    ErrorEnvelope:
      type: object
      required:
        - status
        - message
      properties:
        status:
          type: boolean
          const: false
        code:
          type: string
          enum:
            - E_BADREQUEST
            - E_UNAUTHORIZED
            - E_FORBIDDEN
            - E_NOTFOUND
            - E_CONFLICT
            - E_VALIDATION_ERROR
            - E_RATE_LIMITED
            - E_IP_BLOCKED
        message:
          type: string
    OrderType:
      type: string
      enum:
        - onramp
        - offramp
        - swap
    OrderLeg:
      type: object
      properties:
        currency:
          type: string
        network:
          type: string
        amount:
          type: number
    OrderPricing:
      type: object
      properties:
        base_currency:
          type: string
        quote_currency:
          type: string
        exchange_rate:
          type: number
    OrderFee:
      type: object
      properties:
        currency:
          type: string
        network_fee:
          type: number
        protocol_fee:
          type: number
        partner_fee:
          type: number
        vat:
          type: number
        total:
          type: number
        fee_in_rate:
          type: boolean
      description: >-
        Omitted from responses when the fee is already embedded in
        `pricing.exchange_rate`.
    OrderStatus:
      type: string
      enum:
        - initiated
        - pending
        - processing
        - settled
        - awaiting_user_payment
        - awaiting_lp_payment
        - routing
        - executing
        - partially_completed
        - completed
        - cancelled
        - expired
        - failed
        - refunded
        - reverted
  responses:
    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
          example:
            status: false
            code: E_VALIDATION_ERROR
            message: 'recipient: recipient is required'
  securitySchemes:
    SecretKeyHmac:
      type: http
      scheme: bearer
      description: |
        Bearer sk_* plus required headers:
        - liquidramp-client-id
        - liquidramp-timestamp (unix ms)
        - liquidramp-signature (sha256=...)

````