Chaves de API do Merchant
Liste, crie e revogue as chaves de API de um Merchant a partir do Tokeflow Dashboard, e descubra quais escopos cada tipo de chave pode carregar.
Esses endpoints alimentam a tela de chaves de API do Tokeflow Dashboard para um Merchant: listar as chaves existentes, gerar uma nova, consultar quais escopos ela pode carregar e revogar uma chave que não deve mais funcionar. As chaves que eles gerenciam são as mesmas credenciais sk_… (secreta) e pk_… (pública) que sua integração apresenta à API pública — o Dashboard é simplesmente a forma amigável de gerenciá-las.
Chaves secretas concedem acesso do lado do servidor e pertencem a um gerenciador de segredos; chaves públicas são seguras para uso no cliente e restritas ao 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.
Esses endpoints alimentam a interface do Tokeflow Dashboard. Eles são autenticados por sessão (JWT bearer) — o token vem do login no Dashboard, não de uma chave de API sk_/pk_. Toda requisição também deve carregar o header x-merchant-id, identificando o Merchant cujas chaves estão sendo gerenciadas; o usuário autenticado deve ser um membro com acesso a esse Merchant. Para gerenciar chaves de forma programática a partir do seu backend, use os endpoints públicos de chaves de API.
Como funciona o fluxo da tela de chaves
O endpoint de escopos alimenta o formulário de criação de chaves: ele retorna apenas os escopos válidos para este Merchant e o tipo de chave escolhido, de modo que o usuário nunca pode selecionar um escopo que a chave não poderia carregar. Após a criação, a chave completa nunca é exibida novamente — a lista identifica cada chave apenas pelo seu key_prefix.
O objeto de chave de API
Retornado na criação; o endpoint de listagem retorna o mesmo objeto sem o segredo api_key, exclusivo da criação.
| Field | Type | Description |
|---|---|---|
id | string | Identificador único da chave de API, prefixado com ak_. |
entity_type | string | Tipo de entidade à qual a chave pertence — organization ou merchant. Chaves criadas nesta superfície pertencem a um merchant. |
entity_id | string | ID da entidade proprietária (mrc_… para chaves de Merchant). |
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 na autenticação. |
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 é o melhor sinal do Dashboard sobre se uma chave está realmente em uso. Antes de revogar uma chave que parece 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/merchant/api-keys
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Retorna uma lista paginada das chaves de API do Merchant — o Merchant é obtido a partir do header x-merchant-id.
Parâmetros de consulta
| Field | Type | Required | Description |
|---|---|---|---|
page | number | Não | Número da página, indexado a partir de 1 (padrão 1, mín. 1). |
limit | number | Não | Itens por página (padrão 20, mín. 1, máx. 100). |
Exemplo de requisição
curl -G https://api.tokeflow.com/api/v1/merchant/api-keys \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-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"
},
{
"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"
}
],
"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. A chave completa nunca é incluída aqui; cada chave é identificada pelo seu key_prefix, que não é secreto.
POST/api/v1/merchant/api-keys
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Cria uma chave de API para o Merchant identificado por x-merchant-id. A resposta é o único lugar em que a chave completa (api_key) é retornada.
Campos da requisição
| Field | Type | Required | Description |
|---|---|---|---|
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 of strings | Sim | Escopos/permissões para a chave — pelo menos um. Deve ser válido para este Merchant e o tipo de chave; carregue os valores atribuíveis com GET /merchant/api-keys/scopes. |
allowed_ips | array of 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. |
key_type | string | Não | Tipo de chave a criar — secret (lado do servidor, sk_…) ou public (segura para o cliente, pk_…). |
expires_at | string | Não | Data de expiração da chave (ISO 8601). Omita para uma chave que nunca expira. |
entity_type | string | Não | Tipo de entidade à qual a chave pertence — organization ou merchant. Nesta superfície, omita ou envie merchant. |
entity_id | string | Não | ID da entidade à qual a chave pertence (ex.: mrc_8a3f12d9). Omita para usar o Merchant do x-merchant-id. |
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.
A chave completa é retornada exatamente uma vez. O campo api_key aparece apenas nesta resposta de criação — a Tokeflow armazena um hash, não a chave em si, e não pode exibi-la novamente. Copie-a para um gerenciador de segredos imediatamente; toda resposta posterior identifica a chave apenas pelo seu key_prefix, que não é secreto.
Exemplo de requisição
curl -X POST https://api.tokeflow.com/api/v1/merchant/api-keys \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9" \
-H "Content-Type: application/json" \
-d '{
"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: exiba o api_key ao usuário exatamente uma vez e mantenha o corpo 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/merchant/api-keys/scopes
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Retorna os escopos que podem ser atribuídos às chaves de API deste Merchant. Escopos exclusivos de Organization são excluídos. Filtre por key_type para obter os escopos válidos para chaves públicas ou secretas — é isso que o formulário de criação de chaves do Dashboard usa para popular seu seletor de escopos antes de chamar POST /merchant/api-keys.
Parâmetros de consulta
| Field | Type | Required | Description |
|---|---|---|---|
key_type | string | Sim | Tipo de chave para listar os escopos — secret ou public. Chaves públicas são restritas a escopos seguros para o cliente. |
Exemplo de requisição
curl -G https://api.tokeflow.com/api/v1/merchant/api-keys/scopes \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9" \
--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": [
"transactions:*",
"customers:*"
]
}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 esta entidade e tipo de chave — 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.
DELETE/api/v1/merchant/api-keys/:id
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Revoga uma chave de API permanentemente. A revogação entra em vigor imediatamente: qualquer requisição que apresentar a chave revogada falha na autenticação a partir desse momento. Não há como desfazer — se a carga de trabalho ainda precisar de acesso, crie uma chave substituta primeiro.
Parâmetros de caminho
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Sim | ID da chave de API a ser revogada (ex.: ak_9f2e6c81). |
Exemplo de requisição
curl -X DELETE https://api.tokeflow.com/api/v1/merchant/api-keys/ak_9f2e6c81 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9"Exemplo de resposta — 204 No Content
O corpo da resposta está vazio.
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 ter em mãos uma credencial ativa do lado do servidor. Para uma rotação planejada (sem exposição), faça o inverso: crie a nova chave, implante-a, confirme que ela funciona e depois revogue a antiga.
Erros
Os casos mais comuns para estes endpoints:
| HTTP | Typical cause |
|---|---|
400 | Entrada inválida — name ou scopes ausente, um escopo desconhecido, uma lista allowed_ips vazia ou malformada, ou um key_type ausente no endpoint de escopos. |
401 | Token de sessão do Dashboard ausente, inválido ou expirado. |
403 | Autenticado, mas não é um membro com acesso ao Merchant em x-merchant-id. |
404 | Chave de API não encontrada, ou não pertence a este Merchant. |
Consulte Erros para o formato geral de erro usado em toda a API.
Relacionados
- Chaves de API (API pública) — gerencie chaves de forma programática a partir do seu backend, incluindo pausar/reativar.
- 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.
- Erros — o envelope de erro padrão.