{"openapi":"3.1.0","info":{"title":"Referencia API","version":"1.0.0"},"paths":{"/test":{"get":{"operationId":"credentials","summary":"Prueba tus credenciales de autenticación","description":"Incluye los headers de autenticación y recibe una respuesta con el nombre de tu cuenta.\n","tags":["test"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Respuesta exitosa","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Test_credentials_Response_200"}}}},"401":{"description":"Respuesta fallida - Autenticación errónea","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/account":{"get":{"operationId":"get-account","summary":"Obtén detalles de la cuenta","description":"Obtén información sobre tu cuenta de Recurrente.\n","tags":["account"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles de la cuenta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account_getAccount_Response_200"}}}}}}},"/activities":{"get":{"operationId":"list-activities","summary":"Listar actividad de la cuenta","description":"Devuelve el feed de actividad de la cuenta (pagos, transferencias, retiros, conversiones, etc.), del más reciente al más antiguo. Es la fuente de verdad para el historial de movimientos. Paginado con headers RFC 8288. Filtra por fecha de creación con `from_time` + `until_time`.\n","tags":["activities"],"parameters":[{"name":"type","in":"query","description":"Filtra por tipo de evento (`transfer.sent`, `payment_intent.succeeded`) o por grupo de modelo (`transfer`).","required":false,"schema":{"type":"string"}},{"name":"from_time","in":"query","description":"Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de actividades","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Activity"}}}}}}}},"/balance_transactions":{"get":{"operationId":"list-balance-transactions","summary":"Listar movimientos del balance","description":"Lista el ledger de la cuenta, del movimiento más reciente al más antiguo: es la forma API del estado de cuenta descargable. Los montos son firmados: positivo acredita el balance y negativo lo debita.\n\n`amount_in_cents` es el bruto y `net_amount_in_cents` es lo que efectivamente movió el balance; sumar `fee_in_cents` al bruto siempre da el neto. En un cobro, `fee_details` desglosa esa diferencia en la comisión y el IVA retenido, las mismas columnas del reporte descargable. `balance_after_in_cents` corresponde a la columna Balance de ese reporte.\n\nPara conciliar un mes, filtra con `from_time` + `until_time` y sube `items` hasta 100. Cada par de fechas se envía completo: enviar solo una mitad devuelve `400` en vez de ignorar el rango.\n\nNo existe forma de preguntar qué cobros financiaron un retiro: Recurrente registra el débito del retiro y nada más, así que esa relación habría que inventarla. El camino inverso sí existe — cada movimiento en `GET /api/transfers` trae `balance_transaction_id`, la fila de ledger que registró.\n","tags":["balanceTransactions"],"parameters":[{"name":"from_time","in":"query","description":"Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"currency","in":"query","description":"Moneda del balance a consultar. Sin este filtro la lista mezcla todas las monedas de la cuenta.","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Tipo contable del movimiento, por ejemplo `charge`, `payout`, `refund` o `dispute`.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Página a devolver. La respuesta trae los encabezados `link`, `current-page`, `total-pages` y `total-count`.","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página.","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Movimientos del balance","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BalanceTransaction"}}}}},"400":{"description":"Rango de fechas incompleto","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/balance_transactions/{id}":{"get":{"operationId":"get-balance-transaction","summary":"Obtener un movimiento del balance","tags":["balanceTransactions"],"parameters":[{"name":"id","in":"path","description":"ID público del movimiento del balance","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Movimiento del balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceTransaction"}}}},"404":{"description":"El movimiento no existe o pertenece a otra cuenta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/balances":{"get":{"operationId":"list-balances","summary":"Listar balances","description":"Devuelve el balance disponible de tu cuenta por moneda (GTQ, USD, y USDC si aplica). Es un único monto gastable por moneda (los retiros en curso ya están descontados).\n","tags":["balances"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de balances","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Balance"}}}}}}}},"/bank_accounts/{id}":{"patch":{"operationId":"update-bank-account","summary":"Actualizar la cuenta preferida","description":"Solo `is_preferred` puede actualizarse.","tags":["bankAccounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cuenta bancaria actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"is_preferred":{"type":"boolean"}}}}}}},"delete":{"operationId":"archive-bank-account","summary":"Archivar una cuenta bancaria","tags":["bankAccounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cuenta bancaria archivada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}}}},"get":{"operationId":"get-bank-account","summary":"Obtener una cuenta bancaria","tags":["bankAccounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cuenta bancaria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}}}}},"/bank_accounts":{"post":{"operationId":"create-bank-account","summary":"Crear una cuenta bancaria","description":"Registra una cuenta bancaria externa como destino de retiro. Usa `GET /banks` para los valores válidos de `bank_name`. Las cuentas son inmutables salvo `is_preferred` — archiva y crea una nueva para cambiar otros datos.\n","tags":["bankAccounts"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Cuenta bancaria creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}},"400":{"description":"Error de validación o banco desconocido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"holder_name":{"type":"string"},"number":{"type":"string"},"bank_name":{"type":"string"},"currency":{"$ref":"#/components/schemas/BankAccountsPostRequestBodyContentApplicationJsonSchemaCurrency"},"account_type":{"$ref":"#/components/schemas/BankAccountsPostRequestBodyContentApplicationJsonSchemaAccountType"},"is_preferred":{"type":"boolean"}},"required":["holder_name","number","bank_name","currency","account_type"]}}}}},"get":{"operationId":"list-bank-accounts","summary":"Listar cuentas bancarias","description":"Lista las cuentas bancarias externas y activas de tu cuenta (destinos de retiro).","tags":["bankAccounts"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de cuentas bancarias","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BankAccount"}}}}}}}},"/banks":{"get":{"operationId":"list-banks","summary":"Listar bancos soportados","description":"Lista los bancos que Recurrente acepta. Usa el campo `name` como valor\npara `bank_name` al crear cuentas bancarias.\n","tags":["banks"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de bancos soportados","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BanksGetResponsesContentApplicationJsonSchemaItems"}}}}}}}},"/cash_sales":{"post":{"operationId":"create-cash-sale","summary":"Registrar una venta cobrada en efectivo","description":"Registra una venta cobrada en efectivo. No mueve dinero por Recurrente:\nno se descuenta comisión, no impacta el balance del merchant, y no se\ngenera transacción en el ledger. Si pasas `tax_id`, se intenta emitir la\nfactura electrónica (DTE) automáticamente.\n\nLa respuesta devuelve el ID del recurso unificado (`in_…`). Persiste ese\nID para reconciliar el evento `intent.succeeded` y para consultar el\nestado actual mediante `GET /intents/{id}`. También aparece como\n`checkout.latest_intent.id`; solo el `id` superior del evento legacy\n`cash_intent.succeeded` usa el ID concreto del `CashIntent` (`ca_…`).\n\n`tax_invoice_url` en los webhooks refleja el estado del DTE al momento de\nla entrega. Puede ser `null` si la emisión todavía no concluyó o falló y\nluego se recupera. Ese cambio no genera un segundo webhook de éxito;\nrecupera la URL actual con `GET /intents/{id}`.\n\nSi operas una plataforma, envía `X-ACCOUNT-ID` tanto al crear como al\nconsultar para que la venta y su DTE pertenezcan a la cuenta conectada y\nse emitan bajo su NIT. `X-CUSTOM-ACCOUNT-ID` no selecciona el contexto de\nlectura.\n","tags":["cashSales"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Venta en efectivo registrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Cash Sales_createCashSale_Response_201"}}}},"401":{"description":"Autenticación inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validación falló (por ejemplo, límite de transacción excedido)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto en centavos"},"currency":{"$ref":"#/components/schemas/CashSalesPostRequestBodyContentApplicationJsonSchemaCurrency","description":"Moneda. Default — la moneda principal de la cuenta."},"description":{"type":"string","description":"(Opcional) Descripción visible en el recibo y la actividad"},"tax_id":{"type":"string","description":"(Opcional) NIT del cliente. Si la cuenta tiene facturación electrónica configurada, se emite el DTE automáticamente."}},"required":["amount_in_cents"]}}}}}},"/checkouts/{id}":{"patch":{"operationId":"update-checkout","summary":"Actualizar un checkout o modificar sus items","description":"Actualiza campos del checkout y agrega, modifica o elimina filas individuales sin reenviar el carrito completo.\n\nEl checkout debe pertenecer a la cuenta del contexto. Una plataforma que envía `X-ACCOUNT-ID` puede actualizar cualquier checkout de esa hija conectada, sin filtrar por creador.\n\n`items` es una lista de **mutaciones sparse**. Las filas que no aparecen permanecen sin cambios:\n\n- Para agregar, envía `price_id`, `quantity` absoluta y metadata opcional. Solo se pueden agregar precios activos del catálogo de la cuenta; no se aceptan detalles inline en este endpoint.\n- Para modificar, envía el `id` de item con prefijo `it_` y una nueva `quantity` absoluta o `metadata`. La metadata reemplaza el objeto completo; `{}` la limpia.\n- Para eliminar, envía el `id` de item y `deleted: true` sin otros campos.\n\nVarias filas pueden compartir el mismo `price_id`: cada una conserva su propio `id`, cantidad y metadata. Una solicitud puede mezclar las tres operaciones y se aplica atómicamente; si cualquier mutación o validación del checkout falla, no se guarda ningún cambio. La respuesta exitosa siempre contiene el checkout completo y su colección `items` autoritativa.\n\nSolo un checkout `unpaid` y sin un pago en proceso puede modificarse. Eliminar el último item deja el checkout abierto y vacío, pero no se puede pagar hasta agregar un item válido. Usa `Idempotency-Key` al agregar filas para que un retry de red devuelva la respuesta original sin duplicarlas.\n","tags":["checkouts"],"parameters":[{"name":"id","in":"path","description":"ID del checkout","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Clave de idempotencia para reintentos seguros de operaciones críticas, especialmente las que mueven dinero o cambian estado operativo. Reintentar con la misma clave y el mismo cuerpo devuelve la respuesta original (header `Idempotency-Replayed: true`); reusarla con parámetros distintos devuelve 409.\n","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Checkout actualizado con la colección completa y autoritativa de items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Checkout"}}}},"400":{"description":"Una mutación, metadata o el checkout resultante es inválido; no se guardó ningún cambio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"La clave de idempotencia está en uso o fue reutilizada con otro payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"El checkout tiene un pago en proceso, ya fue pagado o no está en un estado editable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"success_url":{"type":"string","format":"uri","description":"Nueva URL de éxito"},"cancel_url":{"type":"string","format":"uri","description":"Nueva URL de cancelación"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Metadata personalizada"},"expires_at":{"type":"string","format":"date-time","description":"Nueva fecha de expiración"},"discount_code":{"type":"string","description":"Código de descuento/cupón a aplicar al checkout"},"items":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutItemMutation"},"description":"Mutaciones sparse que se aplican atómicamente al carrito existente. Un arreglo vacío no modifica los items."}}}}}}},"get":{"operationId":"get-checkout","summary":"Obtener detalles de un checkout","description":"Obtén los detalles completos de un checkout que pertenezca a la cuenta del contexto. Una plataforma que envía `X-ACCOUNT-ID` puede consultar cualquier checkout de esa hija conectada, sin filtrar por creador.\n","tags":["checkouts"],"parameters":[{"name":"id","in":"path","description":"ID del checkout","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles del checkout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Checkout"}}}}}}},"/checkouts":{"post":{"operationId":"create-checkout","summary":"Crear un checkout","description":"Crea una nueva sesión de checkout. Cada elemento del arreglo `items` puede declararse de dos maneras:\n\n- **Con un producto existente** (recomendado): incluye `product_id` (o `price_id` si el producto tiene varios precios) y opcionalmente `quantity`. No envíes `name`, `amount_in_cents`, etc.; el producto ya tiene esa configuración.\n- **Con detalles inline**: incluye `name`, `amount_in_cents`, `currency` y los demás campos del cobro. Recurrente creará un producto invisible bajo la cuenta y lo asociará al checkout.\n\nCuando usas `items`, no envíes `amount_in_cents` en la raíz del payload. El total del checkout se calcula sumando los ítems y debe alcanzar el mínimo de cobro: 500 para GTQ (Q5) o 100 para USD ($1). Un ítem individual, como envío, puede ser menor al mínimo si el total del checkout sí lo cumple.\n\nEjemplo mínimo con un producto ya creado:\n\n```json\n{\n  \"items\": [\n    { \"product_id\": \"prod_1234567\", \"quantity\": 1 }\n  ],\n  \"success_url\": \"https://tusitio.com/exito\",\n  \"cancel_url\": \"https://tusitio.com/cancelar\"\n}\n```\n\n### Cuotas en Checkout\n\nEn un checkout hospedado, tu integración controla qué opciones de cuotas se muestran con `available_installments`; el comprador escoge entre esas opciones al pagar. No envíes `installments` al crear un checkout para seleccionar la cantidad final de cuotas.\n\nPara que un checkout muestre cuotas necesitas:\n\n- Moneda `GTQ` (las cuotas no aplican en USD).\n- Un cobro único (`charge_type: \"one_time\"`).\n- Pagos con tarjeta habilitados en la cuenta, y una cuenta empresarial (las cuentas personales no pueden ofrecer cuotas).\n- **No** hace falta que la cuenta esté verificada, ni habilitar nada con el adquirente.\n\nMientras la cuenta no complete su verificación sí aplica su tope de procesamiento sin verificación (Q500 en GTQ, $50 en USD, acumulado). Si el total del checkout pasa ese tope, `POST /checkouts` responde `422` con `code: amount_exceeds_unverified_limit` y no crea el checkout, porque el comprador se habría topado con el bloqueo de cuenta no verificada en la página de pago. Completa la verificación de la cuenta para quitar el tope.\n\nSi quieres que el checkout solo permita una cantidad específica de cuotas, muestra únicamente esa opción y desactiva el pago con tarjeta de contado:\n\n```json\n{\n  \"items\": [\n    {\n      \"name\": \"Pago en 6 cuotas\",\n      \"amount_in_cents\": 15000,\n      \"currency\": \"GTQ\",\n      \"charge_type\": \"one_time\",\n      \"quantity\": 1,\n      \"payment_method_types\": [],\n      \"available_installments\": [6]\n    }\n  ]\n}\n```\n\nPara que el comprador elija entre varias opciones, envía una lista como `available_installments: [3, 6, 12]`. Para ocultar cuotas, envía `available_installments: []`.\n\nEl parámetro `installments` aplica solo en endpoints de cobro directo que lo incluyan, como `POST /terminal_session_commands`, donde tu sistema escoge la cantidad de cuotas. Las cuotas dependen de la moneda, la cuenta, el banco/emisor y la tarjeta del comprador; si la tarjeta no soporta la opción elegida, el cobro puede fallar con `unsupported_installments`.\n","tags":["checkouts"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Checkout creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Checkouts_createCheckout_Response_201"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"El total supera lo que la cuenta puede procesar sin verificarse (`amount_exceeds_unverified_limit`). No se crea el checkout: nadie podría pagarlo mientras la cuenta siga sin verificar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItems"},"description":"Lista de productos/servicios a incluir en el checkout. Cada item puede usar `product_id` / `price_id` (producto existente) **o** los campos inline (`name`, `amount_in_cents`, `currency`, …). Los dos modos son excluyentes para un mismo item.\n"},"mode":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaMode","description":"(Opcional) Modo del checkout. Envía `setup` para tokenizar una tarjeta sin cobrarla."},"success_url":{"type":"string","format":"uri","description":"(Opcional) URL a dónde dirigir al comprador después de un pago exitoso"},"cancel_url":{"type":"string","format":"uri","description":"(Opcional) URL a dónde dirigir al comprador cuando abandona el checkout"},"user_id":{"type":"string","description":"(Opcional) ID del usuario a quien pertenece el checkout. Prepopula los campos de información de usuario (nombre, email y teléfono del cliente si existe en tu cuenta)."},"customer_id":{"type":"string","description":"(Opcional) ID del cliente en tu cuenta. Prepopula los campos de información de usuario (nombre, email y teléfono guardado del cliente). Si envías `customer_id` y `user_id`, se usa `customer_id`."},"metadata":{"$ref":"#/components/schemas/Metadata","description":"(Opcional) Metadata del checkout."},"expires_at":{"type":"string","format":"date-time","description":"(Opcional) Fecha en la que quieres que el checkout expire, en formato ISO 8601"},"discount_code":{"type":"string","description":"(Opcional) Código de descuento/cupón a aplicar al checkout"},"transfer_setups":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItems"},"description":"(Opcional, solo LIVE) Transferencias automáticas de fondos a otras cuentas de Recurrente. No está disponible en Sandbox. En pagos únicos envía `amount_in_cents`: un monto fijo que se transfiere una vez, cuando el cobro se completa. En suscripciones envía `amount_percent`: un porcentaje del total de cada factura, que se transfiere en cada cobro exitoso mientras la suscripción esté activa. Úsalo para dividir el pago: enrutar fondos a una cuenta conectada, o quedarte con una comisión cuando el checkout se crea en el contexto de una cuenta conectada mediante `X-ACCOUNT-ID`."}}}}}}},"get":{"operationId":"list-checkouts","summary":"Listar checkouts","description":"Lista con paginación todos los checkouts que pertenecen a la cuenta del contexto. Sin `X-ACCOUNT-ID`, usa la cuenta dueña de la llave. Una plataforma puede enviar `X-ACCOUNT-ID` para listar todos los checkouts de una hija conectada, sin importar si los creó la plataforma o la hija. Puedes filtrar por fechas y usuario.\n","tags":["checkouts"],"parameters":[{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"user_id","in":"query","description":"Filtrar por ID de usuario","required":false,"schema":{"type":"string"}},{"name":"from_time","in":"query","description":"Filtrar desde esta fecha (formato ISO 8601)","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Filtrar hasta esta fecha (formato ISO 8601)","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de checkouts","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Checkout"}}}}}}}},"/connected_accounts/{connected_account_id}/tax_invoicing":{"put":{"operationId":"update-connected-account-tax-invoicing","summary":"Activar facturación electrónica en cuenta conectada","description":"Configura la facturación electrónica administrada por Recurrente para una\ncuenta conectada. En v1 `registration_type` debe ser `managed`.\n\nDespués de completar la activación, los checkouts creados con\n`X-ACCOUNT-ID` emitirán factura fiscal desde la cuenta conectada.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Estado actualizado de facturación electrónica","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountTaxInvoicing"}}}},"400":{"description":"Parámetros incompletos o inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"registration_type":{"$ref":"#/components/schemas/ConnectedAccountsConnectedAccountIdTaxInvoicingPutRequestBodyContentMultipartFormDataSchemaRegistrationType","description":"En v1 solo se permite facturación administrada por Recurrente"},"activation_type":{"$ref":"#/components/schemas/ConnectedAccountsConnectedAccountIdTaxInvoicingPutRequestBodyContentMultipartFormDataSchemaActivationType","description":"`automatic` descarga la firma desde SAT usando `sat_password`.\n`manual` usa el archivo PFX enviado en `firma_electronica`.\n"},"sat_password":{"type":"string","description":"Requerido cuando `activation_type` es `automatic`"},"firma_electronica":{"type":"string","format":"binary","description":"Archivo PFX requerido cuando `activation_type` es `manual`"},"pfx_password":{"type":"string","description":"Contraseña del PFX requerida cuando `activation_type` es `manual`"},"establishment":{"type":"string","description":"Código de establecimiento. Si se omite, Recurrente usa `1`."}},"required":["registration_type","activation_type"]}}}}},"get":{"operationId":"get-connected-account-tax-invoicing","summary":"Obtener facturación electrónica de cuenta conectada","description":"Devuelve el estado público de la configuración de facturación electrónica\nde una cuenta conectada.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Estado público de facturación electrónica","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountTaxInvoicing"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/connected_accounts/{connected_account_id}/bank_accounts/{id}":{"patch":{"operationId":"update-connected-account-bank-account","summary":"Actualizar cuenta bancaria conectada","description":"Cambia la cuenta bancaria predeterminada de retiros enviando\n`is_preferred: true` en la cuenta bancaria que debe quedar como principal.\n\nLas cuentas bancarias son inmutables: para cambiar cualquier otro campo\n(titular, número, banco, moneda, tipo), archiva la cuenta bancaria\nexistente y crea una nueva. Recurrente responde `400` si se intenta\nactualizar cualquier campo distinto de `is_preferred`.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"ID de la cuenta bancaria","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cuenta bancaria actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}},"400":{"description":"Cuenta bancaria inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Cuenta bancaria no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccountUpdateRequest"}}}}},"delete":{"operationId":"archive-connected-account-bank-account","summary":"Archivar cuenta bancaria conectada","description":"Archiva una cuenta bancaria externa de una cuenta conectada. No elimina\nel registro histórico.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"ID de la cuenta bancaria","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cuenta bancaria archivada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}},"404":{"description":"Cuenta bancaria no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}},"get":{"operationId":"get-connected-account-bank-account","summary":"Obtener cuenta bancaria conectada","description":"Obtén los detalles de una cuenta bancaria externa de una cuenta conectada.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"ID de la cuenta bancaria","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles de la cuenta bancaria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}},"404":{"description":"Cuenta bancaria no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/connected_accounts/{id}":{"patch":{"operationId":"update-connected-account","summary":"Actualizar cuenta conectada","description":"Actualiza los datos comerciales, los datos fiscales y la configuración de\nretiros de una cuenta conectada. Para usar retiros instantáneos, la cuenta\nhija debe cumplir los requisitos de elegibilidad de Recurrente.\n","tags":["connectedAccounts"],"parameters":[{"name":"id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cuenta conectada actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccount"}}}},"400":{"description":"Cuenta inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountUpdateRequest"}}}}},"get":{"operationId":"get-connected-account","summary":"Obtener cuenta conectada","description":"Obtén los detalles de una cuenta conectada a tu cuenta.\n","tags":["connectedAccounts"],"parameters":[{"name":"id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles de la cuenta conectada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccount"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/connected_accounts/{connected_account_id}/withdrawals/{id}/cancel":{"post":{"operationId":"cancel-connected-account-withdrawal","summary":"Cancelar un retiro de una cuenta conectada","description":"> **Obsoleto:** usa el endpoint unificado [`POST /transfers/{id}/cancel`](/api-reference/transfers/cancelar-un-movimiento) con `X-ACCOUNT-ID`. Este endpoint sigue funcionando para integraciones existentes.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Retiro cancelado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"}}}},"422":{"description":"El retiro ya no puede cancelarse","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true}},"/connected_accounts/{connected_account_id}/commission_invoicing":{"put":{"operationId":"update-connected-account-commission-invoicing","summary":"Configurar la facturación de comisiones de una cuenta conectada","description":"`daily` y `none` establecen un override para esta conexión; `default`\nelimina el override y vuelve a usar la configuración general. Cuando el\nmodo efectivo pasa a `daily` debes enviar una API key live; la plataforma emisora debe\nestar lista para emitir FEL con INFILE y la cuenta conectada debe tener\nNIT y nombre fiscal verificados. Cambiar a `none` no borra ni modifica\ndocumentos existentes y deja que se drenen comisiones completadas antes\nde `disabled_at`.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuración actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicing"}}}},"400":{"description":"La plataforma emisora o los datos fiscales del receptor no están listos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Se intentó habilitar con una API key de prueba","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicingUpdateRequest"}}}}},"get":{"operationId":"get-connected-account-commission-invoicing","summary":"Obtener configuración de facturación de comisiones","description":"Devuelve el modo efectivo, la configuración general de la plataforma,\nel override de esta conexión y su intervalo de elegibilidad.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuración de facturación de comisiones","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicing"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/connected_accounts/{connected_account_id}/fee_collection":{"put":{"operationId":"update-connected-account-fee-collection","summary":"Configurar quién paga las comisiones de una cuenta conectada","description":"`application` y `recurrente` establecen un override para esta conexión;\n`default` elimina el override. `application` requiere una API key live y\nNIT y nombre fiscal verificados en la plataforma, y aplica únicamente a\ncobros live en GTQ o USD. Solo cambia las comisiones de procesamiento y\nde Recurrente: la cuenta conectada conserva su retención, fee FEL,\nfacturación de venta, reembolsos y disputas. La responsabilidad se\nguarda en cada cobro pagado.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Responsabilidad actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountFeeCollection"}}}},"400":{"description":"Valor inválido o datos fiscales de la plataforma incompletos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Se intentó asignar a la aplicación con una API key de prueba","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountFeeCollectionUpdateRequest"}}}}},"get":{"operationId":"get-connected-account-fee-collection","summary":"Obtener responsabilidad de comisiones de cobro","description":"Devuelve quién paga las comisiones de procesamiento y de Recurrente\npara los checkouts que la plataforma crea a nombre de esta cuenta\nconectada, junto con el override y la configuración general.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Responsabilidad efectiva de comisiones","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountFeeCollection"}}}}}}},"/connected_accounts/{connected_account_id}/rant_invoicing":{"get":{"operationId":"get-connected-account-rant-invoicing","summary":"Consultar emisión y facturación posterior de RANT","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuración y cantidad de RANT pendientes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountRantInvoicing"}}}}}},"put":{"operationId":"update-connected-account-rant-invoicing","summary":"Habilitar o deshabilitar emisión de RANT","description":"Los pagos nuevos de la cuenta conectada emitirán un RANT individual en lugar de una FACT.","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuración actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountRantInvoicing"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}}},"post":{"operationId":"create-connected-account-rant-invoices","summary":"Programar facturas para RANT pendientes","description":"Envía IDs `rant_...` específicos. Omite `rant_ids` o envía una lista\nvacía para procesar todos los RANT pendientes de la cuenta conectada.\nCada RANT genera una FACT individual; el RANT permanece vigente.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"RANT programados para facturación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connected Accounts_createConnectedAccountRantInvoices_Response_202"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"rant_ids":{"type":"array","items":{"type":"string"}}}}}}}}},"/connected_accounts/{connected_account_id}/bank_accounts":{"post":{"operationId":"create-connected-account-bank-account","summary":"Crear cuenta bancaria conectada","description":"Crea una cuenta bancaria externa para una cuenta conectada. Recurrente la\nusa como destino de retiros según la configuración de la cuenta hija.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Cuenta bancaria creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccount"}}}},"400":{"description":"Cuenta bancaria inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccountCreateRequest"}}}}},"get":{"operationId":"list-connected-account-bank-accounts","summary":"Listar cuentas bancarias conectadas","description":"Lista las cuentas bancarias externas activas de una cuenta conectada.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de cuentas bancarias","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BankAccount"}}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/connected_accounts/{connected_account_id}/withdrawals":{"post":{"operationId":"create-connected-account-withdrawal","summary":"Crear un retiro para una cuenta conectada","description":"> **Obsoleto:** usa el endpoint unificado [`POST /transfers`](/api-reference/transfers/crear-una-transferencia) con `X-ACCOUNT-ID` y `destination: {type: bank_account, id: ...}`. Este endpoint sigue funcionando para integraciones existentes.\n\nCrea un retiro (payout) para una cuenta conectada (hija), pagando a una de las cuentas bancarias de la hija. Requiere movimiento de dinero habilitado en la llave de la plataforma.\n\nEn Sandbox esta operación está bloqueada: un balance simulado nunca es retirable.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Clave de idempotencia para reintentos seguros de operaciones críticas, especialmente las que mueven dinero o cambian estado operativo. Reintentar con la misma clave y el mismo cuerpo devuelve la respuesta original (header `Idempotency-Replayed: true`); reusarla con parámetros distintos devuelve 409.\n","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"Retiro creado (asíncrono)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"}}}},"400":{"description":"Retiro inválido; por ejemplo, la cuenta bancaria destino tiene un formato inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"La creación de retiros no está disponible en Sandbox","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"bank_account_id":{"type":"string"},"amount_in_cents":{"type":"integer"},"currency":{"$ref":"#/components/schemas/ConnectedAccountsConnectedAccountIdWithdrawalsPostRequestBodyContentApplicationJsonSchemaCurrency"},"is_instant":{"type":"boolean"}},"required":["bank_account_id","amount_in_cents"]}}}}},"get":{"operationId":"list-connected-account-withdrawals","summary":"Listar retiros de una cuenta conectada","description":"> **Obsoleto:** usa el endpoint unificado [`GET /transfers`](/api-reference/transfers/listar-movimientos-de-dinero) con `X-ACCOUNT-ID`. Este endpoint sigue funcionando para integraciones existentes.\n\nLista los retiros de la cuenta conectada del más reciente al más antiguo. Filtra por fecha de creación con `from_time` + `until_time`.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"from_time","in":"query","description":"Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de retiros","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Withdrawal"}}}}}},"deprecated":true}},"/connected_accounts":{"post":{"operationId":"create-connected-account","summary":"Crear una cuenta conectada","description":"Crea una cuenta administrada por tu plataforma, la conecta a tu cuenta y\nmarca el onboarding como completado. Si ya tienes una cuenta conectada\npara el mismo `email`, Recurrente la reutiliza y actualiza sus datos\n(idempotencia por email del administrador).\n\nRecurrente extrae automáticamente el `tax_id` (NIT) y el `tax_name`\n(razón social) del documento `tax_registration_document` (RTU) que envías\nen `verification` — no necesitas enviarlos en el request.\n\nDebes enviar la documentación requerida para el tipo de cuenta en\n`verification`. Si faltan documentos requeridos, Recurrente responde `400`\ny no completa el onboarding de la cuenta.\n\nPuedes enviar `bank_account` para configurar de una vez la cuenta bancaria\nexterna que recibirá retiros. Si tu cuenta tiene pricing especial para\nreferidos, ese pricing se aplica a las cuentas conectadas nuevas.\n\nAl crear o reutilizar la conexión, Recurrente emite el webhook\n`account_connection.create` con los campos `parent_account` y\n`child_account`.\n","tags":["connectedAccounts"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Cuenta conectada creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccount"}}}},"400":{"description":"Cuenta inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email del usuario administrador de la cuenta hija. Sirve como llave\nde idempotencia: si vuelves a llamar este endpoint con el mismo\nemail, Recurrente reutiliza la cuenta conectada existente.\n"},"full_name":{"type":"string","description":"Nombre completo del usuario administrador"},"phone_number":{"type":"string","description":"Número de teléfono del usuario administrador"},"name":{"type":"string","description":"Nombre comercial de la cuenta hija"},"account_type":{"$ref":"#/components/schemas/ConnectedAccountsPostRequestBodyContentMultipartFormDataSchemaAccountType","description":"Tipo de cuenta de negocio"},"withdrawals_schedule":{"$ref":"#/components/schemas/ConnectedAccountsPostRequestBodyContentMultipartFormDataSchemaWithdrawalsSchedule","description":"Frecuencia para retiros de la cuenta hija"},"verification":{"$ref":"#/components/schemas/ConnectedAccountVerificationRequest"},"bank_account":{"$ref":"#/components/schemas/BankAccountCreateRequest"}},"required":["email","full_name","name","account_type","verification"]}}}}},"get":{"operationId":"list-connected-accounts","summary":"Listar cuentas conectadas","description":"Lista las cuentas hijas conectadas a tu cuenta. Usa estas cuentas con\n`X-ACCOUNT-ID` al crear checkouts para cobrar en nombre de ellas.\n","tags":["connectedAccounts"],"parameters":[{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de cuentas conectadas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedAccount"}}}}}}}},"/connected_account_fee_invoices":{"get":{"operationId":"list-connected-account-fee-invoices","summary":"Listar facturas de comisiones asumidas por la plataforma","description":"Lista los DTE diarios emitidos por Recurrente a la plataforma por las\ncomisiones de cobro que pagó para sus cuentas conectadas. La lista no\nincluye líneas; consulta el detalle para reconciliar cada cobro.\n","tags":["connectedAccounts"],"parameters":[{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de facturas de comisiones asumidas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoice"}}}}}}}},"/connected_accounts/{connected_account_id}/commission_invoices":{"get":{"operationId":"list-connected-account-commission-invoices","summary":"Listar facturas de comisiones de una cuenta conectada","description":"Lista los documentos diarios, más recientes primero. La lista no incluye\nlas líneas; consulta el documento individual para reconciliar cada\ntransferencia de origen. El emisor conserva acceso a este historial si\nla cuenta deja de estar conectada.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de facturas de comisiones","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PartnerCommissionInvoice"}}}}},"404":{"description":"Cuenta conectada no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/connected_account_fee_invoices/{id}":{"get":{"operationId":"get-connected-account-fee-invoice","summary":"Obtener factura y líneas de comisiones asumidas","description":"Devuelve el DTE agregado y sus líneas inmutables. Cada línea identifica\nla cuenta conectada, el intento, el pago y los dos componentes del fee.\nEl documento registra dinero debitado al pagar; no crea otro movimiento.\n","tags":["connectedAccounts"],"parameters":[{"name":"id","in":"path","description":"ID de la factura de comisiones asumidas","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Factura con líneas de reconciliación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoice"}}}},"404":{"description":"Factura no encontrada para la plataforma autenticada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/connected_accounts/{connected_account_id}/withdrawals/{id}":{"get":{"operationId":"get-connected-account-withdrawal","summary":"Obtener un retiro de una cuenta conectada","description":"> **Obsoleto:** usa el endpoint unificado [`GET /transfers/{id}`](/api-reference/transfers/obtener-un-movimiento) con `X-ACCOUNT-ID`. Este endpoint sigue funcionando para integraciones existentes.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Retiro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"}}}}},"deprecated":true}},"/connected_accounts/{connected_account_id}/commission_invoices/{id}":{"get":{"operationId":"get-connected-account-commission-invoice","summary":"Obtener una factura de comisiones y su reconciliación","description":"Devuelve el DTE agregado y sus líneas internas inmutables. Cada línea\nreferencia la configuración, transferencia y checkout o factura que\noriginaron la comisión; no representa un nuevo movimiento de dinero. El\nemisor conserva acceso a este historial si la cuenta deja de estar conectada.\n","tags":["connectedAccounts"],"parameters":[{"name":"connected_account_id","in":"path","description":"ID de la cuenta conectada","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"ID de la factura de comisiones","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Factura de comisiones con líneas de reconciliación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerCommissionInvoice"}}}},"404":{"description":"Cuenta conectada o factura no encontrada","content":{"application/json":{"schema":{"description":"Any type"}}}}}}},"/contacts/{id}":{"patch":{"operationId":"update-contact","summary":"Actualizar un contacto","tags":["contacts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Contacto actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"phone_number":{"type":"string"}}}}}}},"delete":{"operationId":"delete-contact","summary":"Eliminar un contacto","tags":["contacts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Contacto eliminado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contacts_deleteContact_Response_200"}}}}}},"get":{"operationId":"get-contact","summary":"Obtener un contacto","tags":["contacts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Contacto","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}}}}},"/contacts":{"post":{"operationId":"create-contact","summary":"Crear un contacto","tags":["contacts"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Contacto creado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"phone_number":{"type":"string"}},"required":["name","phone_number"]}}}}},"get":{"operationId":"list-contacts","summary":"Listar contactos","tags":["contacts"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de contactos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}}}}}}},"/coupons/{id}":{"put":{"operationId":"update-coupon","summary":"Actualizar un cupón","description":"Actualiza un cupón existente.\n","tags":["coupons"],"parameters":[{"name":"id","in":"path","description":"ID del cupón","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cupón actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Coupon"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"coupon":{"$ref":"#/components/schemas/CouponsIdPutRequestBodyContentApplicationJsonSchemaCoupon"}},"required":["coupon"]}}}}},"delete":{"operationId":"delete-coupon","summary":"Archivar un cupón","description":"Archiva (elimina) un cupón.\n","tags":["coupons"],"parameters":[{"name":"id","in":"path","description":"ID del cupón","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cupón archivado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Coupons_deleteCoupon_Response_200"}}}}}},"get":{"operationId":"get-coupon","summary":"Obtener un cupón","description":"Obtén los detalles de un cupón específico.\n","tags":["coupons"],"parameters":[{"name":"id","in":"path","description":"ID del cupón","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles del cupón","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Coupon"}}}}}}},"/coupons":{"post":{"operationId":"create-coupon","summary":"Crear un cupón","description":"Crea un nuevo cupón de descuento. Puedes especificar un descuento fijo (`amount_off_in_cents`) o un porcentaje (`percent_off`), pero no ambos.\n","tags":["coupons"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Cupón creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Coupon"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"coupon":{"$ref":"#/components/schemas/CouponsPostRequestBodyContentApplicationJsonSchemaCoupon"}},"required":["coupon"]}}}}},"get":{"operationId":"list-coupons","summary":"Listar cupones","description":"Lista todos los cupones activos de tu cuenta con paginación.\n","tags":["coupons"],"parameters":[{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de cupones","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Coupon"}}}}}}}},"/crypto_addresses/{id}":{"delete":{"operationId":"archive-crypto-address","summary":"Archivar una dirección cripto","tags":["cryptoAddresses"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dirección archivada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CryptoAddress"}}}}}},"get":{"operationId":"get-crypto-address","summary":"Obtener una dirección cripto","tags":["cryptoAddresses"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dirección cripto","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CryptoAddress"}}}}}}},"/crypto_addresses":{"get":{"operationId":"list-crypto-addresses","summary":"Listar direcciones cripto","tags":["cryptoAddresses"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de direcciones cripto","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CryptoAddress"}}}}}}},"post":{"operationId":"create-crypto-address","summary":"Registrar una dirección cripto","description":"Registra una dirección de destino para envíos de stablecoin. Requiere completar la verificación de stablecoin en la app.","tags":["cryptoAddresses"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Dirección creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CryptoAddress"}}}},"403":{"description":"Verificación de stablecoin pendiente (stablecoin_verification_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"chain":{"$ref":"#/components/schemas/CryptoAddressesPostRequestBodyContentApplicationJsonSchemaChain"},"nickname":{"type":"string"}},"required":["address","chain"]}}}}}},"/currency_conversions/{id}/confirm":{"post":{"operationId":"confirm-currency-conversion","summary":"Confirmar una conversión","description":"Ejecuta la conversión dentro de la ventana de 1 hora. Mueve el balance.","tags":["currencyConversions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Conversión confirmada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrencyConversion"}}}},"422":{"description":"La cotización expiró, ya fue confirmada, o no hay fondos suficientes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/currency_conversions":{"post":{"operationId":"create-currency-conversion","summary":"Crear una cotización de conversión","description":"Crea una cotización con tipo de cambio fijo (estado `awaiting_confirmation`, válida 1 hora) para convertir balance entre GTQ y USD. Envía **uno solo de los dos montos**: `source_amount_in_cents` si sabes cuánto quieres convertir, o `destination_amount_in_cents` si sabes cuánto quieres recibir — la dirección se infiere del monto que envíes. Confírmala con `POST /currency_conversions/{id}/confirm`. Requiere movimiento de dinero habilitado.\n","tags":["currencyConversions"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Clave de idempotencia para reintentos seguros de operaciones críticas, especialmente las que mueven dinero o cambian estado operativo. Reintentar con la misma clave y el mismo cuerpo devuelve la respuesta original (header `Idempotency-Replayed: true`); reusarla con parámetros distintos devuelve 409.\n","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"Cotización creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrencyConversion"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"source_currency":{"$ref":"#/components/schemas/CurrencyConversionsPostRequestBodyContentApplicationJsonSchemaSourceCurrency"},"destination_currency":{"$ref":"#/components/schemas/CurrencyConversionsPostRequestBodyContentApplicationJsonSchemaDestinationCurrency"},"source_amount_in_cents":{"type":"integer","description":"Envía este monto si sabes cuánto quieres convertir del balance de origen (exact-in)"},"destination_amount_in_cents":{"type":"integer","description":"O envía solo este monto si sabes cuánto quieres recibir en la moneda destino (exact-out)"}},"required":["source_currency","destination_currency"]}}}}}},"/currency_conversions/{id}":{"get":{"operationId":"get-currency-conversion","summary":"Obtener una conversión","tags":["currencyConversions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Conversión","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrencyConversion"}}}}}}},"/customers/{id}":{"put":{"operationId":"update-customer","summary":"Actualizar un cliente","description":"Actualiza los datos de un cliente. La metadata se fusiona con la existente (deep merge). Para eliminar una key de metadata, envíala con valor `null`.\n","tags":["customers"],"parameters":[{"name":"id","in":"path","description":"ID del cliente","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"query","description":"(Alternativa) Buscar por ID de usuario en lugar del ID de cliente","required":false,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cliente actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Nuevo nombre del cliente"},"phone":{"type":"string","description":"Número de teléfono"},"address":{"type":"string","description":"Dirección"},"nit":{"type":"string","description":"Número de identificación tributaria"},"metadata":{"type":"object","additionalProperties":{"description":"Any type"},"description":"Metadata a fusionar. Envía una key con valor `null` para eliminarla."}}}}}}},"get":{"operationId":"get-customer","summary":"Obtener un cliente","description":"Obtén los detalles de un cliente. Puedes buscar por `id` del cliente (formato `cus_xxx`) o por `user_id` (formato `usr_xxx`) usando el query parameter.\n","tags":["customers"],"parameters":[{"name":"id","in":"path","description":"ID del cliente (formato `cus_xxx`)","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"query","description":"(Alternativa) Buscar por ID de usuario en lugar del ID de cliente","required":false,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles del cliente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}}}}}},"/customers":{"post":{"operationId":"create-customer","summary":"Crear un cliente","description":"Crea un nuevo cliente. Si ya existe un usuario con el email proporcionado, el cliente se asocia a ese usuario. Si el email es nuevo, se crean tanto el usuario como el cliente.\n","tags":["customers"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cliente creado o encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email del cliente (se usa para buscar o crear el usuario)"},"full_name":{"type":"string","description":"Nombre completo"},"name":{"type":"string","description":"Nombre para mostrar"},"phone":{"type":"string","description":"(Opcional) Número de teléfono"},"address":{"type":"string","description":"(Opcional) Dirección"},"nit":{"type":"string","description":"(Opcional) Número de identificación tributaria"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"(Opcional) Metadata personalizada"},"test_clock_id":{"type":"string","description":"ID de un Test Clock del mismo Sandbox. No está disponible en LIVE."}},"required":["email"]}}}}},"get":{"operationId":"list-customers","summary":"Listar clientes","description":"Lista todos los clientes de tu cuenta con paginación, ordenados del más reciente al más antiguo.\n","tags":["customers"],"parameters":[{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de clientes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customers_listCustomers_Response_200"}}}}}}},"/intents/{intent_id}/tax_invoice":{"put":{"operationId":"update-intent-tax-invoice","summary":"Corregir y reemitir el DTE de un intent","description":"Actualiza el NIT y nombre fiscal, anula el DTE vigente y emite uno nuevo.\nUsa el ID unificado `in_…` que devuelve `POST /cash_sales` y\n`GET /intents/{id}`. Funciona también para cash sales.\n\nSi el proveedor no puede anular el DTE vigente, la operación responde\n`422` con `code: void_failed` y conserva el documento y los datos\nfiscales anteriores. Si la anulación termina pero la nueva emisión falla,\nresponde `422` con `code: issue_failed`; `tax_invoice_url` queda en `null`\nhasta que repitas la operación y la emisión concluya.\n\nUsa un `Idempotency-Key` único por corrección. Repetir la misma llave y\ncuerpo reproduce la respuesta anterior sin anular ni reemitir otra vez.\n\nEsta corrección no genera un webhook adicional. Consulta\n`GET /intents/{id}` para obtener el `tax_invoice_url` vigente. En una\ncuenta conectada, envía también `X-ACCOUNT-ID`.\n","tags":["intents"],"parameters":[{"name":"intent_id","in":"path","description":"ID unificado del intent","required":true,"schema":{"type":"string","pattern":"^in_"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"DTE corregido y reemitido; devuelve el intent actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Intent"}}}},"400":{"description":"Falta el objeto `tax_invoice`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Intent no encontrado en el contexto de la cuenta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"No fue posible anular o reemitir el DTE","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tax_invoice":{"$ref":"#/components/schemas/IntentsIntentIdTaxInvoicePutRequestBodyContentApplicationJsonSchemaTaxInvoice"}},"required":["tax_invoice"]}}}}}},"/intents":{"get":{"operationId":"list-intents","summary":"Listar intents (formato unificado)","description":"Devuelve los intents de la cuenta en formato normalizado, del más reciente al más antiguo. El payload usa el mismo formato que `GET /intents/{id}` y que los webhooks unificados `intent.*`. Para intents de tipo `payment`, la razón de fallo se devuelve en `details.failure_reason`.\n","tags":["intents"],"parameters":[{"name":"from_time","in":"query","description":"Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de intents en formato normalizado","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Intent"}}}}}}}},"/intents/{id}":{"get":{"operationId":"get-intent","summary":"Obtener un intent (formato unificado)","description":"Recurso `Intent` unificado: devuelve el formato normalizado para cualquier tipo de pago (`payment`, `bank_transfer`, `crypto`, `balance`, `cash`), discriminado por el campo `type`.\n","tags":["intents"],"parameters":[{"name":"id","in":"path","description":"ID del intent","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Intent en formato normalizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Intent"}}}},"404":{"description":"Intent no encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/one_time_payments":{"post":{"operationId":"create-one-time-payment","summary":"Cobrar un método de pago guardado","description":"Cobra directamente un método de pago guardado (token), sin necesidad de crear un checkout. El `payment_method_id` se obtiene del payload de un webhook o de un GET a un checkout pagado.\n\nTambién puedes asociar el cobro a una suscripción enviando `subscription_id` (con `amount_in_cents` + `description`). Con `mode: now` se cobra de inmediato el método de pago de la suscripción; con `mode: next_cycle` se agrega un cobro pendiente que se cobra en el próximo cargo exitoso (admite créditos / montos negativos). La respuesta incluye un campo `object` (`one_time_payment` o `invoice_item`).\n\nSi operas una plataforma, envía `X-ACCOUNT-ID` para cobrar bajo una cuenta conectada (modelo directo): el pago, los productos y la factura quedan bajo esa cuenta, y el método de pago o la suscripción deben pertenecerle. El `payment_method_id` de una cuenta conectada se obtiene del payload de sus webhooks (llegan al padre con `connected: true` y `account_id`).\n","tags":["oneTimePayments"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Pago cobrado (cobro directo o `mode: now`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/One-Time Payments_createOneTimePayment_Response_200"}}}},"400":{"description":"Error en el pago","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"One-time payments are disabled for this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Parámetros inválidos o método de pago inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/One-Time Payments_createOneTimePayment_Request"}}}}}},"/organization/accounts":{"get":{"operationId":"list-organization-accounts","summary":"Listar las cuentas de la organización","description":"Las cuentas que alcanza una llave de organización, para convertir el `account_id` de cada movimiento en la sucursal que le corresponde. Requiere una llave de organización.\n","tags":["organization"],"parameters":[{"name":"page","in":"query","description":"Página a devolver. La respuesta trae los encabezados `link`, `current-page`, `total-pages` y `total-count`.","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página.","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cuentas de la organización","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedAccount"}}}}},"403":{"description":"La llave no pertenece a una organización","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/payment_intents/{id}":{"put":{"operationId":"update-payment-intent","summary":"Actualizar un payment intent","description":"Adjunta una URL de factura fiscal a un payment intent exitoso. Solo los intents con status `succeeded` pueden ser actualizados.\n","tags":["paymentIntents"],"parameters":[{"name":"id","in":"path","description":"ID del payment intent","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Payment intent actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentIntent"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"payment_intent":{"$ref":"#/components/schemas/PaymentIntentsIdPutRequestBodyContentApplicationJsonSchemaPaymentIntent"}},"required":["payment_intent"]}}}}}},"/products/{id}":{"put":{"operationId":"update-product","summary":"Actualizar un producto","description":"Actualiza un producto existente. Para actualizar el precio, incluye el `id` del precio dentro de `prices_attributes`.\n\nSi el precio tiene suscripciones (activas, pausadas o con pago pendiente), no se modifica en su lugar:\nse archiva y se crea un precio de reemplazo con un `id` nuevo, que viene en la respuesta — guárdalo si\nalmacenas IDs de precios. Las suscripciones existentes conservan el precio archivado (mismo monto y plan).\nCrear un checkout con el `id` de un precio archivado usa automáticamente su reemplazo vigente.\nEnviar una actualización con el `id` de un precio archivado responde `400` indicando el precio vigente.\n","tags":["products"],"parameters":[{"name":"id","in":"path","description":"ID del producto","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Producto actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"product":{"$ref":"#/components/schemas/ProductsIdPutRequestBodyContentApplicationJsonSchemaProduct"}},"required":["product"]}}}}},"delete":{"operationId":"delete-product","summary":"Archivar un producto","description":"Archiva (elimina) un producto. No se puede eliminar si tiene suscripciones activas.\n","tags":["products"],"parameters":[{"name":"id","in":"path","description":"ID del producto","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Producto archivado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Products_deleteProduct_Response_200"}}}}}},"get":{"operationId":"get-product","summary":"Obtener un producto","description":"Obtén los detalles de un producto específico.\n","tags":["products"],"parameters":[{"name":"id","in":"path","description":"ID del producto","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles del producto","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}}}}},"/products":{"post":{"operationId":"create-product","summary":"Crear un producto","description":"Crea un nuevo producto. Puede ser de pago único o de suscripción. Cada producto puede tener máximo 1 precio.\n","tags":["products"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Producto creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"product":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProduct"}},"required":["product"]}}}}},"get":{"operationId":"list-products","summary":"Listar productos","description":"Lista todos los productos activos de tu cuenta con paginación.\n","tags":["products"],"parameters":[{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de productos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}}}}}}},"/refunds/{id}/void":{"post":{"operationId":"void-refund","summary":"Anular un reembolso","description":"Anula un reembolso con el proveedor antes del cierre del mismo día. Solo aplica a reembolsos reales; no aplica a anulaciones del pago original.\n","tags":["refunds"],"parameters":[{"name":"id","in":"path","description":"ID del reembolso","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Reembolso anulado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refund"}}}},"422":{"description":"No se pudo anular el reembolso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/refunds":{"post":{"operationId":"create-refund","summary":"Crear un reembolso","description":"Reembolsa un intent. Usa `intent_id` con el ID unificado `in_…` para\ncualquier tipo compatible. `payment_intent_id` sigue aceptándose como\nalias legado para integraciones existentes.\n\nPara pagos electrónicos, devuelve los fondos al método de pago original\ndel cliente. Para una venta en efectivo (`cash`), no mueve dinero: marca\nel intent como cancelado y anula su DTE, igual que la operación del panel.\nEnvía `amount_in_cents` para solicitar un reembolso parcial en CyberSource\no Visa CyberSource. Si omites el monto, se reembolsa todo el saldo\npendiente. Puedes enviar varios reembolsos parciales hasta cubrir el total.\nOtros proveedores solo admiten el saldo pendiente completo.\n\nPara reembolsar un cobro de una cuenta conectada, envía su ID en el\nheader `X-ACCOUNT-ID`; la API key debe permitir movimientos de dinero.\nEnvía `refund_application_fee: true` para regresar a la cuenta dueña del\ncobro todas sus comisiones de plataforma antes de solicitar el reembolso\nal procesador. El valor predeterminado es `false` y las distribuciones\ncon `purpose: fund_split` nunca se revierten por este parámetro.\n\nRecurrente reserva los movimientos y el balance del comercio sin\nmantener bloqueos durante la llamada externa. Si el procesador rechaza\nel reembolso, crea movimientos compensatorios. Una factura fiscal de\ncomisión se puede anular cuando todas sus líneas pertenecen a este\nreembolso; un documento que agrupa otros pagos hace fallar la solicitud\nantes de contactar al procesador. Si otra solicitud ya está procesando\nel mismo reembolso, responde `202` y no vuelve a llamar al proveedor.\nSi el resultado del proveedor queda indeterminado, el reembolso permanece\n`pending` con `failure_reason: provider_outcome_unknown`; Recurrente conserva\nla reserva, no reintenta automáticamente y un POST posterior responde `422`\ncon el `refund_id` para consultar y reconciliar el caso.\n\nUsa un `Idempotency-Key` único por reembolso. Cuando una solicitud parcial\nresponde `202`, las repeticiones con la misma llave y cuerpo reproducen\nesa respuesta con el mismo `refund_id`; consulta ese ID antes de enviar\notro monto.\n","tags":["refunds"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Reembolso procesado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refund"}}}},"422":{"description":"No se pudo procesar el reembolso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refunds_createRefund_Request"}}}}}},"/refunds/{id}":{"get":{"operationId":"get-refund","summary":"Obtener un reembolso","description":"Obtén los detalles de un reembolso específico.\n","tags":["refunds"],"parameters":[{"name":"id","in":"path","description":"ID del reembolso","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles del reembolso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Refund"}}}}}}},"/report_runs/{id}":{"get":{"operationId":"get-report-run","summary":"Consultar un reporte","description":"Consulta el estado de un reporte. Cuando `status` es `succeeded`, `result.download_url` sirve el archivo.","tags":["reportRuns"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Estado del reporte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRun"}}}},"404":{"description":"El reporte no existe o pertenece a otra cuenta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/report_runs/{report_run_id}/download":{"get":{"operationId":"download-report-run","summary":"Descargar el archivo de un reporte","description":"Devuelve el archivo generado. Mientras el reporte no haya terminado responde `409` en vez de un archivo vacío.","tags":["reportRuns"],"parameters":[{"name":"report_run_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"El archivo del reporte","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"409":{"description":"El reporte todavía no está listo","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/report_runs":{"post":{"operationId":"create-report-run","summary":"Generar un reporte","description":"Pide un reporte y recógelo cuando esté listo: la respuesta nace en `pending`, y cuando `status` llega a `succeeded` aparece `result.download_url`. Si falla, `status` queda en `failed` y `error` explica por qué, para que dejes de esperarlo.\n\nEl archivo es el mismo estado de cuenta que se descarga desde el Dashboard, así que cuadra con lo que ya concilia tu contador. Con una llave de organización y sin `X-ACCOUNT-ID`, un solo reporte cubre todas las cuentas y gana una columna `Cuenta`; nombrando una cuenta, cubre solo esa.\n","tags":["reportRuns"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Reporte encolado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRun"}}}},"422":{"description":"Parámetros incompletos o tipo de reporte desconocido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"report_type":{"$ref":"#/components/schemas/ReportRunsPostRequestBodyContentApplicationJsonSchemaReportType","description":"Tipo de reporte. Va versionado para que las columnas puedan cambiar sin romper integraciones."},"parameters":{"$ref":"#/components/schemas/ReportRunsPostRequestBodyContentApplicationJsonSchemaParameters"}},"required":["report_type","parameters"]}}}}}},"/service_tabs":{"post":{"operationId":"create-service-tab","summary":"Abrir una cuenta","description":"Abre una cuenta para un cliente. Identifica al cliente con `customer_id`,\no con `phone` y `display_name` para crearlo si no existe.\n\nEl compromiso de apertura se infiere de lo que envíes: `items` abre la\ncuenta ya con esos consumos, `estimated_amount` la abre con un monto\nestimado sin items, y si no envías ninguno la cuenta queda vacía y le\nagregas items después.\n\nLa estrategia de cobro es siempre `card_on_file`: al cerrar se cobra la\ntarjeta guardada del cliente (o le entregas un link de pago). La\npreautorización con hold solo se puede activar desde el dashboard,\nporque requiere una autorización real del procesador.\n\nUsa un `Idempotency-Key` único por cuenta abierta.\n","tags":["serviceTabs"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Cuenta abierta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceTab"}}}},"422":{"description":"Un item no nombra nada cobrable, o no es válido para una cuenta abierta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"customer_id":{"type":"string","description":"ID del cliente. Si lo omites, se resuelve o crea con `phone` y `display_name`."},"display_name":{"type":"string","description":"Nombre con el que identificas la cuenta (mesa, cliente, cuarto)"},"phone":{"type":"string","description":"Teléfono del cliente"},"currency":{"type":"string","description":"Moneda de la cuenta. Por defecto, la moneda principal de tu cuenta."},"estimated_amount":{"type":"string","description":"Monto estimado de consumo, en unidades de la moneda (no centavos)"},"payment_method_id":{"type":"string","description":"Método de pago guardado del cliente que se cobrará al cerrar"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ServiceTabsPostRequestBodyContentApplicationJsonSchemaItemsItems"},"description":"Consumos con los que abre la cuenta"}}}}}}},"get":{"operationId":"list-service-tabs","summary":"Listar cuentas abiertas","description":"Lista las cuentas abiertas de tu cuenta, de la más reciente a la más\nantigua. Filtra por estado con `status` para, por ejemplo, ver solo las\nque siguen abiertas.\n","tags":["serviceTabs"],"parameters":[{"name":"status","in":"query","description":"Devuelve solo las cuentas en este estado","required":false,"schema":{"$ref":"#/components/schemas/ServiceTabsGetParametersStatus"}},{"name":"from_time","in":"query","description":"Inicio del rango de fechas (se usa junto con `until_time`)","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de fechas (se usa junto con `from_time`)","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","default":25}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de cuentas abiertas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServiceTab"}}}}},"403":{"description":"La cuenta no tiene cuentas abiertas habilitadas","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/service_tabs/{service_tab_id}/items":{"post":{"operationId":"add-service-tab-items","summary":"Agregar items a una cuenta abierta","description":"Agrega uno o más consumos a la cuenta. Cada item queda registrado por\nseparado en el feed de actividad, igual que la cuenta que ve el cliente.\nLa respuesta trae la cuenta completa con su nuevo total.\n\nUn item nombra algo que ya vendes (`price_id` o `product_id`) o se define\nsolo, con `name` y `amount_in_cents`. Son las mismas tres formas que\naceptan los items de un checkout. Los precios recurrentes no se aceptan:\nuna cuenta abierta solo cobra productos de pago único.\n","tags":["serviceTabs"],"parameters":[{"name":"service_tab_id","in":"path","description":"ID de la cuenta abierta","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Items agregados","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceTab"}}}},"422":{"description":"No se enviaron items, no son válidos para una cuenta abierta, o la cuenta ya está cerrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ServiceTabsServiceTabIdItemsPostRequestBodyContentApplicationJsonSchemaItemsItems"}}},"required":["items"]}}}}}},"/service_tabs/{service_tab_id}/items/{id}":{"delete":{"operationId":"delete-service-tab-item","summary":"Anular un item","description":"Anula un item de la cuenta. El item deja de contar para el total y queda\nregistrado como anulado en el feed de actividad.\n","tags":["serviceTabs"],"parameters":[{"name":"service_tab_id","in":"path","description":"ID de la cuenta abierta","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"ID del item","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Item anulado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceTab"}}}},"422":{"description":"La cuenta ya está cerrada y sus items no se pueden cambiar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"update-service-tab-item","summary":"Cambiar la cantidad de un item","description":"Cambia la cantidad de un item vigente de la cuenta.\n","tags":["serviceTabs"],"parameters":[{"name":"service_tab_id","in":"path","description":"ID de la cuenta abierta","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"ID del item","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Item actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceTab"}}}},"422":{"description":"La cuenta ya está cerrada y sus items no se pueden cambiar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"quantity":{"type":"integer","minimum":1}},"required":["quantity"]}}}}}},"/service_tabs/{service_tab_id}/closure":{"post":{"operationId":"close-service-tab","summary":"Cerrar y cobrar una cuenta","description":"Cierra la cuenta: deja de aceptar items y se cobra el total.\n\nCon `channel: payment_link` (el valor por defecto) la respuesta trae un\n`checkout_url` que el cliente puede pagar con cualquier método que tengas\nhabilitado. Con `channel: saved_card` se cobra de inmediato la tarjeta\nguardada; si el banco pide autenticación, la cuenta queda en `closing` y\nel `checkout_url` es donde el cliente la completa.\n\nPagar ese checkout marca la cuenta como `paid`, sin importar el canal.\n\nUsa un `Idempotency-Key` único por cierre. Si la respuesta es `422`, la\nllave queda reservada — el cobro pudo haber llegado al procesador antes\ndel error — así que un reintento con la misma llave responde `409`. Usa\nuna llave nueva para volver a intentar.\n","tags":["serviceTabs"],"parameters":[{"name":"service_tab_id","in":"path","description":"ID de la cuenta abierta","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Cuenta cerrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceTab"}}}},"422":{"description":"No se pudo cerrar o cobrar la cuenta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"$ref":"#/components/schemas/ServiceTabsServiceTabIdClosurePostRequestBodyContentApplicationJsonSchemaChannel","default":"payment_link","description":"Cómo se cobra la cuenta"},"payment_method_id":{"type":"string","description":"Método de pago guardado a cobrar con `channel: saved_card`. Por defecto, el de la cuenta abierta."}}}}}}}},"/service_tabs/{id}":{"get":{"operationId":"get-service-tab","summary":"Obtener una cuenta abierta","description":"Obtén una cuenta abierta con sus items vigentes y su total actual.\n","tags":["serviceTabs"],"parameters":[{"name":"id","in":"path","description":"ID de la cuenta abierta","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles de la cuenta abierta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceTab"}}}}}}},"/subscriptions/{id}":{"put":{"operationId":"update-subscription","summary":"Actualizar una suscripción","description":"Actualiza una suscripción. Puedes:\n- **Cambiar el método de pago**: Envía `payment_method_id` con el ID de un método de pago activo del suscriptor. Si la suscripción tiene un pago pendiente, se intentará cobrar automáticamente con el nuevo método de pago.\n- **Pausar**: Envía `act: \"pause\"`. Opcionalmente, incluye `resumes_on` para reactivación automática.\n- **Reactivar**: Envía `act: \"unpause\"`.\n- **Agregar o eliminar productos**: Envía un arreglo `items` con los cambios. Cada item identifica un precio con `price_id` o un producto con `product_id` (usa el primer precio del producto), y opcionalmente `quantity` (default `1`) o `deleted: true` para removerlo. Usa `mode` para decidir cuándo aplican: `\"next_cycle\"` (al siguiente cobro, default), `\"now\"` (inmediato; el prorrateo se suma al próximo cobro) o `\"now_and_charge\"` (inmediato y cobra el prorrateo al instante). Para previsualizar el prorrateo antes de aplicar, usa [`POST /subscriptions/{id}/proration_preview`](#tag/Subscriptions/operation/previewSubscriptionProration).\n\nPara un **cobro único o crédito** (una multa, un cargo puntual o un crédito de cortesía) tienes dos opciones: envía `add_invoice_items` en este mismo endpoint (se agregan como pendientes al próximo cobro, ideal para combinarlos con un cambio de productos en una sola llamada), o usa [`POST /one_time_payments`](#tag/One-Time-Payments/operation/createOneTimePayment) con `subscription_id` (que además permite cobrar de inmediato con `mode: now`). Un monto negativo es un crédito. Consulta o cancela los pendientes con `GET` y `DELETE /subscriptions/{subscription_id}/invoice_items`.\n","tags":["subscriptions"],"parameters":[{"name":"id","in":"path","description":"ID de la suscripción","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Suscripción actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscriptions_updateSubscription_Response_200"}}}},"400":{"description":"Acción inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Método de pago no encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"No se puede realizar la acción. Con `mode: now_and_charge` también ocurre cuando el cambio no genera un cobro inmediato (crédito o monto menor al mínimo — usa `now`), cuando la suscripción no tiene método de pago, o cuando el cobro del prorrateo es rechazado (en cuyo caso no se aplica ningún cambio).\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscriptions_updateSubscription_Request"}}}}},"delete":{"operationId":"cancel-subscription","summary":"Cancelar una suscripción","description":"Cancela una suscripción de forma permanente. La suscripción dejará de cobrar al cliente.\n","tags":["subscriptions"],"parameters":[{"name":"id","in":"path","description":"ID de la suscripción","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Suscripción cancelada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscriptions_cancelSubscription_Response_200"}}}}}},"get":{"operationId":"get-subscription","summary":"Obtener una suscripción","description":"Obtén los detalles de una suscripción específica.\n","tags":["subscriptions"],"parameters":[{"name":"id","in":"path","description":"ID de la suscripción","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Detalles de la suscripción","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscription"}}}}}}},"/subscriptions/{subscription_id}/invoice_items/{id}":{"delete":{"operationId":"cancel-subscription-invoice-item","summary":"Cancelar un cobro único pendiente","description":"Cancela un cobro único que sigue pendiente (aún no se ha aplicado a una factura). No se puede cancelar uno ya aplicado.\n","tags":["subscriptions"],"parameters":[{"name":"subscription_id","in":"path","description":"ID de la suscripción","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"ID del cobro único (ej. `ii_ab12cd34`)","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cobro único cancelado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceItem"}}}},"422":{"description":"El cobro ya no está pendiente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionInvoiceItemRequestUnprocessableEntityError"}}}}}}},"/subscriptions/{subscription_id}/invoice_items":{"get":{"operationId":"list-subscription-invoice-items","summary":"Listar cobros únicos de una suscripción","description":"Lista los cobros únicos (cargos o créditos) de una suscripción, del más antiguo al más reciente.\n","tags":["subscriptions"],"parameters":[{"name":"subscription_id","in":"path","description":"ID de la suscripción","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de cobros únicos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceItem"}}}}}}}},"/subscriptions":{"get":{"operationId":"list-subscriptions","summary":"Listar suscripciones","description":"Lista todas las suscripciones de tu cuenta con paginación, ordenadas de la más reciente a la más antigua.\n","tags":["subscriptions"],"parameters":[{"name":"page","in":"query","description":"Número de página (empezando en 1)","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"items","in":"query","description":"Elementos por página","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de suscripciones","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Subscription"}}}}}}}},"/subscriptions/{id}/proration_preview":{"post":{"operationId":"preview-subscription-proration","summary":"Previsualizar el prorrateo de cambios","description":"Calcula el prorrateo neto de un conjunto de cambios de productos **sin aplicarlos** (equivalente al preview de facturas de Stripe). Envía los mismos `items` y `mode` que enviarías a `PUT /subscriptions/{id}`. Útil para mostrar el monto antes de cobrar con `mode: now_and_charge`.\n\n`chargeable` indica si el neto puede cobrarse de inmediato (positivo y mayor al mínimo de la moneda). Si es `false`, usa `mode: now` (se reflejará en el próximo cobro).\n","tags":["subscriptions"],"parameters":[{"name":"id","in":"path","description":"ID de la suscripción","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Estimación del prorrateo","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Subscriptions_previewSubscriptionProration_Response_200"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/SubscriptionsIdProrationPreviewPostRequestBodyContentApplicationJsonSchemaMode","description":"Mismo significado que en `PUT /subscriptions/{id}`. `next_cycle` no genera prorrateo."},"items":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionsIdProrationPreviewPostRequestBodyContentApplicationJsonSchemaItemsItems"},"description":"Lista de cambios a previsualizar (mismo formato que en la actualización)."}}}}}}}},"/swaps":{"post":{"operationId":"create-swap","summary":"Enviar stablecoin","description":"Convierte tu balance (GTQ/USD/USDC) y envía stablecoin on-chain a una dirección cripto. Envía **uno solo de los dos montos**: `source_amount_as_decimal` si sabes cuánto balance quieres convertir, o `destination_amount_as_decimal` si sabes cuánto debe llegar — la dirección se infiere del monto que envíes. Requiere la verificación de stablecoin completada y una llave con movimiento de dinero habilitado. Es **asíncrono** (puede quedar en `in_review`/`processing`). Pasa `quote=true` para previsualizar el tipo de cambio y los montos sin mover dinero. Una plataforma puede listar y consultar swaps de una hija con `X-ACCOUNT-ID`, pero no crear swaps por ella; las cuentas conectadas conservan la restricción de destinos cripto. En Sandbox, esta operación y su modo de cotización están bloqueados.\n","tags":["swaps"],"parameters":[{"name":"quote","in":"query","description":"Si es true, devuelve una cotización sin ejecutar el envío.","required":false,"schema":{"type":"boolean"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Clave de idempotencia para reintentos seguros de operaciones críticas, especialmente las que mueven dinero o cambian estado operativo. Reintentar con la misma clave y el mismo cuerpo devuelve la respuesta original (header `Idempotency-Replayed: true`); reusarla con parámetros distintos devuelve 409.\n","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"Swap creado (asíncrono)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Swap"}}}},"403":{"description":"Verificación de stablecoin pendiente (stablecoin_verification_required), o la llave no tiene movimiento de dinero habilitado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Los swaps no están disponibles en Sandbox (sandbox_unsupported) ni al operar una cuenta conectada (destination_not_supported)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"source_currency":{"type":"string","description":"Moneda de tu balance a debitar (GTQ, USD, USDC)"},"destination_currency":{"$ref":"#/components/schemas/SwapsPostRequestBodyContentApplicationJsonSchemaDestinationCurrency"},"chain":{"$ref":"#/components/schemas/SwapsPostRequestBodyContentApplicationJsonSchemaChain"},"source_amount_as_decimal":{"type":"string","description":"Envía este monto si sabes cuánto balance quieres convertir (exact-in), p.ej. \"100.00\""},"destination_amount_as_decimal":{"type":"string","description":"O envía solo este monto si sabes cuánto debe llegar al destino (exact-out)"},"blockchain_memo":{"type":"string","description":"Requerido para la red stellar"},"crypto_address_id":{"type":"string","description":"ID público de una dirección cripto guardada (de /crypto_addresses)"},"recipient_address":{"type":"string","description":"O una dirección on-chain nueva (alternativa a crypto_address_id)"}},"required":["source_currency","destination_currency","chain"]}}}}},"get":{"operationId":"list-swaps","summary":"Listar envíos de stablecoin","description":"Lista los envíos de stablecoin del más reciente al más antiguo. Filtra por fecha de creación con `from_time` + `until_time`.\n","tags":["swaps"],"parameters":[{"name":"from_time","in":"query","description":"Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de swaps","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Swap"}}}}}}}},"/swaps/{id}":{"get":{"operationId":"get-swap","summary":"Obtener un swap","tags":["swaps"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Swap","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Swap"}}}}}}},"/terminal_batch_closes":{"post":{"operationId":"close-terminal-batch","summary":"Cerrar lote de terminal","description":"Cierra el lote abierto actual de una terminal POS. Recurrente marca el lote como `closed`, calcula sus totales y deja la terminal lista para abrir un nuevo lote automáticamente con el próximo pago.\n\nEste endpoint es útil para integraciones que controlan el POS desde un sistema externo y necesitan cerrar lote sin operar la pantalla de la terminal.\n\nEnvía `Idempotency-Key` para reintentos seguros: si tu sistema pierde la respuesta después de cerrar el lote, repetir el mismo request con la misma clave devuelve la respuesta original en vez de intentar cerrar otro lote.\n","tags":["terminalBatchCloses"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Clave de idempotencia para reintentos seguros de operaciones críticas, especialmente las que mueven dinero o cambian estado operativo. Reintentar con la misma clave y el mismo cuerpo devuelve la respuesta original (header `Idempotency-Replayed: true`); reusarla con parámetros distintos devuelve 409.\n","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lote cerrado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminalBatch"}}}},"404":{"description":"Terminal no encontrada o no asociada a tu cuenta","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"La terminal no tiene un lote abierto para cerrar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"terminal_id":{"type":"string","description":"ID de la terminal POS cuyo lote abierto quieres cerrar"}},"required":["terminal_id"]}}}}}},"/terminal_session_commands/{random_id}":{"delete":{"operationId":"cancel-terminal-session-command","summary":"Cancelar un comando de terminal","description":"Solicita la cancelación de forma idempotente. Un comando `pending` pasa directamente a `canceled` y responde `200`. Si la terminal ya lo tomó, responde `202` con `cancel_requested`; la terminal detiene la lectura y confirma `canceled` cuando el dispositivo reporta la cancelación.\n\nDurante una autorización no se confirma la cancelación: el comando permanece en `cancel_requested` hasta resolver como `canceled`, `consumed` o `failed`. Consulta el comando hasta que `final` sea `true`. Esta separación evita declarar cancelado un pago que ya pudo llegar al procesador.\n","tags":["terminalSessionCommands"],"parameters":[{"name":"random_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cancelación confirmada o ya confirmada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminalSessionCommand"}}}},"404":{"description":"No existe un comando con ese random_id en la cuenta autenticada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"El comando ya alcanzó un resultado definitivo y no se puede cancelar","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelTerminalSessionCommandRequestConflictError"}}}}}},"get":{"operationId":"get-terminal-session-command","summary":"Consultar un comando de terminal","description":"Retorna el estado actual del comando. `final: true` indica que ya no puede cambiar: el resultado será `canceled`, `superseded`, `consumed` o `failed`.\n\nUsa esta consulta para reconciliar timeouts y evitar crear un segundo cobro mientras el primer comando siga en `pending`, `dispatched` o `cancel_requested`.\n","tags":["terminalSessionCommands"],"parameters":[{"name":"random_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Estado actual del comando","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminalSessionCommand"}}}},"404":{"description":"No existe un comando con ese random_id en la cuenta autenticada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/terminal_session_commands":{"post":{"operationId":"create-terminal-session-command","summary":"Crear un comando de terminal","description":"Envía un comando de cobro a una terminal POS. Recurrente crea un checkout y lo despacha a la terminal indicada. Si ya existe un comando activo con el mismo `external_id`, retorna el comando existente en vez de crear uno nuevo (idempotencia).\n\nCuando la terminal recibe el comando, muestra automáticamente la pantalla de cobro para que el cliente pague con tarjeta.\n\n**Usa una llave LIVE para una terminal física.** Una llave TEST heredada que todavía apunta a la cuenta LIVE se rechaza con `403 terminal_test_key_requires_sandbox`, antes de crear el checkout o mover dinero. Las llaves TEST solo se aceptan cuando la solicitud ya está aislada dentro de un Sandbox; ese flujo no contacta hardware ni procesadores reales.\n\nLa terminal debe estar en **Modo espera** y reportando disponibilidad. Si no lo está, la API responde `409` con `code: terminal_not_in_standby` sin crear un checkout nuevo. Los reintentos con un `external_id` existente conservan la idempotencia y retornan el comando original. Una respuesta exitosa incluye `terminal_availability`.\n\n### Flujo\n\n1. Tu sistema envía `POST /api/terminal_session_commands` con el monto, moneda y terminal.\n2. Recurrente crea un checkout y un comando en estado `pending`.\n3. La terminal levanta el comando y lo pasa a `dispatched`.\n4. El cliente paga en la terminal.\n5. Recibes un webhook `payment_intent.succeeded` con el resultado.\n\nTambién puedes consultar el comando con `GET /api/terminal_session_commands/{random_id}`. Los estados definitivos son `canceled`, `superseded`, `consumed` y `failed`; `pending`, `dispatched` y `cancel_requested` todavía pueden cambiar.\n\n### Idempotencia\n\nSi envías dos requests con el mismo `external_id` dentro de la misma cuenta, el segundo retorna el comando original sin crear uno duplicado. Dos cuentas distintas pueden usar el mismo `external_id`. Esto te permite reintentar de forma segura.\n\n### Superseding\n\nSi envías un nuevo comando a la misma terminal (con un `external_id` diferente), los comandos anteriores pendientes se marcan como `superseded` y la terminal solo procesa el más reciente.\n\n### Meses sin intereses (installments)\n\nSi quieres que el cobro se procese en cuotas, envía `installments` con el número de meses. Solo aplica a cobros en `GTQ` y los valores permitidos son `3`, `6`, `12` o `18` (algunas cuentas tienen configuraciones distintas). Si la tarjeta del cliente no soporta la opción elegida, el cobro se rechaza con `unsupported_installments`.\n\n### Pantallas post-pago\n\nPor defecto, después de un pago exitoso la terminal muestra las pantallas para solicitar NIT, correo y teléfono. Envía `show_post_payment_screens: false` para omitirlas y volver automáticamente a Modo espera. Recurrente emite la factura como C/F cuando corresponde y adelanta el webhook y los correos que normalmente esperan a que el comprador termine esas pantallas.\n\nSi el monto y la configuración de facturación hacen obligatorio un NIT válido, Recurrente conserva las pantallas aunque envíes `false`.\n\n### Cuentas conectadas\n\nPara originar el cobro desde una plataforma y registrarlo en una cuenta hija:\n\n1. Autentica el request con la llave LIVE de la plataforma en `X-SECRET-KEY` y envía el ID `ac_...` de la cuenta hija en `X-ACCOUNT-ID`.\n2. Obtén el `terminal_id` público (`trm_...`) en el panel de la cuenta hija, en **POS → detalle de la terminal**, y guárdalo en tu configuración. Actualmente no existe un endpoint público para listar terminales.\n3. Confirma que el dispositivo inició sesión en esa misma cuenta hija y está en **Modo espera**. Un pinpad emparejado con la plataforma es invisible para la hija (y viceversa).\n4. Envía el comando con `terminal_id`, monto, moneda y un `external_id` único de tu sistema. La respuesta incluye el `id` del comando (`tsc_...`), `checkout_id`, `status` y `terminal_availability`.\n\nEl checkout, el pago y la factura se crean bajo la cuenta hija. La\nplataforma recibe `payment_intent.succeeded` con `connected: true` y el\n`account_id` de la hija; si la hija también tiene un webhook endpoint,\nRecurrente entrega el evento a ambos. Usa `checkout.metadata.external_id`\npara conciliar la orden original, `checkout.metadata.terminal_id` para\nidentificar el dispositivo y `tax_invoice_url` para recuperar la factura\ncuando exista.\n\nCuando algo no calza, el 404 incluye un `code` que identifica cuál de las tres cosas falta:\n\n| `code` | Qué revisar |\n|---|---|\n| `connected_account_not_found` | La cuenta que enviaste no está conectada a la tuya (o es nieta, no hija directa). |\n| `terminal_not_found` | La terminal no está asociada a la cuenta que va a cobrar. |\n| `connected_account_mismatch` | Enviaste `account_id` de una hermana distinta a la del header `X-ACCOUNT-ID`. |\n| `recipient_not_found` | El `recipient_id` de un `transfer_setup` no es tu cuenta ni una hija conectada. |\n","tags":["terminalSessionCommands"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Comando creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminalSessionCommand"}}}},"403":{"description":"La llave TEST no está aislada en un Sandbox","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No encontramos la terminal o la cuenta conectada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"La terminal no está disponible para recibir comandos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"terminal_id":{"type":"string","description":"ID público `trm_...` de la terminal POS donde se enviará el cobro. Cópialo desde **POS → detalle de la terminal** en la cuenta que va a cobrar; actualmente no existe un endpoint público para listar terminales."},"amount_in_cents":{"type":"integer","description":"Monto a cobrar en centavos. Envía `amount_in_cents` o `amount`, no ambos."},"amount":{"type":"number","format":"double","description":"Monto a cobrar en unidades (ej. 50.00). Alternativa a `amount_in_cents`."},"currency":{"$ref":"#/components/schemas/TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaCurrency","description":"Moneda del cobro"},"external_id":{"type":"string","description":"ID único de tu sistema para este cobro dentro de la cuenta autenticada. Se usa para idempotencia — si envías el mismo `external_id` dos veces en esa cuenta, no se crea un duplicado."},"installments":{"$ref":"#/components/schemas/TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaInstallments","description":"Número de meses sin intereses. Solo válido con `currency: GTQ`. Valores permitidos por defecto `[3, 6, 12, 18]` (puede variar por cuenta)."},"show_post_payment_screens":{"type":"boolean","default":true,"description":"Muestra las pantallas post-pago de NIT, correo y teléfono. Envía `false` para omitirlas y volver a Modo espera, salvo cuando un NIT válido sea obligatorio."},"transfer_setups":{"type":"array","items":{"$ref":"#/components/schemas/TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItems"},"description":"(Opcional) Transferencias a ejecutar tras un cobro exitoso. Úsalo para enrutar fondos a una cuenta conectada (modelo destino) o para cobrar una comisión a una subcuenta. El destinatario debe ser tu cuenta o una cuenta conectada."}},"required":["terminal_id","currency","external_id"]}}}}}},"/test_clocks/{id}/advance":{"post":{"operationId":"advance-test-clock","summary":"Adelantar un Test Clock","description":"Inicia un avance asíncrono. El clock pasa a `advancing` y vuelve a `ready`\nal terminar. `next_charge_outcome` aplica una vez y después vuelve a `success`.\n","tags":["testClocks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Avance aceptado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestClock"}}}},"422":{"description":"Avance inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"frozen_at":{"type":"string","format":"date-time"},"next_charge_outcome":{"$ref":"#/components/schemas/TestClocksIdAdvancePostRequestBodyContentApplicationJsonSchemaNextChargeOutcome"}},"required":["frozen_at"]}}}}}},"/test_clocks":{"post":{"operationId":"create-test-clock","summary":"Crear un Test Clock","description":"Crea un reloj aislado que puede asociarse a clientes del mismo Sandbox.","tags":["testClocks"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Clock creado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestClock"}}}},"422":{"description":"Solo disponible en Sandbox o límite alcanzado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"frozen_at":{"type":"string","format":"date-time"},"next_charge_outcome":{"$ref":"#/components/schemas/TestClocksPostRequestBodyContentApplicationJsonSchemaNextChargeOutcome","default":"success"}},"required":["name","frozen_at"]}}}}},"get":{"operationId":"list-test-clocks","summary":"Listar Test Clocks","description":"Lista los clocks activos del Sandbox autenticado.","tags":["testClocks"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de clocks","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TestClock"}}}}}}}},"/test_clocks/{id}":{"delete":{"operationId":"delete-test-clock","summary":"Eliminar un Test Clock","description":"Impide nuevos avances sin borrar sus objetos históricos.","tags":["testClocks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Clock eliminado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestClock"}}}}}},"get":{"operationId":"get-test-clock","summary":"Obtener un Test Clock","tags":["testClocks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Clock","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestClock"}}}}}}},"/test_helpers/webhook_events":{"post":{"operationId":"create-sandbox-webhook-event","summary":"Emitir un fixture de webhook","description":"Persiste una `Activity` de prueba y entrega el evento por la misma aplicación\nSvix del Sandbox autenticado. Acepta cualquier tipo del catálogo público y es\nútil para validar firmas, routing, reintentos e idempotencia del consumer.\n\nLa respuesta contiene el payload base normalizado. Recurrente genera y\nreemplaza los campos reservados `data.id` y `data.created_at`, aunque el\nrequest envíe otros valores. La entrega Svix agrega `data.event_type` y\n`data.sandbox_id` como contexto estándar.\n\nEl fixture no crea el grafo de dominio del evento. Por ejemplo,\n`dispute.create` entrega el contrato del webhook, pero no crea una disputa ni\nmovimientos financieros. Para validar comportamiento end-to-end, ejecuta el\nflujo real y observa sus webhooks naturales.\n\nEste endpoint solo existe para llaves de Sandboxes nombrados. Una llave LIVE\nrecibe `404` para evitar que una suite de pruebas emita fixtures en producción.\n","tags":["testHelpers"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Fixture persistido y encolado para entrega","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxWebhookEvent"}}}},"400":{"description":"Falta `event_type`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"La llave autenticada no pertenece a un Sandbox","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`event_type` no pertenece al catálogo publicado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxWebhookEventRequest"}}}}}},"/transfers/{id}/cancel":{"post":{"operationId":"cancel-transfer","summary":"Cancelar un movimiento","description":"Cancela un movimiento que aún puede cancelarse: una transferencia a teléfono no reclamada (`tr_`), o un retiro pendiente que no ha entrado a un lote de pago (`wi_`). Los envíos de stablecoin (`sw_`) no se pueden cancelar.\n","tags":["transfers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Movimiento cancelado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transfer"}}}},"422":{"description":"El movimiento ya no puede cancelarse (transfer_not_cancellable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/transfers":{"post":{"operationId":"create-transfer","summary":"Crear una transferencia","description":"Mueve dinero desde tu balance al `destination` que indiques. En la mayoría de los casos basta pasar **el identificador como string** — el formato indica a dónde va el dinero:\n\n| `destination` | A dónde va | Registro creado |\n|---|---|---|\n| `\"ba_...\"` | Retiro a tu cuenta bancaria | `wi_` (asíncrono) |\n| `\"ac_...\"` | Transferencia instantánea a esa cuenta de Recurrente | `tr_` |\n| `\"@handle\"` | Transferencia a la cuenta con ese handle | `tr_` |\n| `\"co_...\"` | Transferencia al teléfono de ese contacto guardado | `tr_` |\n| `\"+50255667788\"` | Envío a un teléfono; queda `unclaimed` hasta que lo reclamen con KYC | `tr_` |\n\nPara stablecoin (requiere verificación de stablecoin) o para ser explícito, usa la forma de objeto: `destination: {type: \"crypto_address\", address: \"0x…\", chain: \"base\", currency: \"USDC\"}` crea un envío `sw_`.\n\nRequiere una llave con movimiento de dinero habilitado y la cuenta verificada. Usa `X-ACCOUNT-ID` para operar sobre una cuenta conectada (hija) verificada — admite destinos `bank_account`, y destinos `account` dentro de su misma plataforma (la cuenta madre o cuentas hermanas), para comisiones y liquidaciones.\n\nEn Sandbox, `POST /transfers` está bloqueado para todos los destinos porque el balance simulado no es transferible ni retirable.\n","tags":["transfers"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Clave de idempotencia para reintentos seguros de operaciones críticas, especialmente las que mueven dinero o cambian estado operativo. Reintentar con la misma clave y el mismo cuerpo devuelve la respuesta original (header `Idempotency-Replayed: true`); reusarla con parámetros distintos devuelve 409.\n","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"Movimiento creado. Los retiros (`wi_`) y envíos cripto (`sw_`) son asíncronos — la respuesta trae el estado inicial; consulta el estado o suscríbete a los webhooks.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transfer"}}}},"400":{"description":"Error de validación (fondos insuficientes, destinatario inexistente o cuenta bancaria malformada)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Llave sin movimiento de dinero (money_movement_not_enabled), cuenta no activa (account_not_active), verificación pendiente (verification_required), verificación de stablecoin pendiente (stablecoin_verification_required) o cuenta conectada sin verificar (connected_account_unverified)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"La creación está bloqueada en Sandbox (sandbox_unsupported), o el destino es inválido (invalid_destination), falta moneda (currency_required), falta destinatario (recipient_required), el destino no está soportado para cuentas conectadas (destination_not_supported), o el destinatario es ambiguo (ambiguous_recipient)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto en centavos que se debita del balance en `currency`"},"currency":{"$ref":"#/components/schemas/TransfersPostRequestBodyContentApplicationJsonSchemaCurrency","description":"Moneda del balance de origen. Para destinos `bank_account` es opcional (por defecto, la moneda de la cuenta bancaria); requerida para los demás destinos."},"destination":{"$ref":"#/components/schemas/TransfersPostRequestBodyContentApplicationJsonSchemaDestination","description":"A dónde va el dinero — el identificador como string (`ba_`/`ac_`/`co_` id, `@handle` o teléfono), o el objeto tipado para stablecoin y casos avanzados"},"note":{"type":"string","description":"(Opcional) Nota o descripción del movimiento"},"is_instant":{"type":"boolean","description":"Solo destinos `bank_account` — retiro instantáneo (sujeto a elegibilidad y comisión)"},"should_perform_currency_conversion":{"type":"boolean","description":"Solo destinos `bank_account` — convierte el balance a la moneda de la cuenta bancaria destino"}},"required":["amount_in_cents","destination"]}}}}},"get":{"operationId":"list-transfers","summary":"Listar movimientos de dinero","description":"Lista unificada de todo el dinero que sale de tu balance, del más reciente al más antiguo: retiros bancarios (`wi_`), transferencias p2p (`tr_`) y envíos de stablecoin (`sw_`).\n\nFiltra por tipo de destino con `types[]` y por cualquiera de las tres fechas de un retiro: creación (`from_time` + `until_time`), envío al banco (`sent_from` + `sent_until`) y liquidación bancaria confirmada (`settled_from` + `settled_until`).\n\n`sent_*` y `settled_*` solo aplican a retiros bancarios, así que limitan la lista a `bank_account`; combinarlos con otros `types[]` devuelve `400`. Cada par se envía completo: enviar solo una mitad devuelve `400` en vez de ignorar el rango.\n\nPara conciliar depósitos, usa `settled_*` cuando el retiro tenga liquidación confirmada y `sent_*` en cualquier otro caso: hay rieles de envío que nunca confirman una liquidación y para esos `settled_at` siempre viene vacío.\n","tags":["transfers"],"parameters":[{"name":"types[]","in":"query","description":"Filtra por tipo de destino: bank_account, account, phone_number, crypto_address","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransfersGetParametersTypesSchemaItems"}}},{"name":"from_time","in":"query","description":"Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"sent_from","in":"query","description":"Inicio del rango de envío al banco (`sent_at`). Limita la lista a retiros bancarios y se envía junto con `sent_until`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"sent_until","in":"query","description":"Fin del rango de envío al banco. Si se envía como fecha sin hora, se interpreta como el final del día. Se envía junto con `sent_from`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"settled_from","in":"query","description":"Inicio del rango de liquidación bancaria confirmada. Devuelve únicamente retiros confirmados o completados y se aplica solo junto con `settled_until`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"settled_until","in":"query","description":"Fin del rango de liquidación bancaria confirmada. Si se envía como fecha sin hora, se interpreta como el final del día. Devuelve únicamente retiros confirmados o completados y se aplica solo junto con `settled_from`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"items","in":"query","description":"Elementos por página.","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista unificada de movimientos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Transfer"}}}}}}}},"/transfers/{id}":{"get":{"operationId":"get-transfer","summary":"Obtener un movimiento","description":"Acepta cualquier ID de movimiento — `tr_` (p2p), `wi_` (retiro) o `sw_` (stablecoin) — y lo devuelve en la forma unificada.","tags":["transfers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Movimiento","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transfer"}}}}}}},"/users":{"post":{"operationId":"create-user","summary":"Crear un usuario","description":"Crea un usuario que puede ser asociado a checkouts. Si ya existe un usuario con el email proporcionado, retorna el usuario existente.\n\n> **Nota:** Se recomienda usar el endpoint de [Crear cliente](/api-reference/customers/crear-un-cliente) en su lugar, que crea tanto el usuario como el cliente.\n","tags":["users"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Usuario creado o encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"400":{"description":"Error de validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email del usuario"},"full_name":{"type":"string","description":"Nombre completo del usuario"}},"required":["email"]}}}}}},"/webhook_endpoints/{id}":{"delete":{"operationId":"delete-webhook-endpoint","summary":"Eliminar un webhook endpoint","description":"Elimina un webhook endpoint registrado.\n","tags":["webhookEndpoints"],"parameters":[{"name":"id","in":"path","description":"ID del webhook endpoint","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Endpoint eliminado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook Endpoints_deleteWebhookEndpoint_Response_200"}}}}}}},"/webhook_endpoints":{"get":{"operationId":"list-webhook-endpoints","summary":"Listar webhook endpoints","description":"Lista todos los webhook endpoints registrados para tu cuenta. Una llave TEST lista los endpoints de prueba; una llave LIVE, los de producción.\n","tags":["webhookEndpoints"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de webhook endpoints","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}}},"post":{"operationId":"create-webhook-endpoint","summary":"Registrar un webhook endpoint","description":"Registra una nueva URL para recibir notificaciones de webhook cuando ocurran eventos en tu cuenta. Con una llave TEST el endpoint se registra en el ambiente de prueba y solo recibe eventos simulados (`live_mode: false`); con una llave LIVE, en producción.\n","tags":["webhookEndpoints"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Webhook endpoint creado. El `signingSecret` solo se devuelve en esta\nrespuesta de creación; si lo pierdes, debes consultarlo en el dashboard de Svix.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointWithSecret"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL que recibirá las notificaciones de webhook"},"description":{"type":"string","description":"(Opcional) Descripción del endpoint"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"(Opcional) Metadata personalizada"}},"required":["url"]}}}}}},"/withdrawals/{id}/cancel":{"post":{"operationId":"cancel-withdrawal","summary":"Cancelar un retiro","description":"> **Obsoleto:** usa el endpoint unificado [`POST /transfers/{id}/cancel`](/api-reference/transfers/cancelar-un-movimiento), que acepta IDs `wi_`. Este endpoint sigue funcionando para integraciones existentes.\n\nCancela un retiro que aún puede cancelarse (pendiente, o aprobado sin lote).\n","tags":["withdrawals"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Retiro cancelado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"}}}},"422":{"description":"El retiro ya no puede cancelarse","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true}},"/withdrawals":{"post":{"operationId":"create-withdrawal","summary":"Crear un retiro","description":"> **Obsoleto:** usa el endpoint unificado [`POST /transfers`](/api-reference/transfers/crear-una-transferencia) con `destination: {type: bank_account, id: ...}`. Este endpoint sigue funcionando para integraciones existentes.\n\nPaga el balance de tu cuenta a una de tus cuentas bancarias externas. Requiere una llave con movimiento de dinero habilitado. El retiro es **asíncrono**: la respuesta es el estado inicial (`pending`/`in_review`/`approved`); suscríbete a los webhooks `withdrawal.*` o consulta el estado.\n\nEn Sandbox esta operación está bloqueada: un balance simulado nunca es retirable.\n","tags":["withdrawals"],"parameters":[{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Clave de idempotencia para reintentos seguros de operaciones críticas, especialmente las que mueven dinero o cambian estado operativo. Reintentar con la misma clave y el mismo cuerpo devuelve la respuesta original (header `Idempotency-Replayed: true`); reusarla con parámetros distintos devuelve 409.\n","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"Retiro creado (asíncrono)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"}}}},"400":{"description":"Retiro inválido; por ejemplo, la cuenta bancaria destino tiene un formato inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La llave no tiene movimiento de dinero habilitado, o la cuenta está suspendida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"La creación de retiros no está disponible en Sandbox","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"deprecated":true,"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"bank_account_id":{"type":"string","description":"ID de la cuenta bancaria destino"},"amount_in_cents":{"type":"integer"},"currency":{"$ref":"#/components/schemas/WithdrawalsPostRequestBodyContentApplicationJsonSchemaCurrency","description":"Por defecto, la moneda de la cuenta bancaria"},"is_instant":{"type":"boolean","description":"Retiro instantáneo (sujeto a elegibilidad y comisión)"}},"required":["bank_account_id","amount_in_cents"]}}}}},"get":{"operationId":"list-withdrawals","summary":"Listar retiros","description":"> **Obsoleto:** usa el endpoint unificado [`GET /transfers`](/api-reference/transfers/listar-movimientos-de-dinero) con `types[]=bank_account`. Este endpoint sigue funcionando para integraciones existentes.\n\nLista los retiros del más reciente al más antiguo. Filtra por fecha de creación con `from_time` + `until_time`.\n","tags":["withdrawals"],"parameters":[{"name":"from_time","in":"query","description":"Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"until_time","in":"query","description":"Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`.","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lista de retiros","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Withdrawal"}}}}}},"deprecated":true}},"/withdrawals/{id}":{"get":{"operationId":"get-withdrawal","summary":"Obtener un retiro","description":"> **Obsoleto:** usa el endpoint unificado [`GET /transfers/{id}`](/api-reference/transfers/obtener-un-movimiento), que acepta IDs `wi_`. Este endpoint sigue funcionando para integraciones existentes.\n","tags":["withdrawals"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-SECRET-KEY","in":"header","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Retiro","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"}}}}},"deprecated":true}}},"servers":[{"url":"https://app.recurrente.com/api","description":"LIVE y Sandbox; la llave selecciona el ambiente"}],"webhooks":{"subscription-invoice-item-added-webhook":{"post":{"operationId":"subscription-invoice-item-added-webhook","summary":"Cargo único agregado a una suscripción","description":"Se emite cuando se agrega un cargo único a la próxima factura de una suscripción.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"dispute-update-webhook":{"post":{"operationId":"dispute-update-webhook","summary":"Contracargo actualizado","description":"Se emite cuando Recurrente actualiza un contracargo. Lee el campo\n`status` para conocer el estado actual; no todos los updates implican\nun cambio de estado.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisputeWebhook"}}}}}},"dispute-create-webhook":{"post":{"operationId":"dispute-create-webhook","summary":"Contracargo creado","description":"Se emite cuando Recurrente crea un contracargo para una transacción.\nEl payload incluye el estado inicial del contracargo y la razón reportada\npor el emisor o tarjetahabiente.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisputeWebhook"}}}}}},"account-connection-create-webhook":{"post":{"operationId":"account-connection-create-webhook","summary":"Cuenta conectada creada","description":"Se emite cuando una cuenta hija se conecta a una cuenta padre. La cuenta\npadre recibe el evento por su propia actividad de conexión. Si esa\ncuenta padre también es hija de otra cuenta con webhooks habilitados, el\nevento se reenvía como evento de cuenta conectada con `connected: true`\ny `account_id`.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountConnectionWebhook"}}}}}},"verification-rejected-webhook":{"post":{"operationId":"verification-rejected-webhook","summary":"Documento de verificación rechazado","description":"Se emite cuando el procesamiento en segundo plano descarta uno o más\ndocumentos inválidos o ilegibles de una cuenta. La verificación queda\n`pending`, salvo que la cuenta ya estuviera verificada al reemplazar el\ndocumento; en ese caso conserva `completed`. `document_errors` indica\nqué archivos debe reemplazar el comercio. Si la cuenta está conectada,\nla plataforma recibe además `connected: true` y el `account_id` de la\ncuenta hija.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationRejectedWebhook"}}}}}},"swap-update-webhook":{"post":{"operationId":"swap-update-webhook","summary":"Envío de stablecoin actualizado","description":"Se emite en cada cambio de estado de un envío de stablecoin.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapWebhook"}}}}}},"swap-create-webhook":{"post":{"operationId":"swap-create-webhook","summary":"Envío de stablecoin creado","description":"Se emite cuando se crea un envío de stablecoin.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwapWebhook"}}}}}},"partner-commission-invoice-issued-webhook":{"post":{"operationId":"partner-commission-invoice-issued-webhook","summary":"Factura diaria de comisiones emitida","description":"Se emite a la plataforma cuando INFILE acepta el DTE agregado. Usa\n`connected_account_id` para identificar el restaurante y consulta el\nendpoint de detalle para reconciliar las transferencias incluidas.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerCommissionInvoiceWebhook"}}}}}},"partner-commission-invoice-failed-webhook":{"post":{"operationId":"partner-commission-invoice-failed-webhook","summary":"Factura diaria de comisiones falló de forma terminal","description":"Se emite solo cuando la política de reintentos declina otro intento; no\nse emite por fallas transitorias intermedias. El documento y sus líneas\npermanecen reservados para reparación o conciliación.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerCommissionInvoiceWebhook"}}}}}},"connected-account-fee-invoice-issued-webhook":{"post":{"operationId":"connected-account-fee-invoice-issued-webhook","summary":"Factura diaria de fees asumidos emitida","description":"Se emite a la plataforma cuando INFILE acepta el DTE diario que\ndocumenta las comisiones de cuentas conectadas pagadas por la\naplicación. Consulta el detalle para reconciliar cada cobro.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoiceWebhook"}}}}}},"connected-account-fee-invoice-failed-webhook":{"post":{"operationId":"connected-account-fee-invoice-failed-webhook","summary":"Factura diaria de fees asumidos falló de forma terminal","description":"Se emite solo cuando no corresponde otro reintento automático. El\ndocumento sellado y sus líneas permanecen disponibles para reparación\ny conciliación.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoiceWebhook"}}}}}},"intent-canceled-webhook":{"post":{"operationId":"intent-canceled-webhook","summary":"Intent cancelado","description":"Se emite con el formato unificado cuando un intento se cancela.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnifiedIntentWebhook"}}}}}},"intent-succeeded-webhook":{"post":{"operationId":"intent-succeeded-webhook","summary":"Intent exitoso","description":"Se emite con el formato unificado cuando cualquier método de pago se\ncompleta. El `id` superior es el recurso unificado (`in_…`) y coincide\ncon el que devuelve `POST /cash_sales`; `checkout.latest_intent.id`\nexpone ese mismo ID unificado (`in_…`).\n\n`tax_invoice_url` es una foto del estado del DTE al entregar el evento.\nSi el DTE se emite después, consulta `GET /intents/{id}` para obtener el\nvalor actual; no se vuelve a emitir `intent.succeeded` por ese cambio.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnifiedIntentWebhook"}}}}}},"intent-failed-webhook":{"post":{"operationId":"intent-failed-webhook","summary":"Intent fallido","description":"Se emite con el formato unificado cuando un cobro falla.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnifiedIntentWebhook"}}}}}},"intent-paid-webhook":{"post":{"operationId":"intent-paid-webhook","summary":"Intent pagado con balance","description":"Se emite a la cuenta pagadora en el formato unificado cuando usa su balance.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnifiedIntentWebhook"}}}}}},"intent-pending-webhook":{"post":{"operationId":"intent-pending-webhook","summary":"Intent pendiente","description":"Se emite con el formato unificado cuando un cobro espera fondos, captura o verificación.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnifiedIntentWebhook"}}}}}},"payment-intent-requires-capture-webhook":{"post":{"operationId":"payment-intent-requires-capture-webhook","summary":"Pago autorizado pendiente de captura","description":"Se emite cuando la tarjeta fue autorizada y el cobro espera captura.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"balance-intent-paid-webhook":{"post":{"operationId":"balance-intent-paid-webhook","summary":"Pago con balance enviado","description":"Se emite a la cuenta pagadora cuando usa su balance en un checkout.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"balance-intent-succeeded-webhook":{"post":{"operationId":"balance-intent-succeeded-webhook","summary":"Pago con balance recibido","description":"Se emite al comercio cuando recibe un pago con balance de Recurrente.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"crypto-intent-updated-webhook":{"post":{"operationId":"crypto-intent-updated-webhook","summary":"Pago con stablecoin actualizado","description":"Se emite cuando cambia un intento de cobro con stablecoin.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"crypto-intent-created-webhook":{"post":{"operationId":"crypto-intent-created-webhook","summary":"Pago con stablecoin creado","description":"Se emite al crear un intento de cobro con stablecoin.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"crypto-intent-succeeded-webhook":{"post":{"operationId":"crypto-intent-succeeded-webhook","summary":"Pago con stablecoin exitoso","description":"Se emite cuando un cobro con stablecoin se acredita.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"crypto-intent-pending-webhook":{"post":{"operationId":"crypto-intent-pending-webhook","summary":"Pago con stablecoin pendiente","description":"Se emite cuando se inicia un cobro con stablecoin.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"payment-intent-succeeded-webhook":{"post":{"operationId":"payment-intent-succeeded-webhook","summary":"Pago con tarjeta exitoso","description":"Se emite cuando un cobro con tarjeta se completa exitosamente.\n\nSi el pago pertenece a una cuenta conectada, el endpoint de la plataforma\ntambién recibe el evento con `connected: true` y el `account_id` de la\ncuenta hija. Si la hija registró su propio endpoint, lo recibe además de\nla plataforma.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"payment-intent-failed-webhook":{"post":{"operationId":"payment-intent-failed-webhook","summary":"Pago con tarjeta fallido","description":"Se emite cuando un cobro con tarjeta falla de forma definitiva.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"cash-intent-succeeded-webhook":{"post":{"operationId":"cash-intent-succeeded-webhook","summary":"Pago en efectivo exitoso","description":"Evento legacy emitido cuando un cobro en efectivo se registra exitosamente.\nSu `id` identifica el `CashIntent` concreto (`ca_…`), no el recurso\nunificado (`in_…`) que devuelve `POST /cash_sales`.\n\n`tax_invoice_url` refleja el estado del DTE al entregar este evento. Si\nla emisión falla y luego se recupera, no se vuelve a emitir\n`cash_intent.succeeded`; consulta `GET /intents/{id}` con el `in_…` de la\nrespuesta original. Para una cuenta conectada, incluye `X-ACCOUNT-ID`.\n","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"payment-intent-requires-verification-webhook":{"post":{"operationId":"payment-intent-requires-verification-webhook","summary":"Pago pendiente de verificación","description":"Se emite cuando un pago requiere revisión antes de confirmarse.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"subscription-item-added-webhook":{"post":{"operationId":"subscription-item-added-webhook","summary":"Producto agregado a una suscripción","description":"Se emite cuando se agrega un producto recurrente a una suscripción.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"subscription-item-removed-webhook":{"post":{"operationId":"subscription-item-removed-webhook","summary":"Producto removido de una suscripción","description":"Se emite cuando se remueve un producto recurrente de una suscripción.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"refund-create-webhook":{"post":{"operationId":"refund-create-webhook","summary":"Reembolso creado","description":"Se emite cuando un reembolso se procesa exitosamente.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundWebhook"}}}}}},"withdrawal-update-webhook":{"post":{"operationId":"withdrawal-update-webhook","summary":"Retiro actualizado","description":"Para retiros bancarios locales, se emite en cada cambio de estado. Trata `sent` como éxito terminal y no esperes `completed`; si aparece, `completed` es una confirmación adicional.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalWebhook"}}}}}},"withdrawal-create-webhook":{"post":{"operationId":"withdrawal-create-webhook","summary":"Retiro creado","description":"Se emite cuando se crea un retiro asíncrono.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalWebhook"}}}}}},"subscription-update-webhook":{"post":{"operationId":"subscription-update-webhook","summary":"Suscripción actualizada","description":"Se emite cuando cambia información general de una suscripción, como su método de pago.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"subscription-cancel-webhook":{"post":{"operationId":"subscription-cancel-webhook","summary":"Suscripción cancelada","description":"Se emite cuando se cancela una suscripción.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"subscription-past-due-webhook":{"post":{"operationId":"subscription-past-due-webhook","summary":"Suscripción con pago pendiente","description":"Se emite cuando falla un cobro recurrente y la suscripción entra en mora.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"subscription-create-webhook":{"post":{"operationId":"subscription-create-webhook","summary":"Suscripción creada","description":"Se emite cuando empieza una suscripción.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"subscription-pause-webhook":{"post":{"operationId":"subscription-pause-webhook","summary":"Suscripción pausada","description":"Se emite cuando se pausa una suscripción; el nombre real del evento es `subscription.pause`.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"subscription-reactivate-webhook":{"post":{"operationId":"subscription-reactivate-webhook","summary":"Suscripción reactivada","description":"Se emite cuando una suscripción cancelada se reactiva dentro del período permitido.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"subscription-unpause-webhook":{"post":{"operationId":"subscription-unpause-webhook","summary":"Suscripción reanudada","description":"Se emite cuando una suscripción pausada se reanuda.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionWebhook"}}}}}},"setup-intent-succeeded-webhook":{"post":{"operationId":"setup-intent-succeeded-webhook","summary":"Tarjeta tokenizada","description":"Se emite cuando una tarjeta se tokeniza sin cobrarla.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"setup-intent-cancelled-webhook":{"post":{"operationId":"setup-intent-cancelled-webhook","summary":"Tokenización de tarjeta cancelada","description":"Se emite cuando una tarjeta no puede tokenizarse.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"bank-transfer-intent-updated-webhook":{"post":{"operationId":"bank-transfer-intent-updated-webhook","summary":"Transferencia bancaria actualizada","description":"Se emite cuando cambia un intento de cobro por transferencia bancaria.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"automated-bank-transfer-intent-succeeded-webhook":{"post":{"operationId":"automated-bank-transfer-intent-succeeded-webhook","summary":"Transferencia bancaria automatizada exitosa","description":"Se emite cuando un cobro automatizado por transferencia bancaria se acredita.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"bank-transfer-intent-created-webhook":{"post":{"operationId":"bank-transfer-intent-created-webhook","summary":"Transferencia bancaria creada","description":"Se emite al crear un intento de cobro por transferencia bancaria.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"bank-transfer-intent-succeeded-webhook":{"post":{"operationId":"bank-transfer-intent-succeeded-webhook","summary":"Transferencia bancaria exitosa","description":"Se emite cuando Recurrente recibe y acredita la transferencia bancaria.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"bank-transfer-intent-failed-webhook":{"post":{"operationId":"bank-transfer-intent-failed-webhook","summary":"Transferencia bancaria fallida","description":"Se emite cuando una transferencia bancaria no puede acreditarse.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"bank-transfer-intent-pending-webhook":{"post":{"operationId":"bank-transfer-intent-pending-webhook","summary":"Transferencia bancaria pendiente","description":"Se emite cuando se inicia un cobro por transferencia bancaria.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegacyIntentWebhook"}}}}}},"transfer-sent-webhook":{"post":{"operationId":"transfer-sent-webhook","summary":"Transferencia enviada","description":"Se emite a la cuenta remitente cuando envía una transferencia p2p.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferWebhook"}}}}}},"transfer-received-webhook":{"post":{"operationId":"transfer-received-webhook","summary":"Transferencia recibida","description":"Se emite a la cuenta destinataria cuando recibe una transferencia p2p.","responses":{"200":{"description":"Webhook received successfully"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferWebhook"}}}}}}},"components":{"schemas":{"Test_credentials_Response_200":{"type":"object","properties":{"message":{"type":"string","description":"Mensaje de saludo con el nombre de tu cuenta"}},"title":"Test_credentials_Response_200"},"ErrorErrors":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},{"type":"string"}],"description":"Detalles de errores por campo","title":"ErrorErrors"},"Error":{"type":"object","properties":{"message":{"type":"string","description":"Mensaje de error"},"code":{"type":"string","description":"Código estable legible por máquinas, cuando aplica"},"refund_id":{"type":"string","description":"ID del reembolso relacionado cuando aplica"},"endpoint":{"type":"string","description":"Acción de API rechazada, cuando aplica"},"errors":{"$ref":"#/components/schemas/ErrorErrors","description":"Detalles de errores por campo"}},"title":"Error"},"AccountGetResponsesContentApplicationJsonSchemaWithdrawalsSchedule":{"type":"string","enum":["daily","manual","instant"],"description":"Frecuencia configurada para los retiros de la cuenta","title":"AccountGetResponsesContentApplicationJsonSchemaWithdrawalsSchedule"},"Account_getAccount_Response_200":{"type":"object","properties":{"id":{"type":"string","description":"ID de la cuenta"},"status":{"type":"string","description":"Estado de la cuenta"},"name":{"type":"string","description":"Nombre de la cuenta"},"account_type":{"type":"string","description":"Tipo de cuenta"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"creator_name":{"type":"string","description":"Nombre del creador de la cuenta"},"creator_email":{"type":"string","format":"email","description":"Email del creador de la cuenta"},"tax_id":{"type":["string","null"],"description":"ID fiscal de la cuenta"},"tax_name":{"type":["string","null"],"description":"Nombre fiscal de la cuenta"},"withdrawals_schedule":{"oneOf":[{"$ref":"#/components/schemas/AccountGetResponsesContentApplicationJsonSchemaWithdrawalsSchedule"},{"type":"null"}],"description":"Frecuencia configurada para los retiros de la cuenta"},"onboarding_completed":{"type":"boolean","description":"Indica si la cuenta completó onboarding"}},"title":"Account_getAccount_Response_200"},"Activity":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","description":"Tipo de evento"},"created_at":{"type":"string","format":"date-time"},"amount_in_cents":{"type":["integer","null"]},"currency":{"type":["string","null"]},"status":{"type":["string","null"]}},"description":"Actividad del feed de la cuenta. Los campos varían según el tipo de evento; siempre incluye `id`, `type` y `created_at`.\n","title":"Activity"},"BalanceTransactionSource":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string","description":"ID público de la fuente, cuando ese tipo de recurso lo expone"}},"description":"Recurso que originó el movimiento, cuando existe","title":"BalanceTransactionSource"},"BalanceTransactionFeeDetailsItemsType":{"type":"string","enum":["processing","vat_withholding","tax_invoicing"],"title":"BalanceTransactionFeeDetailsItemsType"},"BalanceTransactionFeeDetailsItems":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/BalanceTransactionFeeDetailsItemsType"},"amount_in_cents":{"type":"integer"}},"title":"BalanceTransactionFeeDetailsItems"},"BalanceTransaction":{"type":"object","properties":{"id":{"type":"string","description":"ID público del movimiento del balance. Los movimientos registrados antes de que el ledger fuera público conservan el prefijo `ba_`; trata el ID como opaco."},"account_id":{"type":"string","description":"Cuenta cuyo balance cambió"},"type":{"type":"string","description":"Tipo contable del movimiento"},"source":{"oneOf":[{"$ref":"#/components/schemas/BalanceTransactionSource"},{"type":"null"}],"description":"Recurso que originó el movimiento, cuando existe"},"amount_in_cents":{"type":"integer","description":"Monto bruto firmado en centavos; positivo acredita y negativo debita"},"fee_in_cents":{"type":"integer","description":"Lo retenido sobre el bruto, firmado. Sumado a `amount_in_cents` da `net_amount_in_cents`"},"fee_details":{"type":"array","items":{"$ref":"#/components/schemas/BalanceTransactionFeeDetailsItems"},"description":"Desglose de `fee_in_cents` con los componentes que registramos en la moneda del movimiento. Lo que no aparezca aquí sigue contando dentro del total"},"net_amount_in_cents":{"type":"integer","description":"Monto firmado que efectivamente movió el balance"},"currency":{"type":"string","description":"Moneda del balance"},"description":{"type":["string","null"],"description":"Descripción opcional del movimiento"},"balance_before_in_cents":{"type":["integer","null"],"description":"Snapshot del balance antes del movimiento, cuando está disponible"},"balance_after_in_cents":{"type":["integer","null"],"description":"Snapshot del balance después del movimiento; equivale a la columna Balance del reporte descargable"},"created_at":{"type":"string","format":"date-time","description":"Momento en que el movimiento fue registrado"}},"required":["id","account_id","type","amount_in_cents","net_amount_in_cents","currency","created_at"],"description":"Movimiento inmutable del ledger de una cuenta. Los montos son firmados. Un `type: payout` con `source.type: withdrawal` representa el débito del retiro, no la composición de fondos que lo financió.\n\nEn un retiro, el balance se debita por el monto bruto; lo que llega al banco es el `net_amount_in_cents` del movimiento en `GET /api/transfers`, que descuenta la comisión de retiro.\n","title":"BalanceTransaction"},"Balance":{"type":"object","properties":{"currency":{"type":"string"},"amount_in_cents":{"type":"integer","description":"Monto disponible en centavos"}},"title":"Balance"},"BankAccountStatus":{"type":"string","enum":["active","archived"],"description":"Estado de la cuenta bancaria","title":"BankAccountStatus"},"BankAccountCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda de la cuenta bancaria","title":"BankAccountCurrency"},"BankAccountAccountType":{"type":"string","enum":["checking","savings"],"description":"Tipo de cuenta bancaria","title":"BankAccountAccountType"},"BankAccountOwnershipType":{"type":"string","enum":["external","virtual"],"description":"Tipo de cuenta bancaria","title":"BankAccountOwnershipType"},"BankAccount":{"type":"object","properties":{"id":{"type":"string","description":"ID único de la cuenta bancaria"},"bank_name":{"type":["string","null"],"description":"Nombre del banco"},"holder_name":{"type":"string","description":"Nombre del titular"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"status":{"$ref":"#/components/schemas/BankAccountStatus","description":"Estado de la cuenta bancaria"},"currency":{"$ref":"#/components/schemas/BankAccountCurrency","description":"Moneda de la cuenta bancaria"},"account_type":{"oneOf":[{"$ref":"#/components/schemas/BankAccountAccountType"},{"type":"null"}],"description":"Tipo de cuenta bancaria"},"is_preferred":{"type":"boolean","description":"Indica si es la cuenta preferida para su moneda"},"ownership_type":{"$ref":"#/components/schemas/BankAccountOwnershipType","description":"Tipo de cuenta bancaria"}},"title":"BankAccount"},"BankAccountsPostRequestBodyContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"title":"BankAccountsPostRequestBodyContentApplicationJsonSchemaCurrency"},"BankAccountsPostRequestBodyContentApplicationJsonSchemaAccountType":{"type":"string","enum":["checking","savings"],"title":"BankAccountsPostRequestBodyContentApplicationJsonSchemaAccountType"},"BanksGetResponsesContentApplicationJsonSchemaItems":{"type":"object","properties":{"name":{"type":"string"},"country":{"type":"string"}},"title":"BanksGetResponsesContentApplicationJsonSchemaItems"},"CashSalesPostRequestBodyContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda. Default — la moneda principal de la cuenta.","title":"CashSalesPostRequestBodyContentApplicationJsonSchemaCurrency"},"Cash Sales_createCashSale_Response_201":{"type":"object","properties":{"id":{"type":"string","pattern":"^in_","description":"ID del intent unificado. Úsalo con `GET /intents/{id}` y con el `id` superior de los eventos `intent.*`."},"status":{"type":"string"},"amount_in_cents":{"type":"integer"},"currency":{"type":"string"},"description":{"type":"string"},"tax_id":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"}},"title":"Cash Sales_createCashSale_Response_201"},"Metadata":{"oneOf":[{"type":"string","maxLength":500},{"type":"number","format":"double"},{"type":"boolean"}],"title":"Metadata"},"CheckoutItemAddition":{"type":"object","properties":{"price_id":{"type":"string","description":"Precio activo del catálogo de la cuenta del checkout."},"quantity":{"type":"integer","minimum":1,"maximum":10,"description":"Cantidad absoluta inicial."},"metadata":{"$ref":"#/components/schemas/Metadata"}},"required":["price_id","quantity"],"title":"CheckoutItemAddition"},"CheckoutItemUpdate":{"oneOf":[{"type":"object","additionalProperties":{"description":"Any type"}},{"type":"object","additionalProperties":{"description":"Any type"}}],"title":"CheckoutItemUpdate"},"CheckoutItemDeletion":{"type":"object","properties":{"id":{"type":"string","pattern":"^it_"},"deleted":{"type":"boolean","enum":[true]}},"required":["id","deleted"],"title":"CheckoutItemDeletion"},"CheckoutItemMutation":{"oneOf":[{"$ref":"#/components/schemas/CheckoutItemAddition"},{"$ref":"#/components/schemas/CheckoutItemUpdate"},{"$ref":"#/components/schemas/CheckoutItemDeletion"}],"title":"CheckoutItemMutation"},"CheckoutStatus":{"type":"string","enum":["unpaid","paid","payment_in_progress","expired"],"description":"Estado del checkout","title":"CheckoutStatus"},"CouponDiscountMode":{"type":"string","enum":["code","bank","custom_bins"],"description":"Tipo de descuento","title":"CouponDiscountMode"},"CouponDuration":{"type":"string","enum":["once","forever"],"description":"Duración del descuento para suscripciones","title":"CouponDuration"},"Coupon":{"type":"object","properties":{"id":{"type":"string","description":"ID único del cupón"},"name":{"type":"string","description":"Nombre o código del cupón"},"discount_mode":{"$ref":"#/components/schemas/CouponDiscountMode","description":"Tipo de descuento"},"display_name":{"type":["string","null"],"description":"Nombre visible para el cliente (usado en modo custom_bins)"},"amount_off_in_cents":{"type":["integer","null"],"description":"Descuento fijo en centavos"},"percent_off":{"type":["number","null"],"format":"double","description":"Porcentaje de descuento"},"automatically_applies":{"type":"boolean","description":"Si el descuento se aplica automáticamente en checkouts de tienda"},"max_redemptions":{"type":["integer","null"],"description":"Número máximo de usos"},"times_redeemed":{"type":"integer","description":"Número de veces que se ha redimido el descuento"},"currency":{"type":["string","null"],"description":"Moneda del descuento fijo"},"duration":{"$ref":"#/components/schemas/CouponDuration","description":"Duración del descuento para suscripciones"},"expires_at":{"type":["string","null"],"format":"date-time","description":"Fecha de expiración"},"status":{"type":"string","description":"Estado del cupón"}},"title":"Coupon"},"CheckoutDiscount":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto del descuento en centavos"},"coupon":{"$ref":"#/components/schemas/Coupon"}},"description":"Descuento aplicado al checkout (null si no hay descuento)","title":"CheckoutDiscount"},"CheckoutCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda del checkout","title":"CheckoutCurrency"},"CheckoutPaymentMethodTypesItems":{"type":"string","enum":["card","bank_transfer","stablecoins","balance"],"title":"CheckoutPaymentMethodTypesItems"},"CheckoutItem":{"type":"object","properties":{"id":{"type":"string","pattern":"^it_","description":"ID estable de esta fila del checkout. Úsalo para modificarla o eliminarla."},"price_id":{"type":"string","description":"ID del precio asociado. Puede repetirse en varias filas."},"quantity":{"type":"integer","minimum":1,"description":"Cantidad absoluta de esta fila."},"metadata":{"$ref":"#/components/schemas/Metadata"}},"required":["id","price_id","quantity","metadata"],"title":"CheckoutItem"},"CheckoutCustomFieldValueType":{"type":"string","enum":["text","numeric","dropdown"],"title":"CheckoutCustomFieldValueType"},"CheckoutCustomFieldValue":{"type":"object","properties":{"field_id":{"type":"string","description":"Identificador canónico del campo (estable y único por producto). Úsalo para reconciliar valores; en checkouts con múltiples productos, dos entradas pueden tener la misma `key` pero distinto `field_id`."},"key":{"type":"string","description":"Identificador legible definido por el comerciante. Puede repetirse entre productos en el mismo checkout."},"type":{"$ref":"#/components/schemas/CheckoutCustomFieldValueType"},"value":{"type":"string"}},"description":"Valor recolectado de un campo personalizado al pagar.","title":"CheckoutCustomFieldValue"},"TransferSetupStatus":{"type":"string","enum":["pending","completed","cancelled","reversed"],"description":"En pagos únicos: `pending` mientras el cobro no se completa y `completed` cuando la transferencia se ejecutó. En suscripciones la configuración queda `pending` mientras la suscripción está activa. `cancelled` si el checkout, la suscripción o un reembolso canceló el setup antes de ejecutarlo; `reversed` si un reembolso devolvió una transferencia ya completada.","title":"TransferSetupStatus"},"TransferSetupPurpose":{"type":"string","enum":["fund_split","platform_commission"],"default":"fund_split","description":"Semántica comercial de la transferencia. Usa `platform_commission`\núnicamente cuando el checkout pertenece a una cuenta conectada y\nlos fondos regresan a su plataforma; ese valor habilita la\nreconciliación y facturación diaria de la comisión.\n","title":"TransferSetupPurpose"},"TransferSetup":{"type":"object","properties":{"id":{"type":"string","description":"ID de la configuración de transferencia"},"status":{"$ref":"#/components/schemas/TransferSetupStatus","description":"En pagos únicos: `pending` mientras el cobro no se completa y `completed` cuando la transferencia se ejecutó. En suscripciones la configuración queda `pending` mientras la suscripción está activa. `cancelled` si el checkout, la suscripción o un reembolso canceló el setup antes de ejecutarlo; `reversed` si un reembolso devolvió una transferencia ya completada."},"amount_in_cents":{"type":["integer","null"],"description":"Monto fijo en centavos a transferir (pagos únicos). No puede exceder el monto neto disponible después de fees, FEL e IVA."},"amount_percent":{"type":["number","null"],"format":"double","description":"Porcentaje del total de cada factura a transferir (suscripciones)."},"currency":{"type":"string","description":"Moneda"},"recipient_id":{"type":"string","description":"ID de la cuenta de Recurrente que recibe los fondos (no es una cuenta bancaria)."},"purpose":{"$ref":"#/components/schemas/TransferSetupPurpose","default":"fund_split","description":"Semántica comercial de la transferencia. Usa `platform_commission`\núnicamente cuando el checkout pertenece a una cuenta conectada y\nlos fondos regresan a su plataforma; ese valor habilita la\nreconciliación y facturación diaria de la comisión.\n"}},"description":"Transferencia automática de fondos a otra cuenta de Recurrente. Con `amount_in_cents` (pagos únicos) se ejecuta una vez al completarse el cobro; con `amount_percent` (suscripciones) se ejecuta en cada cobro exitoso, transfiriendo ese porcentaje del total de la factura.","title":"TransferSetup"},"CheckoutLatestIntentData":{"type":"object","properties":{"auth_code":{"type":["string","null"]}},"title":"CheckoutLatestIntentData"},"CheckoutLatestIntent":{"type":"object","properties":{"id":{"type":"string","pattern":"^in_"},"type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/CheckoutLatestIntentData"}},"description":"Último intent unificado asociado. Su `id` usa el prefijo `in_…`.","title":"CheckoutLatestIntent"},"Address":{"type":"object","properties":{"address_line_1":{"type":["string","null"],"description":"Línea de dirección 1"},"address_line_2":{"type":["string","null"],"description":"Línea de dirección 2"},"city":{"type":["string","null"],"description":"Ciudad"},"region":{"type":["string","null"],"description":"Región o departamento"},"country":{"type":["string","null"],"description":"País"},"zip_code":{"type":["string","null"],"description":"Código postal"}},"title":"Address"},"CheckoutPaymentPaymentable":{"type":"object","properties":{"type":{"type":"string","description":"Tipo de elemento pagable"},"id":{"type":"string","description":"ID del elemento pagable"},"tax_name":{"type":["string","null"],"description":"Nombre fiscal del comprador"},"tax_id":{"type":["string","null"],"description":"ID fiscal del comprador"},"address":{"$ref":"#/components/schemas/Address"},"phone_number":{"type":["string","null"],"description":"Número de teléfono del comprador"}},"title":"CheckoutPaymentPaymentable"},"CheckoutPayment":{"type":"object","properties":{"id":{"type":"string","description":"ID del pago"},"paymentable":{"$ref":"#/components/schemas/CheckoutPaymentPaymentable"}},"description":"Información del pago (si está pagado)","title":"CheckoutPayment"},"CheckoutPaymentMethodCard":{"type":"object","properties":{"last4":{"type":"string","description":"Últimos 4 dígitos de la tarjeta"},"expiration_month":{"type":"integer","description":"Mes de expiración"},"expiration_year":{"type":"integer","description":"Año de expiración"},"network":{"type":"string","description":"Red de la tarjeta"},"issuer_name":{"type":["string","null"],"description":"Nombre del banco emisor"}},"title":"CheckoutPaymentMethodCard"},"CheckoutPaymentMethod":{"type":"object","properties":{"id":{"type":"string","description":"ID del método de pago"},"type":{"type":"string","description":"Tipo de método de pago"},"card":{"$ref":"#/components/schemas/CheckoutPaymentMethodCard"},"address":{"$ref":"#/components/schemas/Address"},"phone_number":{"type":["string","null"],"description":"Número de teléfono asociado al método de pago"}},"description":"Método de pago utilizado","title":"CheckoutPaymentMethod"},"Checkout":{"type":"object","properties":{"id":{"type":"string","description":"ID único del checkout"},"status":{"$ref":"#/components/schemas/CheckoutStatus","description":"Estado del checkout"},"total_in_cents":{"type":"integer","description":"Monto total en centavos (después de descuentos)"},"subtotal_in_cents":{"type":"integer","description":"Monto subtotal en centavos (antes de descuentos)"},"discount":{"oneOf":[{"$ref":"#/components/schemas/CheckoutDiscount"},{"type":"null"}],"description":"Descuento aplicado al checkout (null si no hay descuento)"},"currency":{"$ref":"#/components/schemas/CheckoutCurrency","description":"Moneda del checkout"},"payment_method_types":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutPaymentMethodTypesItems"},"description":"Métodos de pago que se le ofrecerán al comprador en este checkout, ya resueltos según la configuración del producto/cuenta, la moneda y el tipo de cobro: `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Las cuotas se exponen por separado en `available_installments`; `card` indica pago de contado, así que un checkout puede ofrecer cuotas (`available_installments` no vacío) sin incluir `card`.\n"},"available_installments":{"type":"array","items":{"type":"integer"},"description":"Opciones de cuotas (en meses) disponibles en este checkout, independientes de `payment_method_types`. Vacío si no se ofrecen cuotas."},"live_mode":{"type":"boolean","description":"Si el checkout está en modo producción (true) o prueba (false)"},"success_url":{"type":"string","description":"URL de redirección en caso de pago exitoso"},"cancel_url":{"type":"string","description":"URL de redirección en caso de cancelación"},"expires_at":{"type":"string","format":"date-time","description":"Fecha de expiración del checkout"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"metadata":{"$ref":"#/components/schemas/Metadata","description":"Metadata personalizada del checkout"},"items":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutItem"},"description":"Colección completa de filas mutables del checkout. No incluye descuentos, envío, fees ni prorrateos derivados."},"custom_fields":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutCustomFieldValue"},"description":"Valores recolectados de los campos personalizados.\nSi el checkout tiene múltiples productos, cada producto contribuye sus\npropias entradas — la `key` puede repetirse entre productos. Usa\n`field_id` como identificador canónico al reconciliar valores.\n"},"transfer_setups":{"type":"array","items":{"$ref":"#/components/schemas/TransferSetup"},"description":"Configuraciones de transferencia asociadas"},"latest_intent":{"oneOf":[{"$ref":"#/components/schemas/CheckoutLatestIntent"},{"type":"null"}],"description":"Último intent unificado asociado. Su `id` usa el prefijo `in_…`."},"payment":{"oneOf":[{"$ref":"#/components/schemas/CheckoutPayment"},{"type":"null"}],"description":"Información del pago (si está pagado)"},"payment_method":{"oneOf":[{"$ref":"#/components/schemas/CheckoutPaymentMethod"},{"type":"null"}],"description":"Método de pago utilizado"}},"required":["id","status","items"],"title":"Checkout"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsCurrency":{"type":"string","enum":["GTQ","USD"],"description":"(Solo modo inline) La moneda a cobrar.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsCurrency"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsPhoneRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"(Solo modo inline, opcional) Requerimiento de teléfono para el formulario de checkout.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsPhoneRequirement"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsAddressRequirement":{"type":"string","enum":["none","optional","required"],"default":"none","description":"(Solo modo inline, opcional) Requerimiento de dirección para el formulario de checkout.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsAddressRequirement"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsBillingInfoRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"(Solo modo inline, opcional) Requerimiento de información fiscal (NIT) para el formulario de checkout.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsBillingInfoRequirement"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsChargeType":{"type":"string","enum":["one_time","recurring"],"description":"(Solo modo inline) Tipo de cargo.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsChargeType"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsBillingInterval":{"type":"string","enum":["day","week","month","year"],"description":"(Solo modo inline, para suscripciones) Intervalo de facturación.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsBillingInterval"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsFreeTrialInterval":{"type":"string","enum":["week","month","year"],"description":"(Solo modo inline, opcional, para suscripciones) Intervalo del período de prueba gratuito.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsFreeTrialInterval"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsProrationBehavior":{"type":"string","enum":["none","create_prorations"],"default":"none","description":"(Solo modo inline, opcional, para suscripciones mensuales) Controla el primer cobro cuando la suscripción se crea un día distinto al `billing_cycle_anchor_day`. `create_prorations` cobra solo los días restantes hasta el día de cobro (como ítem de crédito en el checkout); `none` cobra el monto completo. Ignorado si hay período de prueba gratuito.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsProrationBehavior"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsPaymentMethodTypesItems":{"type":"string","enum":["card","bank_transfer","stablecoins","balance"],"title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsPaymentMethodTypesItems"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsAvailableInstallmentsItems":{"type":"string","enum":["3","6","12","18"],"title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsAvailableInstallmentsItems"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItems":{"type":"object","properties":{"product_id":{"type":"string","description":"ID de un producto existente en tu cuenta (lo obtienes al crear el producto o desde `GET /products`). Cuando lo envías, **no es necesario** incluir `name`, `amount_in_cents`, `currency` ni los demás campos inline — el checkout usa el primer precio del producto.\nSi el producto tiene múltiples precios, usa `price_id` para elegir uno específico.\n"},"price_id":{"type":"string","description":"ID de un precio específico (lo obtienes en `prices[].id` al crear u obtener un producto). Úsalo cuando un mismo producto tenga varios precios y quieras elegir cuál cobrar. Tiene precedencia sobre `product_id` si envías ambos.\n"},"quantity":{"type":"integer","minimum":1,"maximum":9,"default":1,"description":"(Opcional) Cantidad. Si no incluyes una, el default es 1. El valor mínimo es 1 y el valor máximo es 9. Aplica tanto si usas `product_id`/`price_id` como si envías detalles inline."},"metadata":{"$ref":"#/components/schemas/Metadata","description":"(Opcional) Metadata persistida en esta fila del checkout. Dos filas pueden usar el mismo `price_id` y mantener metadata distinta."},"name":{"type":"string","description":"(Solo modo inline) El nombre del producto. Ignorado si envías `product_id` o `price_id`."},"currency":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsCurrency","description":"(Solo modo inline) La moneda a cobrar."},"amount_in_cents":{"type":"integer","description":"(Solo modo inline) Monto a cobrar en centavos. El total del checkout debe ser al menos 500 para GTQ (Q5) o 100 para USD ($1); un ítem individual puede ser menor si el total cumple el mínimo."},"phone_requirement":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsPhoneRequirement","default":"optional","description":"(Solo modo inline, opcional) Requerimiento de teléfono para el formulario de checkout."},"address_requirement":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsAddressRequirement","default":"none","description":"(Solo modo inline, opcional) Requerimiento de dirección para el formulario de checkout."},"billing_info_requirement":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsBillingInfoRequirement","default":"optional","description":"(Solo modo inline, opcional) Requerimiento de información fiscal (NIT) para el formulario de checkout."},"image_url":{"type":"string","description":"(Solo modo inline, opcional) URL de la imagen del producto."},"charge_type":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsChargeType","description":"(Solo modo inline) Tipo de cargo."},"billing_interval":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsBillingInterval","description":"(Solo modo inline, para suscripciones) Intervalo de facturación."},"billing_interval_count":{"type":"integer","description":"(Solo modo inline, para suscripciones) Cada cuántos intervalos se cobra."},"periods_before_automatic_cancellation":{"type":"integer","description":"(Solo modo inline, opcional, para suscripciones) Número de períodos antes de cancelar automáticamente."},"free_trial_interval":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsFreeTrialInterval","description":"(Solo modo inline, opcional, para suscripciones) Intervalo del período de prueba gratuito."},"free_trial_interval_count":{"type":"integer","description":"(Solo modo inline, opcional, para suscripciones) Duración del período de prueba gratuito."},"proration_behavior":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsProrationBehavior","default":"none","description":"(Solo modo inline, opcional, para suscripciones mensuales) Controla el primer cobro cuando la suscripción se crea un día distinto al `billing_cycle_anchor_day`. `create_prorations` cobra solo los días restantes hasta el día de cobro (como ítem de crédito en el checkout); `none` cobra el monto completo. Ignorado si hay período de prueba gratuito."},"billing_cycle_anchor_day":{"type":"integer","minimum":1,"maximum":31,"description":"(Solo modo inline, opcional, para suscripciones mensuales) Día del mes (1–31) en que ocurrirán los cobros recurrentes. Combínalo con `proration_behavior` o `defer_to_billing_day` para controlar la fecha del primer cobro. Si el mes tiene menos días, se cobra el último día."},"defer_to_billing_day":{"type":"boolean","default":false,"description":"(Solo modo inline, opcional, para suscripciones mensuales) Si es `true`, difiere el primer cobro hasta la próxima ocurrencia de `billing_cycle_anchor_day` (solo se guarda el método de pago al crear). Alternativa a `proration_behavior: create_prorations` cuando no quieres cobrar nada hasta el día de cobro."},"has_dynamic_pricing":{"type":"boolean","default":false,"description":"(Solo modo inline, opcional) Indica si el producto debe usar precio dinámico. El precio se convierte en el 'monto a recibir' neto por el comercio. Disponible solo para pagos únicos."},"payment_method_types":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsPaymentMethodTypesItems"},"description":"(Solo modo inline, opcional) Métodos de pago habilitados para este ítem: `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Al enviarlo, el ítem usa su propia configuración en vez de heredar la de la cuenta; los valores no reconocidos se ignoran.\nLas cuotas son un eje aparte (`available_installments`): `card` controla el pago de contado con tarjeta, no las cuotas. Para que el comprador solo pueda pagar en cuotas, omite `card` y envía `available_installments`.\n"},"available_installments":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItemsAvailableInstallmentsItems"},"description":"(Solo modo inline, opcional) Opciones de cuotas (en meses) que se mostrarán en el checkout, independientes de `payment_method_types`. Solo aplica a `GTQ` y requiere que la cuenta tenga pagos con tarjeta habilitados. Usa `[]` para ocultar cuotas, o una lista como `[3]` para mostrar solo esa opción.\nSi envías `product_id` o `price_id`, este campo no sobreescribe el producto existente; configura las cuotas en el producto con `POST /products` o `PATCH /products`.\n"}},"title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaItemsItems"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaMode":{"type":"string","enum":["setup"],"description":"(Opcional) Modo del checkout. Envía `setup` para tokenizar una tarjeta sin cobrarla.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaMode"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItemsPurpose":{"type":"string","enum":["fund_split","platform_commission"],"default":"fund_split","description":"Usa `platform_commission` solo para una comisión que fluye desde la cuenta conectada indicada por `X-ACCOUNT-ID` hacia tu plataforma.","title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItemsPurpose"},"CheckoutsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItems":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto fijo en centavos a transferir (solo pagos únicos). La suma de todas las transferencias no puede exceder el monto neto disponible después de fees, FEL e IVA."},"amount_percent":{"type":"number","format":"double","description":"Porcentaje del total de cada factura a transferir (solo suscripciones), entre 0 y 100 con hasta 2 decimales. Al crear el checkout se valida que el porcentaje quepa en el monto neto disponible después de fees, FEL e IVA."},"recipient_id":{"type":"string","description":"ID de la cuenta de Recurrente que recibe los fondos (típicamente una cuenta conectada). No es una cuenta bancaria: los fondos se acreditan al balance de Recurrente de esa cuenta. Si se omite, se usa tu propia cuenta."},"purpose":{"$ref":"#/components/schemas/CheckoutsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItemsPurpose","default":"fund_split","description":"Usa `platform_commission` solo para una comisión que fluye desde la cuenta conectada indicada por `X-ACCOUNT-ID` hacia tu plataforma."}},"title":"CheckoutsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItems"},"CheckoutsPostResponsesContentApplicationJsonSchemaStatus":{"type":"string","enum":["unpaid","paid","payment_in_progress","expired"],"description":"Estado del checkout","title":"CheckoutsPostResponsesContentApplicationJsonSchemaStatus"},"CheckoutsPostResponsesContentApplicationJsonSchemaDiscount":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto del descuento en centavos"},"coupon":{"$ref":"#/components/schemas/Coupon"}},"description":"Descuento aplicado al checkout (null si no hay descuento)","title":"CheckoutsPostResponsesContentApplicationJsonSchemaDiscount"},"CheckoutsPostResponsesContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda del checkout","title":"CheckoutsPostResponsesContentApplicationJsonSchemaCurrency"},"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethodTypesItems":{"type":"string","enum":["card","bank_transfer","stablecoins","balance"],"title":"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethodTypesItems"},"CheckoutsPostResponsesContentApplicationJsonSchemaLatestIntentData":{"type":"object","properties":{"auth_code":{"type":["string","null"]}},"title":"CheckoutsPostResponsesContentApplicationJsonSchemaLatestIntentData"},"CheckoutsPostResponsesContentApplicationJsonSchemaLatestIntent":{"type":"object","properties":{"id":{"type":"string","pattern":"^in_"},"type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaLatestIntentData"}},"description":"Último intent unificado asociado. Su `id` usa el prefijo `in_…`.","title":"CheckoutsPostResponsesContentApplicationJsonSchemaLatestIntent"},"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentPaymentable":{"type":"object","properties":{"type":{"type":"string","description":"Tipo de elemento pagable"},"id":{"type":"string","description":"ID del elemento pagable"},"tax_name":{"type":["string","null"],"description":"Nombre fiscal del comprador"},"tax_id":{"type":["string","null"],"description":"ID fiscal del comprador"},"address":{"$ref":"#/components/schemas/Address"},"phone_number":{"type":["string","null"],"description":"Número de teléfono del comprador"}},"title":"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentPaymentable"},"CheckoutsPostResponsesContentApplicationJsonSchemaPayment":{"type":"object","properties":{"id":{"type":"string","description":"ID del pago"},"paymentable":{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaPaymentPaymentable"}},"description":"Información del pago (si está pagado)","title":"CheckoutsPostResponsesContentApplicationJsonSchemaPayment"},"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethodCard":{"type":"object","properties":{"last4":{"type":"string","description":"Últimos 4 dígitos de la tarjeta"},"expiration_month":{"type":"integer","description":"Mes de expiración"},"expiration_year":{"type":"integer","description":"Año de expiración"},"network":{"type":"string","description":"Red de la tarjeta"},"issuer_name":{"type":["string","null"],"description":"Nombre del banco emisor"}},"title":"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethodCard"},"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethod":{"type":"object","properties":{"id":{"type":"string","description":"ID del método de pago"},"type":{"type":"string","description":"Tipo de método de pago"},"card":{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethodCard"},"address":{"$ref":"#/components/schemas/Address"},"phone_number":{"type":["string","null"],"description":"Número de teléfono asociado al método de pago"}},"description":"Método de pago utilizado","title":"CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethod"},"Checkouts_createCheckout_Response_201":{"type":"object","properties":{"id":{"type":"string","description":"ID único del checkout"},"status":{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaStatus","description":"Estado del checkout"},"total_in_cents":{"type":"integer","description":"Monto total en centavos (después de descuentos)"},"subtotal_in_cents":{"type":"integer","description":"Monto subtotal en centavos (antes de descuentos)"},"discount":{"oneOf":[{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaDiscount"},{"type":"null"}],"description":"Descuento aplicado al checkout (null si no hay descuento)"},"currency":{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaCurrency","description":"Moneda del checkout"},"payment_method_types":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethodTypesItems"},"description":"Métodos de pago que se le ofrecerán al comprador en este checkout, ya resueltos según la configuración del producto/cuenta, la moneda y el tipo de cobro: `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Las cuotas se exponen por separado en `available_installments`; `card` indica pago de contado, así que un checkout puede ofrecer cuotas (`available_installments` no vacío) sin incluir `card`.\n"},"available_installments":{"type":"array","items":{"type":"integer"},"description":"Opciones de cuotas (en meses) disponibles en este checkout, independientes de `payment_method_types`. Vacío si no se ofrecen cuotas."},"live_mode":{"type":"boolean","description":"Si el checkout está en modo producción (true) o prueba (false)"},"success_url":{"type":"string","description":"URL de redirección en caso de pago exitoso"},"cancel_url":{"type":"string","description":"URL de redirección en caso de cancelación"},"expires_at":{"type":"string","format":"date-time","description":"Fecha de expiración del checkout"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"metadata":{"$ref":"#/components/schemas/Metadata","description":"Metadata personalizada del checkout"},"items":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutItem"},"description":"Colección completa de filas mutables del checkout. No incluye descuentos, envío, fees ni prorrateos derivados."},"custom_fields":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutCustomFieldValue"},"description":"Valores recolectados de los campos personalizados.\nSi el checkout tiene múltiples productos, cada producto contribuye sus\npropias entradas — la `key` puede repetirse entre productos. Usa\n`field_id` como identificador canónico al reconciliar valores.\n"},"transfer_setups":{"type":"array","items":{"$ref":"#/components/schemas/TransferSetup"},"description":"Configuraciones de transferencia asociadas"},"latest_intent":{"oneOf":[{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaLatestIntent"},{"type":"null"}],"description":"Último intent unificado asociado. Su `id` usa el prefijo `in_…`."},"payment":{"oneOf":[{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaPayment"},{"type":"null"}],"description":"Información del pago (si está pagado)"},"payment_method":{"oneOf":[{"$ref":"#/components/schemas/CheckoutsPostResponsesContentApplicationJsonSchemaPaymentMethod"},{"type":"null"}],"description":"Método de pago utilizado"},"checkout_url":{"type":"string","description":"URL del checkout donde el usuario puede pagar"}},"required":["id","status","items"],"title":"Checkouts_createCheckout_Response_201"},"ConnectedAccountsConnectedAccountIdTaxInvoicingPutRequestBodyContentMultipartFormDataSchemaRegistrationType":{"type":"string","enum":["managed"],"description":"En v1 solo se permite facturación administrada por Recurrente","title":"ConnectedAccountsConnectedAccountIdTaxInvoicingPutRequestBodyContentMultipartFormDataSchemaRegistrationType"},"ConnectedAccountsConnectedAccountIdTaxInvoicingPutRequestBodyContentMultipartFormDataSchemaActivationType":{"type":"string","enum":["automatic","manual"],"description":"`automatic` descarga la firma desde SAT usando `sat_password`.\n`manual` usa el archivo PFX enviado en `firma_electronica`.\n","title":"ConnectedAccountsConnectedAccountIdTaxInvoicingPutRequestBodyContentMultipartFormDataSchemaActivationType"},"ConnectedAccountTaxInvoicingProvider":{"type":"string","enum":["recurrente","custom"],"description":"Proveedor de facturación fiscal","title":"ConnectedAccountTaxInvoicingProvider"},"ConnectedAccountTaxInvoicingRegistrationType":{"type":"string","enum":["managed","user_provided"],"description":"Tipo de registro de facturación electrónica","title":"ConnectedAccountTaxInvoicingRegistrationType"},"ConnectedAccountTaxInvoicingActivationType":{"type":"string","enum":["automatic","manual"],"description":"Flujo usado para activar facturación electrónica","title":"ConnectedAccountTaxInvoicingActivationType"},"ConnectedAccountTaxInvoicingStatus":{"type":"string","enum":["disabled","pending_data","ready_to_upload","activating","pending_fiscal_profile","probe_pending","activation_attention_required","enabled","failed"],"description":"Estado público de la activación de facturación electrónica","title":"ConnectedAccountTaxInvoicingStatus"},"ConnectedAccountTaxInvoicing":{"type":"object","properties":{"provider":{"oneOf":[{"$ref":"#/components/schemas/ConnectedAccountTaxInvoicingProvider"},{"type":"null"}],"description":"Proveedor de facturación fiscal"},"registration_type":{"oneOf":[{"$ref":"#/components/schemas/ConnectedAccountTaxInvoicingRegistrationType"},{"type":"null"}],"description":"Tipo de registro de facturación electrónica"},"activation_type":{"oneOf":[{"$ref":"#/components/schemas/ConnectedAccountTaxInvoicingActivationType"},{"type":"null"}],"description":"Flujo usado para activar facturación electrónica"},"status":{"$ref":"#/components/schemas/ConnectedAccountTaxInvoicingStatus","description":"Estado público de la activación de facturación electrónica"},"status_notice":{"type":["string","null"],"description":"Mensaje público sobre el estado actual"},"enabled":{"type":"boolean","description":"Indica si la facturación fiscal está habilitada en la cuenta"},"ready_to_invoice":{"type":"boolean","description":"Indica si la cuenta ya tiene credenciales y datos fiscales listos para emitir facturas"},"missing_requirements":{"type":"array","items":{"type":"string"},"description":"Requisitos públicos pendientes antes de poder emitir facturas"},"establishment":{"type":["string","null"],"description":"Código de establecimiento usado para emitir facturas"}},"title":"ConnectedAccountTaxInvoicing"},"BankAccountUpdateRequest":{"type":"object","properties":{"is_preferred":{"type":"boolean","description":"Enviar `true` para dejar esta cuenta bancaria como predeterminada para retiros en su moneda"}},"required":["is_preferred"],"description":"Las cuentas bancarias son inmutables. Solo `is_preferred` puede actualizarse — para\ncambiar cualquier otro campo (titular, número, banco, moneda, tipo), archiva la\ncuenta bancaria existente y crea una nueva.\n","title":"BankAccountUpdateRequest"},"ConnectedAccountUpdateRequestWithdrawalsSchedule":{"type":"string","enum":["daily","manual","instant"],"description":"Frecuencia para retiros de la cuenta hija","title":"ConnectedAccountUpdateRequestWithdrawalsSchedule"},"ConnectedAccountUpdateRequest":{"type":"object","properties":{"name":{"type":"string","description":"Nombre comercial de la cuenta hija"},"withdrawals_schedule":{"$ref":"#/components/schemas/ConnectedAccountUpdateRequestWithdrawalsSchedule","description":"Frecuencia para retiros de la cuenta hija"}},"description":"Solo se permite actualizar el nombre comercial y la programación de retiros.\n\n- `tax_id` y `tax_name` se extraen del RTU al crear la cuenta — para corregirlos, re-`POST` con el mismo `email` y el RTU correcto.\n- `account_type` tampoco se acepta en update: cambiarlo invalidaría los documentos de verificación requeridos para el nuevo tipo. Re-`POST` con el `account_type` nuevo y los documentos correspondientes.\n","title":"ConnectedAccountUpdateRequest"},"ConnectedAccountAccountType":{"type":"string","enum":["business","individual","non_profit"],"description":"Tipo de cuenta de negocio","title":"ConnectedAccountAccountType"},"ConnectedAccountWithdrawalsSchedule":{"type":"string","enum":["daily","manual","instant"],"description":"Frecuencia configurada para retiros","title":"ConnectedAccountWithdrawalsSchedule"},"ConnectedAccount":{"type":"object","properties":{"id":{"type":"string","description":"ID único de la cuenta conectada"},"status":{"type":"string","description":"Estado de la cuenta"},"name":{"type":"string","description":"Nombre comercial de la cuenta"},"account_type":{"$ref":"#/components/schemas/ConnectedAccountAccountType","description":"Tipo de cuenta de negocio"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"creator_name":{"type":"string","description":"Nombre del usuario creador"},"creator_email":{"type":"string","format":"email","description":"Email del usuario creador"},"tax_id":{"type":["string","null"],"description":"ID fiscal de la cuenta"},"tax_name":{"type":["string","null"],"description":"Nombre fiscal de la cuenta"},"withdrawals_schedule":{"oneOf":[{"$ref":"#/components/schemas/ConnectedAccountWithdrawalsSchedule"},{"type":"null"}],"description":"Frecuencia configurada para retiros"},"onboarding_completed":{"type":"boolean","description":"Indica si la cuenta completó onboarding"}},"title":"ConnectedAccount"},"WithdrawalStatus":{"type":"string","enum":["pending","approved","in_review","review_requested","sent","completed","rejected","cancelled"],"title":"WithdrawalStatus"},"Withdrawal":{"type":"object","properties":{"id":{"type":"string"},"status":{"$ref":"#/components/schemas/WithdrawalStatus"},"amount_in_cents":{"type":"integer"},"currency":{"type":"string"},"bank_name":{"type":"string"},"note":{"type":["string","null"],"description":"Nota del retiro"},"created_at":{"type":"string","format":"date-time"},"bank_account":{"$ref":"#/components/schemas/BankAccount"}},"description":"Retiro bancario asíncrono. Para retiros locales, `sent` es un estado terminal exitoso; no esperes `completed` para continuar tu flujo. `completed` puede aparecer como confirmación adicional en retiros históricos o rails que la reportan.","title":"Withdrawal"},"ConnectedAccountCommissionInvoicingUpdateRequestMode":{"type":"string","enum":["default","none","daily"],"description":"`daily` o `none` establecen un override; `default` vuelve a heredar la configuración general","title":"ConnectedAccountCommissionInvoicingUpdateRequestMode"},"ConnectedAccountCommissionInvoicingUpdateRequest":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicingUpdateRequestMode","description":"`daily` o `none` establecen un override; `default` vuelve a heredar la configuración general"}},"required":["mode"],"title":"ConnectedAccountCommissionInvoicingUpdateRequest"},"ConnectedAccountCommissionInvoicingMode":{"type":"string","enum":["none","daily"],"description":"Modo efectivo después de aplicar el override o la configuración general","title":"ConnectedAccountCommissionInvoicingMode"},"ConnectedAccountCommissionInvoicingOverrideMode":{"type":"string","enum":["none","daily"],"description":"Override de esta conexión; `null` significa que hereda la configuración general","title":"ConnectedAccountCommissionInvoicingOverrideMode"},"ConnectedAccountCommissionInvoicingDefaultMode":{"type":"string","enum":["none","daily"],"description":"Configuración general de facturación de la plataforma","title":"ConnectedAccountCommissionInvoicingDefaultMode"},"ConnectedAccountCommissionInvoicingTimezone":{"type":"string","enum":["America/Guatemala"],"title":"ConnectedAccountCommissionInvoicingTimezone"},"ConnectedAccountCommissionInvoicing":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicingMode","description":"Modo efectivo después de aplicar el override o la configuración general"},"override_mode":{"oneOf":[{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicingOverrideMode"},{"type":"null"}],"description":"Override de esta conexión; `null` significa que hereda la configuración general"},"default_mode":{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicingDefaultMode","description":"Configuración general de facturación de la plataforma"},"enabled_at":{"type":["string","null"],"format":"date-time","description":"Inicio del intervalo elegible"},"disabled_at":{"type":["string","null"],"format":"date-time","description":"Fin exclusivo del intervalo elegible; las comisiones anteriores todavía se drenan"},"timezone":{"$ref":"#/components/schemas/ConnectedAccountCommissionInvoicingTimezone"}},"required":["mode","override_mode","default_mode","timezone"],"title":"ConnectedAccountCommissionInvoicing"},"ConnectedAccountFeeCollectionUpdateRequestFeesCollector":{"type":"string","enum":["default","recurrente","application"],"description":"`application` o `recurrente` establecen un override; `default` vuelve a heredar","title":"ConnectedAccountFeeCollectionUpdateRequestFeesCollector"},"ConnectedAccountFeeCollectionUpdateRequest":{"type":"object","properties":{"fees_collector":{"$ref":"#/components/schemas/ConnectedAccountFeeCollectionUpdateRequestFeesCollector","description":"`application` o `recurrente` establecen un override; `default` vuelve a heredar"}},"required":["fees_collector"],"title":"ConnectedAccountFeeCollectionUpdateRequest"},"ConnectedAccountFeeCollectionFeesCollector":{"type":"string","enum":["recurrente","application"],"description":"Responsabilidad efectiva después de aplicar el override o el valor general","title":"ConnectedAccountFeeCollectionFeesCollector"},"ConnectedAccountFeeCollectionOverrideFeesCollector":{"type":"string","enum":["recurrente","application"],"description":"Override de la conexión; `null` significa que hereda la configuración general","title":"ConnectedAccountFeeCollectionOverrideFeesCollector"},"ConnectedAccountFeeCollectionDefaultFeesCollector":{"type":"string","enum":["recurrente","application"],"description":"Configuración general de responsabilidad de la plataforma","title":"ConnectedAccountFeeCollectionDefaultFeesCollector"},"ConnectedAccountFeeCollection":{"type":"object","properties":{"fees_collector":{"$ref":"#/components/schemas/ConnectedAccountFeeCollectionFeesCollector","description":"Responsabilidad efectiva después de aplicar el override o el valor general"},"override_fees_collector":{"oneOf":[{"$ref":"#/components/schemas/ConnectedAccountFeeCollectionOverrideFeesCollector"},{"type":"null"}],"description":"Override de la conexión; `null` significa que hereda la configuración general"},"default_fees_collector":{"$ref":"#/components/schemas/ConnectedAccountFeeCollectionDefaultFeesCollector","description":"Configuración general de responsabilidad de la plataforma"}},"required":["fees_collector","override_fees_collector","default_fees_collector"],"title":"ConnectedAccountFeeCollection"},"ConnectedAccountRantInvoicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Hace que cada pago nuevo emita un RANT y permite generar su FACT posteriormente"},"pending_count":{"type":"integer","minimum":0,"description":"RANT emitidos que todavía no tienen una FACT emitida y con su fee registrado"}},"required":["enabled","pending_count"],"title":"ConnectedAccountRantInvoicing"},"BankAccountCreateRequestCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda de la cuenta bancaria","title":"BankAccountCreateRequestCurrency"},"BankAccountCreateRequestAccountType":{"type":"string","enum":["checking","savings"],"description":"Tipo de cuenta bancaria","title":"BankAccountCreateRequestAccountType"},"BankAccountCreateRequest":{"type":"object","properties":{"holder_name":{"type":"string","description":"Nombre del titular de la cuenta"},"number":{"type":"string","description":"Número de cuenta bancaria"},"bank_name":{"type":"string","description":"Nombre del banco. La comparación es case-insensitive. Si el nombre\nno coincide con un banco soportado, Recurrente responde `400` con\nla lista de bancos válidos. Consulta `GET /api/banks` para obtener\nla lista actualizada.\n"},"currency":{"$ref":"#/components/schemas/BankAccountCreateRequestCurrency","description":"Moneda de la cuenta bancaria"},"account_type":{"$ref":"#/components/schemas/BankAccountCreateRequestAccountType","description":"Tipo de cuenta bancaria"},"is_preferred":{"type":"boolean","description":"Enviar `true` para dejar esta cuenta bancaria como predeterminada para retiros en su moneda"}},"required":["holder_name","number","bank_name","currency"],"title":"BankAccountCreateRequest"},"ConnectedAccountsConnectedAccountIdWithdrawalsPostRequestBodyContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"title":"ConnectedAccountsConnectedAccountIdWithdrawalsPostRequestBodyContentApplicationJsonSchemaCurrency"},"ConnectedAccountsPostRequestBodyContentMultipartFormDataSchemaAccountType":{"type":"string","enum":["business","individual","non_profit"],"description":"Tipo de cuenta de negocio","title":"ConnectedAccountsPostRequestBodyContentMultipartFormDataSchemaAccountType"},"ConnectedAccountsPostRequestBodyContentMultipartFormDataSchemaWithdrawalsSchedule":{"type":"string","enum":["daily","manual","instant"],"description":"Frecuencia para retiros de la cuenta hija","title":"ConnectedAccountsPostRequestBodyContentMultipartFormDataSchemaWithdrawalsSchedule"},"ConnectedAccountVerificationRequest":{"type":"object","properties":{"tax_registration_document":{"type":"string","format":"binary","description":"RTU de la cuenta"},"id_card_image":{"type":"string","format":"binary","description":"Frente del documento de identidad"},"id_card_image_back":{"type":"string","format":"binary","description":"Reverso del documento de identidad"},"commercial_patent":{"type":"string","format":"binary","description":"Patente de comercio"},"company_patent":{"type":"string","format":"binary","description":"Patente de sociedad"},"company_representative_document":{"type":"string","format":"binary","description":"Nombramiento del representante legal"},"company_representative_id":{"type":"string","format":"binary","description":"Frente del documento del representante legal"},"company_representative_id_back":{"type":"string","format":"binary","description":"Reverso del documento del representante legal"},"articles_of_incorporation":{"type":"string","format":"binary","description":"Acta constitutiva o documento equivalente para organizaciones sin fines de lucro"}},"description":"Documentos requeridos para poder marcar la cuenta como onboarded. Recurrente\nexige distintos documentos según `account_type`:\n\n- `individual`: `tax_registration_document`, `id_card_image`, `id_card_image_back`.\n- `business`: `tax_registration_document`, `company_patent`, `commercial_patent`, `company_representative_document`, `company_representative_id`, `company_representative_id_back`.\n- `non_profit`: `tax_registration_document`, `articles_of_incorporation`, `company_representative_document`, `company_representative_id`, `company_representative_id_back`.\n","title":"ConnectedAccountVerificationRequest"},"ConnectedAccountFeeInvoiceStatus":{"type":"string","enum":["draft","sealed","issued","failed","voided"],"description":"Estado durable del documento fiscal","title":"ConnectedAccountFeeInvoiceStatus"},"ConnectedAccountFeeInvoiceCurrency":{"type":"string","enum":["GTQ","USD"],"title":"ConnectedAccountFeeInvoiceCurrency"},"ConnectedAccountFeeInvoiceLineCurrency":{"type":"string","enum":["GTQ","USD"],"title":"ConnectedAccountFeeInvoiceLineCurrency"},"ConnectedAccountFeeInvoiceLine":{"type":"object","properties":{"connected_account_id":{"type":"string","description":"Cuenta conectada cuyo cobro generó los fees"},"intent_id":{"type":"string","description":"Intento de pago público que originó el débito"},"payment_id":{"type":"string","description":"Pago público que agrupa el cobro"},"processor_fee_in_cents":{"type":"integer","minimum":0},"recurrente_fee_in_cents":{"type":"integer","minimum":0},"amount_in_cents":{"type":"integer","minimum":1,"description":"Suma exacta de los dos componentes de fee"},"currency":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoiceLineCurrency"},"paid_at":{"type":"string","format":"date-time","description":"Momento del pago usado para asignar el día económico"},"created_at":{"type":"string","format":"date-time"}},"required":["connected_account_id","intent_id","payment_id","processor_fee_in_cents","recurrente_fee_in_cents","amount_in_cents","currency","paid_at","created_at"],"title":"ConnectedAccountFeeInvoiceLine"},"ConnectedAccountFeeInvoice":{"type":"object","properties":{"id":{"type":"string","description":"ID de la factura diaria de comisiones asumidas"},"status":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoiceStatus","description":"Estado durable del documento fiscal"},"billing_date":{"type":"string","format":"date","description":"Día económico en America/Guatemala"},"currency":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoiceCurrency"},"amount_in_cents":{"type":"integer","minimum":1,"description":"Suma de las comisiones de procesamiento y Recurrente incluidas"},"description":{"type":"string"},"tax_invoice_uuid":{"type":["string","null"],"description":"UUID del DTE emitido por INFILE"},"tax_invoice_url":{"type":["string","null"],"format":"uri","description":"URL del DTE emitido"},"issued_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"lines":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoiceLine"},"description":"Solo se incluye en el endpoint de detalle"}},"required":["id","status","billing_date","currency","amount_in_cents","description","created_at","updated_at"],"title":"ConnectedAccountFeeInvoice"},"PartnerCommissionInvoiceStatus":{"type":"string","enum":["draft","sealed","issued","failed","voided"],"description":"Estado durable del documento fiscal","title":"PartnerCommissionInvoiceStatus"},"PartnerCommissionInvoiceCurrency":{"type":"string","enum":["GTQ","USD"],"title":"PartnerCommissionInvoiceCurrency"},"PartnerCommissionInvoiceLineSourceType":{"type":"string","enum":["Checkout","Invoice"],"title":"PartnerCommissionInvoiceLineSourceType"},"PartnerCommissionInvoiceLineCurrency":{"type":"string","enum":["GTQ","USD"],"title":"PartnerCommissionInvoiceLineCurrency"},"PartnerCommissionInvoiceLine":{"type":"object","properties":{"transfer_setup_id":{"type":"string","description":"Configuración clasificada como `platform_commission`"},"transfer_id":{"type":"string","description":"Movimiento P2P que transfirió la comisión"},"source_id":{"type":"string","description":"Checkout o factura recurrente que originó la comisión"},"source_type":{"$ref":"#/components/schemas/PartnerCommissionInvoiceLineSourceType"},"amount_in_cents":{"type":"integer","minimum":1},"currency":{"$ref":"#/components/schemas/PartnerCommissionInvoiceLineCurrency"},"completed_at":{"type":"string","format":"date-time","description":"Momento de completación usado para asignar el día económico"},"created_at":{"type":"string","format":"date-time"}},"required":["transfer_setup_id","transfer_id","source_id","source_type","amount_in_cents","currency","completed_at","created_at"],"title":"PartnerCommissionInvoiceLine"},"PartnerCommissionInvoice":{"type":"object","properties":{"id":{"type":"string","description":"ID de la factura diaria de comisiones"},"connected_account_id":{"type":"string","description":"Cuenta conectada que debe pagar la comisión"},"status":{"$ref":"#/components/schemas/PartnerCommissionInvoiceStatus","description":"Estado durable del documento fiscal"},"billing_date":{"type":"string","format":"date","description":"Día económico en America/Guatemala"},"currency":{"$ref":"#/components/schemas/PartnerCommissionInvoiceCurrency"},"amount_in_cents":{"type":"integer","minimum":1,"description":"Suma exacta de las comisiones incluidas, en centavos"},"description":{"type":"string"},"fee_in_cents":{"type":["integer","null"],"description":"Fee FEL debitado a la plataforma después de una emisión exitosa"},"tax_invoice_uuid":{"type":["string","null"],"description":"UUID del DTE emitido por INFILE"},"tax_invoice_url":{"type":["string","null"],"format":"uri","description":"URL del DTE emitido"},"issued_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"lines":{"type":"array","items":{"$ref":"#/components/schemas/PartnerCommissionInvoiceLine"},"description":"Solo se incluye en el endpoint de detalle"}},"required":["id","connected_account_id","status","billing_date","currency","amount_in_cents","description","created_at","updated_at"],"title":"PartnerCommissionInvoice"},"Connected Accounts_createConnectedAccountRantInvoices_Response_202":{"type":"object","properties":{},"description":"Empty response body","title":"Connected Accounts_createConnectedAccountRantInvoices_Response_202"},"Contact":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"phone_number":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"title":"Contact"},"Contacts_deleteContact_Response_200":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}},"title":"Contacts_deleteContact_Response_200"},"CouponsIdPutRequestBodyContentApplicationJsonSchemaCouponCurrency":{"type":"string","enum":["GTQ","USD"],"title":"CouponsIdPutRequestBodyContentApplicationJsonSchemaCouponCurrency"},"CouponsIdPutRequestBodyContentApplicationJsonSchemaCouponDuration":{"type":"string","enum":["once","forever"],"title":"CouponsIdPutRequestBodyContentApplicationJsonSchemaCouponDuration"},"CouponsIdPutRequestBodyContentApplicationJsonSchemaCoupon":{"type":"object","properties":{"name":{"type":"string","description":"Nombre o código del cupón"},"amount_off_in_cents":{"type":"integer","description":"Descuento fijo en centavos"},"currency":{"$ref":"#/components/schemas/CouponsIdPutRequestBodyContentApplicationJsonSchemaCouponCurrency"},"percent_off":{"type":"number","format":"double","description":"Porcentaje de descuento"},"duration":{"$ref":"#/components/schemas/CouponsIdPutRequestBodyContentApplicationJsonSchemaCouponDuration"},"max_redemptions":{"type":"integer"},"automatically_applies":{"type":"boolean","description":"Si es `true`, el descuento se aplica automáticamente en checkouts de tienda"},"expires_at":{"type":"string","format":"date-time"}},"title":"CouponsIdPutRequestBodyContentApplicationJsonSchemaCoupon"},"Coupons_deleteCoupon_Response_200":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}},"title":"Coupons_deleteCoupon_Response_200"},"CouponsPostRequestBodyContentApplicationJsonSchemaCouponCurrency":{"type":"string","enum":["GTQ","USD"],"description":"(Requerido si usas `amount_off_in_cents`) Moneda del descuento","title":"CouponsPostRequestBodyContentApplicationJsonSchemaCouponCurrency"},"CouponsPostRequestBodyContentApplicationJsonSchemaCouponDuration":{"type":"string","enum":["once","forever"],"description":"Para suscripciones: `once` aplica solo al primer pago, `forever` aplica a todos los pagos futuros","title":"CouponsPostRequestBodyContentApplicationJsonSchemaCouponDuration"},"CouponsPostRequestBodyContentApplicationJsonSchemaCoupon":{"type":"object","properties":{"name":{"type":"string","description":"Nombre o código del cupón"},"amount_off_in_cents":{"type":"integer","description":"(Opcional) Descuento fijo en centavos (ej: 1500 = Q15.00). Requiere `currency`."},"currency":{"$ref":"#/components/schemas/CouponsPostRequestBodyContentApplicationJsonSchemaCouponCurrency","description":"(Requerido si usas `amount_off_in_cents`) Moneda del descuento"},"percent_off":{"type":"number","format":"double","description":"(Opcional) Porcentaje de descuento (ej: 10 = 10%)"},"duration":{"$ref":"#/components/schemas/CouponsPostRequestBodyContentApplicationJsonSchemaCouponDuration","description":"Para suscripciones: `once` aplica solo al primer pago, `forever` aplica a todos los pagos futuros"},"max_redemptions":{"type":"integer","description":"(Opcional) Número máximo de usos"},"automatically_applies":{"type":"boolean","default":false,"description":"(Opcional) Si es `true`, el descuento se aplica automáticamente en checkouts de tienda"},"expires_at":{"type":"string","format":"date-time","description":"(Opcional) Fecha de expiración del cupón"}},"required":["name"],"title":"CouponsPostRequestBodyContentApplicationJsonSchemaCoupon"},"CryptoAddressChain":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche_c_chain","optimism","solana","tron"],"title":"CryptoAddressChain"},"CryptoAddressStatus":{"type":"string","enum":["active","archived"],"title":"CryptoAddressStatus"},"CryptoAddress":{"type":"object","properties":{"id":{"type":"string"},"address":{"type":"string"},"chain":{"$ref":"#/components/schemas/CryptoAddressChain"},"nickname":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/CryptoAddressStatus"},"created_at":{"type":"string","format":"date-time"}},"title":"CryptoAddress"},"CryptoAddressesPostRequestBodyContentApplicationJsonSchemaChain":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche_c_chain","optimism","solana","tron"],"title":"CryptoAddressesPostRequestBodyContentApplicationJsonSchemaChain"},"CurrencyConversionStatus":{"type":"string","enum":["awaiting_confirmation","pending","processed","reverted"],"title":"CurrencyConversionStatus"},"CurrencyConversion":{"type":"object","properties":{"id":{"type":"string"},"status":{"$ref":"#/components/schemas/CurrencyConversionStatus"},"source_currency":{"type":"string"},"source_amount_in_cents":{"type":"integer"},"destination_currency":{"type":"string"},"destination_amount_in_cents":{"type":"integer"},"exchange_rate":{"type":"number","format":"double"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"}},"title":"CurrencyConversion"},"CurrencyConversionsPostRequestBodyContentApplicationJsonSchemaSourceCurrency":{"type":"string","enum":["GTQ","USD"],"title":"CurrencyConversionsPostRequestBodyContentApplicationJsonSchemaSourceCurrency"},"CurrencyConversionsPostRequestBodyContentApplicationJsonSchemaDestinationCurrency":{"type":"string","enum":["GTQ","USD"],"title":"CurrencyConversionsPostRequestBodyContentApplicationJsonSchemaDestinationCurrency"},"Customer":{"type":"object","properties":{"id":{"type":"string","description":"ID único del cliente"},"user_id":{"type":"string","description":"ID del usuario asociado"},"email":{"type":"string","format":"email","description":"Email del cliente"},"name":{"type":"string","description":"Nombre del cliente"},"phone":{"type":["string","null"],"description":"Número de teléfono"},"address":{"type":["string","null"],"description":"Dirección"},"nit":{"type":["string","null"],"description":"Número de identificación tributaria"},"metadata":{"type":["object","null"],"additionalProperties":{"description":"Any type"},"description":"Metadata personalizada"},"test_clock_id":{"type":["string","null"],"description":"ID del test clock asignado al Customer. Solo puede usarse con una llave de un Sandbox nombrado."}},"title":"Customer"},"Customers_listCustomers_Response_200":{"type":"object","properties":{"customers":{"type":"array","items":{"$ref":"#/components/schemas/Customer"}}},"title":"Customers_listCustomers_Response_200"},"IntentsIntentIdTaxInvoicePutRequestBodyContentApplicationJsonSchemaTaxInvoice":{"type":"object","properties":{"tax_id":{"type":"string","description":"NIT corregido del receptor"},"tax_name":{"type":"string","description":"Nombre fiscal corregido del receptor"}},"required":["tax_id"],"title":"IntentsIntentIdTaxInvoicePutRequestBodyContentApplicationJsonSchemaTaxInvoice"},"IntentType":{"type":"string","enum":["payment","bank_transfer","crypto","balance","cash"],"description":"Tipo de pago subyacente","title":"IntentType"},"IntentStatus":{"type":"string","enum":["pending","succeeded","failed","canceled","paid"],"description":"Estado normalizado. `paid` aplica solo al evento del pagador en pagos con balance (type balance).","title":"IntentStatus"},"IntentCustomer":{"type":"object","properties":{},"description":"Datos del cliente","title":"IntentCustomer"},"IntentProduct":{"type":"object","properties":{},"description":"Producto principal","title":"IntentProduct"},"IntentPayment":{"type":"object","properties":{},"title":"IntentPayment"},"CardPaymentChannel":{"type":"string","enum":["POS","Celular como POS","Link de pago"],"description":"Origen exacto del cobro con tarjeta. Usa `POS` para una terminal física,\n`Celular como POS` para cobros desde un teléfono y `Link de pago` para\ncobros con tarjeta en línea.\n","title":"CardPaymentChannel"},"IntentDetails":{"type":"object","properties":{"channel":{"$ref":"#/components/schemas/CardPaymentChannel"}},"description":"Campos específicos del tipo de pago. Para `type: payment`, incluye `failure_reason`, comisiones, cuotas, canal y productos. Para `type: bank_transfer`, incluye `bank_reference` (referencia asignada por el banco o la red de pago) y `sender_comment` (comentario libre del pagador).","title":"IntentDetails"},"Intent":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/IntentType","description":"Tipo de pago subyacente"},"id":{"type":"string","pattern":"^in_","description":"ID del intent unificado; es la llave canónica para `GET /intents/{id}` y los eventos `intent.*`."},"receipt_number":{"type":"integer"},"api_version":{"type":"string"},"status":{"$ref":"#/components/schemas/IntentStatus","description":"Estado normalizado. `paid` aplica solo al evento del pagador en pagos con balance (type balance)."},"raw_status":{"type":"string","description":"Estado concreto sin normalizar (ej. `requires_capture`)"},"created_at":{"type":"string","format":"date-time"},"amount_in_cents":{"type":"integer"},"currency":{"type":"string"},"customer_id":{"type":"string"},"user_id":{"type":"string"},"customer":{"$ref":"#/components/schemas/IntentCustomer","description":"Datos del cliente"},"product":{"$ref":"#/components/schemas/IntentProduct","description":"Producto principal"},"tax_invoice_url":{"type":["string","null"],"format":"uri","description":"En la API devuelve la URL actual del DTE; en un webhook refleja el valor disponible al entregar ese evento y puede ser `null` aunque una emisión posterior tenga éxito."},"checkout":{"oneOf":[{"$ref":"#/components/schemas/Checkout"},{"type":"null"}]},"payment":{"oneOf":[{"$ref":"#/components/schemas/IntentPayment"},{"type":"null"}]},"details":{"$ref":"#/components/schemas/IntentDetails","description":"Campos específicos del tipo de pago. Para `type: payment`, incluye `failure_reason`, comisiones, cuotas, canal y productos. Para `type: bank_transfer`, incluye `bank_reference` (referencia asignada por el banco o la red de pago) y `sender_comment` (comentario libre del pagador)."}},"required":["type","id","status","raw_status"],"description":"Recurso de intent unificado. El campo `type` discrimina el tipo de pago;\n`details` contiene los campos específicos de ese tipo. Su `id` siempre es\nel ID base `in_…`, incluido cuando aparece en\n`checkout.latest_intent.id`.\n","title":"Intent"},"OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf0ItemsItemsCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda","title":"OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf0ItemsItemsCurrency"},"OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf0ItemsItems":{"type":"object","properties":{"name":{"type":"string","description":"Nombre del producto"},"currency":{"$ref":"#/components/schemas/OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf0ItemsItemsCurrency","description":"Moneda"},"amount_in_cents":{"type":"integer","description":"Monto en centavos"},"image_url":{"type":"string","description":"(Opcional) URL de la imagen"},"quantity":{"type":"integer","minimum":1,"maximum":9,"default":1,"description":"(Opcional) Cantidad, default 1"},"product_id":{"type":"string","description":"(Alternativa) ID de un producto existente"}},"title":"OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf0ItemsItems"},"OneTimePaymentsCreateOneTimePaymentRequest0":{"type":"object","properties":{"payment_method_id":{"type":"string","description":"ID del método de pago guardado (obtenido del webhook o GET checkout pagado)"},"items":{"type":"array","items":{"$ref":"#/components/schemas/OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf0ItemsItems"},"description":"Productos a cobrar"}},"required":["payment_method_id","items"],"title":"OneTimePaymentsCreateOneTimePaymentRequest0"},"OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf1Mode":{"type":"string","enum":["now","next_cycle"],"default":"now","description":"`now` cobra de inmediato el método de pago guardado de la suscripción. `next_cycle` agrega un cobro pendiente (InvoiceItem) que se cobra en el próximo cargo exitoso y admite créditos.\n","title":"OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf1Mode"},"OneTimePaymentsCreateOneTimePaymentRequest1":{"type":"object","properties":{"subscription_id":{"type":"string","description":"ID de la suscripción a la que se asocia el cobro"},"amount_in_cents":{"type":"integer","description":"Monto en centavos (moneda de la suscripción). Negativo = crédito, solo con mode `next_cycle`."},"description":{"type":"string","description":"Descripción visible para el cliente"},"mode":{"$ref":"#/components/schemas/OneTimePaymentsPostRequestBodyContentApplicationJsonSchemaOneOf1Mode","default":"now","description":"`now` cobra de inmediato el método de pago guardado de la suscripción. `next_cycle` agrega un cobro pendiente (InvoiceItem) que se cobra en el próximo cargo exitoso y admite créditos.\n"}},"required":["subscription_id","amount_in_cents","description"],"title":"OneTimePaymentsCreateOneTimePaymentRequest1"},"One-Time Payments_createOneTimePayment_Request":{"oneOf":[{"$ref":"#/components/schemas/OneTimePaymentsCreateOneTimePaymentRequest0"},{"$ref":"#/components/schemas/OneTimePaymentsCreateOneTimePaymentRequest1"}],"title":"One-Time Payments_createOneTimePayment_Request"},"One-Time Payments_createOneTimePayment_Response_200":{"type":"object","properties":{"object":{"type":"string"},"id":{"type":"string","description":"ID del pago"},"status":{"type":"string","description":"Estado del pago"}},"title":"One-Time Payments_createOneTimePayment_Response_200"},"PaymentIntentsIdPutRequestBodyContentApplicationJsonSchemaPaymentIntent":{"type":"object","properties":{"tax_invoice_url":{"type":"string","format":"uri","description":"URL de la factura electrónica"}},"title":"PaymentIntentsIdPutRequestBodyContentApplicationJsonSchemaPaymentIntent"},"PaymentIntentPaymentPaymentable":{"type":"object","properties":{"type":{"type":"string","description":"Tipo de elemento pagable"},"id":{"type":"string","description":"ID del elemento pagable"},"tax_name":{"type":["string","null"]},"tax_id":{"type":["string","null"]},"address":{"$ref":"#/components/schemas/Address"},"phone_number":{"type":["string","null"]}},"title":"PaymentIntentPaymentPaymentable"},"PaymentIntentPayment":{"type":"object","properties":{"id":{"type":"string","description":"ID del pago"},"paymentable":{"$ref":"#/components/schemas/PaymentIntentPaymentPaymentable"}},"description":"Información del pago","title":"PaymentIntentPayment"},"PaymentIntentCustomer":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"full_name":{"type":"string"}},"title":"PaymentIntentCustomer"},"PaymentIntentProduct":{"type":"object","properties":{"id":{"type":"string","description":"ID del producto principal"}},"title":"PaymentIntentProduct"},"PaymentIntentProductsItemsPhoneRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"Requerimiento de teléfono","title":"PaymentIntentProductsItemsPhoneRequirement"},"PaymentIntentProductsItemsAddressRequirement":{"type":"string","enum":["none","optional","required"],"default":"none","description":"Requerimiento de dirección","title":"PaymentIntentProductsItemsAddressRequirement"},"PaymentIntentProductsItemsBillingInfoRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"Requerimiento de información fiscal","title":"PaymentIntentProductsItemsBillingInfoRequirement"},"PaymentIntentProductsItemsPaymentMethodTypesItems":{"type":"string","enum":["card","bank_transfer","stablecoins","balance"],"title":"PaymentIntentProductsItemsPaymentMethodTypesItems"},"PriceStatus":{"type":"string","enum":["active","archived"],"description":"Estado del precio. Un precio `archived` fue reemplazado y ya no acepta nuevas compras; las suscripciones existentes lo conservan.","title":"PriceStatus"},"PriceCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda","title":"PriceCurrency"},"PriceChargeType":{"type":"string","enum":["one_time","recurring"],"description":"Tipo de cargo","title":"PriceChargeType"},"PriceProrationBehavior":{"type":"string","enum":["none","create_prorations"],"description":"Comportamiento de prorrateo del primer cobro de la suscripción. `create_prorations` cobra solo los días restantes hasta el día de cobro; `none` cobra el monto completo.","title":"PriceProrationBehavior"},"Price":{"type":"object","properties":{"id":{"type":"string","description":"ID único del precio"},"status":{"$ref":"#/components/schemas/PriceStatus","description":"Estado del precio. Un precio `archived` fue reemplazado y ya no acepta nuevas compras; las suscripciones existentes lo conservan."},"amount_in_cents":{"type":"integer","description":"Monto en centavos"},"currency":{"$ref":"#/components/schemas/PriceCurrency","description":"Moneda"},"charge_type":{"$ref":"#/components/schemas/PriceChargeType","description":"Tipo de cargo"},"billing_interval":{"type":["string","null"],"description":"Intervalo de facturación (para suscripciones)"},"billing_interval_count":{"type":["integer","null"],"description":"Cada cuántos intervalos se cobra"},"periods_before_automatic_cancellation":{"type":["integer","null"],"description":"Períodos antes de cancelar automáticamente"},"free_trial_interval":{"type":["string","null"],"description":"Intervalo del período de prueba"},"free_trial_interval_count":{"type":["integer","null"],"description":"Duración del período de prueba"},"proration_behavior":{"$ref":"#/components/schemas/PriceProrationBehavior","description":"Comportamiento de prorrateo del primer cobro de la suscripción. `create_prorations` cobra solo los días restantes hasta el día de cobro; `none` cobra el monto completo."},"billing_cycle_anchor_day":{"type":["integer","null"],"description":"Día del mes (1–31) en que ocurrirán los cobros recurrentes. Si el mes tiene menos días, se cobra el último día."},"defer_to_billing_day":{"type":"boolean","description":"Si es `true`, la suscripción difiere su primer cobro hasta la próxima ocurrencia de `billing_cycle_anchor_day` (solo se guarda el método de pago al crear)."}},"title":"Price"},"CheckoutCustomFieldDefinitionType":{"type":"string","enum":["text","numeric","dropdown"],"title":"CheckoutCustomFieldDefinitionType"},"CheckoutCustomFieldDefinitionOptionsItems":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"title":"CheckoutCustomFieldDefinitionOptionsItems"},"CheckoutCustomFieldDefinition":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string","maxLength":200,"description":"Identificador estable usado en webhooks y la API."},"type":{"$ref":"#/components/schemas/CheckoutCustomFieldDefinitionType"},"label":{"type":"object","additionalProperties":{"type":"string"},"description":"Hash con la etiqueta en cada idioma soportado.\n`_original` es lo que escribió el comerciante; el resto se genera automáticamente.\n"},"optional":{"type":"boolean","default":false},"minimum_length":{"type":["integer","null"]},"maximum_length":{"type":["integer","null"]},"default_value":{"type":["string","null"]},"options":{"type":["array","null"],"items":{"$ref":"#/components/schemas/CheckoutCustomFieldDefinitionOptionsItems"},"description":"Solo para `type: dropdown`."}},"description":"Definición de un campo personalizado de checkout (modelado en Stripe `custom_fields[]`).","title":"CheckoutCustomFieldDefinition"},"PaymentIntentProductsItems":{"type":"object","properties":{"id":{"type":"string","description":"ID único del producto"},"status":{"type":"string","description":"Estado del producto"},"name":{"type":"string","description":"Nombre del producto"},"description":{"type":["string","null"],"description":"Descripción del producto"},"success_url":{"type":["string","null"],"description":"URL de redirección después de un pago exitoso"},"cancel_url":{"type":["string","null"],"description":"URL de redirección cuando el comprador cancela"},"custom_terms_and_conditions":{"type":["string","null"],"description":"Términos y condiciones personalizados"},"phone_requirement":{"$ref":"#/components/schemas/PaymentIntentProductsItemsPhoneRequirement","default":"optional","description":"Requerimiento de teléfono"},"address_requirement":{"$ref":"#/components/schemas/PaymentIntentProductsItemsAddressRequirement","default":"none","description":"Requerimiento de dirección"},"billing_info_requirement":{"$ref":"#/components/schemas/PaymentIntentProductsItemsBillingInfoRequirement","default":"optional","description":"Requerimiento de información fiscal"},"has_dynamic_pricing":{"type":"boolean","description":"Si usa precio dinámico"},"payment_method_types":{"type":"array","items":{"$ref":"#/components/schemas/PaymentIntentProductsItemsPaymentMethodTypesItems"},"description":"Métodos de pago habilitados para este producto, ya resueltos (cuando el producto hereda la configuración de la cuenta, refleja los métodos de la cuenta): `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Las cuotas se exponen por separado en `available_installments`.\n"},"available_installments":{"type":"array","items":{"type":"integer"},"description":"Opciones de cuotas (en meses) que se mostrarán en el checkout, independientes de `payment_method_types`. Vacío si no se ofrecen cuotas. Solo aplica a GTQ."},"prices":{"type":"array","items":{"$ref":"#/components/schemas/Price"},"description":"Precios del producto"},"storefront_link":{"type":"string","description":"Link público del producto en la tienda"},"metadata":{"type":["object","null"],"additionalProperties":{"type":"string"},"description":"Metadata personalizada"},"custom_fields":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutCustomFieldDefinition"},"description":"Definiciones de campos personalizados activos en el checkout."},"quantity":{"type":"integer","description":"Cantidad comprada"}},"title":"PaymentIntentProductsItems"},"PaymentIntent":{"type":"object","properties":{"id":{"type":"string","description":"ID del payment intent"},"receipt_number":{"type":"integer","description":"Número de recibo"},"api_version":{"type":"string","description":"Versión de la API"},"live_mode":{"type":"boolean","description":"`true` en pagos reales; `false` en eventos simulados de checkouts de prueba."},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"checkout":{"$ref":"#/components/schemas/Checkout"},"payment":{"oneOf":[{"$ref":"#/components/schemas/PaymentIntentPayment"},{"type":"null"}],"description":"Información del pago"},"customer_id":{"type":"string","description":"ID del cliente"},"user_id":{"type":"string","description":"ID del usuario"},"customer":{"$ref":"#/components/schemas/PaymentIntentCustomer"},"failure_reason":{"type":["string","null"],"description":"Razón de fallo (si aplica)"},"amount_in_cents":{"type":"integer","description":"Monto en centavos"},"currency":{"type":"string","description":"Moneda"},"fee":{"type":"integer","description":"Comisión cobrada"},"vat_withheld":{"type":"integer","description":"IVA retenido"},"vat_withheld_currency":{"type":["string","null"],"description":"Moneda del IVA retenido"},"used_presaved_payment_method":{"type":"boolean","description":"Si se usó un método de pago guardado"},"product":{"$ref":"#/components/schemas/PaymentIntentProduct"},"products":{"type":"array","items":{"$ref":"#/components/schemas/PaymentIntentProductsItems"},"description":"Productos incluidos en el pago"},"tax_invoice_url":{"type":["string","null"],"description":"URL de la factura fiscal"},"channel":{"$ref":"#/components/schemas/CardPaymentChannel"}},"title":"PaymentIntent"},"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPaymentMethodTypesItems":{"type":"string","enum":["card","bank_transfer","stablecoins","balance"],"title":"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPaymentMethodTypesItems"},"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductAvailableInstallmentsItems":{"type":"string","enum":["3","6","12","18"],"title":"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductAvailableInstallmentsItems"},"CheckoutCustomFieldRequestType":{"type":"string","enum":["text","numeric","dropdown"],"title":"CheckoutCustomFieldRequestType"},"CheckoutCustomFieldRequestOptionsItems":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"title":"CheckoutCustomFieldRequestOptionsItems"},"CheckoutCustomFieldRequest":{"type":"object","properties":{"id":{"type":"string","description":"ID del campo existente (para actualizar). Omítelo para crear."},"_destroy":{"type":"boolean","description":"Si es `true`, archiva el campo. Solo aplica si incluyes `id`."},"key":{"type":"string","maxLength":200,"description":"Identificador estable, alfanumérico con guión bajo."},"type":{"$ref":"#/components/schemas/CheckoutCustomFieldRequestType"},"label":{"type":"string","maxLength":50,"description":"Etiqueta visible para el cliente. Recurrente la traduce automáticamente."},"optional":{"type":"boolean","default":false},"minimum_length":{"type":"integer","minimum":1,"maximum":255},"maximum_length":{"type":"integer","minimum":1,"maximum":255},"default_value":{"type":"string"},"options":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutCustomFieldRequestOptionsItems"},"description":"Requerido para `type: dropdown`. Hasta 200 opciones."}},"required":["key","type","label"],"description":"Payload para crear/actualizar un campo personalizado.","title":"CheckoutCustomFieldRequest"},"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsProrationBehavior":{"type":"string","enum":["none","create_prorations"],"description":"(Opcional) Controla el primer cobro de nuevas suscripciones. Ver descripción completa en el endpoint de creación de productos.","title":"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsProrationBehavior"},"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPricesAttributesItems":{"type":"object","properties":{"id":{"type":"string","description":"ID del precio existente (requerido para actualizar)"},"amount_in_cents":{"type":"integer","description":"Nuevo monto en centavos"},"proration_behavior":{"$ref":"#/components/schemas/ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsProrationBehavior","description":"(Opcional) Controla el primer cobro de nuevas suscripciones. Ver descripción completa en el endpoint de creación de productos."},"billing_cycle_anchor_day":{"type":"integer","minimum":1,"maximum":31,"description":"(Opcional) Día del mes (1–31) para cobros recurrentes de nuevas suscripciones. Si el mes tiene menos días, se cobra el último día."},"defer_to_billing_day":{"type":"boolean","description":"(Opcional) Si es `true`, las nuevas suscripciones difieren su primer cobro hasta la próxima ocurrencia de `billing_cycle_anchor_day`. Ver descripción completa en el endpoint de creación de productos."}},"required":["id"],"title":"ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPricesAttributesItems"},"ProductsIdPutRequestBodyContentApplicationJsonSchemaProduct":{"type":"object","properties":{"name":{"type":"string","description":"Nuevo nombre del producto"},"description":{"type":"string"},"image_url":{"type":"string"},"success_url":{"type":"string","format":"uri"},"cancel_url":{"type":"string","format":"uri"},"payment_method_types":{"type":"array","items":{"$ref":"#/components/schemas/ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPaymentMethodTypesItems"},"description":"(Opcional) Métodos de pago habilitados para este producto: `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Al enviarlo, el producto usa su propia configuración en vez de heredar la de la cuenta; los valores no reconocidos se ignoran. Omítelo para heredar la configuración de la cuenta. Las cuotas son un eje aparte (`available_installments`); `card` controla el pago de contado, no las cuotas."},"available_installments":{"type":"array","items":{"$ref":"#/components/schemas/ProductsIdPutRequestBodyContentApplicationJsonSchemaProductAvailableInstallmentsItems"},"description":"(Opcional) Opciones de cuotas (en meses) disponibles para este producto, independientes de `payment_method_types`. Solo aplica a `GTQ` y requiere que la cuenta tenga pagos con tarjeta habilitados. En los checkouts de este producto, el comprador escoge entre estas opciones. Usa `[]` para ocultar cuotas, o una lista como `[3]` para mostrar solo esa opción."},"metadata":{"type":"object","additionalProperties":{"type":"string"}},"custom_fields":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutCustomFieldRequest"},"description":"(Opcional) Lista completa de campos personalizados. Reemplaza los existentes. Para actualizar uno, incluye su `id`. Para archivarlo, marca `_destroy: true`."},"prices_attributes":{"type":"array","items":{"$ref":"#/components/schemas/ProductsIdPutRequestBodyContentApplicationJsonSchemaProductPricesAttributesItems"},"description":"Para actualizar el precio, incluye el `id` del precio existente"}},"title":"ProductsIdPutRequestBodyContentApplicationJsonSchemaProduct"},"ProductPhoneRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"Requerimiento de teléfono","title":"ProductPhoneRequirement"},"ProductAddressRequirement":{"type":"string","enum":["none","optional","required"],"default":"none","description":"Requerimiento de dirección","title":"ProductAddressRequirement"},"ProductBillingInfoRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"Requerimiento de información fiscal","title":"ProductBillingInfoRequirement"},"ProductPaymentMethodTypesItems":{"type":"string","enum":["card","bank_transfer","stablecoins","balance"],"title":"ProductPaymentMethodTypesItems"},"Product":{"type":"object","properties":{"id":{"type":"string","description":"ID único del producto"},"status":{"type":"string","description":"Estado del producto"},"name":{"type":"string","description":"Nombre del producto"},"description":{"type":["string","null"],"description":"Descripción del producto"},"success_url":{"type":["string","null"],"description":"URL de redirección después de un pago exitoso"},"cancel_url":{"type":["string","null"],"description":"URL de redirección cuando el comprador cancela"},"custom_terms_and_conditions":{"type":["string","null"],"description":"Términos y condiciones personalizados"},"phone_requirement":{"$ref":"#/components/schemas/ProductPhoneRequirement","default":"optional","description":"Requerimiento de teléfono"},"address_requirement":{"$ref":"#/components/schemas/ProductAddressRequirement","default":"none","description":"Requerimiento de dirección"},"billing_info_requirement":{"$ref":"#/components/schemas/ProductBillingInfoRequirement","default":"optional","description":"Requerimiento de información fiscal"},"has_dynamic_pricing":{"type":"boolean","description":"Si usa precio dinámico"},"payment_method_types":{"type":"array","items":{"$ref":"#/components/schemas/ProductPaymentMethodTypesItems"},"description":"Métodos de pago habilitados para este producto, ya resueltos (cuando el producto hereda la configuración de la cuenta, refleja los métodos de la cuenta): `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Las cuotas se exponen por separado en `available_installments`.\n"},"available_installments":{"type":"array","items":{"type":"integer"},"description":"Opciones de cuotas (en meses) que se mostrarán en el checkout, independientes de `payment_method_types`. Vacío si no se ofrecen cuotas. Solo aplica a GTQ."},"prices":{"type":"array","items":{"$ref":"#/components/schemas/Price"},"description":"Precios del producto"},"storefront_link":{"type":"string","description":"Link público del producto en la tienda"},"metadata":{"type":["object","null"],"additionalProperties":{"type":"string"},"description":"Metadata personalizada"},"custom_fields":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutCustomFieldDefinition"},"description":"Definiciones de campos personalizados activos en el checkout."}},"title":"Product"},"Products_deleteProduct_Response_200":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}},"title":"Products_deleteProduct_Response_200"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPhoneRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"(Opcional) Requerimiento de teléfono","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPhoneRequirement"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductAddressRequirement":{"type":"string","enum":["none","optional","required"],"default":"none","description":"(Opcional) Requerimiento de dirección","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductAddressRequirement"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductBillingInfoRequirement":{"type":"string","enum":["none","optional","required"],"default":"optional","description":"(Opcional) Requerimiento de información fiscal (NIT)","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductBillingInfoRequirement"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPaymentMethodTypesItems":{"type":"string","enum":["card","bank_transfer","stablecoins","balance"],"title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPaymentMethodTypesItems"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductAvailableInstallmentsItems":{"type":"string","enum":["3","6","12","18"],"title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductAvailableInstallmentsItems"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsCurrency"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsChargeType":{"type":"string","enum":["one_time","recurring"],"description":"Tipo de cargo","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsChargeType"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsBillingInterval":{"type":"string","enum":["week","month","year"],"description":"(Para suscripciones) Intervalo de facturación","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsBillingInterval"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsFreeTrialInterval":{"type":"string","enum":["week","month","year"],"description":"(Opcional) Intervalo del período de prueba gratuito","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsFreeTrialInterval"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsProrationBehavior":{"type":"string","enum":["none","create_prorations"],"default":"none","description":"(Opcional, para suscripciones mensuales) Controla el primer cobro cuando la suscripción se crea un día distinto al `billing_cycle_anchor_day`. `create_prorations` cobra solo los días restantes hasta el día de cobro (como ítem de crédito en el checkout); `none` cobra el monto completo. Ignorado si hay período de prueba gratuito.","title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsProrationBehavior"},"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItems":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto en centavos. El mínimo es 500 para GTQ (Q5) y 100 para USD ($1)."},"currency":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsCurrency","description":"Moneda"},"charge_type":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsChargeType","description":"Tipo de cargo"},"billing_interval":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsBillingInterval","description":"(Para suscripciones) Intervalo de facturación"},"billing_interval_count":{"type":"integer","description":"(Para suscripciones) Cada cuántos intervalos se cobra"},"periods_before_automatic_cancellation":{"type":"integer","description":"(Opcional) Períodos antes de cancelar automáticamente"},"periods_before_allowed_to_cancel":{"type":"integer","description":"(Opcional) Períodos mínimos antes de que el cliente pueda cancelar"},"free_trial_interval":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsFreeTrialInterval","description":"(Opcional) Intervalo del período de prueba gratuito"},"free_trial_interval_count":{"type":"integer","description":"(Opcional) Duración del período de prueba gratuito"},"proration_behavior":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItemsProrationBehavior","default":"none","description":"(Opcional, para suscripciones mensuales) Controla el primer cobro cuando la suscripción se crea un día distinto al `billing_cycle_anchor_day`. `create_prorations` cobra solo los días restantes hasta el día de cobro (como ítem de crédito en el checkout); `none` cobra el monto completo. Ignorado si hay período de prueba gratuito."},"billing_cycle_anchor_day":{"type":"integer","minimum":1,"maximum":31,"description":"(Opcional, para suscripciones mensuales) Día del mes (1–31) en que ocurrirán los cobros recurrentes. Combínalo con `proration_behavior` o `defer_to_billing_day` para controlar la fecha del primer cobro. Si el mes tiene menos días, se cobra el último día."},"defer_to_billing_day":{"type":"boolean","default":false,"description":"(Opcional, para suscripciones mensuales) Si es `true`, difiere el primer cobro hasta la próxima ocurrencia de `billing_cycle_anchor_day` (solo se guarda el método de pago al crear). Alternativa a `proration_behavior: create_prorations` cuando no quieres cobrar nada hasta el día de cobro."}},"required":["amount_in_cents","currency","charge_type"],"title":"ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItems"},"ProductsPostRequestBodyContentApplicationJsonSchemaProduct":{"type":"object","properties":{"name":{"type":"string","description":"Nombre del producto"},"description":{"type":"string","description":"(Opcional) Descripción del producto"},"image_url":{"type":"string","description":"(Opcional) URL de la imagen del producto"},"success_url":{"type":"string","format":"uri","description":"(Opcional) URL de redirección después de un pago exitoso"},"cancel_url":{"type":"string","format":"uri","description":"(Opcional) URL de redirección cuando el comprador cancela"},"custom_terms_and_conditions":{"type":"string","description":"(Opcional) Términos y condiciones personalizados"},"phone_requirement":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPhoneRequirement","default":"optional","description":"(Opcional) Requerimiento de teléfono"},"address_requirement":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductAddressRequirement","default":"none","description":"(Opcional) Requerimiento de dirección"},"billing_info_requirement":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductBillingInfoRequirement","default":"optional","description":"(Opcional) Requerimiento de información fiscal (NIT)"},"adjustable_quantity":{"type":"boolean","description":"(Opcional) Permitir al comprador ajustar la cantidad"},"inventory_quantity":{"type":"integer","description":"(Opcional) Cantidad en inventario. Cada compra lo decrementa."},"has_dynamic_pricing":{"type":"boolean","description":"(Opcional) Precio dinámico. El precio se convierte en el 'monto a recibir' neto."},"payment_method_types":{"type":"array","items":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPaymentMethodTypesItems"},"description":"(Opcional) Métodos de pago habilitados para este producto: `card` (tarjeta, pago de contado), `bank_transfer` (transferencia bancaria), `stablecoins` (dólares digitales), `balance` (Balance Recurrente). Al enviarlo, el producto usa su propia configuración en vez de heredar la de la cuenta; los valores no reconocidos se ignoran. Omítelo para heredar la configuración de la cuenta. Las cuotas son un eje aparte (`available_installments`); `card` controla el pago de contado, no las cuotas."},"available_installments":{"type":"array","items":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductAvailableInstallmentsItems"},"description":"(Opcional) Opciones de cuotas (en meses) disponibles para este producto, independientes de `payment_method_types`. Solo aplica a `GTQ` y requiere que la cuenta tenga pagos con tarjeta habilitados. En los checkouts de este producto, el comprador escoge entre estas opciones. Usa `[]` para ocultar cuotas, o una lista como `[3]` para mostrar solo esa opción."},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"(Opcional) Metadata personalizada"},"custom_fields":{"type":"array","items":{"$ref":"#/components/schemas/CheckoutCustomFieldRequest"},"description":"(Opcional) Hasta 3 campos personalizados a recolectar del comprador al pagar. La etiqueta se traduce automáticamente a los idiomas soportados."},"prices_attributes":{"type":"array","items":{"$ref":"#/components/schemas/ProductsPostRequestBodyContentApplicationJsonSchemaProductPricesAttributesItems"},"description":"Precios del producto (máximo 1)"}},"required":["name","prices_attributes"],"title":"ProductsPostRequestBodyContentApplicationJsonSchemaProduct"},"RefundStatus":{"type":"string","enum":["pending","succeeded","failed","voided"],"description":"Estado del reembolso","title":"RefundStatus"},"RefundCustomer":{"type":"object","properties":{"id":{"type":"string","description":"ID del cliente"},"email":{"type":"string","format":"email"},"full_name":{"type":"string"}},"title":"RefundCustomer"},"RefundTransferAdjustmentAction":{"type":"string","enum":["cancel","reverse"],"title":"RefundTransferAdjustmentAction"},"RefundTransferAdjustment":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/RefundTransferAdjustmentAction"},"transfer_setup_id":{"type":"string","description":"Transfer setup afectado"},"reversal_transfer_id":{"type":["string","null"],"description":"Transfer inverso creado; `null` cuando solo se canceló un setup pendiente"},"restoration_transfer_id":{"type":["string","null"],"description":"Transfer compensatorio creado si el procesador rechazó el reembolso"},"restored_at":{"type":["string","null"],"format":"date-time","description":"Momento en que el ajuste se compensó por un rechazo del procesador"},"amount_in_cents":{"type":"integer","minimum":1}},"required":["action","transfer_setup_id","amount_in_cents"],"title":"RefundTransferAdjustment"},"Refund":{"type":"object","properties":{"id":{"type":"string","description":"ID del reembolso"},"status":{"$ref":"#/components/schemas/RefundStatus","description":"Estado del reembolso"},"failure_reason":{"type":["string","null"],"description":"Razón del fallo. `provider_outcome_unknown` indica que el resultado debe reconciliarse antes de reintentar"},"customer":{"$ref":"#/components/schemas/RefundCustomer"},"user_id":{"type":"string","description":"ID del usuario"},"account_id":{"type":"string","description":"Cuenta dueña del cobro reembolsado"},"account_refunded_amount_in_cents":{"type":"integer","description":"Monto debitado de la cuenta del comercio (en centavos)"},"customer_refunded_amount_in_cents":{"type":"integer","description":"Monto devuelto al cliente (en centavos)"},"refund_application_fee":{"type":"boolean","description":"Si las comisiones de plataforma se devolvieron con el reembolso"},"transfer_adjustments":{"type":"array","items":{"$ref":"#/components/schemas/RefundTransferAdjustment"},"description":"Transfer setups cancelados o revertidos por este reembolso"},"currency":{"type":"string","description":"Moneda"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"voided_at":{"type":["string","null"],"format":"date-time","description":"Fecha de anulación, si el reembolso fue anulado"}},"title":"Refund"},"Refunds_createRefund_Request":{"oneOf":[{"description":"Any type"},{"description":"Any type"}],"title":"Refunds_createRefund_Request"},"ReportRunStatus":{"type":"string","enum":["pending","succeeded","failed"],"title":"ReportRunStatus"},"ReportRunParametersFormat":{"type":"string","enum":["csv","xlsx"],"title":"ReportRunParametersFormat"},"ReportRunParameters":{"type":"object","properties":{"interval_start":{"type":"string","format":"date"},"interval_end":{"type":"string","format":"date"},"currency":{"type":"string"},"format":{"$ref":"#/components/schemas/ReportRunParametersFormat"}},"title":"ReportRunParameters"},"ReportRunResult":{"type":"object","properties":{"filename":{"type":"string"},"size_in_bytes":{"type":"integer"},"download_url":{"type":"string"}},"description":"Vacío hasta que el archivo existe","title":"ReportRunResult"},"ReportRun":{"type":"object","properties":{"id":{"type":"string"},"report_type":{"type":"string"},"status":{"$ref":"#/components/schemas/ReportRunStatus"},"parameters":{"$ref":"#/components/schemas/ReportRunParameters"},"result":{"oneOf":[{"$ref":"#/components/schemas/ReportRunResult"},{"type":"null"}],"description":"Vacío hasta que el archivo existe"},"error":{"type":["string","null"],"description":"Por qué falló el reporte, cuando falló"},"created_at":{"type":"string","format":"date-time"}},"required":["id","report_type","status","parameters","created_at"],"description":"Un reporte pedido. Nace en `pending`; cuando `status` es `succeeded` aparece `result`, y si es `failed`, `error` dice por qué.\n","title":"ReportRun"},"ReportRunsPostRequestBodyContentApplicationJsonSchemaReportType":{"type":"string","enum":["ledger.itemized.1"],"description":"Tipo de reporte. Va versionado para que las columnas puedan cambiar sin romper integraciones.","title":"ReportRunsPostRequestBodyContentApplicationJsonSchemaReportType"},"ReportRunsPostRequestBodyContentApplicationJsonSchemaParametersFormat":{"type":"string","enum":["csv","xlsx"],"default":"csv","title":"ReportRunsPostRequestBodyContentApplicationJsonSchemaParametersFormat"},"ReportRunsPostRequestBodyContentApplicationJsonSchemaParameters":{"type":"object","properties":{"interval_start":{"type":"string","format":"date"},"interval_end":{"type":"string","format":"date"},"currency":{"type":"string","description":"Moneda del balance. Por defecto, la de la cuenta."},"format":{"$ref":"#/components/schemas/ReportRunsPostRequestBodyContentApplicationJsonSchemaParametersFormat","default":"csv"}},"required":["interval_start","interval_end"],"title":"ReportRunsPostRequestBodyContentApplicationJsonSchemaParameters"},"ServiceTabsPostRequestBodyContentApplicationJsonSchemaItemsItems":{"type":"object","properties":{"price_id":{"type":"string","description":"Precio existente a cobrar"},"product_id":{"type":"string","description":"Producto existente; se cobra su precio vigente"},"name":{"type":"string","description":"Nombre del cobro manual, cuando no mandas `price_id` ni `product_id`"},"amount_in_cents":{"type":"integer","description":"Monto del cobro manual, en centavos"},"currency":{"type":"string","description":"Moneda del cobro manual. Por defecto, la de la cuenta\nabierta. Una cuenta no puede mezclar monedas: un item en\notra moneda se rechaza con `422`.\n"},"quantity":{"type":"integer","minimum":1,"default":1,"description":"Entero mayor a 0. Un lote con un item inválido no agrega ninguno."}},"description":"Nombra algo que ya vendes (`price_id` o `product_id`) o\ndefine el consumo en la misma llamada con `name` y\n`amount_in_cents` — el cobro manual de un descorche.\n","title":"ServiceTabsPostRequestBodyContentApplicationJsonSchemaItemsItems"},"ServiceTabStatus":{"type":"string","enum":["open","closing","paid","voided","abandoned"],"description":"Estado de la cuenta. `open` acepta items; `closing` ya está cerrada y\nespera el pago; `paid` se cobró; `voided` se anuló sin cobrar;\n`abandoned` se dejó vencer.\n","title":"ServiceTabStatus"},"ServiceTabPaymentStrategy":{"type":"string","enum":["card_on_file","preauthorization"],"description":"`card_on_file` cobra al cerrar la tarjeta guardada del cliente.\n`preauthorization` mantiene un hold del monto estimado y solo se\npuede activar desde el dashboard, porque requiere una autorización\nreal del procesador.\n","title":"ServiceTabPaymentStrategy"},"ServiceTabOpeningCommitment":{"type":"string","enum":["none","manual_amount","product","products"],"description":"Qué se comprometió al abrir la cuenta. Se infiere de la solicitud:\n`products` si mandaste `items`, `manual_amount` si mandaste\n`estimated_amount`, `none` si no mandaste ninguno.\n","title":"ServiceTabOpeningCommitment"},"ServiceTabItem":{"type":"object","properties":{"id":{"type":"string","description":"ID del item, firmado y estable mientras el item exista"},"price_id":{"type":"string","description":"ID del precio cobrado en esta línea"},"name":{"type":"string","description":"Nombre del producto"},"quantity":{"type":"integer","description":"Cantidad"},"amount_in_cents":{"type":"integer","description":"Total de la línea (precio × cantidad), en centavos"},"currency":{"type":"string","description":"Moneda de la línea"}},"title":"ServiceTabItem"},"ServiceTab":{"type":"object","properties":{"id":{"type":"string","description":"ID de la cuenta abierta"},"status":{"$ref":"#/components/schemas/ServiceTabStatus","description":"Estado de la cuenta. `open` acepta items; `closing` ya está cerrada y\nespera el pago; `paid` se cobró; `voided` se anuló sin cobrar;\n`abandoned` se dejó vencer.\n"},"display_name":{"type":"string","description":"Nombre con el que el comercio identifica la cuenta (mesa, cliente, cuarto)"},"phone":{"type":["string","null"],"description":"Teléfono del cliente al momento de abrir la cuenta"},"customer_id":{"type":"string","description":"ID del cliente dueño de la cuenta"},"currency":{"type":"string","description":"Moneda de la cuenta"},"total_in_cents":{"type":"integer","description":"Total consumido hasta ahora, en centavos"},"payment_strategy":{"$ref":"#/components/schemas/ServiceTabPaymentStrategy","description":"`card_on_file` cobra al cerrar la tarjeta guardada del cliente.\n`preauthorization` mantiene un hold del monto estimado y solo se\npuede activar desde el dashboard, porque requiere una autorización\nreal del procesador.\n"},"opening_commitment":{"$ref":"#/components/schemas/ServiceTabOpeningCommitment","description":"Qué se comprometió al abrir la cuenta. Se infiere de la solicitud:\n`products` si mandaste `items`, `manual_amount` si mandaste\n`estimated_amount`, `none` si no mandaste ninguno.\n"},"items":{"type":"array","items":{"$ref":"#/components/schemas/ServiceTabItem"},"description":"Líneas vigentes de la cuenta (los items anulados no aparecen)"},"authorized_amount_in_cents":{"type":"integer","description":"Monto preautorizado con hold sobre la tarjeta, en centavos. `0` cuando no hay preautorización."},"authorization_expires_at":{"type":["string","null"],"format":"date-time","description":"Momento en que expira el hold de la preautorización"},"checkout_url":{"type":["string","null"],"description":"Checkout que cierra la cuenta; pagarlo la marca como `paid`. Solo\naparece mientras la cuenta se está cobrando (`closing` o `paid`): si\nun cobro con tarjeta se declina, la cuenta se reabre y el checkout de\nese intento no se publica, porque el cliente no podría pagarlo.\n"},"opened_at":{"type":"string","format":"date-time","description":"Momento en que se abrió la cuenta"},"closed_at":{"type":["string","null"],"format":"date-time","description":"Momento en que se cerró la cuenta"},"created_at":{"type":"string","format":"date-time"}},"title":"ServiceTab"},"ServiceTabsServiceTabIdItemsPostRequestBodyContentApplicationJsonSchemaItemsItems":{"type":"object","properties":{"price_id":{"type":"string","description":"Precio existente a cobrar"},"product_id":{"type":"string","description":"Producto existente; se cobra su precio vigente"},"name":{"type":"string","description":"Nombre del cobro manual, cuando no mandas `price_id` ni `product_id`"},"amount_in_cents":{"type":"integer","description":"Monto del cobro manual, en centavos"},"currency":{"type":"string","description":"Moneda del cobro manual. Por defecto, la de la cuenta\nabierta. Una cuenta no puede mezclar monedas: un item en\notra moneda se rechaza con `422`.\n"},"quantity":{"type":"integer","minimum":1,"default":1,"description":"Entero mayor a 0. Un lote con un item inválido no agrega ninguno."}},"description":"Nombra algo que ya vendes (`price_id` o `product_id`) o\ndefine el consumo en la misma llamada con `name` y\n`amount_in_cents` — el cobro manual de un descorche.\n","title":"ServiceTabsServiceTabIdItemsPostRequestBodyContentApplicationJsonSchemaItemsItems"},"ServiceTabsServiceTabIdClosurePostRequestBodyContentApplicationJsonSchemaChannel":{"type":"string","enum":["payment_link","saved_card"],"default":"payment_link","description":"Cómo se cobra la cuenta","title":"ServiceTabsServiceTabIdClosurePostRequestBodyContentApplicationJsonSchemaChannel"},"ServiceTabsGetParametersStatus":{"type":"string","enum":["open","closing","paid","voided","abandoned"],"title":"ServiceTabsGetParametersStatus"},"SubscriptionsUpdateSubscriptionRequest0":{"type":"object","properties":{"payment_method_id":{"type":"string","description":"ID del método de pago activo del suscriptor (ej. `pay_m_7v5ie3pw`)"}},"required":["payment_method_id"],"title":"SubscriptionsUpdateSubscriptionRequest0"},"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf1Act":{"type":"string","enum":["pause","unpause"],"description":"Acción a realizar: `pause` para pausar, `unpause` para reactivar","title":"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf1Act"},"SubscriptionsUpdateSubscriptionRequest1":{"type":"object","properties":{"act":{"$ref":"#/components/schemas/SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf1Act","description":"Acción a realizar: `pause` para pausar, `unpause` para reactivar"},"resumes_on":{"type":"string","format":"date","description":"(Opcional, solo para `pause`) Fecha en la que la suscripción se reactivará automáticamente (formato YYYY-MM-DD)"}},"required":["act"],"title":"SubscriptionsUpdateSubscriptionRequest1"},"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2Mode":{"type":"string","enum":["next_cycle","now","now_and_charge"],"description":"Cuándo se aplican los cambios:\n- `next_cycle` (default): espera al siguiente cobro y no genera ajuste.\n- `now`: aplica inmediatamente y suma un prorrateo por los días que falten del ciclo actual al próximo invoice (cobro adicional al agregar, crédito al eliminar).\n- `now_and_charge`: aplica inmediatamente y cobra el prorrateo al instante al método de pago de la suscripción (equivalente a `always_invoice` de Stripe). Requiere un prorrateo neto positivo y mayor al mínimo de la moneda, y un método de pago; de lo contrario responde `422`. Si el cobro se rechaza, no se aplica ningún cambio. Para un cambio que resulte en crédito o en un monto menor al mínimo, usa `now`.\n","title":"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2Mode"},"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2ItemsItems":{"type":"object","properties":{"price_id":{"type":"string","description":"ID del precio recurrente (ej. `pr_abc123`). Acepta también `product_id`; si pasas ambos, `price_id` gana."},"product_id":{"type":"string","description":"ID del producto. Si lo usas, se utiliza el primer precio del producto. Útil cuando aún no conoces el `price_id`."},"quantity":{"type":"integer","description":"(Opcional) Cantidad para agregar. Default `1`. Ignorado cuando `deleted: true`."},"deleted":{"type":"boolean","description":"(Opcional) Si es `true`, elimina ese precio de la suscripción en lugar de agregarlo."}},"title":"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2ItemsItems"},"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2AddInvoiceItemsItems":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto en centavos, en la moneda de la suscripción. Negativo = crédito."},"description":{"type":"string","description":"Descripción del cobro (ej. \"Multa por mora\")."}},"required":["amount_in_cents","description"],"title":"SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2AddInvoiceItemsItems"},"SubscriptionsUpdateSubscriptionRequest2":{"type":"object","properties":{"mode":{"$ref":"#/components/schemas/SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2Mode","description":"Cuándo se aplican los cambios:\n- `next_cycle` (default): espera al siguiente cobro y no genera ajuste.\n- `now`: aplica inmediatamente y suma un prorrateo por los días que falten del ciclo actual al próximo invoice (cobro adicional al agregar, crédito al eliminar).\n- `now_and_charge`: aplica inmediatamente y cobra el prorrateo al instante al método de pago de la suscripción (equivalente a `always_invoice` de Stripe). Requiere un prorrateo neto positivo y mayor al mínimo de la moneda, y un método de pago; de lo contrario responde `422`. Si el cobro se rechaza, no se aplica ningún cambio. Para un cambio que resulte en crédito o en un monto menor al mínimo, usa `now`.\n"},"items":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2ItemsItems"},"description":"Lista de cambios. Cada item es un producto a agregar (default) o a eliminar (`deleted: true`)."},"add_invoice_items":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionsIdPutRequestBodyContentApplicationJsonSchemaOneOf2AddInvoiceItemsItems"},"description":"Cobros únicos (cargos o créditos) que se agregan como InvoiceItems pendientes al próximo cobro de la suscripción — equivalente a `add_invoice_items` de Stripe. Puedes enviarlos solos o junto con `items` (todo se aplica en una sola operación atómica). Un monto negativo es un crédito."}},"title":"SubscriptionsUpdateSubscriptionRequest2"},"Subscriptions_updateSubscription_Request":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionsUpdateSubscriptionRequest0"},{"$ref":"#/components/schemas/SubscriptionsUpdateSubscriptionRequest1"},{"$ref":"#/components/schemas/SubscriptionsUpdateSubscriptionRequest2"}],"title":"Subscriptions_updateSubscription_Request"},"SubscriptionsIdPutResponsesContentApplicationJsonSchemaStatus":{"type":"string","enum":["active","paused","past_due","cancelled"],"description":"Estado de la suscripción","title":"SubscriptionsIdPutResponsesContentApplicationJsonSchemaStatus"},"SubscriptionsIdPutResponsesContentApplicationJsonSchemaDefaultPaymentMethodCard":{"type":"object","properties":{"last4":{"type":"string","description":"Últimos 4 dígitos de la tarjeta"},"network":{"type":"string","description":"Red de la tarjeta"}},"title":"SubscriptionsIdPutResponsesContentApplicationJsonSchemaDefaultPaymentMethodCard"},"SubscriptionsIdPutResponsesContentApplicationJsonSchemaDefaultPaymentMethod":{"type":"object","properties":{"id":{"type":"string","description":"ID del método de pago"},"type":{"type":"string","description":"Tipo de método de pago"},"card":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionsIdPutResponsesContentApplicationJsonSchemaDefaultPaymentMethodCard"},{"type":"null"}]}},"description":"Método de pago predeterminado de la suscripción","title":"SubscriptionsIdPutResponsesContentApplicationJsonSchemaDefaultPaymentMethod"},"Subscriber":{"type":"object","properties":{"id":{"type":"string","description":"ID del usuario suscriptor"},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"full_name":{"type":["string","null"]},"email":{"type":"string","format":"email"},"phone_number":{"type":["string","null"]}},"title":"Subscriber"},"SubscriptionsIdPutResponsesContentApplicationJsonSchemaCheckout":{"type":"object","properties":{"id":{"type":"string","description":"ID del checkout que originó la suscripción"}},"title":"SubscriptionsIdPutResponsesContentApplicationJsonSchemaCheckout"},"SubscriptionsIdPutResponsesContentApplicationJsonSchemaProduct":{"type":"object","properties":{"id":{"type":"string","description":"ID del producto asociado"}},"title":"SubscriptionsIdPutResponsesContentApplicationJsonSchemaProduct"},"SubscriptionsIdPutResponsesContentApplicationJsonSchemaProrationCharge":{"type":"object","properties":{"amount_in_cents":{"type":"integer"},"currency":{"type":"string"},"status":{"type":"string"}},"description":"Presente solo con `mode: now_and_charge`: detalla el cobro inmediato del prorrateo. `null` en los demás modos.","title":"SubscriptionsIdPutResponsesContentApplicationJsonSchemaProrationCharge"},"Subscriptions_updateSubscription_Response_200":{"type":"object","properties":{"id":{"type":"string","description":"ID único de la suscripción"},"description":{"type":"string","description":"Descripción de la suscripción"},"status":{"$ref":"#/components/schemas/SubscriptionsIdPutResponsesContentApplicationJsonSchemaStatus","description":"Estado de la suscripción"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"updated_at":{"type":"string","format":"date-time","description":"Última actualización"},"current_period_start":{"type":["string","null"],"format":"date-time","description":"Inicio del período de facturación actual"},"current_period_end":{"type":["string","null"],"format":"date-time","description":"Fin del período de facturación actual"},"tax_name":{"type":["string","null"],"description":"Nombre fiscal del suscriptor"},"tax_id":{"type":["string","null"],"description":"ID fiscal del suscriptor"},"resumes_on":{"type":["string","null"],"format":"date","description":"Fecha de reactivación automática (si está pausada)"},"next_payment_attempt_at":{"type":["string","null"],"format":"date-time","description":"Próximo intento de cobro automático (solo cuando el estado es `past_due`)"},"payment_retries":{"type":"integer","description":"Número de reintentos de cobro realizados para el período actual. Recurrente intenta cobrar una vez al día por 15 días antes de cancelar la suscripción."},"metadata":{"$ref":"#/components/schemas/Metadata","description":"Metadata persistida durante todo el ciclo de vida de la suscripción y expuesta en sus webhooks."},"test_clock_id":{"type":["string","null"],"description":"ID del test clock heredado del Customer. Solo está presente en un Sandbox nombrado."},"default_payment_method":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionsIdPutResponsesContentApplicationJsonSchemaDefaultPaymentMethod"},{"type":"null"}],"description":"Método de pago predeterminado de la suscripción"},"subscriber":{"$ref":"#/components/schemas/Subscriber"},"checkout":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionsIdPutResponsesContentApplicationJsonSchemaCheckout"},{"type":"null"}]},"product":{"$ref":"#/components/schemas/SubscriptionsIdPutResponsesContentApplicationJsonSchemaProduct"},"transfer_setups":{"type":"array","items":{"$ref":"#/components/schemas/TransferSetup"},"description":"Transferencias automáticas recurrentes de esta suscripción. En cada cobro exitoso, cada una transfiere su `amount_percent` del total de la factura a la cuenta destinataria."},"proration_charge":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionsIdPutResponsesContentApplicationJsonSchemaProrationCharge"},{"type":"null"}],"description":"Presente solo con `mode: now_and_charge`: detalla el cobro inmediato del prorrateo. `null` en los demás modos."}},"title":"Subscriptions_updateSubscription_Response_200"},"InvoiceItemObject":{"type":"string","enum":["invoice_item"],"description":"Tipo estable del recurso","title":"InvoiceItemObject"},"InvoiceItemStatus":{"type":"string","enum":["pending","applied","cancelled"],"description":"Estado: `pending` (en cola), `applied` (ya aplicado a una factura), `cancelled`.","title":"InvoiceItemStatus"},"InvoiceItem":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/InvoiceItemObject","description":"Tipo estable del recurso"},"id":{"type":"string","description":"ID único del cobro"},"status":{"$ref":"#/components/schemas/InvoiceItemStatus","description":"Estado: `pending` (en cola), `applied` (ya aplicado a una factura), `cancelled`."},"amount_in_cents":{"type":"integer","description":"Monto en centavos. Positivo para un cargo, negativo para un crédito."},"currency":{"type":"string","description":"Moneda (coincide con la de la suscripción)"},"description":{"type":"string","description":"Descripción visible para el cliente"},"subscription_id":{"type":"string","description":"ID de la suscripción"},"invoice_id":{"type":["string","null"],"description":"ID de la factura en la que se cobró (null mientras está pendiente)"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"title":"InvoiceItem"},"CancelSubscriptionInvoiceItemRequestUnprocessableEntityError":{"type":"object","properties":{"message":{"type":"string"}},"title":"CancelSubscriptionInvoiceItemRequestUnprocessableEntityError"},"Subscriptions_cancelSubscription_Response_200":{"type":"object","properties":{"message":{"type":"string"}},"title":"Subscriptions_cancelSubscription_Response_200"},"SubscriptionStatus":{"type":"string","enum":["active","paused","past_due","cancelled"],"description":"Estado de la suscripción","title":"SubscriptionStatus"},"SubscriptionDefaultPaymentMethodCard":{"type":"object","properties":{"last4":{"type":"string","description":"Últimos 4 dígitos de la tarjeta"},"network":{"type":"string","description":"Red de la tarjeta"}},"title":"SubscriptionDefaultPaymentMethodCard"},"SubscriptionDefaultPaymentMethod":{"type":"object","properties":{"id":{"type":"string","description":"ID del método de pago"},"type":{"type":"string","description":"Tipo de método de pago"},"card":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionDefaultPaymentMethodCard"},{"type":"null"}]}},"description":"Método de pago predeterminado de la suscripción","title":"SubscriptionDefaultPaymentMethod"},"SubscriptionCheckout":{"type":"object","properties":{"id":{"type":"string","description":"ID del checkout que originó la suscripción"}},"title":"SubscriptionCheckout"},"SubscriptionProduct":{"type":"object","properties":{"id":{"type":"string","description":"ID del producto asociado"}},"title":"SubscriptionProduct"},"Subscription":{"type":"object","properties":{"id":{"type":"string","description":"ID único de la suscripción"},"description":{"type":"string","description":"Descripción de la suscripción"},"status":{"$ref":"#/components/schemas/SubscriptionStatus","description":"Estado de la suscripción"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"updated_at":{"type":"string","format":"date-time","description":"Última actualización"},"current_period_start":{"type":["string","null"],"format":"date-time","description":"Inicio del período de facturación actual"},"current_period_end":{"type":["string","null"],"format":"date-time","description":"Fin del período de facturación actual"},"tax_name":{"type":["string","null"],"description":"Nombre fiscal del suscriptor"},"tax_id":{"type":["string","null"],"description":"ID fiscal del suscriptor"},"resumes_on":{"type":["string","null"],"format":"date","description":"Fecha de reactivación automática (si está pausada)"},"next_payment_attempt_at":{"type":["string","null"],"format":"date-time","description":"Próximo intento de cobro automático (solo cuando el estado es `past_due`)"},"payment_retries":{"type":"integer","description":"Número de reintentos de cobro realizados para el período actual. Recurrente intenta cobrar una vez al día por 15 días antes de cancelar la suscripción."},"metadata":{"$ref":"#/components/schemas/Metadata","description":"Metadata persistida durante todo el ciclo de vida de la suscripción y expuesta en sus webhooks."},"test_clock_id":{"type":["string","null"],"description":"ID del test clock heredado del Customer. Solo está presente en un Sandbox nombrado."},"default_payment_method":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionDefaultPaymentMethod"},{"type":"null"}],"description":"Método de pago predeterminado de la suscripción"},"subscriber":{"$ref":"#/components/schemas/Subscriber"},"checkout":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionCheckout"},{"type":"null"}]},"product":{"$ref":"#/components/schemas/SubscriptionProduct"},"transfer_setups":{"type":"array","items":{"$ref":"#/components/schemas/TransferSetup"},"description":"Transferencias automáticas recurrentes de esta suscripción. En cada cobro exitoso, cada una transfiere su `amount_percent` del total de la factura a la cuenta destinataria."}},"title":"Subscription"},"SubscriptionsIdProrationPreviewPostRequestBodyContentApplicationJsonSchemaMode":{"type":"string","enum":["next_cycle","now","now_and_charge"],"description":"Mismo significado que en `PUT /subscriptions/{id}`. `next_cycle` no genera prorrateo.","title":"SubscriptionsIdProrationPreviewPostRequestBodyContentApplicationJsonSchemaMode"},"SubscriptionsIdProrationPreviewPostRequestBodyContentApplicationJsonSchemaItemsItems":{"type":"object","properties":{"price_id":{"type":"string"},"product_id":{"type":"string"},"quantity":{"type":"integer"},"deleted":{"type":"boolean"}},"title":"SubscriptionsIdProrationPreviewPostRequestBodyContentApplicationJsonSchemaItemsItems"},"SubscriptionsIdProrationPreviewPostResponsesContentApplicationJsonSchemaLinesItems":{"type":"object","properties":{"description":{"type":"string"},"amount_in_cents":{"type":"integer"}},"title":"SubscriptionsIdProrationPreviewPostResponsesContentApplicationJsonSchemaLinesItems"},"Subscriptions_previewSubscriptionProration_Response_200":{"type":"object","properties":{"net_amount_in_cents":{"type":"integer","description":"Prorrateo neto en centavos. Positivo = cobro; negativo = crédito."},"currency":{"type":"string"},"chargeable":{"type":"boolean","description":"`true` si el neto puede cobrarse de inmediato (positivo y mayor al mínimo de la moneda)."},"lines":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionsIdProrationPreviewPostResponsesContentApplicationJsonSchemaLinesItems"},"description":"Desglose por producto (prorrateos positivos y créditos)."}},"title":"Subscriptions_previewSubscriptionProration_Response_200"},"SwapsPostRequestBodyContentApplicationJsonSchemaDestinationCurrency":{"type":"string","enum":["USDC","USDT","USAT","XAUT","PYUSD"],"title":"SwapsPostRequestBodyContentApplicationJsonSchemaDestinationCurrency"},"SwapsPostRequestBodyContentApplicationJsonSchemaChain":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche_c_chain","optimism","solana","tron"],"title":"SwapsPostRequestBodyContentApplicationJsonSchemaChain"},"SwapStatus":{"type":"string","enum":["pending","in_review","processing","rejected","sent","failed","completed"],"title":"SwapStatus"},"SwapDestinationCurrency":{"type":"string","enum":["USDC","USDT","USAT","XAUT","PYUSD"],"title":"SwapDestinationCurrency"},"Swap":{"type":"object","properties":{"id":{"type":"string"},"status":{"$ref":"#/components/schemas/SwapStatus"},"source_currency":{"type":"string"},"source_amount":{"type":"integer","description":"Monto origen en la unidad mínima de la moneda"},"destination_currency":{"$ref":"#/components/schemas/SwapDestinationCurrency"},"destination_amount":{"type":"integer"},"exchange_rate":{"type":"number","format":"double"},"chain":{"type":"string"},"recipient_address":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"}},"title":"Swap"},"TerminalBatchStatus":{"type":"string","enum":["open","closed","settled"],"description":"Estado del lote","title":"TerminalBatchStatus"},"TerminalBatchTotalCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda principal del lote","title":"TerminalBatchTotalCurrency"},"TerminalBatch":{"type":"object","properties":{"id":{"type":"string","description":"ID del lote cerrado"},"status":{"$ref":"#/components/schemas/TerminalBatchStatus","description":"Estado del lote"},"terminal_id":{"type":"string","description":"ID de la terminal POS"},"transaction_count":{"type":"integer","description":"Cantidad de transacciones exitosas incluidas en el lote"},"total_in_cents":{"type":"integer","description":"Total agregado del lote en centavos"},"total_currency":{"$ref":"#/components/schemas/TerminalBatchTotalCurrency","description":"Moneda principal del lote"},"totals_by_currency":{"type":"object","additionalProperties":{"type":"integer"},"description":"Totales del lote agrupados por moneda"},"opened_at":{"type":"string","format":"date-time","description":"Fecha y hora en que se abrió el lote"},"closed_at":{"type":["string","null"],"format":"date-time","description":"Fecha y hora en que se cerró el lote"}},"title":"TerminalBatch"},"TerminalSessionCommandStatus":{"type":"string","enum":["pending","dispatched","cancel_requested","canceled","superseded","consumed","failed"],"description":"Estado del comando","title":"TerminalSessionCommandStatus"},"TerminalSessionCommandCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda del cobro","title":"TerminalSessionCommandCurrency"},"TerminalSessionCommandTerminalAvailability":{"type":"string","enum":["available","unavailable"],"description":"Disponibilidad observada de la terminal para recibir comandos","title":"TerminalSessionCommandTerminalAvailability"},"TerminalSessionCommandCheckoutStatus":{"type":"string","enum":["unpaid","paid","failed","payment_in_progress","needs_verification","no_payment_required","verification_failed","needs_payer_authentication"],"description":"Estado actual del checkout asociado","title":"TerminalSessionCommandCheckoutStatus"},"TerminalSessionCommand":{"type":"object","properties":{"id":{"type":"string","description":"ID público aleatorio del comando"},"external_id":{"type":"string","description":"ID único de tu sistema dentro de la cuenta autenticada"},"status":{"$ref":"#/components/schemas/TerminalSessionCommandStatus","description":"Estado del comando"},"final":{"type":"boolean","description":"`true` cuando el comando alcanzó un resultado definitivo y ya no puede cambiar"},"terminal_id":{"type":"string","description":"ID de la terminal POS"},"amount_in_cents":{"type":"integer","description":"Monto en centavos"},"currency":{"$ref":"#/components/schemas/TerminalSessionCommandCurrency","description":"Moneda del cobro"},"installments":{"type":["integer","null"],"description":"Meses sin intereses solicitados, o `null` si el cobro va sin cuotas"},"show_post_payment_screens":{"type":"boolean","description":"Indica si el comando solicita mostrar las pantallas post-pago de NIT, correo y teléfono"},"terminal_availability":{"$ref":"#/components/schemas/TerminalSessionCommandTerminalAvailability","description":"Disponibilidad observada de la terminal para recibir comandos"},"checkout_id":{"type":"string","description":"ID del checkout generado"},"checkout_url":{"type":"string","format":"uri","description":"URL del checkout (la terminal usa esta URL internamente)"},"checkout_status":{"$ref":"#/components/schemas/TerminalSessionCommandCheckoutStatus","description":"Estado actual del checkout asociado"},"cancellation_requested_at":{"type":["string","null"],"format":"date-time","description":"Momento en que se solicitó detener un comando ya despachado"},"canceled_at":{"type":["string","null"],"format":"date-time","description":"Momento en que la cancelación se volvió definitiva"}},"title":"TerminalSessionCommand"},"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaStatus":{"type":"string","enum":["pending","dispatched","cancel_requested","canceled","superseded","consumed","failed"],"description":"Estado del comando","title":"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaStatus"},"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda del cobro","title":"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaCurrency"},"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaTerminalAvailability":{"type":"string","enum":["available","unavailable"],"description":"Disponibilidad observada de la terminal para recibir comandos","title":"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaTerminalAvailability"},"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaCheckoutStatus":{"type":"string","enum":["unpaid","paid","failed","payment_in_progress","needs_verification","no_payment_required","verification_failed","needs_payer_authentication"],"description":"Estado actual del checkout asociado","title":"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaCheckoutStatus"},"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaErrors":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},{"type":"string"}],"description":"Detalles de errores por campo","title":"TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaErrors"},"CancelTerminalSessionCommandRequestConflictError":{"type":"object","properties":{"id":{"type":"string","description":"ID público aleatorio del comando"},"external_id":{"type":"string","description":"ID único de tu sistema dentro de la cuenta autenticada"},"status":{"$ref":"#/components/schemas/TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaStatus","description":"Estado del comando"},"final":{"type":"boolean","description":"`true` cuando el comando alcanzó un resultado definitivo y ya no puede cambiar"},"terminal_id":{"type":"string","description":"ID de la terminal POS"},"amount_in_cents":{"type":"integer","description":"Monto en centavos"},"currency":{"$ref":"#/components/schemas/TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaCurrency","description":"Moneda del cobro"},"installments":{"type":["integer","null"],"description":"Meses sin intereses solicitados, o `null` si el cobro va sin cuotas"},"show_post_payment_screens":{"type":"boolean","description":"Indica si el comando solicita mostrar las pantallas post-pago de NIT, correo y teléfono"},"terminal_availability":{"$ref":"#/components/schemas/TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaTerminalAvailability","description":"Disponibilidad observada de la terminal para recibir comandos"},"checkout_id":{"type":"string","description":"ID del checkout generado"},"checkout_url":{"type":"string","format":"uri","description":"URL del checkout (la terminal usa esta URL internamente)"},"checkout_status":{"$ref":"#/components/schemas/TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaCheckoutStatus","description":"Estado actual del checkout asociado"},"cancellation_requested_at":{"type":["string","null"],"format":"date-time","description":"Momento en que se solicitó detener un comando ya despachado"},"canceled_at":{"type":["string","null"],"format":"date-time","description":"Momento en que la cancelación se volvió definitiva"},"message":{"type":"string","description":"Mensaje de error"},"code":{"type":"string","description":"Código estable legible por máquinas, cuando aplica"},"refund_id":{"type":"string","description":"ID del reembolso relacionado cuando aplica"},"endpoint":{"type":"string","description":"Acción de API rechazada, cuando aplica"},"errors":{"$ref":"#/components/schemas/TerminalSessionCommandsRandomIdDeleteResponsesContentApplicationJsonSchemaErrors","description":"Detalles de errores por campo"}},"title":"CancelTerminalSessionCommandRequestConflictError"},"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda del cobro","title":"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaCurrency"},"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaInstallments":{"type":"string","enum":["3","6","12","18"],"description":"Número de meses sin intereses. Solo válido con `currency: GTQ`. Valores permitidos por defecto `[3, 6, 12, 18]` (puede variar por cuenta).","title":"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaInstallments"},"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItemsPurpose":{"type":"string","enum":["fund_split","platform_commission"],"default":"fund_split","description":"Usa `platform_commission` cuando una cuenta conectada paga esta comisión a tu plataforma.","title":"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItemsPurpose"},"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItems":{"type":"object","properties":{"amount_in_cents":{"type":"integer","description":"Monto en centavos a transferir. No puede exceder el monto neto disponible después de fees, FEL e IVA."},"recipient_id":{"type":"string","description":"ID de la cuenta destinataria (tu cuenta o una cuenta conectada). Si se omite, se usa tu cuenta."},"purpose":{"$ref":"#/components/schemas/TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItemsPurpose","default":"fund_split","description":"Usa `platform_commission` cuando una cuenta conectada paga esta comisión a tu plataforma."}},"title":"TerminalSessionCommandsPostRequestBodyContentApplicationJsonSchemaTransferSetupsItems"},"TestClocksIdAdvancePostRequestBodyContentApplicationJsonSchemaNextChargeOutcome":{"type":"string","enum":["success","decline"],"title":"TestClocksIdAdvancePostRequestBodyContentApplicationJsonSchemaNextChargeOutcome"},"TestClockStatus":{"type":"string","enum":["ready","advancing","failed","deleted"],"title":"TestClockStatus"},"TestClockNextChargeOutcome":{"type":"string","enum":["success","decline"],"title":"TestClockNextChargeOutcome"},"TestClock":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/TestClockStatus"},"frozen_at":{"type":"string","format":"date-time"},"advancing_to":{"type":["string","null"],"format":"date-time"},"next_charge_outcome":{"$ref":"#/components/schemas/TestClockNextChargeOutcome"},"last_error":{"type":["string","null"]}},"required":["id","name","status","frozen_at","next_charge_outcome"],"title":"TestClock"},"TestClocksPostRequestBodyContentApplicationJsonSchemaNextChargeOutcome":{"type":"string","enum":["success","decline"],"default":"success","title":"TestClocksPostRequestBodyContentApplicationJsonSchemaNextChargeOutcome"},"SandboxWebhookEventType":{"type":"string","enum":["account_connection.create","automated_bank_transfer_intent.succeeded","balance_intent.paid","balance_intent.succeeded","bank_transfer_intent.create","bank_transfer_intent.failed","bank_transfer_intent.pending","bank_transfer_intent.succeeded","bank_transfer_intent.update","cash_intent.succeeded","connected_account_fee_invoice.failed","connected_account_fee_invoice.issued","crypto_intent.create","crypto_intent.pending","crypto_intent.succeeded","crypto_intent.update","dispute.create","dispute.update","intent.canceled","intent.failed","intent.paid","intent.pending","intent.succeeded","partner_commission_invoice.failed","partner_commission_invoice.issued","payment_intent.failed","payment_intent.requires_capture","payment_intent.requires_verification","payment_intent.succeeded","refund.create","setup_intent.cancelled","setup_intent.succeeded","subscription.cancel","subscription.create","subscription.invoice_item_added","subscription.item_added","subscription.item_removed","subscription.past_due","subscription.pause","subscription.reactivate","subscription.unpause","subscription.update","swap.create","swap.update","transfer.received","transfer.sent","verification.rejected","withdrawal.create","withdrawal.update"],"description":"Tipo de evento publicado que debe emitir el fixture.","title":"SandboxWebhookEventType"},"SandboxWebhookEventRequest":{"type":"object","properties":{"event_type":{"$ref":"#/components/schemas/SandboxWebhookEventType"},"data":{"type":"object","additionalProperties":{"description":"Any type"},"default":{},"description":"Campos del payload de prueba. Recurrente reemplaza `id` y `created_at`\ncon la identidad y fecha persistidas del fixture.\n"}},"required":["event_type"],"title":"SandboxWebhookEventRequest"},"SandboxWebhookEvent":{"type":"object","properties":{"id":{"type":"string","pattern":"^swe_"},"event_type":{"$ref":"#/components/schemas/SandboxWebhookEventType"},"data":{"type":"object","additionalProperties":{"description":"Any type"},"description":"Payload base normalizado, incluidos `id` y `created_at`. La entrega Svix\nagrega `event_type` y `sandbox_id`.\n"},"created_at":{"type":"string","format":"date-time"}},"required":["id","event_type","data","created_at"],"title":"SandboxWebhookEvent"},"TransferStatus":{"type":"string","enum":["pending","in_review","processing","sent","unclaimed","completed","failed","cancelled"],"description":"Estado canónico del movimiento","title":"TransferStatus"},"TransferBankReferenceStatus":{"type":"string","enum":["available","pending","unsupported"],"description":"Qué esperar de `bank_reference`: `available` si ya existe, `pending` si el retiro aún no sale y podría traerla, y `unsupported` si ya salió por un riel que nunca devuelve una. Con `unsupported`, concilia el depósito por `statement_descriptor`.\n","title":"TransferBankReferenceStatus"},"TransferDestinationType":{"type":"string","enum":["bank_account","account","phone_number","crypto_address"],"title":"TransferDestinationType"},"TransferDestination":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/TransferDestinationType"},"id":{"type":["string","null"],"description":"ID del recurso destino (`ba_` cuenta bancaria, `ac_` cuenta, `cr_` dirección cripto)"},"bank_name":{"type":"string","description":"bank_account: banco destino"},"holder_name":{"type":"string","description":"bank_account: titular de la cuenta bancaria"},"currency":{"type":"string","description":"bank_account: moneda de la cuenta bancaria. crypto_address: stablecoin enviada"},"name":{"type":"string","description":"account: nombre de la cuenta destinataria"},"number":{"type":"string","description":"phone_number: teléfono del destinatario"},"address":{"type":"string","description":"crypto_address: dirección on-chain"},"chain":{"type":"string","description":"crypto_address: red del envío"},"amount":{"type":"integer","description":"crypto_address: monto en unidades menores de la stablecoin que llega al destino"}},"description":"Destino del movimiento. Los campos presentes dependen de `type`.","title":"TransferDestination"},"TransferSender":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"description":"(Solo registros tr_) Cuenta emisora — campo legado","title":"TransferSender"},"TransferRecipient":{"type":"object","properties":{"id":{"type":["string","null"]},"name":{"type":"string"},"type":{"type":"string"}},"description":"(Solo registros tr_) Destinatario — campo legado","title":"TransferRecipient"},"Transfer":{"type":"object","properties":{"id":{"type":"string","description":"ID del movimiento (tr_ / wi_ / sw_)"},"status":{"$ref":"#/components/schemas/TransferStatus","description":"Estado canónico del movimiento"},"status_detail":{"type":"string","description":"Estado crudo del registro subyacente (p. ej. `approved`, `rejected`, `review_requested`)"},"amount_in_cents":{"type":"integer","description":"Monto en centavos debitado del balance"},"currency":{"type":"string","description":"Moneda del balance de origen"},"fee_in_cents":{"type":"integer","description":"Comisión en centavos (retiros instantáneos / internacionales; 0 para p2p)"},"net_amount_in_cents":{"type":"integer","description":"Monto neto que llega al destino después de comisiones"},"note":{"type":["string","null"],"description":"Nota del movimiento"},"account_id":{"type":"string","description":"Cuenta cuyo balance movió este envío. Siempre presente, para que una lista que abarca varias cuentas de una organización siga siendo atribuible."},"sent_at":{"type":["string","null"],"format":"date-time","description":"Momento en que Recurrente envió el retiro al banco; solo aplica a retiros bancarios (`wi_`)."},"settled_at":{"type":["string","null"],"format":"date-time","description":"Momento de liquidación bancaria confirmada. Solo está presente para retiros bancarios confirmados o completados (`wi_`)."},"bank_reference":{"type":["string","null"],"description":"Referencia que devolvió el riel de envío, cuando ese riel devuelve una. Solo aplica a movimientos `wi_`; no identifica ni enumera transacciones que conformen el retiro."},"bank_reference_status":{"oneOf":[{"$ref":"#/components/schemas/TransferBankReferenceStatus"},{"type":"null"}],"description":"Qué esperar de `bank_reference`: `available` si ya existe, `pending` si el retiro aún no sale y podría traerla, y `unsupported` si ya salió por un riel que nunca devuelve una. Con `unsupported`, concilia el depósito por `statement_descriptor`.\n"},"statement_descriptor":{"type":["string","null"],"description":"Lo que le pedimos al banco que imprima en el estado de cuenta del beneficiario. Solo aplica a movimientos `wi_`."},"balance_transaction_id":{"type":["string","null"],"description":"Fila del ledger que registró este movimiento (`GET /api/balance_transactions/{id}`). Vacío mientras el dinero no haya salido del balance."},"destination":{"$ref":"#/components/schemas/TransferDestination"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación"},"sender":{"$ref":"#/components/schemas/TransferSender","description":"(Solo registros tr_) Cuenta emisora — campo legado"},"recipient":{"$ref":"#/components/schemas/TransferRecipient","description":"(Solo registros tr_) Destinatario — campo legado"},"reversal_of_id":{"type":"string","description":"ID del transfer original; solo aparece en reversos por reembolso"},"refund_id":{"type":"string","description":"ID del reembolso que originó el reverso"}},"description":"Movimiento unificado de dinero saliendo de un balance. El prefijo del `id` indica el registro subyacente: `wi_` retiro bancario, `tr_` transferencia p2p, `sw_` envío de stablecoin. Los registros p2p (`tr_`) conservan además los campos legados `sender` y `recipient`.\n","title":"Transfer"},"TransfersPostRequestBodyContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Moneda del balance de origen. Para destinos `bank_account` es opcional (por defecto, la moneda de la cuenta bancaria); requerida para los demás destinos.","title":"TransfersPostRequestBodyContentApplicationJsonSchemaCurrency"},"TransferDestinationRequestType":{"type":"string","enum":["bank_account","account","phone_number","crypto_address"],"title":"TransferDestinationRequestType"},"TransferDestinationRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/TransferDestinationRequestType"},"id":{"type":"string","description":"bank_account: ID de tu cuenta bancaria (ba_). account: ID (ac_) o handle (@) de la cuenta destinataria. crypto_address: ID de una dirección guardada (cr_)."},"number":{"type":"string","description":"phone_number: teléfono del destinatario"},"contact_id":{"type":"string","description":"phone_number: ID de un contacto guardado (co_), alternativo a number"},"address":{"type":"string","description":"crypto_address: dirección on-chain, alternativa a id"},"chain":{"type":"string","description":"crypto_address: red (base, ethereum, polygon, solana, stellar, tron…)"},"currency":{"type":"string","description":"crypto_address: stablecoin a enviar (USDC, USDT…)"},"blockchain_memo":{"type":"string","description":"crypto_address: memo on-chain (requerido en stellar)"}},"required":["type"],"description":"Destino tipado del movimiento. Los campos aplicables dependen de `type`.","title":"TransferDestinationRequest"},"TransfersPostRequestBodyContentApplicationJsonSchemaDestination":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/TransferDestinationRequest"}],"description":"A dónde va el dinero — el identificador como string (`ba_`/`ac_`/`co_` id, `@handle` o teléfono), o el objeto tipado para stablecoin y casos avanzados","title":"TransfersPostRequestBodyContentApplicationJsonSchemaDestination"},"TransfersGetParametersTypesSchemaItems":{"type":"string","enum":["bank_account","account","phone_number","crypto_address"],"title":"TransfersGetParametersTypesSchemaItems"},"User":{"type":"object","properties":{"id":{"type":"string","description":"ID del usuario"},"email":{"type":"string","format":"email","description":"Email del usuario"}},"title":"User"},"Webhook Endpoints_deleteWebhookEndpoint_Response_200":{"type":"object","properties":{"message":{"type":"string"}},"title":"Webhook Endpoints_deleteWebhookEndpoint_Response_200"},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string","description":"ID del endpoint"},"url":{"type":"string","format":"uri","description":"URL que recibe los webhooks"},"description":{"type":"string","description":"Descripción del endpoint"},"disabled":{"type":"boolean","description":"Si el endpoint está deshabilitado"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Metadata personalizada"},"createdAt":{"type":"string","format":"date-time","description":"Fecha de creación"},"updatedAt":{"type":"string","format":"date-time","description":"Última actualización"}},"title":"WebhookEndpoint"},"WebhookEndpointWithSecret":{"type":"object","properties":{"id":{"type":"string","description":"ID del endpoint"},"url":{"type":"string","format":"uri","description":"URL que recibe los webhooks"},"description":{"type":"string","description":"Descripción del endpoint"},"disabled":{"type":"boolean","description":"Si el endpoint está deshabilitado"},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Metadata personalizada"},"createdAt":{"type":"string","format":"date-time","description":"Fecha de creación"},"updatedAt":{"type":"string","format":"date-time","description":"Última actualización"},"signingSecret":{"type":"string","description":"Secret para verificar las firmas de los webhooks. Solo se devuelve al\ncrear el endpoint, no al listarlos.\n"}},"title":"WebhookEndpointWithSecret"},"WithdrawalsPostRequestBodyContentApplicationJsonSchemaCurrency":{"type":"string","enum":["GTQ","USD"],"description":"Por defecto, la moneda de la cuenta bancaria","title":"WithdrawalsPostRequestBodyContentApplicationJsonSchemaCurrency"},"SubscriptionWebhookProduct":{"type":"object","properties":{},"title":"SubscriptionWebhookProduct"},"SubscriptionWebhookPayment":{"type":"object","properties":{},"title":"SubscriptionWebhookPayment"},"SubscriptionWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"id":{"type":"string"},"api_version":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"customer_id":{"type":"string"},"user_id":{"type":"string"},"customer_name":{"type":"string"},"customer_email":{"type":"string","format":"email"},"product":{"$ref":"#/components/schemas/SubscriptionWebhookProduct"},"payment":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionWebhookPayment"},{"type":"null"}]},"resumes_on":{"type":["string","null"],"format":"date"},"next_payment_attempt_at":{"type":["string","null"],"format":"date-time"},"payment_retries":{"type":"integer"}},"required":["event_type","id","api_version","created_at","customer_id","user_id","product"],"title":"SubscriptionWebhook"},"DisputeWebhookEventType":{"type":"string","enum":["dispute.create","dispute.update"],"description":"Tipo de evento webhook","title":"DisputeWebhookEventType"},"DisputeWebhookStatus":{"type":"string","enum":["needs_response","under_review","charge_refunded","closed","won","lost"],"description":"Estado actual del contracargo","title":"DisputeWebhookStatus"},"DisputeWebhookReason":{"type":"string","enum":["bank_cannot_process","check_returned","credit_not_processed","customer_initiated","debit_not_authorized","duplicate","fraudulent","general","incorrect_account_details","incorrect_amount","insufficient_funds","product_not_received","product_unacceptable","subscription_canceled","unrecognized"],"description":"Razón reportada por el emisor o tarjetahabiente","title":"DisputeWebhookReason"},"DisputeWebhook":{"type":"object","properties":{"id":{"type":"string","description":"ID único del contracargo"},"event_type":{"$ref":"#/components/schemas/DisputeWebhookEventType","description":"Tipo de evento webhook"},"api_version":{"type":"string","description":"Versión del payload webhook"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación del contracargo en Recurrente"},"status":{"$ref":"#/components/schemas/DisputeWebhookStatus","description":"Estado actual del contracargo"},"reason":{"$ref":"#/components/schemas/DisputeWebhookReason","description":"Razón reportada por el emisor o tarjetahabiente"},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento fue generado por una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que generó el evento cuando `connected` es `true`."}},"required":["id","event_type","api_version","created_at","status","reason"],"title":"DisputeWebhook"},"AccountConnectionWebhookEventType":{"type":"string","enum":["account_connection.create"],"description":"Tipo de evento webhook","title":"AccountConnectionWebhookEventType"},"AccountConnectionWebhookStatus":{"type":"string","enum":["active"],"description":"Estado de la conexión","title":"AccountConnectionWebhookStatus"},"AccountConnectionWebhook":{"type":"object","properties":{"id":{"type":"string","description":"ID único de la conexión entre cuentas"},"event_type":{"$ref":"#/components/schemas/AccountConnectionWebhookEventType","description":"Tipo de evento webhook"},"status":{"$ref":"#/components/schemas/AccountConnectionWebhookStatus","description":"Estado de la conexión"},"api_version":{"type":"string","description":"Versión del payload webhook"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación de la conexión"},"live_mode":{"type":"boolean","description":"Indica si el evento corresponde a producción"},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento se reenvía a una cuenta padre upstream."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que generó el evento cuando `connected` es `true`."},"parent_account":{"$ref":"#/components/schemas/ConnectedAccount"},"child_account":{"$ref":"#/components/schemas/ConnectedAccount"}},"required":["id","event_type","status","api_version","created_at","live_mode","parent_account","child_account"],"title":"AccountConnectionWebhook"},"VerificationRejectedWebhookStatus":{"type":"string","enum":["pending","completed"],"description":"Estado de la verificación al rechazarse el documento.","title":"VerificationRejectedWebhookStatus"},"VerificationRejectedWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"account":{"$ref":"#/components/schemas/ConnectedAccount"},"status":{"$ref":"#/components/schemas/VerificationRejectedWebhookStatus","description":"Estado de la verificación al rechazarse el documento."},"document_errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Errores por nombre de documento rechazado."},"api_version":{"type":"string"},"created_at":{"type":"string","format":"date-time","description":"Fecha de creación de la verificación."},"live_mode":{"type":"boolean"}},"required":["event_type","account","status","document_errors","api_version","created_at","live_mode"],"title":"VerificationRejectedWebhook"},"SwapWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"api_version":{"type":"string"},"swap":{"$ref":"#/components/schemas/Swap"},"transfer":{"$ref":"#/components/schemas/Transfer"}},"required":["event_type","api_version","swap","transfer"],"title":"SwapWebhook"},"PartnerCommissionInvoiceWebhookEventType":{"type":"string","enum":["partner_commission_invoice.issued","partner_commission_invoice.failed"],"title":"PartnerCommissionInvoiceWebhookEventType"},"PartnerCommissionInvoiceWebhook":{"type":"object","properties":{"event_type":{"$ref":"#/components/schemas/PartnerCommissionInvoiceWebhookEventType"},"api_version":{"type":"string"},"live_mode":{"type":"boolean"},"partner_commission_invoice":{"$ref":"#/components/schemas/PartnerCommissionInvoice"}},"required":["event_type","api_version","live_mode","partner_commission_invoice"],"title":"PartnerCommissionInvoiceWebhook"},"ConnectedAccountFeeInvoiceWebhookEventType":{"type":"string","enum":["connected_account_fee_invoice.issued","connected_account_fee_invoice.failed"],"title":"ConnectedAccountFeeInvoiceWebhookEventType"},"ConnectedAccountFeeInvoiceWebhook":{"type":"object","properties":{"event_type":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoiceWebhookEventType"},"api_version":{"type":"string"},"live_mode":{"type":"boolean"},"connected_account_fee_invoice":{"$ref":"#/components/schemas/ConnectedAccountFeeInvoice"}},"required":["event_type","api_version","live_mode","connected_account_fee_invoice"],"title":"ConnectedAccountFeeInvoiceWebhook"},"UnifiedIntentWebhookType":{"type":"string","enum":["payment","bank_transfer","crypto","balance","cash"],"description":"Tipo de pago subyacente","title":"UnifiedIntentWebhookType"},"UnifiedIntentWebhookStatus":{"type":"string","enum":["pending","succeeded","failed","canceled","paid"],"description":"Estado normalizado. `paid` aplica solo al evento del pagador en pagos con balance (type balance).","title":"UnifiedIntentWebhookStatus"},"UnifiedIntentWebhookCustomer":{"type":"object","properties":{},"description":"Datos del cliente","title":"UnifiedIntentWebhookCustomer"},"UnifiedIntentWebhookProduct":{"type":"object","properties":{},"description":"Producto principal","title":"UnifiedIntentWebhookProduct"},"UnifiedIntentWebhookPayment":{"type":"object","properties":{},"title":"UnifiedIntentWebhookPayment"},"UnifiedIntentWebhookDetails":{"type":"object","properties":{"channel":{"$ref":"#/components/schemas/CardPaymentChannel"}},"description":"Campos específicos del tipo de pago. Para `type: payment`, incluye `failure_reason`, comisiones, cuotas, canal y productos. Para `type: bank_transfer`, incluye `bank_reference` (referencia asignada por el banco o la red de pago) y `sender_comment` (comentario libre del pagador).","title":"UnifiedIntentWebhookDetails"},"UnifiedIntentWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"type":{"$ref":"#/components/schemas/UnifiedIntentWebhookType","description":"Tipo de pago subyacente"},"id":{"type":"string","pattern":"^in_","description":"ID del intent unificado; es la llave canónica para `GET /intents/{id}` y los eventos `intent.*`."},"receipt_number":{"type":"integer"},"api_version":{"type":"string"},"status":{"$ref":"#/components/schemas/UnifiedIntentWebhookStatus","description":"Estado normalizado. `paid` aplica solo al evento del pagador en pagos con balance (type balance)."},"raw_status":{"type":"string","description":"Estado concreto sin normalizar (ej. `requires_capture`)"},"created_at":{"type":"string","format":"date-time"},"amount_in_cents":{"type":"integer"},"currency":{"type":"string"},"customer_id":{"type":"string"},"user_id":{"type":"string"},"customer":{"$ref":"#/components/schemas/UnifiedIntentWebhookCustomer","description":"Datos del cliente"},"product":{"$ref":"#/components/schemas/UnifiedIntentWebhookProduct","description":"Producto principal"},"tax_invoice_url":{"type":["string","null"],"format":"uri","description":"En la API devuelve la URL actual del DTE; en un webhook refleja el valor disponible al entregar ese evento y puede ser `null` aunque una emisión posterior tenga éxito."},"checkout":{"oneOf":[{"$ref":"#/components/schemas/Checkout"},{"type":"null"}]},"payment":{"oneOf":[{"$ref":"#/components/schemas/UnifiedIntentWebhookPayment"},{"type":"null"}]},"details":{"$ref":"#/components/schemas/UnifiedIntentWebhookDetails","description":"Campos específicos del tipo de pago. Para `type: payment`, incluye `failure_reason`, comisiones, cuotas, canal y productos. Para `type: bank_transfer`, incluye `bank_reference` (referencia asignada por el banco o la red de pago) y `sender_comment` (comentario libre del pagador)."}},"required":["event_type","type","id","status","raw_status"],"description":"Recurso de intent unificado. El campo `type` discrimina el tipo de pago;\n`details` contiene los campos específicos de ese tipo. Su `id` siempre es\nel ID base `in_…`, incluido cuando aparece en\n`checkout.latest_intent.id`.\n","title":"UnifiedIntentWebhook"},"LegacyIntentWebhookCustomer":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","format":"email"},"full_name":{"type":"string"},"nit":{"type":["string","null"]},"phone":{"type":["string","null"]}},"title":"LegacyIntentWebhookCustomer"},"LegacyIntentWebhookProduct":{"type":"object","properties":{"id":{"type":"string"}},"title":"LegacyIntentWebhookProduct"},"LegacyIntentWebhookSubscription":{"type":"object","properties":{"id":{"type":["string","null"]}},"title":"LegacyIntentWebhookSubscription"},"LegacyIntentWebhookProductsItems":{"type":"object","properties":{},"title":"LegacyIntentWebhookProductsItems"},"LegacyIntentWebhookCheckout":{"type":"object","properties":{},"title":"LegacyIntentWebhookCheckout"},"LegacyIntentWebhookPayment":{"type":"object","properties":{},"title":"LegacyIntentWebhookPayment"},"LegacyIntentWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"id":{"type":"string","description":"ID del intent concreto por tipo (`ca_…` para efectivo). No es el ID unificado `in_…`."},"receipt_number":{"type":"integer"},"api_version":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"live_mode":{"type":"boolean"},"customer_id":{"type":"string"},"user_id":{"type":"string"},"customer":{"$ref":"#/components/schemas/LegacyIntentWebhookCustomer"},"amount_in_cents":{"type":"integer"},"currency":{"type":"string"},"product":{"$ref":"#/components/schemas/LegacyIntentWebhookProduct"},"bank_reference":{"type":["string","null"],"description":"Referencia de la transferencia asignada por el banco o la red de pago (número interbancario, trace ACH, IMAD). Presente en eventos `bank_transfer_intent.*`; `null` mientras no se ha recibido la transferencia."},"sender_comment":{"type":["string","null"],"description":"Comentario libre que el pagador escribió en la transferencia, tal como lo reporta su banco. Presente en eventos `bank_transfer_intent.*`."},"status":{"type":"string","description":"Presente en eventos `setup_intent.*`."},"subscription":{"$ref":"#/components/schemas/LegacyIntentWebhookSubscription"},"failure_reason":{"oneOf":[{"description":"Any type"},{"type":"null"}]},"fee":{"type":"integer"},"tax_invoicing_fee":{"type":"integer"},"vat_withheld":{"type":"integer"},"vat_withheld_currency":{"type":"string"},"used_presaved_payment_method":{"type":"boolean"},"installments":{"type":"integer"},"products":{"type":"array","items":{"$ref":"#/components/schemas/LegacyIntentWebhookProductsItems"}},"tax_invoice_url":{"type":["string","null"]},"channel":{"$ref":"#/components/schemas/CardPaymentChannel"},"checkout":{"oneOf":[{"$ref":"#/components/schemas/LegacyIntentWebhookCheckout"},{"type":"null"}]},"payment":{"oneOf":[{"$ref":"#/components/schemas/LegacyIntentWebhookPayment"},{"type":"null"}]}},"required":["event_type","id","api_version","created_at","live_mode"],"title":"LegacyIntentWebhook"},"RefundWebhookIntentable":{"type":"object","properties":{},"description":"Intent original que fue reembolsado.","title":"RefundWebhookIntentable"},"RefundWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"api_version":{"type":"string"},"refund":{"$ref":"#/components/schemas/Refund"},"intentable":{"$ref":"#/components/schemas/RefundWebhookIntentable","description":"Intent original que fue reembolsado."}},"required":["event_type","api_version","refund","intentable"],"title":"RefundWebhook"},"WithdrawalWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"api_version":{"type":"string"},"withdrawal":{"$ref":"#/components/schemas/Withdrawal"},"transfer":{"$ref":"#/components/schemas/Transfer"}},"required":["event_type","api_version","withdrawal","transfer"],"title":"WithdrawalWebhook"},"TransferWebhook":{"type":"object","properties":{"event_type":{"type":"string","pattern":"^[a-z0-9_.-]+$","description":"Tipo exacto del evento enviado por Recurrente."},"connected":{"type":["boolean","null"],"description":"Presente como `true` cuando el evento proviene de una cuenta conectada."},"account_id":{"type":["string","null"],"description":"ID de la cuenta conectada que originó el evento."},"api_version":{"type":"string"},"transfer":{"$ref":"#/components/schemas/Transfer"}},"required":["event_type","api_version","transfer"],"title":"TransferWebhook"}},"securitySchemes":{"secretKey":{"type":"apiKey","in":"header","name":"X-SECRET-KEY","description":"Tu clave secreta de API.\n\nUna llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas.\n\nUna llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`.\n"}}}}