Instrumentos de Pago
Guarda tarjetas registradas como instrumentos de pago y reutilízalas para cargos recurrentes, suscripciones y otras transacciones iniciadas por el merchant.
Un instrumento de pago es un método de pago guardado — normalmente una tarjeta — mantenido en archivo para un cliente, de modo que puedas cobrarle nuevamente sin volver a recolectar los datos de la tarjeta. Los instrumentos son la columna vertebral de las compras repetidas, los upsells en un clic y los cargos iniciados por el merchant, como las renovaciones de suscripción.
Tokeflow almacena solo una referencia no sensible y metadatos para cada instrumento (pi_…, marca, últimos 4 dígitos, vencimiento). La tarjeta en sí se cifra en el momento de la recolección y nunca es manejada por tus servidores.
Tokeflow es una plataforma de orquestación de pagos. No procesa ni liquida fondos — tus proveedores de pago conectados lo hacen. Un instrumento de pago es una referencia a nivel de orquestación que permite a Tokeflow enrutar un cargo de tarjeta guardada al proveedor correcto en tu nombre.
Cómo se crean los instrumentos
Nunca creas un instrumento de pago enviando números de tarjeta en bruto a la API. La tarjeta siempre la recoge el Bridge SDK en el navegador, y el ciphertext que devuelve debe haberse emitido para registro — purpose: 'instrument_enrollment' (independiente) o saveCard: true (dentro de una sesión de checkout). Consulta Tokenización → Opciones. A partir de ahí, un instrumento se crea de una de tres formas:
| Vía | Cuándo usarla | Qué ocurre |
|---|---|---|
Verificación de importe cero — POST /sessions/:sessionId/payment-instruments o una transacción con charge_type: "setup_verification" | Guardar una tarjeta sin cobrarla — un portal de facturación, una prueba gratuita. | El proveedor verifica la tarjeta (y ejecuta 3DS cuando corresponde) sin capturar dinero, y luego se almacena el instrumento. |
Guardar al cobrar — POST /transactions con save_payment_instrument: true | Una compra puntual tras la cual quieres ofrecer upsells en un clic. | El instrumento se crea antes del enrutamiento, se cobra el ciphertext enviado y la credencial reutilizable del proveedor se conserva en el conector que aprobó. La respuesta lleva payment_instrument_id. |
Sesión de checkout — la bandera save_card de la sesión, o una oferta recurrente | Checkouts alojados o dirigidos por el SDK. | La propia sesión registra la tarjeta; la respuesta del cargo lleva payment_instrument_id. |
El endpoint POST /merchants/:merchant_id/payment-instruments de más abajo almacena un ciphertext de registro directamente, sin verificación ni cargo. Un instrumento creado así existe, pero no conserva credencial del proveedor hasta que pase por él un cargo con el titular presente o una verificación de tarjeta exitosa — así que aún no puede cobrarse con credential_on_file.
El flujo de recolección y registro de tarjetas es una responsabilidad del lado del cliente, gestionada íntegramente por el Bridge SDK. Consulta las guías descripción general del SDK y registro de tarjeta para la implementación en el navegador. Esta página cubre la API REST del lado del servidor para gestionar y usar instrumentos después de que existen.
:::tip Recolección segura de tarjetas Los campos seguros de Tokeflow se ejecutan dentro de iframes aislados y de origen cruzado. Los datos de la tarjeta se cifran en el navegador y nunca llegan a tus servidores, por lo que un instrumento de pago es la única referencia de tarjeta que tu backend llega a ver. :::
Cómo se usan los instrumentos
Una vez que un instrumento existe, referéncialo por su id en cualquier lugar donde se pueda cobrar una tarjeta guardada:
- Cargos en un clic — pasa
payment_instrument_idconcredential_on_file: trueaPOST /api/v1/transactions. El cargo usa la credencial del proveedor conservada en el registro — sin datos de tarjeta, sin CVV. Consulta Cobros con credencial almacenada. - Tarjeta guardada con CVV reescrito — pasa
payment_instrument_idjunto con uncard_ciphertext_idnuevo de la misma tarjeta, cuando quieras un cargo con el titular presente (3DS posible). - Suscripciones — define o cambia la tarjeta contra la que se cobra una suscripción mediante
change-payment-instrument. Las próximas renovaciones se ejecutan como cargos iniciados por el merchant contra el nuevo instrumento.
{
"payment_method": "credit_card",
"charge_type": "payment",
"country": "BR",
"customer_id": "cust_john_01",
"payment_instrument_id": "pi_a1b2c3",
"credential_on_file": true,
"amount": 15000,
"currency": "BRL"
}payment_instrument_id por sí solo se rechaza con 400: la solicitud debe indicar cómo se presenta la tarjeta — credential_on_file: true para un cargo en un clic, o un card_ciphertext_id nuevo para un CVV reescrito.
El objeto del instrumento de pago
| Field | Type | Description |
|---|---|---|
id | string | Identificador único, con prefijo pi_. |
merchant_id | string | Merchant al que pertenece el instrumento (mrc_…). |
customer_id | string | Cliente al que pertenece el instrumento (cust_…). |
instrument_type | string | Familia del instrumento. Actualmente card. |
card_brand | string | null | Marca de la tarjeta, p. ej. visa, mastercard, amex. |
card_type | string | null | credit o debit. |
last4 | string | null | Últimos 4 dígitos de la tarjeta. |
bin | string | null | Número de identificación del emisor (6 u 8 dígitos). |
issuer_country | string | null | País del emisor en formato ISO 3166-1 alpha-2. |
exp_month | integer | null | Mes de vencimiento de la tarjeta (1–12). |
exp_year | integer | null | Año de vencimiento de la tarjeta (4 dígitos). |
status | string | active, expired o revoked. |
created_at | string | Marca de tiempo de creación (ISO 8601 UTC). |
Los datos completos de la tarjeta nunca son almacenados por ti. Un instrumento de pago es solo una referencia estable (pi_…) más metadatos no sensibles — marca, últimos 4 dígitos, vencimiento y detalles del emisor. El número de cuenta principal no se puede recuperar a través de la API.
Valores de estado
| Status | Meaning |
|---|---|
active | Utilizable para cobros. |
expired | Después de la fecha de vencimiento de la tarjeta; no se puede cobrar. |
revoked | Deshabilitado por motivos de seguridad o cumplimiento; no se puede cobrar. |
Objeto de ejemplo
{
"id": "pi_a1b2c3",
"merchant_id": "mrc_123",
"customer_id": "cust_john_01",
"instrument_type": "card",
"card_brand": "visa",
"card_type": "credit",
"last4": "4242",
"bin": "424242",
"issuer_country": "BR",
"exp_month": 12,
"exp_year": 2028,
"status": "active",
"created_at": "2026-01-15T12:30:00.000Z"
}Endpoints
Todos los endpoints de instrumentos tienen alcance de merchant y se encuentran bajo una ruta de merchant.
- Clave Merchant — el merchant se infiere a partir de la clave; proporciona el id de tu merchant en la ruta.
- Clave Organization — pasa el id del merchant de destino en la ruta; la clave de la org debe tener acceso a ese merchant.
Alcances requeridos: instruments:read para lecturas, instruments:write para mutaciones.
POST/api/v1/merchants/:merchant_id/payment-instruments
Autenticación: clave Organization (con merchant_id) o clave Merchant.
Almacena un instrumento tokenizado asociado a un cliente. El registro se deduplica: reenviar un token que ya resuelve a un instrumento almacenado devuelve el instrumento existente con deduplicated: true y un 200, en lugar de crear un duplicado.
Parámetros de ruta
| Field | Type | Required | Description |
|---|---|---|---|
merchant_id | string | Sí | — |
Campos de la solicitud
| Field | Type | Required | Description |
|---|---|---|---|
customer_id | string | Sí | FK → customers. Debe pertenecer a este merchant. |
card_ciphertext_id | string | Sí | La referencia de tarjeta cifrada (tok_…) devuelta por el Bridge SDK, emitida con purpose=instrument_enrollment (o saveCard: true dentro de una sesión de checkout). Un ciphertext one_time se rechaza con 400. |
metadata | object | No | Datos opcionales del cliente o de la dirección de facturación para el registro. |
Ejemplo de solicitud
curl -X POST https://api.tokeflow.com/api/v1/merchants/mrc_8a3f12d9/payment-instruments \
-H "Authorization: Bearer sk_live_mer_…" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cust_2f9a71d4",
"card_ciphertext_id": "tok_8f3c2a1b9d4e",
"metadata": {}
}'Ejemplo de respuesta — 200
{
"id": "pi_123",
"merchant_id": "mrc_123",
"customer_id": "cust_john_01",
"card_brand": "visa",
"card_type": "credit",
"instrument_type": "card",
"last4": "4242",
"bin": "424242",
"issuer_country": "BR",
"exp_month": 12,
"exp_year": 2028,
"status": "active",
"deduplicated": false,
"created_at": "2025-11-20T10:00:00Z"
}GET/api/v1/merchants/{merchant_id}/payment-instruments
Lista los instrumentos de pago de un merchant. Admite paginación y filtrado.
Autenticación: clave Organization (con alcance al merchant) o clave Merchant.
Parámetros de consulta
| Field | Type | Required | Description |
|---|---|---|---|
customer_id | string | No | Filtra por los instrumentos de un cliente específico. |
status | string | No | Filtra por active, expired o revoked. |
card_brand | string | No | Filtra por marca, p. ej. visa. |
card_type | string | No | Filtra por credit o debit. |
last4 | string | No | Filtra por los últimos 4 dígitos. |
bin | string | No | Filtra por el número de identificación del emisor. |
issuer_country | string | No | Filtra por el país del emisor en formato ISO 3166-1 alpha-2. |
page | integer | No | Número de página (predeterminado 1, mín. 1). |
limit | integer | No | Elementos por página (predeterminado 20, máx. 100). |
curl "https://api.tokeflow.com/api/v1/merchants/mrc_123/payment-instruments?customer_id=cust_john_01&status=active&limit=20" \
-H "Authorization: Bearer sk_live_mer_xxx"Respuesta 200 OK
{
"success": true,
"data": [
{
"id": "pi_a1b2c3",
"merchant_id": "mrc_123",
"customer_id": "cust_john_01",
"instrument_type": "card",
"card_brand": "visa",
"card_type": "credit",
"last4": "4242",
"bin": "424242",
"issuer_country": "BR",
"exp_month": 12,
"exp_year": 2028,
"status": "active",
"created_at": "2026-01-15T12:30:00.000Z"
}
],
"meta": {
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"total_pages": 1,
"has_next": false,
"has_prev": false
}
},
"request_id": "req_8f3c2a",
"timestamp": "2026-01-15T12:30:00.000Z"
}Usa customer_id junto con status=active para renderizar la billetera de un cliente — por ejemplo, las tarjetas guardadas que se muestran en el checkout o en un portal de facturación.
PATCH/api/v1/merchants/{merchant_id}/payment-instruments/{payment_instrument_id}
Actualiza el estado de un instrumento. El estado es el único campo mutable.
Autenticación: clave Organization (con alcance al merchant) o clave Merchant.
Cuerpo
| Field | Type | Required | Description |
|---|---|---|---|
status | string | Sí | Nuevo estado: active, expired o revoked. |
curl -X PATCH \
"https://api.tokeflow.com/api/v1/merchants/mrc_123/payment-instruments/pi_a1b2c3" \
-H "Authorization: Bearer sk_live_mer_xxx" \
-H "Content-Type: application/json" \
-d '{ "status": "revoked" }'Respuesta 200 OK
{
"success": true,
"data": {
"id": "pi_a1b2c3",
"merchant_id": "mrc_123",
"customer_id": "cust_john_01",
"instrument_type": "card",
"card_brand": "visa",
"card_type": "credit",
"last4": "4242",
"bin": "424242",
"issuer_country": "BR",
"exp_month": 12,
"exp_year": 2028,
"status": "revoked",
"created_at": "2026-01-15T12:30:00.000Z"
},
"request_id": "req_91ad04",
"timestamp": "2026-01-15T12:31:00.000Z"
}DELETE/api/v1/merchants/{merchant_id}/payment-instruments/{payment_instrument_id}
Revoca un instrumento. Después de la revocación, ya no se puede cobrar. Las suscripciones activas que cobran contra él deben moverse primero a otro instrumento.
Autenticación: clave Organization (con alcance al merchant) o clave Merchant.
curl -X DELETE \
"https://api.tokeflow.com/api/v1/merchants/mrc_123/payment-instruments/pi_a1b2c3" \
-H "Authorization: Bearer sk_live_mer_xxx"Respuesta 204 No Content
HTTP/1.1 204 No ContentRevocar un instrumento es permanente. Si una suscripción todavía cobra contra él, mueve la suscripción a otro instrumento con change-payment-instrument antes de revocar, o su próxima renovación fallará.
Errores
Los fallos usan el sobre de error estándar.
| HTTP | Type | When |
|---|---|---|
| 401 | authentication_error | Clave de API faltante o inválida. |
| 403 | authorization_error | La clave no tiene el alcance requerido, o la clave de la org no puede acceder a este merchant. |
| 404 | not_found_error | Instrumento o merchant no encontrado. |
| 422 | business_rule_error | Transición de estado no permitida (p. ej. reactivar un instrumento revocado). |
{
"error": {
"type": "not_found_error",
"code": "PAYMENT_INSTRUMENT_NOT_FOUND",
"message": "Payment instrument pi_a1b2c3 was not found for this merchant.",
"details": {},
"request_id": "req_8f3c2a",
"timestamp": "2026-01-15T12:30:00.000Z"
}
}Relacionados
- Upsells y downsells en un clic — guarda una tarjeta al cobrar y luego cóbrala con un clic.
- Descripción general del Bridge SDK — recolecta y registra tarjetas del lado del cliente.
- Transacciones — cobra un instrumento guardado.
- Suscripciones — cobra cargos recurrentes contra un instrumento.
- Clientes — el propietario de cada instrumento.
- Autenticación — claves, alcances y resolución de merchant.