Autenticação
Visão Geral
A API PIX Bacen utiliza o mesmo sistema de autenticação da API padrão EYT. Todas as requisições devem incluir um token Bearer válido no header Authorization.
A autenticação é idêntica a API padrão. Se você já possui credenciais, pode usá-las diretamente.
Obtendo o Token
Endpoint
POST /api/auth/tokenO certificado X.509 deve ser enviado URL-encoded no header X-SSL-Client-Cert. O sistema valida o fingerprint SHA256 do certificado contra os registros vinculados à conta.
Request
curl -X POST https://api.gateway.eyt.com.br/api/auth/token \
-H "Content-Type: application/json" \
-H "X-SSL-Client-Cert: -----BEGIN%20CERTIFICATE-----%0AMIIB..." \
-d '{
"clientId": "seu-client-id",
"clientSecret": "seu-client-secret"
}'const fs = require('fs');
const certificate = fs.readFileSync('./client-cert.pem', 'utf8');
const encodedCert = encodeURIComponent(certificate);
const response = await fetch('https://api.gateway.eyt.com.br/api/auth/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-SSL-Client-Cert': encodedCert,
},
body: JSON.stringify({
clientId: 'seu-client-id',
clientSecret: 'seu-client-secret',
}),
});
const { access_token } = await response.json();import requests
import urllib.parse
with open('client-cert.pem', 'r') as f:
certificate = f.read()
encoded_cert = urllib.parse.quote(certificate)
response = requests.post(
'https://api.gateway.eyt.com.br/api/auth/token',
headers={'X-SSL-Client-Cert': encoded_cert},
json={
'clientId': 'seu-client-id',
'clientSecret': 'seu-client-secret'
}
)
access_token = response.json()['access_token']Response
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 1800
}Usando o Token
Inclua o token em todas as requisições da API PIX Bacen:
curl -X PUT https://api.gateway.eyt.com.br/cob/abc123 \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{...}'Parâmetros de Autenticação
stringobrigatorioCertificado X.509 cliente, no formato PEM e URL-encoded, vinculado à sua conta.
stringobrigatorioIdentificador único da sua aplicação. Fornecido durante o cadastro.
stringobrigatorioChave secreta da sua aplicação. Deve ter entre 8 e 64 caracteres.
Nunca exponha o clientSecret em código frontend ou repositórios públicos.
Campos da Resposta
access_tokenstringToken JWT para autenticação nas requisições.
token_typestringTipo do token. Sempre "Bearer".
expires_innumberTempo de vida do token em segundos. Sempre 1800 (30 minutos).
Renovação do Token
O token expira após expires_in segundos. Implemente renovação automática:
class TokenManager {
private token: string | null = null;
private expiresAt: number = 0;
async getToken(): Promise<string> {
// Renovar 5 minutos antes de expirar
if (!this.token || Date.now() >= this.expiresAt - 300000) {
await this.refreshToken();
}
return this.token!;
}
private async refreshToken(): Promise<void> {
const fs = require('fs');
const certificate = fs.readFileSync(process.env.CLIENT_CERT_PATH, 'utf8');
const encodedCert = encodeURIComponent(certificate);
const response = await fetch('https://api.gateway.eyt.com.br/api/auth/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-SSL-Client-Cert': encodedCert,
},
body: JSON.stringify({
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
}),
});
const data = await response.json();
this.token = data.access_token;
this.expiresAt = Date.now() + (data.expires_in * 1000);
}
}Erros de Autenticação
| Código | Descrição | Solução |
|---|---|---|
| 401 | Token não fornecido | Inclua o header Authorization: Bearer <token> |
| 401 | Token inválido | Verifique se o token está correto e não expirou |
| 401 | Token expirado | Obtenha um novo token via /api/auth/token |
| 400/401/403 | Erro no certificado ou nas credenciais em /api/auth/token | Consulte os erros de certificado no guia de autenticação padrão |