Autenticación
Descripción general
La API PIX Bacen utiliza el mismo sistema de autenticación que la API estandar de EYT. Todas las solicitudes deben incluir un token Bearer valido en el header Authorization.
La autenticación es identica a la de la API estandar. Si ya tiene credenciales, puede usarlas directamente.
Obtener un Token
Endpoint
POST /api/auth/tokenEl certificado X.509 debe enviarse URL-encoded en el header X-SSL-Client-Cert. El sistema valida el fingerprint SHA256 del certificado contra los registros vinculados a la cuenta.
Solicitud
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": "your-client-id",
"clientSecret": "your-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: 'your-client-id',
clientSecret: 'your-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': 'your-client-id',
'clientSecret': 'your-client-secret'
}
)
access_token = response.json()['access_token']Respuesta
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 1800
}Uso del Token
Incluya el token en todas las solicitudes a la 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 Autenticación
stringobrigatorioCertificado X.509 del cliente, en formato PEM y URL-encoded, vinculado a su cuenta.
stringobrigatorioIdentificador único de su aplicación. Proporcionado durante el registro.
stringobrigatorioClave secreta de su aplicación. Debe tener entre 8 y 64 caracteres.
Nunca exponga el clientSecret en código frontend o repositorios publicos.
Campos de Respuesta
access_tokenstringToken JWT para autenticar solicitudes.
token_typestringTipo de token. Siempre "Bearer".
expires_innumberTiempo de vida del token en segundos. Siempre 1800 (30 minutos).
Renovacion del Token
El token expira después de expires_in segundos. Implemente la renovacion automatica:
class TokenManager {
private token: string | null = null;
private expiresAt: number = 0;
async getToken(): Promise<string> {
// Renovar 5 minutos antes de la expiracion
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);
}
}Errores de Autenticación
| Código | Descripción | Solución |
|---|---|---|
| 401 | Token no proporcionado | Incluya el header Authorization: Bearer <token> |
| 401 | Token invalido | Verifique que el token sea correcto y no haya expirado |
| 401 | Token expirado | Obtenga un nuevo token via /api/auth/token |
| 400/401/403 | Error de certificado o credenciales en /api/auth/token | Consulte los errores de certificado en la guía de autenticación estandar |