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.

CampoTipoDescrição
idstringIdentificador único da chave de API, prefixado com ak_.
entity_typestringTipo de entidade à qual a chave pertence — organization ou merchant.
entity_idstringID da entidade proprietária (org_… ou mrc_…).
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 com 401 authentication_error.
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 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

OrgMerchant

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

CampoTipoObrigatórioDescrição
entity_typestringNãoFiltra por tipo de entidade — organization ou merchant.
entity_idstringCondicionalFiltra por ID da entidade (ex.: mrc_8a3f12d9). Obrigatório ao filtrar por merchant.
pageintegerNãoNúmero da página, indexado a partir de 1 (padrão 1, mínimo 1).
limitintegerNãoItens 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

OrgMerchant

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

CampoTipoObrigatórioDescrição
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 de stringsSimEscopos/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_typestringCondicionalTipo 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_idstringCondicionalID da entidade à qual a chave pertence (org_… ou mrc_…). Envie junto com entity_type.
key_typestringNãoTipo de chave a criar — secret (lado do servidor, sk_…) ou public (segura para o cliente, pk_…).
allowed_ipsarray de 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.
expires_atstringNãoData 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ódigoQuando
201 CreatedChave criada. O api_key no corpo é sua única chance de capturar a chave completa.
400 Bad RequestEntrada inválida — escopo desconhecido, allowed_ips malformado ou vazio, ou um expires_at inválido.
403 ForbiddenPermissõ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

OrgMerchant

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

CampoTipoObrigatórioDescrição
entity_typestringNãoFiltra escopos por tipo de entidade. Chaves Merchant excluem escopos exclusivos de Organization (merchants, organizations, team).
key_typestringNãoFiltra 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

OrgMerchant

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

CampoTipoObrigatórioDescrição
is_activebooleanNãoSe 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

OrgMerchant

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:

HTTPtypeCausa típica
400validation_errorEscopo desconhecido, allowed_ips vazio ou malformado, name ou scopes ausente.
401authentication_errorChave de API ausente, inválida, desativada ou revogada na própria requisição.
403authorization_errorPermissões insuficientes, ou a chave alvo não pertence à sua entidade.
404not_found_errorChave de API não encontrada.
429rate_limit_errorLimite de taxa excedido — recue exponencialmente.

Consulte Erros para o envelope completo e o catálogo de tipos.

Relacionados

Nesta página