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.

FieldTypeDescription
idstringIdentificador único da chave de API, prefixado com ak_.
entity_typestringTipo de entidade à qual a chave pertence — organization ou merchant. Chaves criadas nesta superfície pertencem a um merchant.
entity_idstringID da entidade proprietária (mrc_… para chaves de Merchant).
namestringNome legível por humanos para a chave.
key_prefixstringPrefixo 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.
scopesarrayEscopos/permissões concedidos à chave.
allowed_ipsarray | nullEndereços IP e faixas CIDR autorizados a usar a chave. null quando a chave não tem restrição.
is_activebooleanSe a chave está ativa. Requisições com uma chave inativa falham na autenticação.
expires_atstring | nullData de expiração (ISO 8601 UTC), ou null se a chave nunca expirar.
last_used_atstring | nullÚltima vez em que a chave foi usada, ou null se nunca tiver sido usada.
created_atstringTimestamp de criação (ISO 8601 UTC).
api_keystringA chave de API real. Retornada apenas na criação.
key_hashstringHash 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

Merchant

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

FieldTypeRequiredDescription
pagenumberNãoNúmero da página, indexado a partir de 1 (padrão 1, mín. 1).
limitnumberNãoItens 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

Merchant

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

FieldTypeRequiredDescription
namestringSimNome 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).
scopesarray of stringsSimEscopos/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_ipsarray of stringsNãoEndereç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_typestringNãoTipo de chave a criar — secret (lado do servidor, sk_…) ou public (segura para o cliente, pk_…).
expires_atstringNãoData de expiração da chave (ISO 8601). Omita para uma chave que nunca expira.
entity_typestringNãoTipo de entidade à qual a chave pertence — organization ou merchant. Nesta superfície, omita ou envie merchant.
entity_idstringNãoID 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

Merchant

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

FieldTypeRequiredDescription
key_typestringSimTipo 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

Merchant

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

FieldTypeRequiredDescription
idstringSimID 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:

HTTPTypical cause
400Entrada 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.
401Token de sessão do Dashboard ausente, inválido ou expirado.
403Autenticado, mas não é um membro com acesso ao Merchant em x-merchant-id.
404Chave 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

Nesta página