---
title: "Create a payout quote"
method: POST
path: "/v2/payouts/quotes"
tags: ["Quotes"]
---

# Create a payout quote

`POST /v2/payouts/quotes`

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 and `receiving_amount = sending_amount - transfer_fee_amount - bank_fee_amount`.
- `amount_mode=receive` with `fee_paid_by=PAYER`: fees are deducted externally and `sending_amount = receiving_amount + transfer_fee_amount + bank_fee_amount`.

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.

## Headers

- `Date` string
- `Authorization` string
- `Digest` string

## Request body

- CreateQuoteRequest
  - `amount` string, 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_country` string, required — Destination country as an ISO 3166-1 alpha-2 code.
  - `payout_type` 'swift', required — Payout rail. The current release supports SWIFT only.
  - `destination` BankDestinationInput, required
    - `type` 'bank_account', required — Destination type.
    - `account_holder_type` 'individual' | 'business', required — Legal type of the bank-account holder.
    - `account_holder_name` string, required — Full legal name registered on the bank account.
    - `bank_country` string, required — Bank country as an ISO 3166-1 alpha-2 code.
    - `bank_name` string, required — Receiving bank's legal name.
    - `account_number` string, required — Receiving bank account number.
    - `swift_code` string, required — Receiving bank SWIFT/BIC code.
    - `address` PostalAddress
      - `line1` string, required — Primary street address.
      - `line2` string, nullable — Secondary address details.
      - `city` string, required — City or locality.
      - `state` string, nullable — State, province, or region.
      - `postal_code` string, required — Postal or ZIP code.
      - `country` string, required — Address country as an ISO 3166-1 alpha-2 code.

## Response `200`

Time-limited payout quote

- QuoteEnvelope
  - `code` 0, required — Business code. `0` means success.
  - `message` string, required — Response message.
  - `data` Quote, required
    - `quote_id` string, required — Time-limited payout quote ID.
    - `provider` 'sgb', required — Read-only execution provider identifier.
    - `payout_type` 'swift', required — Payout rail bound to the quote.
    - `source_currency` 'USD', required — Organization balance currency.
    - `destination_currency` 'USD', required — Currency delivered to the recipient.
    - `destination_country` string, required — Destination country as an ISO 3166-1 alpha-2 code.
    - `amount_mode` 'send' | 'receive', required — Side fixed by the quote request.
    - `fee_paid_by` 'PAYER' | 'BENEFICIARY', required — Party responsible for payout fees. `PAYER` means external deduction; `BENEFICIARY` means internal deduction.
    - `sending_amount` string, required — Total amount debited from the organization's source balance. Use this as the outgoing amount for reconciliation.
    - `receiving_amount` string, required — Amount delivered to the recipient.
    - `transfer_fee_amount` string, required — Infini service fee for processing the payout. It excludes any bank or rail fee and equals `billing.transfer_fee`.
    - `bank_fee_amount` string, required — Banking fee associated with the selected bank and payout rail, such as SWIFT, ACH, or wire. This equals `billing.rail_fee`.
    - `fee_rate_decimal` string, required — Decimal transfer-fee rate applied to the quote.
    - `rate` string, required — Destination-currency units per one source-currency unit.
    - `billing` BillingBreakdown, required
      - `currency` 'USD', required — Currency used by all billing amounts.
      - `transfer_fee` string, required — Infini service fee for processing the payout. It does not include any bank or rail fee.
      - `fx_fee` string, required — Foreign-exchange fee. It is `0.00` for the current USD-to-USD route.
      - `rail_fee` string, required — Banking fee associated with the selected bank and payout rail.
      - `total_fee` string, required — Sum of all fee components in the billing breakdown.
      - `fee_lines` FeeLine[], required — Itemized fee components used for reconciliation.
        - `type` 'transfer_fee' | 'fx_fee' | 'rail_fee', required — Fee component type.
        - `amount` string, required — Fee component amount in `currency`.
        - `currency` 'USD', required — Fee component currency.
        - `rate` string, required — Decimal rate used for this fee line, or `1` for a fixed rail fee.
    - `destination` BankDestinationView, required
      - `type` 'bank_account', required — Destination type.
      - `account_holder_type` 'individual' | 'business', required — Legal type of the bank-account holder.
      - `account_holder_name` string, required — Full legal name registered on the bank account.
      - `bank_country` string, required — Bank country as an ISO 3166-1 alpha-2 code.
      - `bank_name` string, required — Receiving bank's legal name.
      - `account_number_masked` string, required — Masked account number. Raw account details are never returned.
      - `swift_code` string, required — Receiving bank SWIFT/BIC code.
    - `expires_at` integer, required — Quote expiry time as Unix seconds.

## Other responses

- `400` — Request syntax or field validation failed
- `401` — HMAC gateway validation or application authentication failed
- `403` — API key permission, IP whitelist, or organization eligibility rejected the request
- `409` — The request conflicts with idempotency, quote state, or another payout submission
- `422` — Request is syntactically valid but cannot pass payout eligibility or execution checks
- `500` — An unexpected internal error occurred

---

[API](https://skmtc.net/infini/apis/infini-fiat-payout-api.md) · [All operations](https://skmtc.net/infini/apis/infini-fiat-payout-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/infini/infini-fiat-payout-api/revisions/44f2f91e720d/schema)
