⚠️ Este artigo está em desenvolvimento. Algumas informações podem mudar antes da data de migração.
A partir de 6 de julho de 2026, os tokens gerados pelo sistema de autenticação antigo serão invalidados e não será mais possível gerar um token de acesso à API Axeptio via username e password. Os endpoints de autenticação atuais serão descontinuados. Qualquer chamada à API Axeptio com um token gerado pelo sistema antigo será rejeitada — seja a partir de código, script ou ferramenta como Postman. Se este é o seu caso, atualize seu método de autenticação seguindo as etapas abaixo.
Quem é afetado?
Este artigo o concerne se você chamar a API Axeptio diretamente — a partir de código, script, suas integrações, uma ferramenta como Postman ou qualquer outro cliente HTTP.
Se você usa apenas a administração Axeptio e não chama a API diretamente, nenhuma ação é necessária de sua parte.
Por que essa mudança?
Axeptio está migrando seu sistema de autenticação para Frontegg. Essa migração estabelece as fundações técnicas necessárias para os novos recursos futuros: MFA, Social login, SSO e logs de auditoria. Também permite oferecer um gerenciamento de acesso à API mais robusto e granular.
O que acontece se você não migrar
A partir de 6 de julho de 2026, qualquer chamada à API Axeptio usando o sistema de autenticação antigo será rejeitada. Seus banners de consentimento já publicados não são afetados — apenas as integrações programáticas deixarão de funcionar.
O que muda
O endpoint para obter um token Bearer muda, assim como as credenciais associadas, mas a forma de transmitir o token em suas requisições permanece a mesma — um header Authorization: Bearer. O que muda na prática: você agora obtém um token de curta duração do Frontegg em troca de um Client ID e um Secret, em vez de um token de longa duração via seu username e password.
Antes | Depois | |
Endpoint | POST /auth/local/signin | POST /identity/resources/auth/v2/api-token |
Credenciais | username + password | clientId + secret |
Tempo de vida | Longa duração | 1 hora — a ser renovado automaticamente |
Transmissão | Authorization: Bearer | Authorization: Bearer (inalterado) |
Visão geral do fluxo
Gerar um acesso à API na administração Axeptio. Você obtém um Client ID e um Secret que identificam sua integração.
Solicitar um token ao Frontegg apresentando seu Client ID e Secret. Você recebe em retorno um
access_token, válido por 1 hora.Chamar a API Axeptio incluindo este token no header
Authorization: Bearerde cada requisição.Renovar o token antes de sua expiração via o endpoint dedicado, sem precisar informar novamente o Client ID e o Secret.
1. Gerar um acesso à API na administração Axeptio
Faça login na administração Axeptio.
Vá em Configurações → Acesso à API.
Copie seu Client ID e seu Secret.
Guarde seu secret em local seguro — ele não pode ser recuperado após a geração. Nunca o coloque hardcoded em seu código: armazene-o em uma variável de ambiente.
2. Solicitar um token ao Frontegg
Chame o endpoint Frontegg com seu Client ID e Secret. Você recebe em retorno um access_token, válido por 1 hora, e um refresh_token para renová-lo.
curl -X POST https://<FRONTEGG_URL>/identity/resources/auth/v2/api-token \
-H "Content-Type: application/json" \
-d '{ "clientId": "<CLIENT_ID>", "secret": "<SECRET>" }'
Resposta:
{
"access_token": "eyJ...",
"refresh_token": "dGhp...",
"expires_in": 3600
}
3. Chamar a API Axeptio
Inclua o access_token no header Authorization de cada requisição.
curl https://api.axept.io/v1/<ENDPOINT> \
-H "Authorization: Bearer <ACCESS_TOKEN>"
4. Renovar o token antes da expiração
O token expira após 1 hora. Antes de cada chamada, verifique se ainda é válido e renove-o se necessário — sem precisar informar novamente o Client ID e o Secret.
curl -X POST https://<FRONTEGG_URL>/identity/resources/auth/v2/api-token/token/refresh \
-H "Content-Type: application/json" \
-d '{ "refreshToken": "<REFRESH_TOKEN>" }'
Exemplos de código completos
TypeScript / Node.js
const FRONTEGG_URL = process.env.FRONTEGG_URL;
interface FronteggTokenResponse {
access_token: string;
refresh_token: string;
expires_in: number;
}
async function getAccessToken(clientId: string, secret: string): Promise<FronteggTokenResponse> {
const res = await fetch(`${FRONTEGG_URL}/identity/resources/auth/v2/api-token`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientId, secret }),
});
if (!res.ok) throw new Error(`Token fetch failed: ${res.status}`);
return res.json();
}
async function refreshAccessToken(refreshToken: string): Promise<FronteggTokenResponse> {
const res = await fetch(`${FRONTEGG_URL}/identity/resources/auth/v2/api-token/token/refresh`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ refreshToken }),
});
if (!res.ok) throw new Error(`Token refresh failed: ${res.status}`);
return res.json();
}
async function callAxeptioApi(accessToken: string, path: string) {
const res = await fetch(`https://api.axept.io/v1${path}`, {
headers: { Authorization: `Bearer ${accessToken}` },
});
if (!res.ok) throw new Error(`API call failed: ${res.status}`);
return res.json();
}
// Utilização com rafraîchissement automatique
let token = await getAccessToken(CLIENT_ID, SECRET);
let expiresAt = Date.now() + token.expires_in * 1000;
async function apiCall(path: string) {
// Rafraîchit 60 s avant expiration pour éviter les rejets en cas de latence réseau
if (Date.now() > expiresAt - 60_000) {
token = await refreshAccessToken(token.refresh_token);
expiresAt = Date.now() + token.expires_in * 1000;
}
return callAxeptioApi(token.access_token, path);
}
Python
import time
import requests
FRONTEGG_URL = "https://<FRONTEGG_URL>"
AXEPTIO_API = "https://api.axept.io/v1"
def get_access_token(client_id: str, secret: str) -> dict:
res = requests.post(
f"{FRONTEGG_URL}/identity/resources/auth/v2/api-token",
json={"clientId": client_id, "secret": secret},
)
res.raise_for_status()
return res.json()
def refresh_access_token(refresh_token: str) -> dict:
res = requests.post(
f"{FRONTEGG_URL}/identity/resources/auth/v2/api-token/token/refresh",
json={"refreshToken": refresh_token},
)
res.raise_for_status()
return res.json()
def call_axeptio_api(access_token: str, path: str) -> dict:
res = requests.get(
f"{AXEPTIO_API}{path}",
headers={"Authorization": f"Bearer {access_token}"},
)
res.raise_for_status()
return res.json()
# Utilização com rafraîchissement automatique
token = get_access_token(CLIENT_ID, SECRET)
expires_at = time.time() + token["expires_in"]
def api_call(path: str) -> dict:
global token, expires_at
if time.time() > expires_at - 60: # 60 s de marge pour éviter les rejets en cas de latence réseau
token = refresh_access_token(token["refresh_token"])
expires_at = time.time() + token["expires_in"]
return call_axeptio_api(token["access_token"], path)
Referência
A lista completa dos endpoints disponíveis está documentada no Swagger Axeptio.
Precisa de ajuda?
Se suas chamadas falharem após a migração, se suas credenciais não forem visíveis na administração Axeptio, ou para qualquer outra dúvida, não hesite em entrar em contato com nossa equipe de suporte.
