Autenticação

Como funciona a autenticação da API Tokeflow — chaves secretas vs. públicas, o esquema Bearer, a anatomia da chave, escopo de Organization vs. Merchant, escopos (scopes) e allowlist de IPs.

Toda requisição à API Tokeflow é autenticada com uma chave de API. A chave que você apresenta determina duas coisas ao mesmo tempo: quem você é (a Organization ou o Merchant ao qual a chave pertence) e o que você pode fazer (os escopos concedidos a essa chave).

A Tokeflow usa dois tipos de chaves:

  • Chaves secretas (sk_…) — acesso completo no lado do servidor. Usadas a partir do seu backend com o cabeçalho Authorization: Bearer.
  • Chaves públicas (pk_…) — acesso restrito e seguro para o cliente. Usadas pelo Bridge SDK no navegador para coletar dados de pagamento. Seguras para serem enviadas ao cliente.

Nunca exponha uma chave secreta em código do lado do cliente. Chaves secretas concedem acesso do lado do servidor à sua conta. Elas pertencem apenas aos seus servidores — nunca a JavaScript de navegador, aplicativos móveis, repositórios públicos ou qualquer coisa que um usuário possa inspecionar. Se uma chave secreta vazar, revogue-a imediatamente no Tokeflow Dashboard. Use uma chave pública para qualquer coisa que rode em um navegador.

O esquema Bearer

Requisições do lado do servidor autenticam-se enviando sua chave secreta no cabeçalho Authorization usando o esquema Bearer:

Authorization: Bearer <secret_key>
curl https://api.tokeflow.com/api/v1/transactions \
  -H "Authorization: Bearer sk_live_mer_4f9a2c7e8b1d6035" \
  -H "Accept: application/json"

Carregue chaves secretas a partir de variáveis de ambiente ou de um gerenciador de segredos — nunca as fixe diretamente no código. Consulte Ambientes e chaves de API para saber como as chaves live são emitidas e rotacionadas.

Todos os endpoints ficam sob https://api.tokeflow.com/api/v1. Para o modelo completo de requisição/resposta e as convenções, consulte a visão geral da API.

Anatomia da chave

Toda chave codifica seu tipo, ambiente e escopo no prefixo. O formato é:

{sk|pk}_{environment}_{org|mer}_{random}

Exemplo detalhado:

sk_live_mer_4f9a2c7e8b1d6035
│  │    │   └─ random — a porção única e secreta
│  │    └───── scope — org (Organization) ou mer (Merchant)
│  └────────── environment — ex.: live
└───────────── key type — sk (secret) ou pk (public)
SegmentoValoresSignificado
Key typesk, pksk = secreta (lado do servidor). pk = pública (segura para o cliente).
Environmentex.: liveO ambiente em que a chave opera.
Scopeorg, merorg = com escopo de Organization. mer = com escopo de Merchant.
Randomstring opacaA porção secreta única. Trate a chave inteira como sensível.

Isso significa que você pode reconhecer de relance o que é uma chave:

  • pk_live_org_… — chave pública, de Organization
  • pk_live_mer_… — chave pública, de Merchant
  • sk_live_org_… — chave secreta, de Organization
  • sk_live_mer_… — chave secreta, de Merchant

Somente o prefixo é exibido de volta para você no Dashboard e nas respostas da API (por exemplo sk_live_mer_4f9a2c7e…). A chave completa é exibida exatamente uma vez, no momento da criação. Armazene-a com segurança nesse momento — a Tokeflow não pode exibi-la novamente.

Chaves de Organization vs. chaves de Merchant

A Tokeflow é multi-tenant: uma Organization governa um ou mais Merchants (consulte Organizations e Merchants). Toda chave tem escopo para exatamente uma entidade, e esse escopo altera a forma como os recursos específicos de merchant são endereçados.

Chave de Merchant (…_mer_…)Chave de Organization (…_org_…)
EscopoUm único merchantTodo merchant da organization
Direcionamento de merchantInferido automaticamente — nenhum merchant_id necessárioDeve especificar o merchant alvo via merchant_id
merchant_id em list/getNão usado (ignorado)Parâmetro de query, ex.: ?merchant_id=mrc_…
merchant_id em createNão usadoCampo do body
Melhor paraO backend próprio de um único merchantOrquestração de plataforma / multi-merchant

Chave de Merchant — o merchant é inferido

Uma chave de Merchant já está vinculada a um merchant, então você nunca passa um merchant_id. O exemplo abaixo lista as transações desse merchant:

curl "https://api.tokeflow.com/api/v1/transactions?limit=20" \
  -H "Authorization: Bearer sk_live_mer_4f9a2c7e8b1d6035" \
  -H "Accept: application/json"

Chave de Organization — identifique o merchant

Uma chave de Organization abrange todo merchant da org, então, para recursos com escopo de merchant, você deve indicar a qual merchant se refere. Em leituras, passe merchant_id como parâmetro de query:

curl "https://api.tokeflow.com/api/v1/transactions?merchant_id=mrc_8a3f12d9&limit=20" \
  -H "Authorization: Bearer sk_live_org_2b7e91c4a0f53d68" \
  -H "Accept: application/json"

Em escritas, passe merchant_id no body da requisição:

await fetch("https://api.tokeflow.com/api/v1/transactions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.TOKEFLOW_ORG_SECRET_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    merchant_id: "mrc_8a3f12d9",
    amount: 15000, // minor units → R$150.00
    currency: "BRL",
    payment_method: "credit_card",
    // …
  }),
});

Com uma chave de Organization, omitir merchant_id em uma requisição com escopo de merchant é um erro do cliente e retorna 400 validation_error. Com uma chave de Merchant, qualquer merchant_id que você enviar é ignorado — o próprio merchant da chave sempre prevalece.

Escopos

Permissões são expressas como escopos no formato resource:action. Uma chave recebe uma lista explícita de escopos quando é criada no Tokeflow Dashboard, e uma requisição só é autorizada se a chave carregar o escopo que o endpoint exige.

Escopos comuns:

EscopoConcede
transactions:readListar e visualizar transações
transactions:writeCapturar e reembolsar transações
customers:read / customers:writeLer / gerenciar customers
orders:read / orders:writeLer / gerenciar orders
products:read / products:writeLer / gerenciar produtos do catálogo
offers:read / offers:writeLer / gerenciar offers e preços
checkout:read / checkout:writeLer / gerenciar sessões de checkout
subscriptions:read / subscriptions:writeLer / gerenciar subscriptions
webhooks:read / webhooks:writeLer / gerenciar configuração de webhooks
tokens:readLer tokens do SDK
reports:readVisualizar relatórios e analytics
audit_logs:readListar e visualizar logs de auditoria

A divisão :read / :write permite aplicar o menor privilégio: emita chaves somente leitura para cargas de trabalho de relatórios ou analytics, e reserve os escopos de escrita para os serviços que realmente criam ou modificam recursos.

Crie uma chave por carga de trabalho, com apenas os escopos de que essa carga de trabalho precisa. Chaves estreitas e de propósito único limitam o raio de impacto caso uma chave seja comprometida, e tornam os logs de auditoria mais fáceis de interpretar.

Chaves públicas: o que elas podem fazer

Chaves públicas (pk_…) são projetadas para serem incorporadas em código de navegador. Elas são restritas a um pequeno conjunto de escopos seguros para o cliente — as operações de que o Bridge SDK precisa para coletar dados de pagamento e criar tokens — e não podem ler transações, emitir reembolsos ou tocar em qualquer recurso exclusivo do servidor.

Por causa dessas restrições, chaves públicas são seguras para expor em código do lado do cliente. O Bridge SDK apresenta a chave pública por meio de cabeçalhos específicos do SDK, em vez do cabeçalho Authorization:

X-Public-Key: pk_live_mer_…
X-Session-Id: <uuid>
X-SDK-Version: <semver>

Normalmente você nunca define esses cabeçalhos por conta própria — o SDK os gerencia. Consulte a visão geral do Bridge SDK para detalhes.

Os dados de cartão coletados no navegador são capturados pelos campos seguros da Tokeflow, que rodam dentro de iframes isolados e de origem cruzada (cross-origin). Os dados de cartão são criptografados no navegador e nunca tocam seus servidores — portanto, mesmo uma chave pública totalmente exposta não pode ser usada para ler dados brutos de cartão.

Allowlist de IPs (endurecimento opcional)

Para uma camada extra de defesa, você pode restringir uma chave a um conjunto de IPs de origem configurando uma allowlist allowed_ips na chave no Tokeflow Dashboard. Quando definida, requisições de qualquer outro IP são rejeitadas com 403 authorization_error, mesmo que a chave e seus escopos sejam válidos em todo o resto.

A allowlist aceita:

  • Endereços IPv4 / IPv6 exatos — 203.0.113.10, 2001:db8::1
  • Faixas CIDR — 203.0.113.0/24, 2001:db8::/32
  • Curingas para permitir todos os IPs — *, 0.0.0.0/0 ou ::/0

A allowlist de IPs é mais eficaz para chaves secretas usadas por serviços de backend com IPs de saída estáveis. Evite fixar IPs em chaves públicas — clientes de navegador se conectam a partir de muitos endereços, em constante mudança.

401 vs. 403

A Tokeflow distingue falhas de autenticação de falhas de autorização:

  • 401 authentication_error — a Tokeflow não conseguiu estabelecer quem você é. A chave está ausente, malformada, revogada ou expirada.
  • 403 authorization_error — a Tokeflow sabe quem você é, mas você não tem permissão para fazer isto. A chave não possui o escopo exigido, ou a requisição veio de um IP fora do allowed_ips da chave.

Uma chave ausente ou inválida retorna 401:

{
  "error": {
    "type": "authentication_error",
    "code": "INVALID_API_KEY",
    "message": "Invalid or expired API key",
    "details": {},
    "request_id": "req_8f3c9a1e2d40",
    "timestamp": "2026-01-15T12:30:00.000Z"
  }
}

Uma chave válida que não possui o escopo exigido (ou é bloqueada pela allowlist de IPs) retorna 403:

{
  "error": {
    "type": "authorization_error",
    "code": "INSUFFICIENT_SCOPE",
    "message": "This API key is not permitted to perform this action",
    "details": { "required_scope": "transactions:write" },
    "request_id": "req_3a7d10b9c2e8",
    "timestamp": "2026-01-15T12:30:00.000Z"
  }
}

Trate 401 e 403 de formas diferentes no seu cliente. Um 401 significa corrija as credenciais (rotacione ou recarregue a chave). Um 403 significa corrija as permissões — solicite o escopo faltante, ou verifique o host chamador em relação à allowlist de IPs da chave. Nunca repita nenhum dos dois cegamente.

Próximos passos

Nesta página