Instrumentos de Pagamento
Salve cartões cadastrados como instrumentos de pagamento e reutilize-os para cobranças repetidas, assinaturas e outras transações iniciadas pelo merchant.
Um instrumento de pagamento é um método de pagamento salvo — normalmente um cartão — mantido em arquivo para um cliente, para que você possa cobrá-lo novamente sem recoletar os dados do cartão. Os instrumentos são a espinha dorsal de compras repetidas, upsells em um clique e cobranças iniciadas pelo merchant, como renovações de assinatura.
A Tokeflow armazena apenas uma referência não sensível e metadados para cada instrumento (pi_…, bandeira, últimos 4 dígitos, validade). O próprio cartão é criptografado no momento da coleta e nunca é manipulado pelos seus servidores.
A Tokeflow é uma plataforma de orquestração de pagamentos. Ela não processa nem liquida fundos — seus provedores de pagamento conectados fazem isso. Um instrumento de pagamento é uma referência em nível de orquestração que permite à Tokeflow rotear uma cobrança de cartão salvo para o provedor correto em seu nome.
Como os instrumentos são criados
Você nunca cria um instrumento de pagamento enviando números de cartão brutos para a API. O cartão é sempre coletado pelo Bridge SDK no navegador, e o ciphertext que ele retorna precisa ter sido emitido para cadastro — purpose: 'instrument_enrollment' (standalone) ou saveCard: true (dentro de uma sessão de checkout). Veja Tokenização → Opções. A partir daí, um instrumento é criado de uma de três formas:
| Caminho | Quando usar | O que acontece |
|---|---|---|
Verificação de valor zero — POST /sessions/:sessionId/payment-instruments ou uma transação com charge_type: "setup_verification" | Salvar um cartão sem cobrá-lo — um portal de cobrança, um período de teste gratuito. | O provedor verifica o cartão (e executa o 3DS quando aplicável) sem capturar dinheiro, e então o instrumento é armazenado. |
Salvar ao cobrar — POST /transactions com save_payment_instrument: true | Uma compra avulsa depois da qual você quer oferecer upsells em um clique. | O instrumento é criado antes do roteamento, o ciphertext enviado é cobrado e a credencial reutilizável do provedor fica guardada no conector que aprovou. A resposta traz payment_instrument_id. |
Sessão de checkout — a flag save_card da sessão, ou uma oferta recorrente | Checkouts hospedados ou conduzidos pelo SDK. | A própria sessão cadastra o cartão; a resposta da cobrança traz payment_instrument_id. |
O endpoint POST /merchants/:merchant_id/payment-instruments abaixo armazena um ciphertext de cadastro diretamente, sem verificação nem cobrança. Um instrumento criado assim existe, mas não guarda credencial de provedor até que uma cobrança com o portador presente ou uma verificação de cartão bem-sucedida passe por ele — então ele ainda não pode ser cobrado com credential_on_file.
O fluxo de coleta e cadastro de cartão é uma responsabilidade do lado do cliente, tratada inteiramente pelo Bridge SDK. Consulte os guias visão geral do SDK e cadastro de cartão para a implementação no navegador. Esta página cobre a API REST do lado do servidor para gerenciar e usar instrumentos depois que eles existem.
:::tip Coleta segura de cartão Os campos seguros da Tokeflow são executados dentro de iframes isolados e de origem cruzada. Os dados do cartão são criptografados no navegador e nunca chegam aos seus servidores, portanto um instrumento de pagamento é a única referência de cartão que seu backend chega a ver. :::
Como os instrumentos são usados
Depois que um instrumento existe, referencie-o pelo id em qualquer lugar em que um cartão salvo possa ser cobrado:
- Cobranças em um clique — passe
payment_instrument_idcomcredential_on_file: trueparaPOST /api/v1/transactions. A cobrança usa a credencial do provedor guardada no cadastro — sem dados de cartão, sem CVV. Veja Cobranças com credencial armazenada. - Cartão salvo com CVV redigitado — passe
payment_instrument_idjunto com umcard_ciphertext_idnovo do mesmo cartão, quando quiser uma cobrança com o portador presente (3DS possível). - Assinaturas — defina ou altere o cartão contra o qual uma assinatura é cobrada por meio de
change-payment-instrument. As próximas renovações são executadas como cobranças iniciadas pelo merchant contra o novo 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 sozinho é recusado com 400: a requisição precisa dizer como o cartão está sendo apresentado — credential_on_file: true para uma cobrança em um clique, ou um card_ciphertext_id novo para um CVV redigitado.
O objeto do instrumento de pagamento
| Field | Type | Description |
|---|---|---|
id | string | Identificador único, prefixado com pi_. |
merchant_id | string | Merchant que possui o instrumento (mrc_…). |
customer_id | string | Cliente ao qual o instrumento pertence (cust_…). |
instrument_type | string | Família do instrumento. Atualmente card. |
card_brand | string | null | Bandeira do cartão, ex.: visa, mastercard, amex. |
card_type | string | null | credit ou debit. |
last4 | string | null | Últimos 4 dígitos do cartão. |
bin | string | null | Número de identificação do emissor (6 ou 8 dígitos). |
issuer_country | string | null | País do emissor no formato ISO 3166-1 alpha-2. |
exp_month | integer | null | Mês de expiração do cartão (1–12). |
exp_year | integer | null | Ano de expiração do cartão (4 dígitos). |
status | string | active, expired ou revoked. |
created_at | string | Timestamp de criação (ISO 8601 UTC). |
Os dados completos do cartão nunca são armazenados por você. Um instrumento de pagamento é apenas uma referência estável (pi_…) mais metadados não sensíveis — bandeira, últimos 4 dígitos, validade e detalhes do emissor. O número da conta principal não pode ser lido de volta pela API.
Valores de status
| Status | Meaning |
|---|---|
active | Utilizável para cobranças. |
expired | Após a data de expiração do cartão; não pode ser cobrado. |
revoked | Desativado por motivos de segurança ou conformidade; não pode ser cobrado. |
Objeto de exemplo
{
"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 os endpoints de instrumentos têm escopo de merchant e ficam sob um caminho de merchant.
- Chave Merchant — o merchant é inferido a partir da chave; informe o id do seu merchant no caminho.
- Chave Organization — passe o id do merchant de destino no caminho; a chave da org precisa ter acesso a esse merchant.
Escopos necessários: instruments:read para leituras, instruments:write para mutações.
POST/api/v1/merchants/:merchant_id/payment-instruments
Autenticação: chave Organization (com merchant_id) ou chave Merchant.
Armazena um instrumento tokenizado associado a um cliente. O cadastro é deduplicado: reenviar um token que já resolve para um instrumento armazenado retorna o instrumento existente com deduplicated: true e um 200, em vez de criar um duplicado.
Parâmetros de caminho
| Field | Type | Required | Description |
|---|---|---|---|
merchant_id | string | Sim | — |
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
customer_id | string | Sim | FK → customers. Deve pertencer a este merchant. |
card_ciphertext_id | string | Sim | A referência de cartão criptografada (tok_…) retornada pelo Bridge SDK, emitida com purpose=instrument_enrollment (ou saveCard: true dentro de uma sessão de checkout). Um ciphertext one_time é recusado com 400. |
metadata | object | Não | Dados opcionais do cliente ou do endereço de cobrança para o cadastro. |
Exemplo de requisição
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": {}
}'Exemplo de resposta — 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 os instrumentos de pagamento de um merchant. Suporta paginação e filtragem.
Autenticação: chave Organization (com escopo no merchant) ou chave Merchant.
Parâmetros de consulta
| Field | Type | Required | Description |
|---|---|---|---|
customer_id | string | Não | Filtra pelos instrumentos de um cliente específico. |
status | string | Não | Filtra por active, expired ou revoked. |
card_brand | string | Não | Filtra por bandeira, ex.: visa. |
card_type | string | Não | Filtra por credit ou debit. |
last4 | string | Não | Filtra pelos últimos 4 dígitos. |
bin | string | Não | Filtra pelo número de identificação do emissor. |
issuer_country | string | Não | Filtra pelo país do emissor no formato ISO 3166-1 alpha-2. |
page | integer | Não | Número da página (padrão 1, mín. 1). |
limit | integer | Não | Itens por página (padrão 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"Resposta 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"
}Use customer_id junto com status=active para renderizar a carteira de um cliente — por exemplo, os cartões salvos exibidos no checkout ou em um portal de cobrança.
PATCH/api/v1/merchants/{merchant_id}/payment-instruments/{payment_instrument_id}
Atualiza o status de um instrumento. O status é o único campo mutável.
Autenticação: chave Organization (com escopo no merchant) ou chave Merchant.
Corpo
| Field | Type | Required | Description |
|---|---|---|---|
status | string | Sim | Novo status: active, expired ou 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" }'Resposta 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}
Revoga um instrumento. Após a revogação, ele não pode mais ser cobrado. Assinaturas ativas que cobram contra ele precisam ser movidas para outro instrumento primeiro.
Autenticação: chave Organization (com escopo no merchant) ou chave Merchant.
curl -X DELETE \
"https://api.tokeflow.com/api/v1/merchants/mrc_123/payment-instruments/pi_a1b2c3" \
-H "Authorization: Bearer sk_live_mer_xxx"Resposta 204 No Content
HTTP/1.1 204 No ContentRevogar um instrumento é permanente. Se uma assinatura ainda cobrar contra ele, mova a assinatura para outro instrumento com change-payment-instrument antes de revogar, ou sua próxima renovação falhará.
Erros
As falhas usam o envelope de erro padrão.
| HTTP | Type | When |
|---|---|---|
| 401 | authentication_error | Chave de API ausente ou inválida. |
| 403 | authorization_error | A chave não tem o escopo necessário, ou a chave da org não tem acesso a este merchant. |
| 404 | not_found_error | Instrumento ou merchant não encontrado. |
| 422 | business_rule_error | Transição de status não permitida (ex.: reativar um instrumento revogado). |
{
"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 e downsells em um clique — salve um cartão ao cobrar e depois cobre-o com um clique.
- Visão geral do Bridge SDK — colete e cadastre cartões no lado do cliente.
- Transações — cobre um instrumento salvo.
- Assinaturas — cobre encargos recorrentes contra um instrumento.
- Clientes — o proprietário de cada instrumento.
- Autenticação — chaves, escopos e resolução de merchant.