Autenticación
Envía tu API Key de DatosPerú en Authorization: Bearer. La cuenta debe estar verificada y la clave debe tener permiso para esta operación. Guarda la clave en tu servidor o en el almacén de credenciales de tu herramienta.
Cuerpo JSON
Envía Content-Type: application/json. Los valores de entrada se expresan como cadenas. Los parámetros adicionales se rechazan.
| Campo | Obligatorio | Formato |
|---|---|---|
ruc_emisor | Sí | RUC Emisor del comprobante^[0-9]{11}$ |
codigo_tipo_documento | Sí | Tipo Documento del comprobante |
serie_documento | Sí | Serie del comprobante |
numero_documento | Sí | Correlativo del comprobante |
fecha_de_emision | Sí | Debe tener el formato dd/mm/yyyy |
total | Sí | Total del comprobante |
Ejemplo cURL
Los números y las credenciales del ejemplo son ilustrativos. Sustitúyelos por datos cuya consulta tengas autorizada. Una petición exitosa utiliza créditos reales.
curl --request POST 'https://api.datosperu.net/api/v1/sunat/cpe' \
--header "Authorization: Bearer $DATOSPERU_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"ruc_emisor": "20123456789",
"codigo_tipo_documento": "01",
"serie_documento": "F001",
"numero_documento": "1",
"fecha_de_emision": "01/09/2026",
"total": "100.00"
}'Schema de la respuesta
Una consulta exitosa devuelve success: true, data y meta. El siguiente esquema corresponde a data. Los campos opcionales dependen de la fuente; null indica ausencia de valor.
{
"type": [
"object",
"null"
],
"description": "Datos detallados de la respuesta",
"properties": {
"ruc_emisor": {
"type": [
"string",
"null"
],
"description": "RUC del emisor del comprobante"
},
"codigo_tipo_documento": {
"type": [
"string",
"null"
],
"description": "Código del tipo de documento (ej. 01, 03)"
},
"serie_documento": {
"type": [
"string",
"null"
],
"description": "Serie del comprobante"
},
"numero_documento": {
"type": [
"string",
"null"
],
"description": "Número del comprobante"
},
"fecha_de_emision": {
"type": [
"string",
"null"
],
"description": "Fecha de emisión del comprobante en formato dd/mm/yyyy"
},
"total": {
"type": [
"number",
"null"
],
"description": "Importe total declarado en el comprobante"
},
"comprobante_estado_codigo": {
"type": [
"string",
"null"
],
"description": "Código del estado del comprobante"
},
"comprobante_estado_descripcion": {
"type": [
"string",
"null"
],
"description": "Descripción del estado del comprobante"
},
"empresa_estado_codigo": {
"type": [
"string",
"null"
],
"description": "Código del estado del contribuyente emisor"
},
"empresa_estado_description": {
"type": [
"string",
"null"
],
"description": "Descripción del estado del contribuyente emisor"
},
"empresa_condicion_codigo": {
"type": [
"string",
"null"
],
"description": "Código de la condición del contribuyente emisor"
},
"empresa_condicion_descripcion": {
"type": [
"string",
"null"
],
"description": "Descripción de la condición del contribuyente emisor"
},
"observaciones": {
"type": [
"array",
"null"
],
"description": "Observaciones reportadas por SUNAT",
"items": {
"type": [
"string",
"null"
]
}
}
},
"additionalProperties": false
}meta.request_id identifica la solicitud y meta.timestamp utiliza una fecha ISO 8601. No registres los datos personales o archivos completos cuando solo necesites identificar un incidente.
Errores y reintentos
Los errores devuelven success: false y un objeto error con code y message. Un error del proveedor libera la reserva de crédito. Evita reintentar entradas inválidas o claves revocadas.
| HTTP | Cómo actuar |
|---|---|
| 401 | API Key ausente, inválida o revocada. Revisa la credencial. |
| 403 | Cuenta, verificación o permiso insuficiente. Revisa tu acceso. |
| 404 | Sin resultados o ruta inexistente. Comprueba los datos y el endpoint. |
| 422 | Parámetros inválidos. Corrige el cuerpo antes de reintentar. |
| 429 | Límite por minuto o cuota del periodo. Revisa el código de error y tu consumo. |
| 502 / 504 | Error o demora de la fuente. Reintenta con espera y un máximo de intentos. |
| 503 | Servicio no disponible o pendiente de configuración. Consulta el estado. |
Consumo y disponibilidad
Una consulta exitosa consume un crédito. Gratis incluye 100 créditos cada 30 días. Los planes pagados renuevan según su periodo contratado; cada plan conserva un límite por minuto. Revisa los valores vigentes en Precios.
La disponibilidad depende de la fuente y la configuración del servicio. DatosPerú es independiente de las entidades públicas mencionadas y utiliza JSON.pe como proveedor. Consulta solo los datos que estés autorizado a tratar.