Consultar estado
Estado registrado de un comprobante, para cualquier tipo. Es solo lectura: no consulta a SUNAT.
Autenticación: token Bearer de empresa (cpe:sign).
Consideraciones
- Aplica a todos los tipos: facturas, boletas, notas, resúmenes (RC/RA/RR) y guías (09/31).
- También acepta el entorno declarado en la ruta (
/api/pro/demo/cpe/consultar/…). La respuesta incluyeentorno, que es el del comprobante: lo emitido en demo sigue diciendodemoaunque la empresa ya esté en producción. - Para facturas, boletas y notas devuelve el estado registrado y el CDR si ya llegó.
- Trae
success,connectionysunat_success— el veredicto está ensunat_success(true/false/null), nunca en el HTTP. Los tres viajan siempre, también ennull. Ver Cómo leer la respuesta. - Si tu empresa está en modo
esperar, normalmente no necesitas llamar aquí: el CDR viene en la respuesta del envío. Sigue sirviendo por si SUNAT tardó de más. - Es solo lectura: no envía ni reenvía nada.
resuelto: falsesignifica que sigue en camino. Vuelve a consultar en unos segundos.- Variantes:
POST /api/cpe/consultar(conexternal_idonombre_archivoen el body) yPOST /api/cpe/consultar/external_id. - Alias de entorno:
GET /api/cpe/consultar-demo/{filename}.
Este endpoint devuelve lo que ya sabemos del comprobante, sea del tipo que sea. Es solo lectura: no envía, no reenvía y no consulta a SUNAT.
Qué hacer con cada combinación de campos está en
Cómo leer la respuesta. En corto: mientras resuelto
sea false, el comprobante sigue en camino. No hay nada que
hacer de tu lado: vuelve a consultar más tarde, o configura el
webhook y te avisamos sin que preguntes.
Headers
| Name | Type | Description |
|---|---|---|
| Accept | string | application/json |
| Content-Type | string | application/json |
| Authorization | string | Bearer <token>. Genéralo desde tu panel, en Tokens de API. |
Parámetros de URL
| Name | Type | Description |
|---|---|---|
| filename* | string | Nombre del comprobante en formato RUC-TIPO-SERIE-NUMERO (sin extensión). |
Ejemplo de solicitud
Copiar
curl -X GET https://api.xmlperu.dev/api/cpe/consultar/20123456789-RC-20260809-1 \
-H "Authorization: Bearer $TOKEN_EMPRESA" \
-H "Accept: application/json"Copiar
<?php
$token_empresa = 'pega-aqui-tu-token';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.xmlperu.dev/api/cpe/consultar/20123456789-RC-20260809-1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token_empresa,
'Accept: application/json',
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);Copiar
const TOKEN_EMPRESA = 'pega-aqui-tu-token';
const res = await fetch('https://api.xmlperu.dev/api/cpe/consultar/20123456789-RC-20260809-1', {
method: 'GET',
headers: {
Authorization: `Bearer ${TOKEN_EMPRESA}`,
Accept: 'application/json',
},
});
const data = await res.json();Copiar
import requests
TOKEN_EMPRESA = "pega-aqui-tu-token"
headers = {
"Authorization": f"Bearer {TOKEN_EMPRESA}",
"Accept": "application/json",
}
res = requests.get("https://api.xmlperu.dev/api/cpe/consultar/20123456789-RC-20260809-1", headers=headers)
data = res.json()Respuesta
200 Resueltoapplication/json
SUNAT se pronunció. Mira
state_type_id — 05 aceptado, 07 con observaciones, 09 rechazado. Ver Cómo leer la respuesta.{
"success": true,
"connection": true,
"sunat_success": true,
"llego_a_sunat": true,
"resuelto": true,
"estado": 200,
"state_type_id": "05",
"code": "0",
"mensaje": "La Factura numero F001-42, ha sido aceptada",
"message": "La Factura numero F001-42, ha sido aceptada",
"external_id": "9c2f1b7e-…",
"cdr": "UEsDBBQAAA…",
"time": 0.05
}200 Todavía en caminoapplication/json
El envío sigue en curso. Vuelve a consultar en unos segundos.
{
"success": true,
"connection": null,
"sunat_success": null,
"llego_a_sunat": null,
"resuelto": false,
"estado": "03",
"state_type_id": "03",
"mensaje": "Enviado a SUNAT, esperando respuesta.",
"message": "Enviado a SUNAT, esperando respuesta.",
"external_id": "9c2f1b7e-…",
"cdr": null,
"time": 0.04
}404 No registradoapplication/json
{
"success": false,
"message": "El comprobante no está registrado."
}