Autenticación (usuario / contraseña)
Intercambia el usuario y la contraseña de la empresa por un token de acceso temporal (Bearer) que luego se usa en los endpoints de compatibilidad.
Autenticación: usuario/contraseña (sin Bearer).
Consideraciones
- Pensado para migrar sin cambiar el flujo: si tu proveedor actual usa login con usuario y contraseña, aquí funciona igual.
- El
usuario/contraseñason las credenciales SOAP de la empresa (soap_username/soap_password). Se obtienen al crear la empresa o con GET credenciales. - El token caduca en 1 hora (
expires_in, en segundos). Renuévalo volviendo a iniciar sesión: pasado ese tiempo los endpoints responden401. - Cada login reemplaza la sesión anterior: hay una viva por empresa. Si tienes dos procesos emitiendo y ambos inician sesión, el segundo deja fuera al primero — usa el token permanente si necesitas varios a la vez.
- No afecta al token permanente de la empresa: los dos estilos pueden convivir.
- El token devuelto tiene el ámbito de firma de la empresa; úsalo como
Authorization: Beareren generar, enviar y consultar. - Alternativa API-first (sin login): usa directamente el token de empresa con ámbito
cpe:sign. - Acepta también las llaves en español
usuario/contrasenaademás deusername/password. - La respuesta incluye
entorno(demo·produccion): compáralo con el que tenga configurado tu sistema antes de emitir. Es el mismo dato que devuelve GET /v1/me.
Cuánto dura
El token caduca en 1 hora. La respuesta lo dice en expires_in (y en
expira_en, para clientes que esperan el nombre en español), así que no hace
falta suponerlo: renueva cuando se acerque ese tiempo, o vuelve a iniciar sesión
al recibir un 401.
Una sesión por empresa
Cada login reemplaza la sesión anterior. Si tu sistema emite
desde dos procesos y ambos inician sesión, el segundo deja al primero sin
token y este empezará a recibir 401.
Para ese caso usa el token permanente, que no caduca ni se reemplaza. Los dos estilos conviven: iniciar sesión no invalida el token permanente.
Este endpoint existe para que un cliente que ya integró con otro proveedor (login
usuario/contraseña) pueda migrar sin reescribir su autenticación. Si estás
integrando desde cero, te recomendamos el
token de empresa directo (ámbito cpe:sign), que
evita el paso de login.
Headers
| Name | Type | Description |
|---|---|---|
| Accept | string | application/json |
| Content-Type | string | application/json |
Body
| Name | Type | Description |
|---|---|---|
| usuario* | string | Usuario de la empresa (soap_username). Acepta también username. |
| password* | string | Contraseña de la empresa (soap_password). Acepta también contrasena. |
Ejemplo de solicitud
curl -X POST https://api.xmlperu.dev/api/auth/cpe/token \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"usuario": "t22kwlgu",
"password": "5OrDJAfa"
}'<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xmlperu.dev/api/auth/cpe/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, <<<JSON
{
"usuario": "t22kwlgu",
"password": "5OrDJAfa"
}
JSON);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);const res = await fetch('https://api.xmlperu.dev/api/auth/cpe/token', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"usuario": "t22kwlgu",
"password": "5OrDJAfa"
}),
});
const data = await res.json();import requests
headers = {
"Accept": "application/json",
}
payload = {
"usuario": "t22kwlgu",
"password": "5OrDJAfa"
}
res = requests.post("https://api.xmlperu.dev/api/auth/cpe/token", json=payload, headers=headers)
data = res.json()Respuesta
access_token) y en español (token_acceso) para máxima compatibilidad. expires_in está en segundos.{
"access_token": "26|J3krUfzfhfXnHFG0fZqNx2rH4TtwOK7BIuLSAV9Q54abd74d",
"expires_in": 86400,
"token_acceso": "26|J3krUfzfhfXnHFG0fZqNx2rH4TtwOK7BIuLSAV9Q54abd74d",
"expira_en": 86400,
"entorno": "demo"
}{
"success": false,
"message": "No autorizado (no ha iniciado sesión)"
}