---
title: "Quote a transfer intent"
method: POST
path: "/v1/transfers/quotes"
tags: ["Transfers"]
---

# Quote a transfer intent

`POST /v1/transfers/quotes`

Creates a canonical transfer quote. Locked quotes include an opaque confirmation reference.

## Headers

- `X-API-Key` string

## Request body

- CreateTransferIntentQuoteDto
  - `clientReferenceId` string — Client's internal reference ID (e.g., order ID, transaction ID)
  - `onBehalfOf` string, required — Primary customer ID (on whose behalf the transfer is made)
  - `counterpartyId` string — Counterparty ID for third-party recipient transfers. Omit for first-party transfers.
  - `source` TransferSourceDto, required
    - `accountId` string — Source account ID. For Infinite Wallets: if TREASURY wallet, funds will be automatically transferred on submit. If TRANSACTION wallet, deposit instructions will be provided.
    - `currency` 'USD' | 'EUR' | 'MXN' | 'USAT' | 'USDC' | 'USDT' | 'BTC', required — Source currency code
    - `paymentRail` 'ACH' | 'ACH_SAME_DAY' | 'WIRE' | 'FED_NOW' | 'RTP' | 'EREBOR' | 'EREBOR_RAIL' | 'BALANCE' | 'SWIFT' | 'SEPA' | 'SEPA_INSTANT' | 'TIPS' | 'FASTER_PAYMENTS' | 'BACS' | 'CHAPS' | 'ELIXIR' | 'NICS' | 'EFT' | 'INTERAC' | 'NPP' | 'BECS' | 'UPI' | 'IMPS' | 'IMPS_WITH_FIRC' | 'NEFT' | 'RTGS' | 'BI_FAST' | 'ARTAJASA' | 'PIX' | 'TED' | 'TEF' | 'SPEI' | 'COELSA' | 'SINPE' | 'CIPS' | 'CFXPS' | 'CHATS' | 'ZENGIN' | 'KFTC' | 'FAST_SG' | 'MEPS' | 'DUITNOW' | 'PROMPTPAY' | 'INSTAPAY' | 'PESONET' | 'NAPAS' | 'BEFTN' | 'SLIPS' | 'ZAHAV' | 'GHIPSS' | 'NIBSS' | 'PESALINK' | 'RTC_ZA' | 'TZS_RTGS' | 'EGP_ACH' | 'JOD_ACH' | 'NPSS' | 'MADA' | 'QPS' | 'DOP_ACH' | 'GTQ_ACH' | 'HNL_ACH' | 'PEN_ACH' | 'JMD_ACH' | 'USD_ACH_SV' | 'USD_ACH_EC' | 'CLP_TEF' | 'PSE' | 'COP_ACH' | 'BOB_RTGS' | 'PYG_ACH' | 'CERTIS' | 'DKK_TIPS' | 'SENT' | 'NKS' | 'BANKGIROT' | 'HKD_FPS' | 'IBFT' | 'TRY_FAST' | 'ETHEREUM' | 'BASE' | 'POLYGON' | 'SOLANA' | 'TRON' | 'BITCOIN' | 'ARBITRUM', required — Payment rail for the source funds. For crypto, specify the blockchain (ETHEREUM, BASE, ARBITRUM, POLYGON, SOLANA, TRON). For fiat, specify the banking network (ACH, WIRE, SEPA, SWIFT). Provider-backed bank balances may also use EREBOR, and on-us Erebor bank transfers use EREBOR_RAIL.
    - `direction` 'CREDIT' | 'DEBIT' — ACH direction. Optional when source.paymentRail is ACH and source.accountId is provided. If omitted for an account-backed ACH source, the API defaults to CREDIT. DEBIT is currently provider-disabled for some virtual bank account sources.
    - `refundAccountId` string — Customer wallet account ID (inw_xxx or ewa_xxx) that receives refunds for failed crypto transfers or when fees exceed deposit. Must belong to the customer and include a wallet address; validated at request time.
  - `destination` TransferDestinationDto, required
    - `correspondentBankName` string — Correspondent/intermediary bank name
    - `correspondentBankSwiftCode` string — Correspondent/intermediary bank SWIFT/BIC code (8 or 11 characters)
    - `correspondentAccountNumber` string — Correspondent/intermediary account number
    - `accountId` string, required — Account ID for the destination of funds
    - `currency` 'USD' | 'EUR' | 'MXN' | 'USAT' | 'USDC' | 'USDT' | 'BTC', required — Destination currency code
    - `paymentRail` 'ACH' | 'ACH_SAME_DAY' | 'WIRE' | 'FED_NOW' | 'RTP' | 'EREBOR' | 'EREBOR_RAIL' | 'BALANCE' | 'SWIFT' | 'SEPA' | 'SEPA_INSTANT' | 'TIPS' | 'FASTER_PAYMENTS' | 'BACS' | 'CHAPS' | 'ELIXIR' | 'NICS' | 'EFT' | 'INTERAC' | 'NPP' | 'BECS' | 'UPI' | 'IMPS' | 'IMPS_WITH_FIRC' | 'NEFT' | 'RTGS' | 'BI_FAST' | 'ARTAJASA' | 'PIX' | 'TED' | 'TEF' | 'SPEI' | 'COELSA' | 'SINPE' | 'CIPS' | 'CFXPS' | 'CHATS' | 'ZENGIN' | 'KFTC' | 'FAST_SG' | 'MEPS' | 'DUITNOW' | 'PROMPTPAY' | 'INSTAPAY' | 'PESONET' | 'NAPAS' | 'BEFTN' | 'SLIPS' | 'ZAHAV' | 'GHIPSS' | 'NIBSS' | 'PESALINK' | 'RTC_ZA' | 'TZS_RTGS' | 'EGP_ACH' | 'JOD_ACH' | 'NPSS' | 'MADA' | 'QPS' | 'DOP_ACH' | 'GTQ_ACH' | 'HNL_ACH' | 'PEN_ACH' | 'JMD_ACH' | 'USD_ACH_SV' | 'USD_ACH_EC' | 'CLP_TEF' | 'PSE' | 'COP_ACH' | 'BOB_RTGS' | 'PYG_ACH' | 'CERTIS' | 'DKK_TIPS' | 'SENT' | 'NKS' | 'BANKGIROT' | 'HKD_FPS' | 'IBFT' | 'TRY_FAST' | 'ETHEREUM' | 'BASE' | 'POLYGON' | 'SOLANA' | 'TRON' | 'BITCOIN' | 'ARBITRUM', required — Payment rail for destination (banking network or blockchain)
    - `wireMessage` string — Wire transfer message (max 140 chars)
    - `sepaReference` string — SEPA reference (6-140 chars, limited charset: a-z A-Z 0-9 & - . / and space)
    - `achReference` string — ACH reference (max 10 chars, alphanumeric and spaces)
    - `blockchainMemo` string — Blockchain memo (for Stellar, Tron, etc.)
    - `swiftReference` string — SWIFT reference (max 4 lines, 35 chars per line, separated by \n)
    - `rtpReference` string — RTP reference (max 140 chars, limited charset: a-z A-Z 0-9 & - . / and space)
  - `remarks` string — Free-form remarks or notes about the transfer (e.g., invoice discrepancy explanations)
  - `internalRemarks` string — Internal remarks visible only within your organization. Never forwarded to payment rails (SWIFT, ACH, etc.) or counterparties.
  - `developerFeeFixed` number — Fixed developer fee in minor units of source currency. Added on top of provider fees and deducted from the transfer amount.
  - `developerFeePercent` number — Developer fee as decimal percentage (e.g., 0.015 for 1.5%). Deducted from the transfer amount before sending to the destination. Maximum 0.1 (10%).
  - `documentIds` string[] — Supporting document IDs for the transfer. Required for third-party SWIFT payments (when the destination account is marked as third-party or the destination customer differs from the originating customer).
  - `expiresAt` string, date-time — Optional transfer expiration timestamp. If omitted, the transfer expires 7 days after creation when funded by a fiat pay-in (wire/ACH) and 48 hours after creation otherwise.
  - `requiresAuthorization` boolean — If true, this payment must be authorized before it is processed. Attach the supporting invoice via documentIds. The transfer parks in PENDING_AUTHORIZATION and does not move funds until it is approved.
  - `amount` TransferIntentAmountDto, required
    - `value` string, required — Amount in minor units of the selected side.
    - `side` 'SOURCE' | 'DESTINATION', required — Amount side fixed by the customer.
  - `paymentReason` 'CAPITAL_CONTRIBUTIONS' | 'CHARITABLE_CONTRIBUTIONS' | 'CONSULTING_FEES' | 'CORPORATE_TAX_PAYMENTS' | 'DOWN_PAYMENTS_FOR_REAL_ESTATE' | 'EDUCATION_FEES' | 'EMPLOYEE_SALARIES_OR_WAGES' | 'EXPENSES_REIMBURSEMENT' | 'GIFTS' | 'GOVERNMENT_GRANTS' | 'INCOME_TAX_PAYMENTS' | 'INHERITANCE_PAYMENTS' | 'INSURANCE_CLAIM_PAYOUTS' | 'INSURANCE_PREMIUM_PAYMENTS' | 'INVESTMENTS' | 'LOAN_ADVANCES' | 'MORTGAGE_PAYMENTS' | 'OTHER' | 'PAYMENT_FOR_GOODS_AND_SERVICES' | 'PERSONAL_TRANSFERS' | 'REAL_ESTATE_PURCHASES' | 'REMITTANCES' | 'RENT' | 'REPAYMENT_OF_LOANS' | 'ROYALTIES' | 'SELF' | 'TRADE_SETTLEMENT' | 'TRUST_FUND_DISTRIBUTIONS' | 'UTILITY_BILLS' | 'WELFARE_OR_BENEFITS' | 'WINNINGS_AND_PRIZES', required — Reason for the payment (compliance/AML).
  - `lock` boolean — Persist a firm quote that can be confirmed. Preview quotes omit this.

## Response `201`

Transfer intent quoted successfully.

- TransferIntentQuoteResponseDto
  - `confirmationReference` string — Opaque reference used to confirm a locked quote. Omitted for indicative previews.
  - `sourceAmount` MoneyOutputDto, required
    - `currency` string, required — Currency code
    - `exponent` number, required — Number of decimal places for this currency (e.g., 2 for USD, 6 for USDC)
    - `value` string, required — Amount in smallest unit as a string
    - `displayValue` string, required — Human-readable decimal value
  - `destinationAmount` MoneyOutputDto, required
    - `currency` string, required — Currency code
    - `exponent` number, required — Number of decimal places for this currency (e.g., 2 for USD, 6 for USDC)
    - `value` string, required — Amount in smallest unit as a string
    - `displayValue` string, required — Human-readable decimal value
  - `exchangeRate` string, required — All-in exchange rate.
  - `fees` TransferIntentFeesDto, required
    - `totalBps` string, required — Total fee in basis points.
  - `expiresAt` string, date-time, required — When the quote expires.
  - `supported` boolean, required — Whether this intent can be confirmed.
  - `estimate` RouteEstimateDto
    - `estimatedReceiveAt` string, date-time, required — Estimated time when funds will be received
    - `estimatedMinutes` number, required — Estimated duration in minutes
    - `nextCutoff` string, date-time — Next wire cutoff time (if applicable)
    - `cutoffTimezone` string — Timezone for the cutoff time
  - `lockable` boolean, required — Whether a firm quote can be locked before confirm. Non-lockable corridors confirm from the intent body.
  - `minimumAmount` MoneyOutputDto
    - `currency` string, required — Currency code
    - `exponent` number, required — Number of decimal places for this currency (e.g., 2 for USD, 6 for USDC)
    - `value` string, required — Amount in smallest unit as a string
    - `displayValue` string, required — Human-readable decimal value

## Other responses

- `401` — Unauthorized - Invalid or missing authentication credentials

## Changes

- **2026-09-11** `722cdfabcdeb` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/infinite/apis/infinite-api/changes/v1/transfers/quotes/post.md)

---

[API](https://skmtc.dev/infinite/apis/infinite-api.md) · [All operations](https://skmtc.dev/infinite/apis/infinite-api/llms.txt) · [OpenAPI document](https://skmtc.dev/infinite/apis/infinite-api/revisions/916d2367a8f8?raw)
