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íaCuándo usarlaQué 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: trueUna 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 recurrenteCheckouts 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_id con credential_on_file: true a POST /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_id junto con un card_ciphertext_id nuevo 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

FieldTypeDescription
idstringIdentificador único, con prefijo pi_.
merchant_idstringMerchant al que pertenece el instrumento (mrc_…).
customer_idstringCliente al que pertenece el instrumento (cust_…).
instrument_typestringFamilia del instrumento. Actualmente card.
card_brandstring | nullMarca de la tarjeta, p. ej. visa, mastercard, amex.
card_typestring | nullcredit o debit.
last4string | nullÚltimos 4 dígitos de la tarjeta.
binstring | nullNúmero de identificación del emisor (6 u 8 dígitos).
issuer_countrystring | nullPaís del emisor en formato ISO 3166-1 alpha-2.
exp_monthinteger | nullMes de vencimiento de la tarjeta (1–12).
exp_yearinteger | nullAño de vencimiento de la tarjeta (4 dígitos).
statusstringactive, expired o revoked.
created_atstringMarca 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

StatusMeaning
activeUtilizable para cobros.
expiredDespués de la fecha de vencimiento de la tarjeta; no se puede cobrar.
revokedDeshabilitado 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

OrgMerchant

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

FieldTypeRequiredDescription
merchant_idstringSí—

Campos de la solicitud

FieldTypeRequiredDescription
customer_idstringSíFK → customers. Debe pertenecer a este merchant.
card_ciphertext_idstringSí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.
metadataobjectNoDatos 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

FieldTypeRequiredDescription
customer_idstringNoFiltra por los instrumentos de un cliente específico.
statusstringNoFiltra por active, expired o revoked.
card_brandstringNoFiltra por marca, p. ej. visa.
card_typestringNoFiltra por credit o debit.
last4stringNoFiltra por los últimos 4 dígitos.
binstringNoFiltra por el número de identificación del emisor.
issuer_countrystringNoFiltra por el país del emisor en formato ISO 3166-1 alpha-2.
pageintegerNoNúmero de página (predeterminado 1, mín. 1).
limitintegerNoElementos 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

FieldTypeRequiredDescription
statusstringSí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 Content

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

HTTPTypeWhen
401authentication_errorClave de API faltante o inválida.
403authorization_errorLa clave no tiene el alcance requerido, o la clave de la org no puede acceder a este merchant.
404not_found_errorInstrumento o merchant no encontrado.
422business_rule_errorTransició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

En esta página