Chaves de API
Crie, liste, desative e revogue chaves de API do Tokeflow programaticamente — descubra os escopos atribuíveis, fixe chaves a listas de permissão de IP e rotacione credenciais com segurança.
Toda requisição à API da Tokeflow se autentica com uma chave de API — uma credencial vinculada a exatamente uma entidade (uma Organization ou um de seus Merchants) e a uma lista explícita de escopos. Os endpoints desta página gerenciam essas chaves programaticamente: crie uma chave com escopos de privilégio mínimo, liste as existentes, pause uma chave temporariamente e revogue-a definitivamente. Tudo o que o Dashboard da Tokeflow faz com chaves, seu backend pode automatizar — útil para fluxos de onboarding que geram uma chave por Merchant, e para rotação programada de credenciais.
As chaves existem em dois tipos. As chaves secretas (sk_…) concedem acesso do lado do servidor e são enviadas no cabeçalho Authorization: Bearer; as chaves públicas (pk_…) são seguras para uso no cliente e restritas aos escopos que o Bridge SDK precisa no navegador. Consulte Autenticação para o modelo completo, e Ambientes e chaves de API para saber como as chaves codificam ambiente e entidade em seu prefixo.
A chave completa é retornada exatamente uma vez. O campo api_key aparece apenas na resposta de criação — a Tokeflow armazena um hash, não a chave em si, e não pode exibi-la novamente. Armazene-a imediatamente em seu gerenciador de segredos. Toda resposta posterior identifica a chave apenas pelo seu key_prefix, que não é secreto.
O gerenciamento de chaves tem escopo de entidade, não escopo de Merchant. Onde a maioria dos recursos usa um merchant_id, esses endpoints endereçam seu alvo com o par entity_type + entity_id — porque uma chave pode pertencer à própria Organization, não apenas a um Merchant. Uma chave Merchant só enxerga e gerencia as chaves do seu próprio Merchant.
Ciclo de vida e rotação da chave
Ao rotacionar, sempre crie e implante a chave substituta antes de revogar a antiga — a revogação entra em vigor imediatamente, e qualquer serviço que ainda estiver usando a chave antiga passa a receber 401 authentication_error.
O objeto de chave de API
Retornado por todos os endpoints desta página. A resposta de criação também traz api_key — o segredo completo — apenas uma vez.
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador único da chave de API, prefixado com ak_. |
entity_type | string | Tipo de entidade à qual a chave pertence — organization ou merchant. |
entity_id | string | ID da entidade proprietária (org_… ou mrc_…). |
name | string | Nome legível por humanos para a chave. |
key_prefix | string | Prefixo não secreto da chave, usado para identificação (ex.: sk_live_mer_7d21). A única parte da chave exibida após a criação. |
scopes | array | Escopos/permissões concedidos à chave. |
allowed_ips | array | null | Endereços IP e faixas CIDR autorizados a usar a chave. null quando a chave não tem restrição. |
is_active | boolean | Se a chave está ativa. Requisições com uma chave inativa falham com 401 authentication_error. |
expires_at | string | null | Data de expiração (ISO 8601 UTC), ou null se a chave nunca expirar. |
last_used_at | string | null | Última vez em que a chave foi usada, ou null se nunca tiver sido usada. |
created_at | string | Timestamp de criação (ISO 8601 UTC). |
api_key | string | A chave de API real. Retornada apenas na criação. |
key_hash | string | Hash do material da chave, usado no servidor para verificação. Não é uma credencial — não pode ser usada para autenticação. |
last_used_at mostra se uma chave está realmente em uso. Antes de revogar uma chave que você acredita estar ociosa, verifique se o last_used_at dela não mudou recentemente — um nome desatualizado não garante que a chave esteja obsoleta.
Endpoints
GET/api/v1/api-keys
Autenticação: chave Organization (todas as chaves na Organization; filtre com entity_type/entity_id) ou chave Merchant (suas próprias chaves). Escopo: api_keys:read.
Retorna uma lista paginada de chaves de API. Organizations podem filtrar por entity_type e entity_id para visualizar as chaves de um Merchant específico.
Parâmetros de consulta
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
entity_type | string | Não | Filtra por tipo de entidade — organization ou merchant. |
entity_id | string | Condicional | Filtra por ID da entidade (ex.: mrc_8a3f12d9). Obrigatório ao filtrar por merchant. |
page | integer | Não | Número da página, indexado a partir de 1 (padrão 1, mínimo 1). |
limit | integer | Não | Itens por página (padrão 20, mínimo 1, máximo 100). |
Exemplo de requisição
curl -G https://api.tokeflow.com/api/v1/api-keys \
-H "Authorization: Bearer sk_live_org_2b7e91c4a0f53d68" \
--data-urlencode "entity_type=merchant" \
--data-urlencode "entity_id=mrc_8a3f12d9" \
--data-urlencode "page=1" \
--data-urlencode "limit=20"Exemplo de resposta — 200 OK
{
"data": [
{
"id": "ak_9f2e6c81",
"entity_type": "merchant",
"entity_id": "mrc_8a3f12d9",
"name": "Checkout service (production)",
"key_prefix": "sk_live_mer_7d21",
"scopes": ["transactions:read", "transactions:write"],
"allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
"is_active": true,
"expires_at": null,
"last_used_at": "2026-08-11T18:22:04.000Z",
"created_at": "2026-03-02T09:15:00.000Z",
"key_hash": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
},
{
"id": "ak_5b0d3a47",
"entity_type": "merchant",
"entity_id": "mrc_8a3f12d9",
"name": "Storefront widget",
"key_prefix": "pk_live_mer_0c1d",
"scopes": ["tokens:read"],
"allowed_ips": null,
"is_active": false,
"expires_at": "2026-12-31T23:59:59.000Z",
"last_used_at": "2026-07-30T10:41:52.000Z",
"created_at": "2026-01-20T16:00:00.000Z",
"key_hash": "3c363836cf4e16666669a25da280a1865c2d2874"
}
],
"meta": {
"page": 1,
"limit": 20,
"total": 2,
"total_pages": 1,
"has_next": false,
"has_prev": false
}
}data contém as chaves da página atual e meta os metadados de paginação — avance page enquanto has_next for true. Consulte Paginação e filtragem para o padrão geral.
POST/api/v1/api-keys
Autenticação: chave Organization (chaves para si mesma ou para qualquer um de seus Merchants) ou chave Merchant (apenas suas próprias chaves). Escopo: api_keys:write.
Cria uma chave de API para uma Organization ou Merchant. A resposta é o único lugar em que a chave completa (api_key) é retornada.
Campos da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome legível por humanos para a chave (máximo de 255 caracteres). Nomeie-a de acordo com a carga de trabalho, ex.: Checkout service (production). |
scopes | array de strings | Sim | Escopos/permissões para a chave — pelo menos um. Deve ser válido para a entidade e o tipo de chave de destino; descubra os valores atribuíveis com GET /api-keys/scopes. |
entity_type | string | Condicional | Tipo de entidade à qual a chave pertence — organization ou merchant. Omita para criar uma chave para a entidade autenticada; uma chave Organization envia merchant (com entity_id) para gerar uma chave para um de seus Merchants. |
entity_id | string | Condicional | ID da entidade à qual a chave pertence (org_… ou mrc_…). Envie junto com entity_type. |
key_type | string | Não | Tipo de chave a criar — secret (lado do servidor, sk_…) ou public (segura para o cliente, pk_…). |
allowed_ips | array de strings | Não | Endereços IP autorizados a usar a chave — até 50 entradas, cada uma com até 45 caracteres. Omita o campo completamente para não ter restrição — um array vazio é rejeitado, pois é interpretado como uma restrição, mas não aplica nenhuma. Veja a nota abaixo para os formatos aceitos. |
expires_at | string | Não | Data de expiração da chave (ISO 8601). Omita para uma chave que nunca expira. |
Formatos de allowed_ips. Endereços IPv4 devem estar no formato de quatro octetos (203.0.113.10); entradas CIDR devem estar na forma de rede (192.168.1.0/24, não 192.168.1.5/24); endereços e faixas IPv6 são aceitos (2001:db8::/32). Uma entrada curinga — *, 0.0.0.0/0 ou ::/0 — permite qualquer IP e não pode ser combinada com endereços específicos. Consulte Lista de permissões de IP para orientações sobre quando fixar IPs.
Crie uma chave por carga de trabalho, apenas com os escopos que essa carga de trabalho precisa. Chaves estreitas e de propósito único limitam o raio de impacto caso uma chave vaze, e tornam o last_used_at de cada chave significativo ao auditar ou rotacionar.
Códigos de resposta
| Código | Quando |
|---|---|
201 Created | Chave criada. O api_key no corpo é sua única chance de capturar a chave completa. |
400 Bad Request | Entrada inválida — escopo desconhecido, allowed_ips malformado ou vazio, ou um expires_at inválido. |
403 Forbidden | Permissões insuficientes — por exemplo, uma chave Merchant tentando criar uma chave para outra entidade. |
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/api-keys \
-H "Authorization: Bearer sk_live_org_2b7e91c4a0f53d68" \
-H "Content-Type: application/json" \
-d '{
"entity_type": "merchant",
"entity_id": "mrc_8a3f12d9",
"name": "Checkout service (production)",
"scopes": ["transactions:read", "transactions:write"],
"allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
"key_type": "secret"
}'Exemplo de resposta — 201 Created
{
"id": "ak_9f2e6c81",
"entity_type": "merchant",
"entity_id": "mrc_8a3f12d9",
"name": "Checkout service (production)",
"key_prefix": "sk_live_mer_7d21",
"scopes": ["transactions:read", "transactions:write"],
"allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
"is_active": true,
"expires_at": null,
"last_used_at": null,
"created_at": "2026-08-12T14:03:00.000Z",
"api_key": "sk_live_mer_7d21c39ab8e4f560",
"key_hash": "6dcd4ce23d88e2ee9568ba546c007c63d9131c1b"
}Trate esta resposta como a credencial que ela contém: grave o api_key diretamente no seu gerenciador de segredos e mantenha o corpo da resposta fora de logs, rastreadores de erro e analytics. A partir daqui, identifique a chave pelo id e reconheça-a pelo key_prefix.
GET/api/v1/api-keys/scopes
Autenticação: chave Organization ou chave Merchant. Escopo: api_keys:read.
Retorna todos os escopos válidos que podem ser atribuídos a chaves de API. Filtre por entity_type (organization/merchant) e/ou key_type (secret/public) para restringir os resultados ao que uma determinada chave poderia realmente carregar — útil para validar uma lista de scopes antes de chamar POST /api-keys, ou para construir um formulário de criação de chaves.
Parâmetros de consulta
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
entity_type | string | Não | Filtra escopos por tipo de entidade. Chaves Merchant excluem escopos exclusivos de Organization (merchants, organizations, team). |
key_type | string | Não | Filtra escopos por tipo de chave. Chaves públicas são restritas a escopos seguros para o cliente (tokens, instruments, customers). |
Exemplo de requisição
curl -G https://api.tokeflow.com/api/v1/api-keys/scopes \
-H "Authorization: Bearer sk_live_org_2b7e91c4a0f53d68" \
--data-urlencode "entity_type=organization" \
--data-urlencode "key_type=secret"Exemplo de resposta — 200 OK (truncado)
{
"scopes": [
{
"scope": "transactions:read",
"description": "List and view transactions"
},
{
"scope": "transactions:write",
"description": "Create, capture, and refund transactions"
},
{
"scope": "customers:read",
"description": "List and view customers"
}
],
"wildcards": [
"org:*",
"org:transactions:*"
]
}Cada item em scopes associa a string do escopo a uma descrição legível por humanos. wildcards lista as strings de escopo curinga válidas para a entidade/tipo de chave solicitada — um curinga concede todos os escopos que ele cobre, portanto reserve-os para serviços confiáveis e rigorosamente controlados, e prefira listas explícitas de escopos em todos os outros casos.
PATCH/api/v1/api-keys/:id
Autenticação: chave Organization (qualquer chave na Organization) ou chave Merchant (suas próprias chaves). Escopo: api_keys:write.
Atualiza o estado de ativação de uma chave. Defina is_active como false para desativar a chave — requisições que a usarem passam a falhar imediatamente com 401 authentication_error — ou de volta para true para reativá-la. Use isto como a alternância reversível; use revogação quando a chave nunca deva voltar.
Campos da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
is_active | boolean | Não | Se a chave de API está ativa. false desativa a chave; true a reativa. |
Exemplo de requisição
curl -X PATCH https://api.tokeflow.com/api/v1/api-keys/ak_9f2e6c81 \
-H "Authorization: Bearer sk_live_org_2b7e91c4a0f53d68" \
-H "Content-Type: application/json" \
-d '{ "is_active": false }'Exemplo de resposta — 200 OK
{
"id": "ak_9f2e6c81",
"entity_type": "merchant",
"entity_id": "mrc_8a3f12d9",
"name": "Checkout service (production)",
"key_prefix": "sk_live_mer_7d21",
"scopes": ["transactions:read", "transactions:write"],
"allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
"is_active": false,
"expires_at": null,
"last_used_at": "2026-08-11T18:22:04.000Z",
"created_at": "2026-08-12T14:03:00.000Z",
"key_hash": "6dcd4ce23d88e2ee9568ba546c007c63d9131c1b"
}Um 403 é retornado se a chave existir mas não pertencer à sua entidade, e um 404 se ela não existir.
POST/api/v1/api-keys/:id/revoke
Autenticação: chave Organization (qualquer chave na Organization) ou chave Merchant (suas próprias chaves). Escopo: api_keys:write.
Revoga uma chave de API, desativando-a permanentemente. A revogação entra em vigor imediatamente: qualquer requisição que apresentar a chave revogada falha com 401 authentication_error. Diferentemente de uma desativação via PATCH, uma chave revogada é aposentada definitivamente — se a carga de trabalho ainda precisar de acesso, crie uma chave substituta primeiro.
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/api-keys/ak_9f2e6c81/revoke \
-H "Authorization: Bearer sk_live_org_2b7e91c4a0f53d68"Exemplo de resposta — 200 OK
{
"id": "ak_9f2e6c81",
"entity_type": "merchant",
"entity_id": "mrc_8a3f12d9",
"name": "Checkout service (production)",
"key_prefix": "sk_live_mer_7d21",
"scopes": ["transactions:read", "transactions:write"],
"allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
"is_active": false,
"expires_at": null,
"last_used_at": "2026-08-11T18:22:04.000Z",
"created_at": "2026-08-12T14:03:00.000Z",
"key_hash": "6dcd4ce23d88e2ee9568ba546c007c63d9131c1b"
}Um 403 é retornado se a chave não pertencer à sua entidade, e um 404 se ela não existir.
Se uma chave secreta vazar, revogue-a agora — antes de criar a substituta. Uma breve interrupção de uma carga de trabalho é um resultado melhor do que um atacante tendo em mãos uma credencial ativa do lado do servidor. Para uma rotação planejada (sem exposição), faça o inverso: crie e implante a nova chave primeiro, confirme que ela funciona, depois revogue a antiga.
Erros
Os erros usam o envelope padrão. Os casos mais comuns para este recurso:
| HTTP | type | Causa típica |
|---|---|---|
400 | validation_error | Escopo desconhecido, allowed_ips vazio ou malformado, name ou scopes ausente. |
401 | authentication_error | Chave de API ausente, inválida, desativada ou revogada na própria requisição. |
403 | authorization_error | Permissões insuficientes, ou a chave alvo não pertence à sua entidade. |
404 | not_found_error | Chave de API não encontrada. |
429 | rate_limit_error | Limite de taxa excedido — recue exponencialmente. |
Consulte Erros para o envelope completo e o catálogo de tipos.
Relacionados
- Autenticação — o esquema Bearer, escopos e a anatomia da chave.
- Ambientes e chaves de API — ciclo de vida da chave, armazenamento e práticas de rotação.
- Paginação e filtragem — convenções de listagem usadas pelo endpoint de listagem.
- Erros — o envelope de erro padrão.