Create a payout quote
Changed onValidates 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.
Request
- Base URLhttps://openapi.infini.money
- AuthAPI key in header Authorization
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Headers
32-character Base58 credential ID returned after public-key registration.
Unix timestamp in seconds; tolerance is ±300 seconds.
16 cryptographically random bytes encoded as unpadded Base64URL; fresh on every attempt.
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.
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
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
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
headerrequest parameterX-API-Key-ID - breaking
added the new required
headerrequest parameterX-API-Nonce - breaking
added the new required
headerrequest parameterX-API-Timestamp - breaking
the
headerrequest parameterAuthorizationbecame required - breaking
the
headerrequest parameterDigestbecame required - breaking
removed the media type
application/jsonfor the response with the status - breaking
removed the media type
application/jsonfor the response with the status - warning
deleted the
headerrequest parameterDate
- breaking
- info
added the non-success response with the status
- info
added the non-success response with the status
- info