{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Mock contract","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"mock-contract","__idx":0},"children":["Mock contract"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This page and the Fiat Payout OpenAPI reference are a design preview. Endpoint names, fields, statuses, permissions, and error codes are not yet final."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Fiat Payout API lets an organization send USD from its Infini USD balance to a third-party bank account. The first release is routed exclusively through SGB. Clients do not select a provider; responses expose ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["provider=sgb"]}," for reconciliation."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All endpoints use this prefix:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/v2/payouts"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"minimum-api-surface","__idx":1},"children":["Minimum API surface"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Method"},"children":["Method"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/v2/payouts/quotes"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Validate bank details and obtain a time-limited payout quote"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/v2/payouts"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Create and immediately start a direct payout"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/v2/payouts/{payout_id}"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Query current payout status"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is no recipient resource in this release. Bank destination details are submitted with the quote and are immutably bound to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote_id"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/payouts"]}," cannot replace or modify that destination."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"choose-the-amount-to-control","__idx":2},"children":["Choose the amount to control"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When creating a quote, choose whether the recipient amount or your total debit must remain exact. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fee_paid_by"]}," changes how Infini calculates both amounts; it is not a display-only field. The first release supports the following two options."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"recipient-receives-an-exact-amount","__idx":3},"children":["Recipient receives an exact amount"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this option when the recipient must receive a specific amount, such as an invoice payment."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"amount\": \"1000.00\",\n  \"amount_mode\": \"receive\",\n  \"fee_paid_by\": \"PAYER\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The recipient receives exactly ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1000.00 USD"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAYER"]}," uses an external fee deduction: payout fees are added to the amount debited from your Infini USD balance."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["receiving_amount"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1000.00"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sending_amount = receiving_amount + fee_amount"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"debit-an-exact-total-amount","__idx":4},"children":["Debit an exact total amount"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use this option when the payout must not debit more than a fixed budget."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"amount\": \"1000.00\",\n  \"amount_mode\": \"send\",\n  \"fee_paid_by\": \"BENEFICIARY\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Infini debits exactly ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1000.00 USD"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BENEFICIARY"]}," uses an internal fee deduction: payout fees are deducted from that amount, so the recipient receives less."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sending_amount"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1000.00"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["receiving_amount = sending_amount - fee_amount"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use only the field pairs shown above. Other ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount_mode"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fee_paid_by"]}," combinations are not supported in the first release. If you change ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fee_paid_by"]},", request a new quote; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote_id"]}," locks the fee responsibility and calculated amounts used by the payout."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"read-the-quote-amounts","__idx":5},"children":["Read the quote amounts"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sending_amount"]}," is the total amount debited from your Infini USD balance."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["receiving_amount"]}," is the amount sent to the recipient's bank account."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fee_amount"]}," is the total quoted fee; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_fee_amount"]}," is the bank or rail portion included in it."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fee_rate_decimal"]}," is the quoted fee rate, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rate"]}," is the exchange rate."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the quoted payout, use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sending_amount"]}," as the outgoing amount in your reconciliation records."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"direct-execution","__idx":6},"children":["Direct execution"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["API payouts do not enter the dashboard approval workflow. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/payouts"]}," runs the authoritative pre-execution checks and starts execution immediately."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A bank payout is asynchronous. A successful create response with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status=processing"]}," means the request passed Infini's checks and execution started. It does not mean the recipient bank account has already been credited."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["completed"]}," means SGB reported payout completion at the latest known state. A receiving bank can still reject and return a previously completed transfer, in which case the payout changes to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["returned"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"quote-versus-execution-checks","__idx":7},"children":["Quote versus execution checks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/payouts/quotes"]}," validates the destination and performs preliminary route, amount, compliance, and limit checks. It returns a time-limited snapshot of the destination, amounts, rate, fees, and fee responsibility. A quote:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["does not reserve organization balance;"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["does not approve or create a payout;"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["cannot be reused after expiry;"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["does not guarantee that current limits, compliance state, balance, or provider availability will remain unchanged."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/payouts"]}," repeats every execution-critical check immediately before creating the canonical payout, debiting the balance, and starting SGB execution."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"idempotency","__idx":8},"children":["Idempotency"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_reference_id"]}," is merchant-scoped and identifies one logical payout:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["a retry with the same reference and identical business request returns the existing resource;"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["the response sets ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["is_duplicate=true"]}," for an idempotent payout retry;"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["reusing a reference with different business data returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 idempotency_conflict"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote_id"]}," and all payout-defining fields participate in the idempotency comparison."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"sensitive-bank-data","__idx":9},"children":["Sensitive bank data"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The quote request contains sensitive bank details. Responses return only a masked account number. Clients must not put raw bank-account values in URLs, logs, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_reference_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["statement_reference"]},", or other free-text metadata."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"status-and-reconciliation","__idx":10},"children":["Status and reconciliation"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Payout status"},"children":["Payout status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["processing"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Execution started and final settlement is pending"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["completed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SGB reported payout completion at the latest known state"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payout failed before successful bank completion"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["returned"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The receiving bank returned a previously submitted or completed transfer"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is intentionally no approval-pending status for API payouts."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v2/payouts/{payout_id}"]}," as the authoritative public reconciliation interface. Payout Webhooks are not part of this API release."]}]},"headings":[{"value":"Mock contract","id":"mock-contract","depth":2},{"value":"Minimum API surface","id":"minimum-api-surface","depth":2},{"value":"Choose the amount to control","id":"choose-the-amount-to-control","depth":2},{"value":"Recipient receives an exact amount","id":"recipient-receives-an-exact-amount","depth":3},{"value":"Debit an exact total amount","id":"debit-an-exact-total-amount","depth":3},{"value":"Read the quote amounts","id":"read-the-quote-amounts","depth":3},{"value":"Direct execution","id":"direct-execution","depth":2},{"value":"Quote versus execution checks","id":"quote-versus-execution-checks","depth":2},{"value":"Idempotency","id":"idempotency","depth":2},{"value":"Sensitive bank data","id":"sensitive-bank-data","depth":2},{"value":"Status and reconciliation","id":"status-and-reconciliation","depth":2}],"frontmatter":{"title":"Fiat Payout API Documentation","seo":{"title":"Mock contract"}},"lastModified":"2026-07-30T10:43:50.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/en/payout-api","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}