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

# Quote a checkout link before choosing (public)

> Indicative quotes for a universal checkout link BEFORE materializing — the catalog of countries with live fiat methods (card excluded — see `cards`), the card options listed separately per country+currency in `cards[]` with the quoted due amount (a corridor may accept several charge currencies, e.g. BOB and USD), the due amount per crypto option (conversion cost included when the pay asset differs from the settlement asset), and the CBPay direct payment dues per enabled balance. Each country lists its corridors in `options[]` — one row per method+currency (a country may offer the same method in several currencies, e.g. QR in BOB and USD) with `collect: true` on pull methods that ask for the payer's data on the page (see `POST /pay/{token}/collect`). With `?country=XX` it also returns the quoted local amount per option for that country. Materializing freezes the definitive quote. No credentials; rate limited per IP.



## OpenAPI

````yaml /openapi.yaml get /pay/{token}/quote
openapi: 3.1.0
info:
  title: CBPay API
  version: '1.89'
  description: |
    CBPay is a multi-currency payment platform: fiat payouts and collections
    across Latin America, internal transfers, on-chain funding and
    withdrawals, and KYC screening. Every account holds four independent
    virtual balances — USDT (the operating currency), USDC, BTC and GOLD
    (grams of fine gold) — that never mix or convert automatically.
    Payouts and service fees can be paid from any of the four balances:
    set a default with `PUT /v1/settlement` or override per payout with
    `settlement_asset`.

    All amounts are decimal strings in each currency's precision (6 decimals
    for USDT/USDC/GOLD, 8 for BTC). Errors always return
    `{"error": "<code>", "message": "<detail>"}`.
servers:
  - url: https://api.qbank.cl/platform
    description: Live (production, real money)
  - url: https://cryptobank.qbank.cl/platform
    description: Test (sandbox, simulated money — pk_test_ keys)
security:
  - bearerAuth: []
tags:
  - name: Receipts
    description: >-
      Branded PDF receipt per operation, with a public signed-QR authenticity
      check, receipt_url on every response/webhook and automatic email delivery
      on final states.
  - name: Authentication
    description: Register and log in account members. Sessions last 24 hours.
  - name: Account
    description: Profile, members and API keys of the calling account.
  - name: Balances
    description: Balances, movement history and FX rates.
  - name: Payouts
    description: >-
      Fiat dispersals debited from the settlement balance of your choice (USDT
      by default).
  - name: Payins
    description: Fiat top-ups credited to the USDT balance.
  - name: Transfers
  - name: Contacts
  - name: Swaps
    description: >-
      Free internal transfers between CBPay accounts (person or company, any
      combination).
  - name: Crypto
    description: On-chain funding and withdrawals (TRON, Ethereum and Bitcoin).
  - name: Segregated wallets
    description: >-
      On-chain wallets with their own balance (companies unlimited; persons 1
      per network+asset pair) — create, import, send, export the private key and
      auto-forward. The balance lives on-chain, never in the ledger.
  - name: QR Crypto POS
    description: >-
      Amount-bearing crypto QR charges for processors with physical POS
      terminals (company accounts): verified merchants, exclusive address + QR
      per charge, early payment detection, per-merchant reconciliation and
      refunds over the crypto withdrawal rail.
  - name: KYC / KYB
  - name: AML screening
    description: >-
      Identity verification: KYC for persons, KYB for companies, with AML
      screening, rescreening and continuous monitoring.
  - name: Wallet screening
    description: >-
      AML risk assessment of blockchain addresses (sanctions, illicit-fund
      exposure) with a per-scan fee, plus free automatic protection on
      withdrawals and deposits.
  - name: Analytics
  - name: Webhooks
    description: Subscriptions to receive signed event notifications.
  - name: Status
    description: Service availability.
  - name: Banking
    description: >-
      Real bank accounts: receive, hold and send money over international
      banking rails.
  - name: Cards
    description: >-
      Virtual and physical cards that spend Just-In-Time from the account's USDT
      balance, with per-card spending limits.
  - name: Security (OTP)
    description: >-
      One-time verification codes over SMS/WhatsApp/email protecting sensitive
      actions, plus self-service 2FA preferences. Applies to user sessions only
      — API keys are exempt.
  - name: Passkeys
    description: >-
      Passwordless sign-in with the device's biometrics (Face ID, Touch ID,
      Windows Hello, security keys) via WebAuthn, authenticator apps (TOTP) with
      backup codes, and session/device management.
  - name: Social login
    description: >-
      Passwordless sign up and sign in with Google, Apple, Microsoft and
      Facebook via token exchange. The front end obtains the provider
      credential; the API verifies it and issues the CBPay session.
paths:
  /pay/{token}/quote:
    get:
      tags:
        - Payins
      summary: Quote a checkout link before choosing (public)
      description: >-
        Indicative quotes for a universal checkout link BEFORE materializing —
        the catalog of countries with live fiat methods (card excluded — see
        `cards`), the card options listed separately per country+currency in
        `cards[]` with the quoted due amount (a corridor may accept several
        charge currencies, e.g. BOB and USD), the due amount per crypto option
        (conversion cost included when the pay asset differs from the settlement
        asset), and the CBPay direct payment dues per enabled balance. Each
        country lists its corridors in `options[]` — one row per method+currency
        (a country may offer the same method in several currencies, e.g. QR in
        BOB and USD) with `collect: true` on pull methods that ask for the
        payer's data on the page (see `POST /pay/{token}/collect`). With
        `?country=XX` it also returns the quoted local amount per option for
        that country. Materializing freezes the definitive quote. No
        credentials; rate limited per IP.
      operationId: checkoutQuote
      parameters:
        - name: token
          in: path
          required: true
          schema:
            type: string
          description: Opaque checkout token embedded in the `checkout_url`.
        - name: country
          in: query
          required: false
          schema:
            type: string
          description: Optional ISO-3166 alpha-2 country to quote the local amount for.
      responses:
        '200':
          description: Indicative quotes for the link.
          content:
            application/json:
              example:
                status: pending
                settlement_asset: USDT
                asset_amount: '50'
                countries:
                  - country: BO
                    currency: BOB
                    methods:
                      - qr
                    options:
                      - method: qr
                        currency: BOB
                      - method: qr
                        currency: USD
                  - country: VE
                    currency: VES
                    methods: []
                    options:
                      - method: c2p
                        currency: VES
                        collect: true
                      - method: debito_inmediato
                        currency: VES
                        collect: true
                  - country: CL
                    currency: CLP
                    methods:
                      - bank_transfer
                      - fintoc
                    options:
                      - method: bank_transfer
                        currency: CLP
                      - method: fintoc
                        currency: CLP
                cards:
                  - country: BO
                    currency: BOB
                    local_amount: '543.30'
                  - country: BO
                    currency: USD
                    local_amount: '50.75'
                crypto:
                  - method: crypto:tron:usdt
                    chain: tron
                    asset: USDT
                    due: '50.000000'
                  - method: crypto:btc:btc
                    chain: btc
                    asset: BTC
                    due: '0.00046120'
                    quote_ttl_seconds: 900
                cbpay:
                  alias: tayl.code
                  dues:
                    USDT: '50.000000'
                    USDC: '50.100200'
                    BTC: '0.00046120'
                    GOLD: '0.462100'
                country_quote:
                  country: BO
                  currency: BOB
                  methods:
                    - qr
                  local_amount: '543.30'
                  options:
                    - method: qr
                      currency: BOB
                      local_amount: '543.30'
                    - method: qr
                      currency: USD
                      local_amount: '50.75'
        '404':
          description: Invalid token or unknown payment link.
          content:
            application/json:
              example:
                error: not_found
                message: payment link not found
        '422':
          description: The requested country has no payment methods available.
          content:
            application/json:
              example:
                error: country_unavailable
                message: no payment methods are available for that country
        '429':
          description: Too many requests from this IP.
          content:
            application/json:
              example:
                error: too_many_attempts
                message: too many requests; wait a moment and retry
        '503':
          description: Pricing temporarily unavailable.
          content:
            application/json:
              example:
                error: pricing_unavailable
                message: pricing is temporarily unavailable; retry in a moment
      security: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        Session JWT (from register/login) or API key (`pk_...`).
        `X-API-Key: <token>` is accepted as an alternative header.

````