Quotes

Create a payout quote

Changed on

Validates one bank destination and returns a time-limited payout quote. Requires payout.write permission.

The destination is submitted inline because this release does not expose a separate recipient resource. Infini binds a normalized, immutable destination snapshot to quote_id. The payout create request cannot replace or modify it.

The first release supports only these amount and fee-responsibility combinations:

  • amount_mode=send with fee_paid_by=BENEFICIARY: fees are deducted internally. amount fixes sending_amount; transfer_fee_amount = sending_amount × fee_rate_decimal; and receiving_amount = sending_amount - transfer_fee_amount - bank_fee_amount. For amount=1000.00, rate 0.001, and bank fee 50.00, the recipient receives 949.00.
  • amount_mode=receive with fee_paid_by=PAYER: fees are deducted externally. amount fixes receiving_amount; transfer_fee_amount = sending_amount × fee_rate_decimal; and sending_amount = receiving_amount + transfer_fee_amount + bank_fee_amount. For amount=1000.00, rate 0.001, and bank fee 50.00, the source balance is debited 1051.05.

In receive mode, Infini grosses up sending_amount until the recipient amount remains exact after all fees.

Changing fee_paid_by changes the calculation and requires a new quote. The accepted quote_id locks the fee responsibility and both calculated amounts used by the payout.

The quote step performs preliminary destination, route, amount, compliance, and limit checks. It does not reserve balance, approve a payout, create a payout, or guarantee execution. POST /v2/payouts repeats all execution-critical checks against current state.

post/v2/payouts/quotes

Request

Headers

X-API-Key-IDstring required

32-character Base58 credential ID returned after public-key registration.

X-API-Timestampstring required

Unix timestamp in seconds; tolerance is ±300 seconds.

X-API-Noncestring required

16 cryptographically random bytes encoded as unpadded Base64URL; fresh on every attempt.

Digeststring required

SHA-256= followed by standard padded Base64 of SHA-256 of exact request body bytes. Required even for an empty body; included in the signing string.

Authorizationstring required

Use Ed25519 signature="BASE64_SIGNATURE", where BASE64_SIGNATURE is the standard padded Base64 signature. See /docs/en/4-authorization for the exact signing string.

Request body

amountstring required

Positive USD amount expressed according to amount_mode.

amount_mode'send' | 'receive' required

Side fixed by amount. send is the source-account debit; receive is the recipient amount.

fee_paid_by'PAYER' | 'BENEFICIARY' required

Fee responsibility and calculation input. PAYER applies fees externally; BENEFICIARY deducts fees internally. The first release accepts receive with PAYER, or send with BENEFICIARY.

source_currency'USD' required

Organization balance currency. The first release supports USD only.

destination_currency'USD' required

Currency delivered to the recipient. Payout quotes currently support USD only.

destination_countrystring required

Destination country as an ISO 3166-1 alpha-2 code.

payout_type'swift' required

Payout rail. The current release supports SWIFT only.

Example request

{
  "amount": "1000.00",
  "amount_mode": "receive",
  "fee_paid_by": "PAYER",
  "source_currency": "USD",
  "destination_currency": "USD",
  "destination_country": "US",
  "payout_type": "swift",
  "destination": {
    "type": "bank_account",
    "account_holder_type": "business",
    "account_holder_name": "Acme Supplies LLC",
    "bank_country": "US",
    "bank_name": "Example Bank",
    "account_number": "9876543210",
    "swift_code": "BOFAUS3NXXX",
    "address": {
      "line1": "123 Market Street",
      "line2": "Suite 500",
      "city": "New York",
      "state": "NY",
      "postal_code": "10001",
      "country": "US"
    }
  }
}

Response

Time-limited payout quote

code0 required

Business code. 0 means success.

messagestring required

Response message.

Example response

{
  "data": {
    "quote_id": "poq_01JQ90B8S5VJ6R3T7F1M2C4N9X",
    "provider": "sgb",
    "payout_type": "swift",
    "source_currency": "USD",
    "destination_currency": "USD",
    "destination_country": "US",
    "amount_mode": "receive",
    "fee_paid_by": "PAYER",
    "sending_amount": "1051.05",
    "receiving_amount": "1000.00",
    "transfer_fee_amount": "1.05",
    "bank_fee_amount": "50.00",
    "fee_rate_decimal": "0.001",
    "rate": "1",
    "billing": {
      "currency": "USD",
      "transfer_fee": "1.05",
      "fx_fee": "0.00",
      "rail_fee": "50.00",
      "total_fee": "51.05",
      "fee_lines": [
        {
          "type": "transfer_fee",
          "amount": "1.05",
          "currency": "USD",
          "rate": "0.001"
        }
      ]
    },
    "destination": {
      "type": "bank_account",
      "account_holder_type": "business",
      "account_holder_name": "Acme Supplies LLC",
      "bank_country": "US",
      "bank_name": "Example Bank",
      "account_number_masked": "******3210",
      "swift_code": "BOFAUS3NXXX"
    },
    "expires_at": 1786586700
  }
}

Changes

    • breaking

      added the new required header request parameter X-API-Key-ID

    • breaking

      added the new required header request parameter X-API-Nonce

    • breaking

      added the new required header request parameter X-API-Timestamp

    • breaking

      the header request parameter Authorization became required

    • breaking

      the header request parameter Digest became required

    • breaking

      removed the media type application/json for the response with the status

    • breaking

      removed the media type application/json for the response with the status

    • warning

      deleted the header request parameter Date

    • info

      added the non-success response with the status

    • info

      added the non-success response with the status