Pular para o conteúdo

API administrativa

A API de gestão por trás do console: URL base, autenticação com segredos de API ou bearer tokens, o envelope de resposta, paginação, limites de taxa e os grupos de recursos.

Tudo o que o console faz passa pela API administrativa, então tudo o que você configura na tela também pode ser automatizado: realms, clients, usuários, papéis, webhooks e o resto. É uma API JSON no mesmo host dos endpoints de protocolo, sob /api/v1/admin.

URL base

URL baseTexto simples
https://authio.api.hyperio.tech/api/v1/admin

Num ambiente dedicado, use o endereço da API do seu ambiente com os mesmos caminhos, e credenciais criadas no console do próprio ambiente. A versão faz parte do caminho; v1 é a atual.

Nos caminhos, {realm} é o ID do realm (acme), {client} é o ID do client (acme-web), e identificadores como {userId} são GUIDs. Um realm ou client de outra conta responde como se não existisse.

Autenticação

CredencialCabeçalhoQuando usar
Segredo de APIx-api-key: <segredo>Scripts, pipelines de CI e integrações.
Bearer tokenAuthorization: Bearer <access token>Chamadas feitas por uma pessoa conectada ao console, ou com um token que o seu script obtém a partir de um segredo da conta. O token precisa ser emitido pelo realm da plataforma, authio, para o client authio; tokens emitidos pelos seus próprios realms são recusados aqui.

As credenciais dos consumers de um client não são aceitas na API administrativa: elas agem dentro do client delas, e a API administrativa trabalha no nível da conta. A chave de API de um consumer é validada pela sua própria API no endpoint de introspecção do realm com token_type_hint=api_key — veja Chaves de API. Um PUT num consumer nunca muda o tipo dele: sem type o tipo é mantido, e outro tipo é recusado com ValidationFailed em type.

Segredos de API

  1. Crie o segredo

    No console, abra Segredos de API e escolha Novo segredo. Escolha o tipo Chave de API, dê um nome e, se quiser que ele pare de funcionar sozinho, uma data de expiração.

  2. Permita só o que o chamador precisa

    Escolha os papéis e os escopos que o segredo pode usar. Eles são o máximo que ele vai poder fazer, seja o que for que a conta permita.

  3. Copie o valor

    O valor aparece uma única vez, na criação. Guarde-o num gerenciador de segredos e crie um segredo separado para cada integração, para revogar um sem afetar os outros.

TerminalBash
curl https://authio.api.hyperio.tech/api/v1/admin/realms/acme \
  -H "x-api-key: $AUTHIO_API_KEY"

Só segredos do tipo chave de API, ativos e dentro da validade, autenticam, e só para realms e clients da conta dona deles. Toda tentativa, aceita ou recusada, vai para o log de acesso. Uma chamada a um realm ou client que a conta não alcança (de outra conta, ou que não existe) recebe 403 com errorCode Forbidden, como receberia uma pessoa logada; um segredo ausente, desconhecido, excluído ou vencido recebe 401 já na próxima chamada.

Uma credencial de máquina da conta não personifica ninguém: uma chave de API, um token de acesso pessoal ou um token trocado pelo segredo de cliente da conta recebe 403 com errorCode ImpersonationActorNotAPerson em POST /api/v1/admin/realms/{realm}/users/{userId}/impersonate, sejam quais forem os papéis que carregue. Personificação é trabalho de suporte, feito por uma pessoa logada no console, cujo nome a trilha de auditoria guarda. A tentativa recusada fica registrada mesmo assim, com a credencial como autora.

Bearer tokens a partir de um segredo da conta

Um script que prefere bearer tokens de vida curta pode trocar um segredo da conta por um. Crie um segredo do tipo Client secret em Segredos de API, com os papéis de que o script precisa, e apresente-o ao endpoint de token do realm da plataforma com o grant client credentials:

TerminalBash
curl https://authio.api.hyperio.tech/realms/authio/protocol/openid-connect/token \
  -u "authio:$AUTHIO_ACCOUNT_SECRET" \
  -d grant_type=client_credentials

O access token devolvido leva só os papéis e escopos permitidos no segredo e nunca dura mais do que a validade do próprio segredo. Envie-o como Authorization: Bearer para a API administrativa.

Permissões

Cada endpoint exige uma permissão formada por um recurso — realm, client, user, role, scope, secret, audit, account e alguns outros — e uma ação: read, write (criar), update ou delete. Quem chama tem tudo o que os seus papéis concedem, somado. Credenciais ausentes ou inválidas recebem 401; credenciais válidas sem a permissão recebem 403. Veja os papéis do console em Equipe e acesso.

Envelope de resposta

As respostas são JSON em camelCase, sem os campos vazios. Um sucesso traz o resultado em data:

200 OK (resumido)JSON
{
  "statusCode": "OK",
  "success": true,
  "data": {
    "id": "6f1c2a7e-3b4d-4e8f-9a10-5c6d7e8f9a0b",
    "realmId": "acme",
    "name": "Acme",
    "status": "Active"
  }
}
CampoO que traz
successSe a requisição deu certo.
statusCodeO status HTTP, repetido no corpo.
dataO resultado, em caso de sucesso.
paginationOcupa o lugar de data nas listas paginadas.
notificationsMensagens para pessoas. Num erro de validação, há uma por campo recusado, com field — o caminho dele em camelCase no corpo da requisição — e code, a regra que o recusou.
errorCodeNos erros: um código estável para o seu código decidir. Veja Códigos de erro.
requestIdNos erros: o identificador da requisição, também enviado em toda resposta no cabeçalho X-Request-Id.
Decida pelo status HTTP e pelo errorCode, nunca pela mensagem. As mensagens são escritas para pessoas e podem mudar.

Paginação e filtros

As listas paginadas compartilham os mesmos parâmetros de query e respondem com pagination em vez de data.

ParâmetroPadrãoObservações
pageNumber1Valores menores que 1 valem como 1.
pageSize10No máximo 200; valores maiores valem como 200.
searchTerm—Texto livre comparado com os campos de texto do recurso.
status—Restringe a lista a um status, como Active.
sortByData de criaçãoO campo de ordenação; um campo desconhecido volta para a data de criação.
sortDirectiondescasc ou desc.
createdFrom, createdTo—Um intervalo de data de criação. createdFrom é inclusivo e createdTo, exclusivo.
RequisiçãoBash
curl "https://authio.api.hyperio.tech/api/v1/admin/realms/acme/clients?pageNumber=1&pageSize=20&sortDirection=asc" \
  -H "x-api-key: $AUTHIO_API_KEY"

Limites de taxa

A maioria dos endpoints aceita 300 requisições por minuto por chamador. Os sensíveis — criar ou alterar segredos de API, importações, personificação e alguns outros — aceitam 50. Acima deles, a API aplica tetos gerais por chamador e por realm. Uma requisição recusada recebe 429 com o cabeçalho Retry-After, em segundos, e errorCode TooManyRequests.

IDs de requisição e novas tentativas

Toda resposta traz o cabeçalho X-Request-Id. Envie o seu — até 128 caracteres entre letras, dígitos, -, _, : e . — para acompanhar uma chamada nos seus logs e nos nossos, e informe-o ao falar com o suporte.

A API não aceita chave de idempotência. Se uma criação expirar sem resposta, leia o recurso antes de enviá-la de novo: criar um realm ou client com um ID já usado é recusado com 409 e AlreadyExists.

Rotação de segredos

Dois endpoints geram um novo valor e o devolvem uma única vez: POST /realms/{realm}/clients/{client}/client-secret/rotate para o segredo de um client, e POST /secrets/{id}/rotate para uma credencial da conta — uma chave de API, um token de acesso pessoal ou um client secret da conta. Os dois aceitam um corpo JSON opcional que diz o que acontece com o valor anterior. Sem ele, o valor anterior é recusado na hora e os tokens emitidos com ele continuam valendo até expirar.

CampoTipoO que faz
previousValueValidForMinutesinteiro, opcionalMinutos em que o valor anterior continua autenticando, de 0 até o maxPreviousValueValidForMinutes do ambiente. 0 ou ausente o recusa na hora.
revokeIssuedTokensbooleano, opcionalO valor anterior vazou: ele é recusado na hora, os access tokens emitidos com ele antes da rotação ficam inativos na introspecção e são recusados pelas APIs do próprio Authio, e os refresh tokens deles param de funcionar. No segredo de um client, quem está conectado ao client precisa entrar de novo.

Um período acima de 0 e revokeIssuedTokens: true se excluem. Enviar os dois, ou um período fora do intervalo, recebe 400 com errorCode ValidationFailed, e a notificação nomeia o campo recusado (revokeIssuedTokens ou previousValueValidForMinutes).

Manter o segredo antigo por uma horaBash
curl -X POST https://authio.api.hyperio.tech/api/v1/admin/realms/acme/clients/acme-web/client-secret/rotate \
  -H "x-api-key: $AUTHIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"previousValueValidForMinutes": 60}'

A resposta traz o novo valor uma única vez — clientSecret, clientSecretLastFour e clientSecretRotatedAt para um client, o segredo com o seu value para uma credencial da conta — e rotation, que diz o que aconteceu com o anterior. Os horários são em UTC.

Campo de rotationO que contém
modeImmediate (recusado na hora), Overlap (ainda aceito por um tempo) ou Compromise (recusado na hora, com os tokens dele revogados).
previousValueValidUntilAté quando o valor anterior ainda autentica; só em Overlap.
issuedTokensRevokedBeforeOs tokens emitidos com o valor anterior antes deste instante estão revogados; só em Compromise.

As leituras acompanham a última rotação: o clientConfiguration de um client traz previousClientSecretValidUntil e issuedTokensRevokedBefore, e todo segredo de API traz previousValueValidUntil e issuedTokensRevokedBefore. O campo …ValidUntil só vem preenchido enquanto o valor anterior ainda autentica; uma leitura em cache pode durar mais que ele, então compare-o com a hora atual antes de confiar nele.

GET /secrets/rotation-policy responde maxPreviousValueValidForMinutes, o máximo que o ambiente deixa um valor anterior continuar funcionando (hoje 1440, um dia). Ele atende quem tem secret:read, secret:write ou secret:update, e o console só oferece sobreposições dentro dele.

Revogar os tokens emitidos só alcança quem consulta o Authio. Um servidor de recurso que valida JWTs localmente, só pela assinatura, não vê a revogação e continua aceitando esses tokens até expirarem — o comportamento padrão do OAuth. Use a introspecção onde uma revogação precisa valer na hora.

Toda rotação fica registrada na trilha de alterações com details contendo mode, previous_value_valid_until e issued_tokens_revoked_before. A rotação do segredo de um client também dispara admin_resource_updated nos webhooks do realm, com os mesmos details.

Grupos de recursos

Os caminhos são relativos a /api/v1/admin.

GrupoCaminhos baseO que cobre
Realms/realms, /realms/{realm}Os realms, o status e a configuração de identidade deles.
Clients/realms/{realm}/clients, /realms/{realm}/clients/{client}Os clients e, abaixo de cada um, o segredo, os consumers, os escopos, os papéis, as chaves de assinatura, os claim mappers, os IPs permitidos e os provedores de identidade.
Usuários do realm/realms/{realm}/usersAs pessoas de um realm, os papéis delas, as contas conectadas e a personificação.
Papéis/realms/{realm}/roles, /realms/{realm}/clients/{client}/roles, /rolesOs papéis de um realm, de um client e os da própria conta.
Escopos/scopes, /realms/{realm}/scopes, /realms/{realm}/clients/{client}/scopesO catálogo de escopos, os escopos exclusivos de um realm e os escopos que um client permite.
Organizações/realms/{realm}/organizationsAs organizações B2B, os membros, os domínios e os provedores de identidade delas.
Servidores de recurso/realms/{realm}/resource-serversAs APIs e os servidores MCP para os quais os tokens são emitidos.
Provedores de identidade/realms/{realm}/identity-providersOs provedores de identidade externos e os mapeamentos de papéis deles.
Sessões/realms/{realm}/sessionsAs sessões abertas, para ler e revogar.
Webhooks/realms/{realm}/webhooks, /realms/{realm}/clients/{client}/webhooksAs assinaturas de webhook por realm e por client, com {webhookId}/rotate-secret, {webhookId}/test e deliveries; os webhooks de um client também expõem metrics, events e {webhookId}/deliveries/{deliveryId}/replay. Veja os tipos de evento.
Delegação/realms/{realm}/delegation-grantsAs concessões de delegação usadas pelo token exchange.
Contas conectadas/realms/{realm}/connection-providers, /realms/{realm}/connectionsOs provedores de conexão e as contas que as pessoas conectaram.
Suspensões/suspensions, /realms/{realm}/clients/{client}/users/{userId}/suspensionsAs suspensões de usuários.
Segredos de API/secretsO cofre de segredos da conta, com {id}/rotate e rotation-policy (veja Rotação de segredos).
Auditoria/audit-trail, /access-logsAs alterações feitas pela API administrativa — veja a trilha de alterações — e os logins e emissões de token.
Conta/accountA conta e a equipe dela.
Importação/import, /import/{resourceType}, /import/translate, /import/migrate?dryRun=true, /realms/{realm}/clients/{client}/users/importImportação de configurações e usuários, e migração de outros provedores, com simulação antes.

As rotas que o console usa para acompanhar e operar um ambiente dedicado ficam na plataforma compartilhada, sob /api/v1/dedicated/instance, e pedem as permissões de ler e de atualizar a conta.

Próximos passos

Cookies de analytics

Gostaríamos de medir como o console é usado, com o Google Analytics, para enxergar em quais telas as pessoas travam. Isso grava um cookie que reconhece este navegador na sua próxima visita.

Recusar não muda mais nada. Os cookies que mantêm você conectado e lembram o seu idioma e o seu tema são necessários para o console funcionar, e ficam de qualquer forma. Ler a Política de Privacidade