> ## 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.

# Crear un payout

> Dispersa fiat a una cuenta bancaria local. El monto local se convierte a USDT a **la tasa de tu cuenta** (la misma que devuelve `GET /v1/rates`); se debita `usdt_amount` más la comisión fija (cuando está configurada) y queda retenido hasta que la dispersión se complete. Si falla, se reembolsa el débito completo.

**Paga desde cualquier saldo**: por defecto el débito sale del asset de settlement predeterminado de tu cuenta (USDT salvo que lo cambies con `PUT /v1/settlement`). Envía `settlement_asset` (USDT, USDC, BTC o GOLD) para pagar esta operación puntual desde otro saldo: el total en USDT se convierte a ese asset al precio efectivo de settlement del momento (ver el bloque `settlement` de `GET /v1/rates`) y el débito, la retención y — si falla — el reembolso viven en ese asset por el monto exacto. Si el precio de ejecución de BTC/GOLD no está disponible, el request devuelve `503 pricing_unavailable`; los assets volátiles además tienen un límite por operación (`422 settlement_limit_exceeded`).

Requiere una llave de idempotencia (campo del body o header `Idempotency-Key`). Reintentar con la misma llave devuelve el payout original (`200` con `idempotency_hit: true`).



## OpenAPI

````yaml /openapi.es.yaml post /v1/payouts
openapi: 3.1.0
info:
  title: CBPay API
  version: '1.89'
  description: |
    CBPay es una plataforma de pagos multimoneda: payouts y cobros fiat
    en toda América Latina, transferencias internas, fondeo y retiros
    on-chain, y screening KYC. Cada cuenta mantiene cuatro saldos virtuales
    independientes — USDT (la moneda operativa), USDC, BTC y GOLD (gramos de
    oro fino) — que nunca se mezclan ni se convierten automáticamente.
    Los payouts y las comisiones de servicios pueden pagarse desde cualquiera
    de los cuatro saldos: define un predeterminado con `PUT /v1/settlement` o
    haz override por payout con `settlement_asset`.

    Todos los montos son strings decimales en la precisión de cada moneda (6
    decimales para USDT/USDC/GOLD, 8 para BTC). Los errores siempre devuelven
    `{"error": "<code>", "message": "<detail>"}`.
servers:
  - url: https://api.qbank.cl/platform
    description: Live (producción, dinero real)
  - url: https://cryptobank.qbank.cl/platform
    description: Test (sandbox, dinero simulado — keys pk_test_)
security:
  - bearerAuth: []
tags:
  - name: Comprobantes
    description: >-
      Comprobante PDF brandeado por operacion, con verificacion publica de
      autenticidad (QR firmado), receipt_url en cada respuesta/webhook y envio
      automatico por email en estados finales.
  - name: Autenticación
    description: >-
      Registra e inicia sesión de los miembros de la cuenta. Las sesiones duran
      24 horas.
  - name: Cuenta
    description: Perfil, miembros y llaves de API de la cuenta que llama.
  - name: Saldos
    description: Saldos, historial de movimientos y tasas de cambio.
  - name: Payouts
    description: >-
      Dispersiones fiat que se debitan del saldo de settlement que elijas (USDT
      por defecto).
  - name: Payins
    description: Recargas fiat que se acreditan al saldo en USDT.
  - name: Transferencias
  - name: Contacts
  - name: Swaps
    description: >-
      Transferencias internas gratuitas entre cuentas CBPay (persona o empresa,
      cualquier combinación).
  - name: Crypto
    description: Fondeo y retiros on-chain (TRON, Ethereum y Bitcoin).
  - name: Wallets segregadas
    description: >-
      Wallets on-chain con saldo propio (empresas ilimitadas; personas 1 por
      combinación red+activo) — crear, importar, enviar, exportar la llave
      privada y auto-forward. El saldo vive on-chain, nunca en el ledger.
  - name: QR Crypto POS
    description: >-
      Cobros QR crypto con monto para procesadores con POS físicos (cuentas
      empresa): merchants verificados, dirección exclusiva + QR por cobro,
      detección temprana del pago, conciliación por merchant y devoluciones por
      el riel de retiro crypto.
  - name: KYC / KYB
  - name: Screening de wallets
    description: >-
      Evaluación de riesgo AML de direcciones blockchain (sanciones, exposición
      a fondos ilícitos) con comisión por scan, más protección automática
      gratuita en retiros y depósitos.
  - name: AML screening
    description: >-
      Verificación de identidad: KYC para personas, KYB para empresas, con
      screening AML, re-screening y monitoreo continuo.
  - name: Analytics
  - name: Webhooks
    description: Suscripciones para recibir notificaciones de eventos firmadas.
  - name: Estado
    description: Disponibilidad del servicio.
  - name: Banking
    description: >-
      Cuentas bancarias reales: recibe, mantén y envía dinero por rieles
      bancarios internacionales.
  - name: Cards
    description: >-
      Tarjetas virtuales y físicas que gastan Just-In-Time del saldo USDT de la
      cuenta, con límites de gasto por tarjeta.
  - name: Seguridad (OTP)
    description: >-
      Códigos de verificación de un solo uso por SMS/WhatsApp/email que protegen
      acciones sensibles, más las preferencias de 2FA self-service. Aplican solo
      a sesiones de usuario — las API keys quedan exentas.
  - name: Passkeys
    description: >-
      Inicio de sesión sin contraseña con la biometría del dispositivo (Face ID,
      Touch ID, Windows Hello, llaves de seguridad) vía WebAuthn, apps
      autenticadoras (TOTP) con códigos de respaldo, y gestión de
      sesiones/dispositivos.
  - name: Login social
    description: >-
      Registro e inicio de sesión sin contraseña con Google, Apple, Microsoft y
      Facebook vía token exchange. El front obtiene la credencial del proveedor;
      la API la verifica y emite la sesión CBPay.
paths:
  /v1/payouts:
    post:
      tags:
        - Payouts
      summary: Crear un payout
      description: >-
        Dispersa fiat a una cuenta bancaria local. El monto local se convierte a
        USDT a **la tasa de tu cuenta** (la misma que devuelve `GET /v1/rates`);
        se debita `usdt_amount` más la comisión fija (cuando está configurada) y
        queda retenido hasta que la dispersión se complete. Si falla, se
        reembolsa el débito completo.


        **Paga desde cualquier saldo**: por defecto el débito sale del asset de
        settlement predeterminado de tu cuenta (USDT salvo que lo cambies con
        `PUT /v1/settlement`). Envía `settlement_asset` (USDT, USDC, BTC o GOLD)
        para pagar esta operación puntual desde otro saldo: el total en USDT se
        convierte a ese asset al precio efectivo de settlement del momento (ver
        el bloque `settlement` de `GET /v1/rates`) y el débito, la retención y —
        si falla — el reembolso viven en ese asset por el monto exacto. Si el
        precio de ejecución de BTC/GOLD no está disponible, el request devuelve
        `503 pricing_unavailable`; los assets volátiles además tienen un límite
        por operación (`422 settlement_limit_exceeded`).


        Requiere una llave de idempotencia (campo del body o header
        `Idempotency-Key`). Reintentar con la misma llave devuelve el payout
        original (`200` con `idempotency_hit: true`).
      operationId: createPayout
      parameters:
        - $ref: '#/components/parameters/idempotencyKeyHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - country
                - currency
                - amount
              properties:
                country:
                  type: string
                  description: País de destino ISO 3166-1 alpha-2 (ej. CL, PE, MX).
                currency:
                  type: string
                  description: Moneda local (ej. CLP, PEN, MXN).
                method:
                  type: string
                  description: >-
                    Método de payout de `GET /v1/payouts/methods` (ej.
                    `bank_transfer`).
                amount:
                  type: string
                  description: Monto en moneda local como string decimal positivo.
                  example: '50000.00'
                beneficiary:
                  type: object
                  additionalProperties:
                    type: string
                  description: >
                    Datos de la cuenta de destino. Las claves requeridas
                    dependen del

                    país y del método; ver `GET /v1/payouts/methods` y

                    `GET /v1/payouts/banks`. Ejemplos: RUT + banco en Chile,
                    CLABE en

                    México, CCI en Perú. PIX Brasil: `pix_key` + `pix_key_type`
                    (cpf,

                    cnpj, phone, email, evp), o cuenta bancaria sin llave con

                    `bank_code` (ISPB) + `branch_code` + `account_number` +
                    `tax_id`.

                    Ecuador (corredor de remesas): `document_value` (cédula) más
                    los

                    datos del ordenante planos en el mismo objeto
                    (`sender_name`,

                    `sender_document_value`, ...); los nombres estructurados
                    opcionales

                    (`given_name`, `first_surname`, ... y sus pares `sender_*`)

                    mandan sobre la separación automática de `name`.
                beneficiary_contact_id:
                  type: string
                  format: uuid
                  description: >-
                    Usa el beneficiario guardado más reciente del contacto para
                    este país (y método, si lo envías) en vez de tipear
                    `beneficiary` de nuevo. Un `beneficiary` explícito siempre
                    gana; 422 no_saved_destination si el contacto no tiene.
                save_contact:
                  type: boolean
                  default: true
                  description: >-
                    El beneficiario se guarda como contacto automáticamente;
                    envía false para no guardarlo.
                description:
                  type: string
                settlement_asset:
                  type: string
                  enum:
                    - USDT
                    - USDC
                    - BTC
                    - GOLD
                  description: >-
                    Saldo virtual a debitar para esta operación. Omítelo para
                    usar el asset de settlement predeterminado de tu cuenta
                    (USDT salvo que lo cambies con `PUT /v1/settlement`).
                idempotency_key:
                  type: string
            examples:
              cl_bank_transfer:
                summary: Chile — transferencia bancaria (CLP)
                value:
                  country: CL
                  currency: CLP
                  method: bank_transfer
                  amount: '100000'
                  beneficiary:
                    name: Pedro Soto Fuentes
                    tax_id: 12.345.678-5
                    bank_code: '012'
                    account_type: checking
                    account_number: '123456789'
                  description: Supplier payment
                  idempotency_key: cl-prov-0091
              pe_bank_transfer:
                summary: Perú — transferencia bancaria vía CCI (PEN)
                value:
                  country: PE
                  currency: PEN
                  method: bank_transfer
                  amount: '1000.00'
                  beneficiary:
                    name: Rosa Alvarez Diaz
                    account_number: 219300123456789020
                  idempotency_key: pe-cci-3310
              pe_yape:
                summary: Perú — Yape a un número de teléfono (PEN)
                value:
                  country: PE
                  currency: PEN
                  method: yape
                  amount: '150.00'
                  beneficiary:
                    name: Luis Ramos Vega
                    phone: '51987654321'
                  idempotency_key: pe-yape-8874
              mx_clabe:
                summary: México — SPEI a una CLABE (MXN)
                value:
                  country: MX
                  currency: MXN
                  method: bank_transfer
                  amount: '1500.00'
                  beneficiary:
                    name: Maria Lopez
                    account_type: clabe
                    account_number: 12180001234567896
                  idempotency_key: mx-clabe-8841
              mx_debit_card:
                summary: México — SPEI a una tarjeta de débito (MXN)
                value:
                  country: MX
                  currency: MXN
                  method: bank_transfer
                  amount: '800.00'
                  beneficiary:
                    name: Jorge Herrera
                    account_type: debit_card
                    account_number: '4152313412341234'
                    bank_code: '40012'
                  idempotency_key: mx-card-1102
              ve_pago_movil:
                summary: Venezuela — Pago Móvil (VES)
                value:
                  country: VE
                  currency: VES
                  method: pago_movil
                  amount: '2000.00'
                  beneficiary:
                    phone: '04141234567'
                    bank_code: '0102'
                    document_value: V12345678
                  idempotency_key: ve-pm-5567
              ve_bank_transfer:
                summary: Venezuela — transferencia bancaria (VES)
                value:
                  country: VE
                  currency: VES
                  method: bank_transfer
                  amount: '5000.00'
                  beneficiary:
                    name: Carmen Delgado
                    account_number: 1020123456789012400
                    document_value: V87654321
                  idempotency_key: ve-bank-7810
              bo_bank_transfer:
                summary: Bolivia — transferencia ACH (BOB)
                value:
                  country: BO
                  currency: BOB
                  method: bank_transfer
                  amount: '1382.00'
                  beneficiary:
                    name: Juan Quispe Mamani
                    tax_id: '4567890'
                    bank_code: '1016'
                    account_number: '1234567890'
                  idempotency_key: bo-ach-2204
              br_pix:
                summary: Brasil — PIX por llave (BRL)
                value:
                  country: BR
                  currency: BRL
                  method: pix
                  amount: '350.00'
                  beneficiary:
                    name: João da Silva
                    tax_id: 123.456.789-09
                    pix_key_type: cpf
                    pix_key: '12345678909'
                  idempotency_key: br-pix-3321
              ec_bank_transfer:
                summary: >-
                  Ecuador — transferencia bancaria (USD, remesa con datos del
                  ordenante)
                value:
                  country: EC
                  currency: USD
                  method: bank_transfer
                  amount: '250.00'
                  beneficiary:
                    name: Carlos Andrade Vera
                    document_value: '1712345678'
                    account_number: '2203456789'
                    sender_name: Ana Torres Silva
                    sender_document_value: V23456789
                    sender_country: US
                  idempotency_key: ec-bank-4471
              ec_deuna:
                summary: Ecuador — billetera DE UNA por número de celular (USD)
                value:
                  country: EC
                  currency: USD
                  method: deuna
                  amount: '80.00'
                  beneficiary:
                    name: Lucia Paredes Mora
                    document_value: '0923456781'
                    phone: '0998765432'
                    sender_name: Ana Torres Silva
                  idempotency_key: ec-deuna-5520
              ec_cash_pickup:
                summary: Ecuador — efectivo en ventanilla (USD)
                value:
                  country: EC
                  currency: USD
                  method: cash_pickup
                  amount: '120.00'
                  beneficiary:
                    name: Miguel Zambrano Loor
                    document_value: '1309876543'
                    sender_name: Ana Torres Silva
                  idempotency_key: ec-cash-6612
              ec_cnb:
                summary: Ecuador — efectivo en corresponsal no bancario (USD)
                value:
                  country: EC
                  currency: USD
                  method: cnb
                  amount: '60.00'
                  beneficiary:
                    name: Rosa Cedeño Vera
                    document_value: '0801234567'
                    sender_name: Ana Torres Silva
                  idempotency_key: ec-cnb-7703
              py_bank_transfer:
                summary: Paraguay — transferencia bancaria (PYG)
                value:
                  country: PY
                  currency: PYG
                  method: bank_transfer
                  amount: '500000'
                  beneficiary:
                    name: Sofia Benitez
                    tax_id: '4123456'
                    bank_code: '0011'
                    account_number: '600123456'
                  idempotency_key: py-bank-9917
              cl_paid_from_btc:
                summary: Chile — pagado desde el saldo BTC (settlement_asset)
                value:
                  country: CL
                  currency: CLP
                  method: bank_transfer
                  amount: '100000'
                  beneficiary:
                    name: Pedro Soto Fuentes
                    tax_id: 12.345.678-5
                    bank_code: '012'
                    account_type: checking
                    account_number: '123456789'
                  settlement_asset: BTC
                  idempotency_key: cl-btc-0192
      responses:
        '200':
          description: Respuesta idempotente de un payout existente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payout'
              example:
                payout_id: 7d5c2f0a-1e9b-4a6d-8f3c-0b2a1d9e8c7f
                account_id: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
                idempotency_key: invoice-8841
                country: MX
                currency: MXN
                method: bank_transfer
                local_amount: '1500.00'
                fx_rate: '17.50'
                usdt_amount: '85.714286'
                fee: '0.300000'
                total_debit: '86.014286'
                settlement_asset: USDT
                settlement_amount: '86.014286'
                settlement_rate: '1'
                beneficiary:
                  name: Maria Lopez
                  account_type: clabe
                  account_number: 12180001234567896
                description: Invoice 8841
                status: processing
                status_code: ''
                status_message: ''
                created_at: '2026-07-07T12:00:00Z'
                updated_at: '2026-07-07T12:00:00Z'
                idempotency_hit: true
        '202':
          description: Payout aceptado y en despacho.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payout'
              example:
                payout_id: 7d5c2f0a-1e9b-4a6d-8f3c-0b2a1d9e8c7f
                account_id: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
                idempotency_key: invoice-8841
                country: MX
                currency: MXN
                method: bank_transfer
                local_amount: '1500.00'
                fx_rate: '17.50'
                usdt_amount: '85.714286'
                fee: '0.300000'
                total_debit: '86.014286'
                settlement_asset: USDT
                settlement_amount: '86.014286'
                settlement_rate: '1'
                beneficiary:
                  name: Maria Lopez
                  account_type: clabe
                  account_number: 12180001234567896
                description: Invoice 8841
                status: processing
                status_code: ''
                status_message: ''
                created_at: '2026-07-07T12:00:00Z'
                updated_at: '2026-07-07T12:00:00Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientFunds'
        '403':
          description: >-
            Cuenta no activa (`account_blocked`) o falta la credencial de
            cuenta.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: account_blocked
                message: account is not active
        '422':
          description: >
            No hay tasa de cambio para la moneda (`currency_not_supported`), o
            el

            payout fue rechazado de entrada — la respuesta es el objeto payout

            con `status: failed` y el débito ya reembolsado.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Error'
                  - $ref: '#/components/schemas/Payout'
              example:
                payout_id: 7d5c2f0a-1e9b-4a6d-8f3c-0b2a1d9e8c7f
                account_id: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
                idempotency_key: invoice-8841
                country: MX
                currency: MXN
                method: bank_transfer
                local_amount: '1500.00'
                fx_rate: '17.50'
                usdt_amount: '85.714286'
                fee: '0.300000'
                total_debit: '86.014286'
                settlement_asset: USDT
                settlement_amount: '86.014286'
                settlement_rate: '1'
                beneficiary:
                  name: Maria Lopez
                  account_type: clabe
                  account_number: 12180001234567896
                description: Invoice 8841
                status: failed
                status_code: core_rejected
                status_message: beneficiary account is invalid
                created_at: '2026-07-07T12:00:00Z'
                updated_at: '2026-07-07T12:00:00Z'
        '503':
          description: >-
            El canal de payout está temporalmente no disponible
            (`channel_unavailable`); reintenta más tarde con la MISMA clave de
            idempotencia.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: channel_unavailable
                message: >-
                  the payout channel is temporarily unavailable, please retry
                  later
components:
  parameters:
    idempotencyKeyHeader:
      name: Idempotency-Key
      in: header
      required: false
      description: Alternativa al campo `idempotency_key` del body.
      schema:
        type: string
  schemas:
    Payout:
      type: object
      properties:
        payout_id:
          type: string
          format: uuid
        account_id:
          type: string
          format: uuid
        idempotency_key:
          type: string
        country:
          type: string
        currency:
          type: string
        method:
          type: string
        local_amount:
          type: string
        fx_rate:
          type: string
          description: >-
            La tasa de tu cuenta al momento de la ejecución (unidades locales
            por 1 USDT).
        usdt_amount:
          type: string
        fee:
          type: string
        total_debit:
          type: string
        settlement_asset:
          type: string
          enum:
            - USDT
            - USDC
            - BTC
            - GOLD
          description: Saldo virtual desde el que realmente se debitó la operación.
        settlement_amount:
          type: string
          description: >-
            Monto exacto debitado del saldo del asset de settlement (en unidades
            de ese asset). Es igual a `total_debit` cuando el asset es USDT. Si
            el payout falla se reembolsa este monto exacto — nunca se re-cotiza.
        settlement_rate:
          type: string
          description: >-
            Precio USD efectivo por unidad del asset de settlement usado para
            convertir el total en USDT ("1" para USDT/USDC).
        beneficiary:
          type: object
        description:
          type: string
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
        status_code:
          type: string
        status_message:
          type: string
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        idempotency_hit:
          type: boolean
          description: Presente (true) cuando la respuesta es una repetición idempotente.
    Error:
      type: object
      properties:
        error:
          type: string
          description: Código de error legible por máquina (snake_case).
          example: insufficient_funds
        message:
          type: string
          description: Explicación legible por humanos.
  responses:
    BadRequest:
      description: >-
        Solicitud inválida (ver el código `error` para la validación
        específica).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: invalid_json
            message: 'request body is not valid JSON: unknown field'
    Unauthorized:
      description: Credencial faltante o inválida (`unauthorized`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
            message: invalid or missing credentials
    InsufficientFunds:
      description: >-
        El saldo de la cuenta no alcanza para esta operación
        (`insufficient_funds`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: insufficient_funds
            message: account balance is not enough for this operation
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        JWT de sesión (de register/login) o llave de API (`pk_...`).
        `X-API-Key: <token>` se acepta como header alternativo.

````