Autenticação
A API usa OAuth2 client credentials. Cada canal recebe um client_id (cbc_...) e um
client_secret (cbs_...), fornecidos pela Eagle IX. O secret é informado uma única vez: armazene-o
em um cofre de segredos.
Obter o access token
Seção intitulada “Obter o access token”POST /v1/oauth/token, com as credenciais no Basic Auth (usuário = client_id, senha =
client_secret) e o corpo grant_type=client_credentials. Escolha o seu ambiente:
export CLIENT_ID=cbc_...export CLIENT_SECRET=cbs_...
curl -s -u "$CLIENT_ID:$CLIENT_SECRET" \ -d grant_type=client_credentials \ https://sandbox-api.eagleix-corban.com.br/v1/oauth/tokenNo PowerShell, curl é um apelido de outro comando. Use curl.exe, e uma linha só (a quebra de
linha do PowerShell é a crase, não a barra invertida).
$env:CLIENT_ID = "cbc_..."$env:CLIENT_SECRET = "cbs_..."
curl.exe -s -u "$($env:CLIENT_ID):$($env:CLIENT_SECRET)" -d grant_type=client_credentials https://sandbox-api.eagleix-corban.com.br/v1/oauth/tokenNativo do PowerShell: devolve o JSON já como objeto.
$env:CLIENT_ID = "cbc_..."$env:CLIENT_SECRET = "cbs_..."
$cred = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($env:CLIENT_ID):$($env:CLIENT_SECRET)"))
$r = Invoke-RestMethod -Method Post ` -Uri "https://sandbox-api.eagleix-corban.com.br/v1/oauth/token" ` -Headers @{ Authorization = "Basic $cred" } ` -Body @{ grant_type = "client_credentials" }
$r.access_tokenconst basic = Buffer.from(`${process.env.CLIENT_ID}:${process.env.CLIENT_SECRET}`).toString('base64')
const res = await fetch('https://sandbox-api.eagleix-corban.com.br/v1/oauth/token', { method: 'POST', headers: { Authorization: `Basic ${basic}`, 'Content-Type': 'application/x-www-form-urlencoded', }, body: 'grant_type=client_credentials',})const { access_token, expires_in } = await res.json()import os, requests
r = requests.post( "https://sandbox-api.eagleix-corban.com.br/v1/oauth/token", auth=(os.environ["CLIENT_ID"], os.environ["CLIENT_SECRET"]), data={"grant_type": "client_credentials"}, timeout=15,)token = r.json()["access_token"]Importando o curl. No Postman, clique em Import, escolha Raw text, cole o
comando abaixo (trocando CLIENT_ID e CLIENT_SECRET pelas suas credenciais) e confirme. A
requisição já vem montada, com o Basic Auth e o corpo.
curl --location 'https://sandbox-api.eagleix-corban.com.br/v1/oauth/token' \ --user 'CLIENT_ID:CLIENT_SECRET' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials'Ou montando à mão:
- Método POST e URL
https://sandbox-api.eagleix-corban.com.br/v1/oauth/token. - Aba Authorization: tipo Basic Auth, com
client_idem Username eclient_secretem Password. - Aba Body: x-www-form-urlencoded, com a chave
grant_typee o valorclient_credentials. - Send.
A resposta:
{ "access_token": "cbt_...", "token_type": "Bearer", "expires_in": 3600 }Alternativa ao Basic: enviar client_id e client_secret no corpo, junto com o grant_type.
Use um dos dois jeitos, nunca os dois na mesma chamada.
Usar o token
Seção intitulada “Usar o token”Em todas as outras chamadas, envie Authorization: Bearer <access_token>. Para conferir que está tudo
certo, chame GET /v1/ping: ele responde com o canal identificado pelo token.
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \ https://sandbox-api.eagleix-corban.com.br/v1/pingcurl.exe -s -H "Authorization: Bearer $env:ACCESS_TOKEN" https://sandbox-api.eagleix-corban.com.br/v1/ping$h = @{ Authorization = "Bearer $($r.access_token)" }Invoke-RestMethod -Uri "https://sandbox-api.eagleix-corban.com.br/v1/ping" -Headers $hconst ping = await fetch('https://sandbox-api.eagleix-corban.com.br/v1/ping', { headers: { Authorization: `Bearer ${access_token}` },}).then((r) => r.json())ping = requests.get( "https://sandbox-api.eagleix-corban.com.br/v1/ping", headers={"Authorization": f"Bearer {token}"}, timeout=15,).json()Aba Authorization, tipo Bearer Token, e cole o access_token no campo Token.
Opcionalmente, crie uma variável de coleção ACCESS_TOKEN e use {{ACCESS_TOKEN}}.
Para importar pronto:
curl --location 'https://sandbox-api.eagleix-corban.com.br/v1/ping' \ --header 'Authorization: Bearer ACCESS_TOKEN'Validade e renovação
Seção intitulada “Validade e renovação”- O token vale 1 hora. Não há refresh token: quando expirar (
401), peça outro. - Reaproveite o token durante a validade. Pedir um por requisição é desnecessário e pode esbarrar no limite de tentativas.
- Um
401em qualquer rota significa token ausente, inválido ou expirado.
Proteções
Seção intitulada “Proteções”| Proteção | Como funciona |
|---|---|
| Bloqueio por tentativas | 10 tentativas inválidas em 15 minutos (por client_id ou por IP) bloqueiam o endpoint de token por um tempo (429, com Retry-After). |
| Resposta única | Credencial incorreta, canal inativo e IP não permitido devolvem o mesmo 401 invalid_client, para não revelar o motivo da recusa. |
| Restrição por IP | Se o seu sistema usa IPs fixos de saída, informe-os à Eagle IX: o canal pode ser restrito a esses IPs. |
| Rotação | O canal pode ter dois secrets ativos ao mesmo tempo, para que a troca não interrompa a integração. |
