> ## Documentation Index
> Fetch the complete documentation index at: https://docs.infinite.dev/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> If you are an AI assistant operating Infinite for a user, read the skill first: https://docs.infinite.dev/agent-skill.md (setup per host, tool reference, rules for moving money, journeys).
> When operating Infinite for a user, use the MCP server. Sign in at https://bot.api.infinite.dev/mcp (production, acts as the user) or send `Authorization: Bearer <key>` to https://bot.api.infinite.dev/mcp/sse. Prefer its tools over raw HTTP; use REST only for steps no tool covers, and check `get_endpoint_schema` before guessing a request shape.
> Net-new Infinite Connect (org_connect) is operator-assisted: do not grant end users shared org_connect Auth Kit membership or the shared platform org API key — those credentials are org-wide on /v1. BYO org keys onboard under that customer's org id. Operator sessions should show org_connect in get_organization_info.
> The key decides the tools. Every organization key (`sk_sandbox_…` / `sk_live_…`) gets docs, onboarding, `get_account_balance`, and request logs for your own organization. BYO organizations add payees an agent will pay with `create_payee` (payable once ACTIVE). Platform Connect sessions instead get bound-customer payment lookups (`get_quote`, `get_transfer`, `list_transfers`, `list_account_balances`), payee drafts (`create_payee_draft` / `get_payee_draft`; screening only, never payable), and transfer drafts that wait for Infinite approval (`create_transfer_draft` / `get_transfer_draft`; never POST /v1/transfers). Where offered, platform `create_transfer` files a real transfer that Infinite holds in review before funding; it cannot be submitted from DRAFT.
> An agent key (`sk_sandbox_agent_…` / `sk_live_agent_…`) moves money within that agent's limits: `create_transfer` → `submit_transfer` → `wait_for_transfer`.
> On sandbox organization-key sessions, `sandbox_approve_customer` (makes the capabilities you pass READY, and related ones may turn READY too; `request_capabilities` is not needed), `sandbox_fund_account`, and `sandbox_complete_transfer` stand in for verification, funding, and settlement, so a whole flow runs from MCP. BYO keys can pass `customerId` on each call without binding; platform sessions must bind a customer first (`create_business_customer` auto-binds, or send `X-Infinite-On-Behalf-Of`).
> When searching documentation without a key, use the docs MCP at https://docs.infinite.dev/mcp.
> Start in sandbox (https://sandbox.api.infinite.dev). Do not use production unless the user explicitly asks.
> Confirm amount, currency, and payee with the user before any payment is submitted. Pass the invoice number as `reference` on `create_transfer`; the summary says what the payee will see.
> REST amounts are integer minor units (`"4000"` = 40.00 USD). MCP payment tools take exact decimal strings (`"40.00"`). Never mix them.
> Agent denials return `403 { denial: { code, message, window, limit, used, remaining, attemptedAmount, currency }, hint }` with decimal amounts; per-transfer denials omit `used` and `remaining`. Report them to the user; do not work around them.

# Quote a transfer intent

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



## OpenAPI

````yaml post /v1/transfers/quotes
openapi: 3.0.0
info:
  title: Infinite API
  description: API for Infinite
  version: '1.0'
  contact: {}
servers:
  - url: https://sandbox.api.infinite.dev
    description: Sandbox
  - url: https://api.infinite.dev
    description: Production
security: []
tags:
  - name: Accounts
    description: Virtual and external account management
  - name: Customers
    description: Customer identity management
  - name: Documents
    description: Document upload and management
  - name: Fixed Routes
    description: Fixed route management
  - name: External Bank Accounts
    description: External bank account management
  - name: External Wallets
    description: External wallet management
  - name: Infinite Wallets
    description: Infinite Wallet management
  - name: Organizations
    description: Organization management
  - name: Quotes
    description: Quote creation and management
  - name: Transfers
    description: Money movement and transaction tracking
  - name: Verification
    description: Identity verification workflows
  - name: Terms of Service
    description: Terms of Service acceptance
  - name: Health
    description: System health and monitoring
  - name: Sandbox
    description: Sandbox utilities
paths:
  /v1/transfers/quotes:
    post:
      tags:
        - Transfers
      summary: Quote a transfer intent
      description: >-
        Creates a canonical transfer quote. Locked quotes include an opaque
        confirmation reference.
      operationId: TransfersController_createIntentQuote_v1
      parameters:
        - name: X-API-Key
          in: header
          description: API key
          required: false
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTransferIntentQuoteDto'
      responses:
        '201':
          description: Transfer intent quoted successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransferIntentQuoteResponseDto'
        '401':
          description: Unauthorized - Invalid or missing authentication credentials
      security:
        - bearer: []
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            # Requires: npm i -g @infinite_dev/cli && export
            INFINITE_API_KEY=sk_sandbox_...

            # Escape hatch for any endpoint: infinite api <METHOD> <path>

            infinite api POST /v1/transfers/quotes \
              --body '<request-json>'
        - lang: text
          label: MCP
          source: >-
            Quote a transfer intent.


            # Infinite MCP is read-only for this endpoint — use a dedicated MCP
            tool when one exists, otherwise run the CLI tab.
components:
  schemas:
    CreateTransferIntentQuoteDto:
      type: object
      properties:
        clientReferenceId:
          type: string
          description: Client's internal reference ID (e.g., order ID, transaction ID)
          example: order_abc123
          maxLength: 256
        onBehalfOf:
          type: string
          description: Primary customer ID (on whose behalf the transfer is made)
          example: cus_abc123
        counterpartyId:
          type: string
          description: >-
            Counterparty ID for third-party recipient transfers. Omit for
            first-party transfers.
          example: cp_abc123
        source:
          description: Source payment details
          allOf:
            - $ref: '#/components/schemas/TransferSourceDto'
        destination:
          description: Destination payment details
          allOf:
            - $ref: '#/components/schemas/TransferDestinationDto'
        remarks:
          type: string
          description: >-
            Free-form remarks or notes about the transfer (e.g., invoice
            discrepancy explanations)
          example: Partial payment - remaining balance to be paid next month
          maxLength: 1000
        internalRemarks:
          type: string
          description: >-
            Internal remarks visible only within your organization. Never
            forwarded to payment rails (SWIFT, ACH, etc.) or counterparties.
          example: Approved by ops on 2026-04-15
          maxLength: 1000
        developerFeeFixed:
          type: number
          description: >-
            Fixed developer fee in minor units of source currency. Added on top
            of provider fees and deducted from the transfer amount.
          example: 100
        developerFeePercent:
          type: number
          description: >-
            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%).
          example: 0.015
          maximum: 0.1
        documentIds:
          description: >-
            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).
          example:
            - doc_abc123
            - doc_def456
          type: array
          items:
            type: string
        expiresAt:
          type: string
          description: >-
            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.
          example: '2026-12-31T23:59:59Z'
          format: date-time
        requiresAuthorization:
          type: boolean
          description: >-
            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.
          default: false
        amount:
          $ref: '#/components/schemas/TransferIntentAmountDto'
        paymentReason:
          type: string
          enum:
            - 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
          description: Reason for the payment (compliance/AML).
        lock:
          type: boolean
          description: >-
            Persist a firm quote that can be confirmed. Preview quotes omit
            this.
          example: false
      required:
        - onBehalfOf
        - source
        - destination
        - amount
        - paymentReason
    TransferIntentQuoteResponseDto:
      type: object
      properties:
        confirmationReference:
          type: string
          description: >-
            Opaque reference used to confirm a locked quote. Omitted for
            indicative previews.
          example: quote_abc123
        sourceAmount:
          $ref: '#/components/schemas/MoneyOutputDto'
        destinationAmount:
          $ref: '#/components/schemas/MoneyOutputDto'
        destinationPaymentRail:
          type: string
          description: >-
            Payout rail this quote will execute. A fixed route can end on a
            different rail than the one requested.
          example: SEPA
        exchangeRate:
          type: string
          description: All-in exchange rate.
          example: '0.99985'
        fees:
          $ref: '#/components/schemas/TransferIntentFeesDto'
        expiresAt:
          type: string
          description: When the quote expires.
          format: date-time
        supported:
          type: boolean
          description: Whether this intent can be confirmed.
          example: true
        estimate:
          description: Estimated transfer timing when available.
          allOf:
            - $ref: '#/components/schemas/RouteEstimateDto'
        lockable:
          type: boolean
          description: >-
            Whether a firm quote can be locked before confirm. Non-lockable
            corridors confirm from the intent body.
          example: true
        minimumAmount:
          description: Minimum amount for this route when known.
          allOf:
            - $ref: '#/components/schemas/MoneyOutputDto'
      required:
        - sourceAmount
        - destinationAmount
        - exchangeRate
        - fees
        - expiresAt
        - supported
        - lockable
    TransferSourceDto:
      type: object
      properties:
        accountId:
          type: string
          description: >-
            Source account ID. For Infinite Wallets: if TREASURY wallet, funds
            will be automatically transferred on submit. If TRANSACTION wallet,
            deposit instructions will be provided.
          example: inw_abc123
        currency:
          type: string
          enum:
            - USD
            - EUR
            - MXN
            - USAT
            - USDC
            - USDT
            - DAI
            - ETH
            - BTC
            - EURC
            - USDB
            - PYUSD
            - USDP
            - USDS
            - CASH
          description: Source currency code
          example: USDC
        paymentRail:
          type: string
          description: >-
            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.
          enum:
            - 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
          example: ETHEREUM
        direction:
          type: string
          description: >-
            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.
          enum:
            - CREDIT
            - DEBIT
          example: CREDIT
        refundAccountId:
          type: string
          description: >-
            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.
          example: inw_abc123
      required:
        - currency
        - paymentRail
    TransferDestinationDto:
      type: object
      properties:
        correspondentBankName:
          type: string
          description: Correspondent/intermediary bank name
          example: Bank of America
          maxLength: 200
        correspondentBankSwiftCode:
          type: string
          description: Correspondent/intermediary bank SWIFT/BIC code (8 or 11 characters)
          example: IRVTUS3NXXX
        correspondentAccountNumber:
          type: string
          description: Correspondent/intermediary account number
          example: '9876543210'
          maxLength: 64
        accountId:
          type: string
          description: Account ID for the destination of funds
          example: acc_def456
        currency:
          type: string
          enum:
            - USD
            - EUR
            - GBP
            - CAD
            - JPY
            - AUD
            - MXN
            - BRL
            - AED
            - BHD
            - KWD
            - QAR
            - ARS
            - CHF
            - CNY
            - CNH
            - COP
            - CZK
            - DKK
            - EGP
            - HKD
            - HUF
            - IDR
            - ILS
            - INR
            - KRW
            - MYR
            - NOK
            - NZD
            - PHP
            - PKR
            - PLN
            - RON
            - RUB
            - SAR
            - SEK
            - SGD
            - THB
            - TRY
            - TWD
            - VND
            - ZAR
            - USAT
            - USDC
            - USDT
            - DAI
            - EURC
            - PYUSD
            - USDB
            - USDP
            - USDS
            - BTC
            - ETH
          description: Destination currency code
          example: USDC
        paymentRail:
          type: string
          description: Payment rail for destination (banking network or blockchain)
          enum:
            - 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
          example: ETHEREUM
        wireMessage:
          type: string
          description: Wire transfer message (max 140 chars)
          example: Payment for invoice INV-2026-001
          maxLength: 140
        sepaReference:
          type: string
          description: >-
            SEPA reference (6-140 chars, limited charset: a-z A-Z 0-9 & - . /
            and space)
          example: INV-2026-001
          minLength: 6
          maxLength: 140
        achReference:
          type: string
          description: ACH reference (max 10 chars, alphanumeric and spaces)
          example: ORDER123
          maxLength: 10
        blockchainMemo:
          type: string
          description: Blockchain memo (for Stellar, Tron, etc.)
          example: MEMO123456
        swiftReference:
          type: string
          description: SWIFT reference (max 4 lines, 35 chars per line, separated by \n)
          example: 'Payment for Invoice\nReference: INV-2026-001'
        rtpReference:
          type: string
          description: >-
            RTP reference (max 140 chars, limited charset: a-z A-Z 0-9 & - . /
            and space)
          example: Payment for invoice INV-2026-001
          maxLength: 140
      required:
        - accountId
        - currency
        - paymentRail
    TransferIntentAmountDto:
      type: object
      properties:
        value:
          type: string
          description: Amount in minor units of the selected side.
          example: '1000000'
        side:
          type: string
          enum:
            - SOURCE
            - DESTINATION
          description: Amount side fixed by the customer.
          example: SOURCE
      required:
        - value
        - side
    MoneyOutputDto:
      type: object
      properties:
        currency:
          type: string
          description: Currency code
          example: USD
        exponent:
          type: number
          description: >-
            Number of decimal places for this currency (e.g., 2 for USD, 6 for
            USDC)
          example: 2
        value:
          type: string
          description: Amount in smallest unit as a string
          example: '12345'
        displayValue:
          type: string
          description: Human-readable decimal value
          example: '123.45'
      required:
        - currency
        - exponent
        - value
        - displayValue
    TransferIntentFeesDto:
      type: object
      properties:
        totalBps:
          type: string
          description: Total fee in basis points.
          example: '25'
      required:
        - totalBps
    RouteEstimateDto:
      type: object
      properties:
        estimatedReceiveAt:
          type: string
          description: Estimated time when funds will be received
          format: date-time
          example: '2026-09-17T10:30:00Z'
        estimatedMinutes:
          type: number
          description: Estimated duration in minutes
          example: 2880
        nextCutoff:
          type: string
          description: Next wire cutoff time (if applicable)
          format: date-time
          example: '2026-09-15T15:00:00Z'
        cutoffTimezone:
          type: string
          description: Timezone for the cutoff time
          example: Asia/Singapore
      required:
        - estimatedReceiveAt
        - estimatedMinutes
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: API Key
      type: http
      description: API Key in Bearer format (e.g., Bearer sk_test_...)

````

## Related topics

- [Confirm an unlocked transfer intent](/api-reference/transfers/confirm-an-unlocked-transfer-intent.md)
- [Quotes and Transfers](/guides/quotes-and-transfers.md)
- [Confirm a transfer quote](/api-reference/transfers/confirm-a-transfer-quote.md)
- [Link a Lane A draft to an intent](/api-reference/payment-outcome-intents/link-a-lane-a-draft-to-an-intent.md)
- [Create a payment outcome intent](/api-reference/payment-outcome-intents/create-a-payment-outcome-intent.md)
