Referencia API

Generada del propio servicio: lo que se lee aquí es lo que responde.

Comprobantes

El XML, el PDF y el CDR de un comprobante electrónico, y sus datos, tal como los tiene SUNAT. Contrato anterior a /v1: se mantiene tal cual, y sus errores tienen otra forma.

POST/api/v1/cpe/consultar

Datos de un comprobante

Datos de un comprobante tal como los tiene SUNAT (fecha, moneda, total y razones sociales), sin descargar archivos.

Requiere la cabecera X-API-Key.

Cuerpo (JSON): CPERequest

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa que consulta (la que emitió o recibió el comprobante).
usuario texto Sí Usuario SOL de esa empresa, para la vía de respaldo por el portal SOL.
password texto Sí Clave SOL de ese usuario. No se guarda en el servicio.
ruc_emisor texto Sí RUC de quien emitió el comprobante.
tipo texto No (por defecto "01") Tipo de comprobante: 01 factura, 03 boleta, 07 nota de crédito, 08 nota de débito.
serie texto Sí Serie del comprobante, por ejemplo F001.
numero texto Sí Correlativo del comprobante, por ejemplo 123.
filtro texto No (por defecto "2") 1 emitido por la empresa que consulta; 2 recibido de un proveedor.
oauth_client_id texto o null No client_id de la aplicación que la empresa genera en SOL («Credenciales de API SUNAT»). Con él y su secreto se usa la vía oficial de SUNAT.
oauth_client_secret texto o null No client_secret de esa aplicación.
oauth_user texto o null No Usuario SOL de la vía oficial, si no es `usuario`.
oauth_password texto o null No Clave de ese usuario, si no es `password`.
{
  "ruc": "20100000001",
  "usuario": "USUARIO1",
  "password": "clave-sol",
  "ruc_emisor": "20999999999",
  "tipo": "01",
  "serie": "F001",
  "numero": "123",
  "filtro": "2",
  "oauth_client_id": "00000000-0000-0000-0000-000000000000",
  "oauth_client_secret": "secreto"
}

Respuestas

HTTPContenidoCuándo
200 CPEConsulta Los datos del comprobante.
401 LegacyErrorOut Falta la API key, o SUNAT no aceptó el acceso (usuario o clave SOL, permiso del usuario o credenciales de la aplicación): el motivo va en detail.
403 LegacyErrorOut API key no autorizada: no existe o está desactivada.
404 LegacyErrorOut El comprobante no está en SUNAT o no tiene ese archivo.
422 HTTPValidationError Validation Error
429 LegacyErrorOut Se superó el límite de peticiones por minuto de la API key.
500 LegacyErrorOut SUNAT error: fallo de SUNAT, que ocurre al azar; reintentar.
502 LegacyErrorOut SUNAT error: SUNAT respondió algo ilegible; reintentar.
503 LegacyErrorOut SUNAT error: SUNAT no pudo dar acceso en ese momento; reintentar.
504 LegacyErrorOut SUNAT error: SUNAT no respondió a tiempo; reintentar.

Ejemplo de respuesta correcta:

{
  "ruc_emisor": "20999999999",
  "tipo_comprobante": "01",
  "serie": "F001",
  "numero": 123,
  "fecha_emision": "15/09/2026",
  "moneda": "PEN",
  "total": 1180.0,
  "razon_social_emisor": "EMPRESA EMISORA S.A.C.",
  "razon_social_receptor": "SU EMPRESA S.A.C."
}

POST/api/v1/cpe/pdf

PDF de un comprobante

La representación impresa del comprobante, en base64.

Requiere la cabecera X-API-Key.

Cuerpo (JSON): CPERequest

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa que consulta (la que emitió o recibió el comprobante).
usuario texto Sí Usuario SOL de esa empresa, para la vía de respaldo por el portal SOL.
password texto Sí Clave SOL de ese usuario. No se guarda en el servicio.
ruc_emisor texto Sí RUC de quien emitió el comprobante.
tipo texto No (por defecto "01") Tipo de comprobante: 01 factura, 03 boleta, 07 nota de crédito, 08 nota de débito.
serie texto Sí Serie del comprobante, por ejemplo F001.
numero texto Sí Correlativo del comprobante, por ejemplo 123.
filtro texto No (por defecto "2") 1 emitido por la empresa que consulta; 2 recibido de un proveedor.
oauth_client_id texto o null No client_id de la aplicación que la empresa genera en SOL («Credenciales de API SUNAT»). Con él y su secreto se usa la vía oficial de SUNAT.
oauth_client_secret texto o null No client_secret de esa aplicación.
oauth_user texto o null No Usuario SOL de la vía oficial, si no es `usuario`.
oauth_password texto o null No Clave de ese usuario, si no es `password`.
{
  "ruc": "20100000001",
  "usuario": "USUARIO1",
  "password": "clave-sol",
  "ruc_emisor": "20999999999",
  "tipo": "01",
  "serie": "F001",
  "numero": "123",
  "filtro": "2",
  "oauth_client_id": "00000000-0000-0000-0000-000000000000",
  "oauth_client_secret": "secreto"
}

Respuestas

HTTPContenidoCuándo
200 CPEArchivo El archivo del comprobante.
401 LegacyErrorOut Falta la API key, o SUNAT no aceptó el acceso (usuario o clave SOL, permiso del usuario o credenciales de la aplicación): el motivo va en detail.
403 LegacyErrorOut API key no autorizada: no existe o está desactivada.
404 LegacyErrorOut El comprobante no está en SUNAT o no tiene ese archivo.
422 HTTPValidationError Validation Error
429 LegacyErrorOut Se superó el límite de peticiones por minuto de la API key.
500 LegacyErrorOut SUNAT error: fallo de SUNAT, que ocurre al azar; reintentar.
502 LegacyErrorOut SUNAT error: SUNAT respondió algo ilegible; reintentar.
503 LegacyErrorOut SUNAT error: SUNAT no pudo dar acceso en ese momento; reintentar.
504 LegacyErrorOut SUNAT error: SUNAT no respondió a tiempo; reintentar.

Ejemplo de respuesta correcta:

{
  "filename": "20999999999-01-F001-123.xml",
  "content_base64": "PD94bWwgdmVyc2lvbj0iMS4wIj8+",
  "size": 8421,
  "via": "oficial"
}

POST/api/v1/cpe/xml

XML de un comprobante

El XML firmado del comprobante, en base64.

Requiere la cabecera X-API-Key.

Cuerpo (JSON): CPERequest

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa que consulta (la que emitió o recibió el comprobante).
usuario texto Sí Usuario SOL de esa empresa, para la vía de respaldo por el portal SOL.
password texto Sí Clave SOL de ese usuario. No se guarda en el servicio.
ruc_emisor texto Sí RUC de quien emitió el comprobante.
tipo texto No (por defecto "01") Tipo de comprobante: 01 factura, 03 boleta, 07 nota de crédito, 08 nota de débito.
serie texto Sí Serie del comprobante, por ejemplo F001.
numero texto Sí Correlativo del comprobante, por ejemplo 123.
filtro texto No (por defecto "2") 1 emitido por la empresa que consulta; 2 recibido de un proveedor.
oauth_client_id texto o null No client_id de la aplicación que la empresa genera en SOL («Credenciales de API SUNAT»). Con él y su secreto se usa la vía oficial de SUNAT.
oauth_client_secret texto o null No client_secret de esa aplicación.
oauth_user texto o null No Usuario SOL de la vía oficial, si no es `usuario`.
oauth_password texto o null No Clave de ese usuario, si no es `password`.
{
  "ruc": "20100000001",
  "usuario": "USUARIO1",
  "password": "clave-sol",
  "ruc_emisor": "20999999999",
  "tipo": "01",
  "serie": "F001",
  "numero": "123",
  "filtro": "2",
  "oauth_client_id": "00000000-0000-0000-0000-000000000000",
  "oauth_client_secret": "secreto"
}

Respuestas

HTTPContenidoCuándo
200 CPEArchivo El archivo del comprobante.
401 LegacyErrorOut Falta la API key, o SUNAT no aceptó el acceso (usuario o clave SOL, permiso del usuario o credenciales de la aplicación): el motivo va en detail.
403 LegacyErrorOut API key no autorizada: no existe o está desactivada.
404 LegacyErrorOut El comprobante no está en SUNAT o no tiene ese archivo.
422 HTTPValidationError Validation Error
429 LegacyErrorOut Se superó el límite de peticiones por minuto de la API key.
500 LegacyErrorOut SUNAT error: fallo de SUNAT, que ocurre al azar; reintentar.
502 LegacyErrorOut SUNAT error: SUNAT respondió algo ilegible; reintentar.
503 LegacyErrorOut SUNAT error: SUNAT no pudo dar acceso en ese momento; reintentar.
504 LegacyErrorOut SUNAT error: SUNAT no respondió a tiempo; reintentar.

Ejemplo de respuesta correcta:

{
  "filename": "20999999999-01-F001-123.xml",
  "content_base64": "PD94bWwgdmVyc2lvbj0iMS4wIj8+",
  "size": 8421,
  "via": "oficial"
}

POST/api/v1/cpe/cdr

CDR de un comprobante

La constancia de recepción de SUNAT (CDR), en base64.

Requiere la cabecera X-API-Key.

Cuerpo (JSON): CPERequest

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa que consulta (la que emitió o recibió el comprobante).
usuario texto Sí Usuario SOL de esa empresa, para la vía de respaldo por el portal SOL.
password texto Sí Clave SOL de ese usuario. No se guarda en el servicio.
ruc_emisor texto Sí RUC de quien emitió el comprobante.
tipo texto No (por defecto "01") Tipo de comprobante: 01 factura, 03 boleta, 07 nota de crédito, 08 nota de débito.
serie texto Sí Serie del comprobante, por ejemplo F001.
numero texto Sí Correlativo del comprobante, por ejemplo 123.
filtro texto No (por defecto "2") 1 emitido por la empresa que consulta; 2 recibido de un proveedor.
oauth_client_id texto o null No client_id de la aplicación que la empresa genera en SOL («Credenciales de API SUNAT»). Con él y su secreto se usa la vía oficial de SUNAT.
oauth_client_secret texto o null No client_secret de esa aplicación.
oauth_user texto o null No Usuario SOL de la vía oficial, si no es `usuario`.
oauth_password texto o null No Clave de ese usuario, si no es `password`.
{
  "ruc": "20100000001",
  "usuario": "USUARIO1",
  "password": "clave-sol",
  "ruc_emisor": "20999999999",
  "tipo": "01",
  "serie": "F001",
  "numero": "123",
  "filtro": "2",
  "oauth_client_id": "00000000-0000-0000-0000-000000000000",
  "oauth_client_secret": "secreto"
}

Respuestas

HTTPContenidoCuándo
200 CPEArchivo El archivo del comprobante.
401 LegacyErrorOut Falta la API key, o SUNAT no aceptó el acceso (usuario o clave SOL, permiso del usuario o credenciales de la aplicación): el motivo va en detail.
403 LegacyErrorOut API key no autorizada: no existe o está desactivada.
404 LegacyErrorOut El comprobante no está en SUNAT o no tiene ese archivo.
422 HTTPValidationError Validation Error
429 LegacyErrorOut Se superó el límite de peticiones por minuto de la API key.
500 LegacyErrorOut SUNAT error: fallo de SUNAT, que ocurre al azar; reintentar.
502 LegacyErrorOut SUNAT error: SUNAT respondió algo ilegible; reintentar.
503 LegacyErrorOut SUNAT error: SUNAT no pudo dar acceso en ese momento; reintentar.
504 LegacyErrorOut SUNAT error: SUNAT no respondió a tiempo; reintentar.

Ejemplo de respuesta correcta:

{
  "filename": "20999999999-01-F001-123.xml",
  "content_base64": "PD94bWwgdmVyc2lvbj0iMS4wIj8+",
  "size": 8421,
  "via": "oficial"
}

Estado de comprobantes

Si SUNAT tiene cada comprobante de un lote: aceptado, de baja o no encontrado. Para decidir si uno en duda está declarado.

POST/v1/documents/status

Estado de comprobantes en SUNAT

Pregunta a SUNAT, con la consulta de validez, si tiene cada comprobante del lote: facturas, boletas y notas de la empresa, también las declaradas por resumen diario. Sirve para decidir, ante un resumen en duda, si un comprobante está declarado o hay que volver a enviarlo.

Requiere la cabecera X-API-Key.

Cuerpo (JSON): DocumentStatusRequest

CampoTipoObligatorioDescripción
credentials ValidityCredentials Sí La aplicación de consulta de validez de la empresa.
documents lista de DocumentIn Sí Los comprobantes, de 1 a 50 por petición.
{
  "credentials": {
    "ruc": "20999999991",
    "client_id": "11111111-2222-3333-4444-555555555555",
    "client_secret": "<su CLAVE>"
  },
  "documents": [
    {
      "document_type": "03",
      "issue_date": "2026-09-24",
      "number": 1234,
      "series": "B001",
      "total": 25.0
    },
    {
      "document_type": "07",
      "issue_date": "2026-09-23",
      "number": 12,
      "series": "BC01",
      "total": 4.0
    },
    {
      "document_type": "03",
      "issue_date": "2026-09-24",
      "number": 1299,
      "series": "B001",
      "total": 10.0
    }
  ]
}

Respuestas

HTTPContenidoCuándo
200 DocumentStatusResponse Un resultado por comprobante. Un fallo de SUNAT en uno lo deja en unknown sin tumbar el lote.
401 ErrorEnvelope UNAUTHORIZED: Falta la API key, no existe o su cliente está desactivado.
403 ErrorEnvelope SUNAT_CREDENTIALS_REJECTED: SUNAT rechazó las credenciales de la aplicación: no existen, se revocaron o la aplicación no está registrada para el servicio pedido.
405 ErrorEnvelope INVALID_REQUEST: La petición no es válida: un dato con formato incorrecto (una placa que no tiene 6 letras o números, un lote vacío o demasiado grande) o un método que la ruta no admite. Dentro del estado de un comprobante: SUNAT no aceptó los datos de ese comprobante.
422 ErrorEnvelope INVALID_REQUEST: La petición no es válida: un dato con formato incorrecto (una placa que no tiene 6 letras o números, un lote vacío o demasiado grande) o un método que la ruta no admite. Dentro del estado de un comprobante: SUNAT no aceptó los datos de ese comprobante.
429 ErrorEnvelope RATE_LIMITED: Se superó el límite de peticiones por minuto de la API key, el tope de consultas por hora al MTC o el de consultas por minuto a SUNAT.
500 ErrorEnvelope INTERNAL_ERROR: Fallo inesperado del propio servicio.
502 ErrorEnvelope SUNAT_FORMAT_CHANGED: SUNAT respondió algo que el servicio no sabe leer; Pytronia recibe el aviso. En un lote, sale en cada comprobante afectado; el lote entero falla así solo si no se pudo leer ninguno.
503 ErrorEnvelope SERVICE_DISABLED: El servicio pedido está desactivado en este servidor. SUNAT_UNAVAILABLE: SUNAT no respondió o falló. En un lote, sale en cada comprobante afectado; el lote entero falla así solo si no se pudo consultar ninguno.

Ejemplo de respuesta correcta:

{
  "ruc": "20999999991",
  "checked_at": "2026-09-26T02:30:00Z",
  "documents": [
    {
      "document_type": "03",
      "number": 1234,
      "series": "B001",
      "status": "accepted",
      "sunat_code": "1"
    },
    {
      "document_type": "07",
      "number": 12,
      "series": "BC01",
      "status": "accepted",
      "sunat_code": "1"
    },
    {
      "document_type": "03",
      "number": 1299,
      "series": "B001",
      "status": "not_found",
      "sunat_code": "0"
    }
  ]
}

Vehículos

Los datos de un vehículo de carga para la guía de remisión: TUC y Registro MTC del transportista.

GET/v1/vehicles/{plate}

Vehículo por placa

Busca la placa en el Registro Nacional de Transporte de Carga del MTC y devuelve la TUC del vehículo y el Registro MTC del transportista, lo que pide la guía de remisión. La placa puede ir con o sin guion. Lo ya consultado se sirve sin volver al MTC.

Requiere la cabecera X-API-Key.

Parámetros de la ruta

CampoTipoObligatorioDescripción
plate texto Sí Placa del vehículo, con o sin guion (ABC123 o ABC-123).

Respuestas

HTTPContenidoCuándo
200 VehicleOut El vehículo. Si la placa no está en el registro de carga, registered es false.
401 ErrorEnvelope UNAUTHORIZED: Falta la API key, no existe o su cliente está desactivado.
405 ErrorEnvelope INVALID_REQUEST: La petición no es válida: un dato con formato incorrecto (una placa que no tiene 6 letras o números, un lote vacío o demasiado grande) o un método que la ruta no admite. Dentro del estado de un comprobante: SUNAT no aceptó los datos de ese comprobante.
422 ErrorEnvelope INVALID_REQUEST: La petición no es válida: un dato con formato incorrecto (una placa que no tiene 6 letras o números, un lote vacío o demasiado grande) o un método que la ruta no admite. Dentro del estado de un comprobante: SUNAT no aceptó los datos de ese comprobante.
429 ErrorEnvelope RATE_LIMITED: Se superó el límite de peticiones por minuto de la API key, el tope de consultas por hora al MTC o el de consultas por minuto a SUNAT.
500 ErrorEnvelope INTERNAL_ERROR: Fallo inesperado del propio servicio.
502 ErrorEnvelope MTC_FORMAT_CHANGED: La consulta del MTC cambió o pidió verificación humana; queda suspendida y Pytronia recibe el aviso.
503 ErrorEnvelope SERVICE_DISABLED: El servicio pedido está desactivado en este servidor. MTC_UNAVAILABLE: El MTC no responde, está atendiendo otra consulta o está en pausa tras un fallo.

Ejemplo de respuesta correcta:

{
  "plate": "ABC123",
  "registered": true,
  "certificate_number": "15M25000004E",
  "category": "N1",
  "chassis": "CHASIS0000000004",
  "axles": 2,
  "payload_kg": 1699,
  "dry_weight_kg": 1800,
  "carrier": {
    "ruc": "20999999991",
    "name": "TRANSPORTES DE PRUEBA S.A.C.",
    "mtc_registration": "15100000CNG",
    "status": "Habilitado",
    "authorized": true,
    "valid_until": "2031-08-12",
    "modality": "Mercancias en general",
    "city": "LIMA"
  },
  "source": "MTC - Registro Nacional de Transporte de Carga",
  "checked_at": "2026-09-24T16:35:02Z",
  "from_cache": false
}

Errores de las rutas /v1

Todos con la forma {"error": {"code", "message", "retryable"}}. Decida por code y retryable, no por el texto. Las rutas de comprobantes responden {"detail": ...}, un texto salvo en el 422 (una lista de campos): ver Errores y reintentos.

codeHTTPCuándo¿Reintentar?Qué hacer
INVALID_REQUEST 422 / 405 La petición no es válida: un dato con formato incorrecto (una placa que no tiene 6 letras o números, un lote vacío o demasiado grande) o un método que la ruta no admite. Dentro del estado de un comprobante: SUNAT no aceptó los datos de ese comprobante. No Corregir la petición; repetirla igual dará el mismo error.
UNAUTHORIZED 401 Falta la API key, no existe o su cliente está desactivado. No Revisar la cabecera X-API-Key o pedir una clave a Pytronia.
NOT_FOUND 404 La ruta no existe. No Revisar la dirección contra la referencia.
RATE_LIMITED 429 Se superó el límite de peticiones por minuto de la API key, el tope de consultas por hora al MTC o el de consultas por minuto a SUNAT. Sí Esperar los segundos de la cabecera Retry-After y reintentar.
SERVICE_DISABLED 503 El servicio pedido está desactivado en este servidor. No Consultar con Pytronia; reintentar no sirve.
MTC_UNAVAILABLE 503 El MTC no responde, está atendiendo otra consulta o está en pausa tras un fallo. Sí Esperar los segundos de la cabecera Retry-After y reintentar; antes, dará el mismo error.
MTC_FORMAT_CHANGED 502 La consulta del MTC cambió o pidió verificación humana; queda suspendida y Pytronia recibe el aviso. No No reintentar; consultar con Pytronia.
SUNAT_UNAVAILABLE 503 SUNAT no respondió o falló. En un lote, sale en cada comprobante afectado; el lote entero falla así solo si no se pudo consultar ninguno. Sí Reintentar pasado un minuto, o lo que diga la cabecera Retry-After.
SUNAT_CREDENTIALS_REJECTED 403 SUNAT rechazó las credenciales de la aplicación: no existen, se revocaron o la aplicación no está registrada para el servicio pedido. No Revisar las credenciales de la aplicación en SOL; repetir la petición dará el mismo error.
SUNAT_FORMAT_CHANGED 502 SUNAT respondió algo que el servicio no sabe leer; Pytronia recibe el aviso. En un lote, sale en cada comprobante afectado; el lote entero falla así solo si no se pudo leer ninguno. No No reintentar; consultar con Pytronia.
INTERNAL_ERROR 500 Fallo inesperado del propio servicio. Sí Reintentar más tarde; si se repite, escribir a Pytronia con el X-Request-Id de la respuesta.

Modelos

CPEArchivo

Un archivo del comprobante.

CampoTipoObligatorioDescripción
filename texto Sí Nombre del archivo.
content_base64 texto Sí Contenido del archivo en base64.
size entero Sí Tamaño en bytes.
via texto o null No Por dónde se obtuvo: «oficial» (la aplicación SUNAT) o «portal» (el portal SOL, de respaldo).

CPEConsulta

Datos de un comprobante tal como los tiene SUNAT.

CampoTipoObligatorioDescripción
ruc_emisor texto Sí RUC del emisor.
tipo_comprobante texto Sí Tipo de comprobante (01, 03, 07 u 08).
serie texto Sí Serie.
numero entero Sí Correlativo.
fecha_emision texto o null No Fecha de emisión tal como la da SUNAT (dd/mm/aaaa).
moneda texto o null No Código de moneda (PEN, USD...).
total número o null No Importe total.
razon_social_emisor texto o null No Razón social del emisor.
razon_social_receptor texto o null No Razón social del receptor.

CPERequest

Petición de consulta o descarga de un comprobante.

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa que consulta (la que emitió o recibió el comprobante).
usuario texto Sí Usuario SOL de esa empresa, para la vía de respaldo por el portal SOL.
password texto Sí Clave SOL de ese usuario. No se guarda en el servicio.
ruc_emisor texto Sí RUC de quien emitió el comprobante.
tipo texto No (por defecto "01") Tipo de comprobante: 01 factura, 03 boleta, 07 nota de crédito, 08 nota de débito.
serie texto Sí Serie del comprobante, por ejemplo F001.
numero texto Sí Correlativo del comprobante, por ejemplo 123.
filtro texto No (por defecto "2") 1 emitido por la empresa que consulta; 2 recibido de un proveedor.
oauth_client_id texto o null No client_id de la aplicación que la empresa genera en SOL («Credenciales de API SUNAT»). Con él y su secreto se usa la vía oficial de SUNAT.
oauth_client_secret texto o null No client_secret de esa aplicación.
oauth_user texto o null No Usuario SOL de la vía oficial, si no es `usuario`.
oauth_password texto o null No Clave de ese usuario, si no es `password`.

CarrierOut

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa de transporte.
name texto Sí Razón social de la empresa de transporte.
mtc_registration texto Sí Número de Registro MTC del transportista, el que pide la guía de remisión. Solo letras y números en mayúscula.
status texto o null No Estado de la empresa en el registro del MTC.
authorized booleano Sí La empresa está habilitada y su autorización no ha vencido.
valid_until fecha (AAAA-MM-DD) o null No Fin de la autorización (AAAA-MM-DD).
modality texto o null No Modalidad de la empresa en el registro.
city texto o null No Ciudad en la que se inscribió.

DocumentIn

CampoTipoObligatorioDescripción
document_type texto: 01, 03, 07, 08 Sí Tipo de comprobante: 01 factura, 03 boleta, 07 nota de crédito, 08 nota de débito.
series texto Sí Serie del comprobante electrónico: una letra y tres letras o números (B001, F001, BC01).
number entero Sí Número correlativo, sin ceros a la izquierda.
issue_date fecha (AAAA-MM-DD) Sí Fecha de emisión (AAAA-MM-DD). Tiene que ser la exacta.
total número Sí Importe total, exacto y en positivo, también en las notas de crédito. Con otro importe u otra fecha, SUNAT contesta que no lo tiene.

DocumentStatusOut

CampoTipoObligatorioDescripción
document_type texto Sí Tipo de comprobante, como se pidió.
series texto Sí Serie, como se pidió (en mayúscula).
number entero Sí Número, como se pidió.
status texto: accepted, annulled, not_found, unknown Sí accepted: SUNAT lo tiene y es válido. annulled: SUNAT lo tiene comunicado de baja. not_found: SUNAT no lo tiene con esa fecha y ese importe; puede no estar declarado o estarlo con otros datos, SUNAT no distingue. unknown: no se pudo saber; el motivo va en error.
sunat_code texto o null No El estado tal como lo da SUNAT (estadoCp).
error ErrorBody o null No Por qué el estado es unknown; vacío en los demás. Su code puede ser SUNAT_UNAVAILABLE o RATE_LIMITED (reintentar más tarde), INVALID_REQUEST (SUNAT no aceptó los datos de ese comprobante) o SUNAT_FORMAT_CHANGED.

DocumentStatusRequest

CampoTipoObligatorioDescripción
credentials ValidityCredentials Sí La aplicación de consulta de validez de la empresa.
documents lista de DocumentIn Sí Los comprobantes, de 1 a 50 por petición.

DocumentStatusResponse

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa consultada.
checked_at fecha y hora UTC Sí Cuándo se consultó a SUNAT, en UTC.
documents lista de DocumentStatusOut Sí Un resultado por comprobante, en el orden pedido.

ErrorBody

CampoTipoObligatorioDescripción
code ErrorCode Sí Código estable del error: decidir por él, no por el texto.
message texto Sí Explicación para una persona; puede cambiar entre versiones.
retryable booleano Sí Si repetir la misma petición más tarde puede funcionar.

ErrorCode

Uno de: INVALID_REQUEST, UNAUTHORIZED, NOT_FOUND, RATE_LIMITED, SERVICE_DISABLED, MTC_UNAVAILABLE, MTC_FORMAT_CHANGED, SUNAT_UNAVAILABLE, SUNAT_CREDENTIALS_REJECTED, SUNAT_FORMAT_CHANGED, INTERNAL_ERROR.

ErrorEnvelope

Forma común de todo error de las rutas /v1.

CampoTipoObligatorioDescripción
error ErrorBody Sí El error.

HTTPValidationError

CampoTipoObligatorioDescripción
detail lista de ValidationError No

LegacyErrorOut

Error de las rutas de comprobantes. Si empieza por «SUNAT error:», el fallo es de SUNAT.

CampoTipoObligatorioDescripción
detail texto Sí Qué pasó. «SUNAT error: …» marca los fallos de SUNAT.

ValidationError

CampoTipoObligatorioDescripción
loc lista de texto o entero Sí
msg texto Sí
type texto Sí
input cualquiera No
ctx objeto No

ValidityCredentials

CampoTipoObligatorioDescripción
ruc texto Sí RUC de la empresa: la dueña de la aplicación y la que emitió los comprobantes.
client_id texto Sí ID de la aplicación que la empresa registró en SOL, en «Consulta de Validez de Comprobantes de Pago». Las credenciales del SIRE no sirven aquí.
client_secret texto Sí CLAVE de esa aplicación. El servicio no la guarda.

VehicleOut

CampoTipoObligatorioDescripción
plate texto Sí La placa consultada, sin guion ni espacios.
registered booleano Sí Si la placa está en el registro de transporte de carga del MTC. Si es false, los demás datos vienen vacíos: es normal en vehículos M1/L o de menos de 2 TM.
certificate_number texto o null No TUC o Certificado de Habilitación Vehicular del vehículo, el que pide la guía. Solo letras y números en mayúscula.
category texto o null No Categoría del vehículo (N1, N2, N3...).
chassis texto o null No Serie del chasis.
manufacture_year entero o null No Año de fabricación, si el MTC lo tiene.
axles entero o null No Número de ejes.
payload_kg entero o null No Carga útil en kilos.
dry_weight_kg entero o null No Peso seco en kilos.
carrier CarrierOut o null No La empresa de transporte dueña del vehículo.
source texto No (por defecto "MTC - Registro Nacional de Transporte de Carga") De dónde sale el dato.
checked_at fecha y hora UTC Sí Cuándo se miró en el MTC, en UTC.
from_cache booleano Sí Si el dato salió de una consulta anterior, sin volver al MTC.