GuíaEjemplosReferencia API
apisunat.netIngresar

Primeros pasos

  • API SUNAT
  • Inicio rápido
  • Integra con IA
  • Autenticación
  • Planes y límites

Configurar el RUC

  • Emisores
  • Establecimientos y series

Emitir

  • Documentos
  • Idempotencia
  • Estados
  • Correos
  • Catálogos

Integración

  • Errores
  • Webhooks
  • Cambios

Errores

Formato de los errores y lista completa de códigos.

Todos los errores tienen la misma forma:

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "items.0.taxCode: Debe ser uno de: 10, 11, 12, 13, 14, 15, 16, 20, 21, 30, 31, 32, 33, 34, 35, 36, 37, 40.",
    "retryable": false,
    "fields": {
      "items.0.taxCode": ["Debe ser uno de: 10, 11, 12, 13, 14, 15, 16, 20, 21, 30, 31, 32, 33, 34, 35, 36, 37, 40."]
    },
    "requestId": "2112f495-00c4-4844-b750-86200f1a391e"
  }
}
CampoDescripción
codeCódigo estable en inglés. Tu integración debe decidir por este valor.
messageExplicación en español. Puede cambiar; no la compares en tu código.
retryabletrue si repetir la misma petición más tarde puede funcionar.
fieldsErrores por campo, con la ruta del campo (customer.documentType, items.0.quantity). Vacío si el error no es de un campo.
requestIdIdentificador de la petición. También llega en el header X-Request-Id.

Cada código tiene siempre el mismo estado HTTP.

Cómo reaccionar

  • retryable: false: corrige la petición. Reintentarla igual dará el mismo error.
  • retryable: true: reintenta con espera creciente (por ejemplo 1, 2, 4 y 8 segundos). En 429 respeta el header Retry-After. En emisiones, reintenta con la misma Idempotency-Key.
  • Campos desconocidos: un campo que no existe en el contrato responde VALIDATION_ERROR con el mensaje "El campo no está permitido.". Revisa el nombre del campo.

Rechazos de SUNAT

Un comprobante que SUNAT rechaza no es un error HTTP: la emisión responde 202 con status: "rejected" y el detalle en sunat.errorCode y sunat.errorMessage. Ver Estados.

Códigos

CódigoHTTPReintentableSignificado
IDEMPOTENCY_REQUIRED400NoFalta el header Idempotency-Key.
VALIDATION_ERROR400NoEl cuerpo, los parámetros o una regla del comprobante no son válidos. fields indica el campo.
UNAUTHENTICATED401NoFalta la clave API o no es válida.
ISSUER_LIMIT_REACHED402NoEl plan no permite más RUC de producción. Los RUC de prueba no cuentan.
PLAN_LIMIT_REACHED402NoSe consumieron las operaciones del plan en el mes.
PLAN_REQUIRED402NoEl workspace no tiene una suscripción activa.
TRIAL_EXHAUSTED402NoLa prueba gratuita consumió sus operaciones.
TRIAL_EXPIRED402NoLa prueba gratuita venció.
FORBIDDEN403NoLa operación no está permitida.
ISSUER_FORBIDDEN403NoEl RUC no pertenece al workspace de la clave.
LIVE_KEY_REQUIRED403NoLa operación requiere una clave asu_live_.
PRODUCTION_NOT_ENABLED403NoUsaste una clave asu_live_ con un RUC que todavía no tiene producción habilitada. Usa una clave asu_test_ para probar o completa la validación de producción.
TEST_KEY_IN_PRODUCTION403NoIntentaste actuar sobre un documento con el otro tipo de clave: un documento emitido con asu_live_ se maneja con una clave live, y uno de prueba con una clave test. También aparece si una clave test intenta activar o desactivar un RUC con producción habilitada. No aparece al emitir.
WORKSPACE_SUSPENDED403NoEl workspace está suspendido.
ISSUER_NOT_FOUND404NoEl RUC no está registrado en el workspace en el modo de la clave.
NOT_FOUND404NoEl recurso no existe en el workspace.
BETA_VALIDATION_REQUIRED409NoValida primero el RUC de prueba en beta antes de emitir con él.
CONFLICT409NoEl estado actual del recurso no permite la operación.
DOCUMENT_NUMBER_CONFLICT409NoLa serie y número ya fueron emitidos.
EMAIL_IN_PROGRESS409SíYa hay un envío de correo en curso para el documento.
FILES_NOT_AVAILABLE409SíEl XML, ZIP o PDF todavía no está disponible.
IDEMPOTENCY_CONFLICT409NoLa Idempotency-Key ya se usó con otro cuerpo.
ISSUER_ALREADY_EXISTS409NoEl RUC ya está registrado en el modo de la clave.
ISSUER_NOT_CONFIGURED409NoEl RUC no tiene credenciales SUNAT listas.
ISSUER_SELECTION_REQUIRED409NoTu plan ya tiene el máximo de RUC activos; desactiva el RUC activo antes de activar otro.
PRODUCTION_CREDENTIALS_REQUIRED409NoGuarda las credenciales del RUC (usuario SOL y certificado) antes de la prueba real.
PRODUCTION_INVOICE_PENDING409NoLa factura de validación de producción sigue pendiente.
PRODUCTION_VALIDATION_REQUIRED409NoEl RUC necesita una validación de producción aceptada.
LIVE_MODE_ISSUER409NoEl RUC es de producción: la validación en SUNAT beta se hace con el RUC de prueba y una clave asu_test_.
REQUEST_IN_PROGRESS409SíOtra petición con la misma Idempotency-Key sigue en proceso.
SERIES_BUSY409SíLa serie está reservada por otra emisión; reintenta.
SERIES_DUPLICATED409NoLa serie ya existe en el RUC.
TEST_MODE_ISSUER409NoEl RUC es de prueba: la prueba real y la habilitación de producción se hacen en el RUC de producción con una clave asu_live_.
VALIDATION_IN_PROGRESS409SíYa hay una validación del RUC en curso.
CONFIRMATION_REQUIRED422NoFalta la confirmación exacta para emitir en producción.
CUSTOMER_NOT_FOUND422NoNo se encontraron datos para el RUC o DNI del cliente; envía customer.name.
EXPORT_DATA_INCOMPLETE422NoFaltan datos obligatorios de exportación (operación 0200).
INVALID_EMAIL422NoEl destinatario no es un correo válido.
INVALID_ESTABLISHMENT422NoEl establecimiento no existe o no pertenece al RUC.
INVALID_LOGO422NoEl logo debe ser PNG o JPEG en base64.
INVALID_SERIES422NoLa serie no existe o no corresponde al tipo de documento.
NOTE_ISSUER_MISMATCH422NoLa nota y el documento afectado son de RUC distintos.
NUMBER_REQUIRED422NoLa serie es manual y requiere number.
SERIES_ESTABLISHMENT_MISMATCH422NoLa serie pertenece a otro establecimiento.
SERIES_INACTIVE422NoLa serie está inactiva.
TAX_NOT_CONFIGURED422NoNo hay un impuesto válido para la afectación indicada.
VOID_MIXED_DOCUMENTS422NoLas boletas se anulan en una petición separada de facturas y notas.
VOID_NOT_ALLOWED422NoSolo se anulan documentos aceptados por SUNAT.
VOID_SUMMARY_MISMATCH422NoLas boletas de un resumen deben compartir RUC, fecha y moneda.
RATE_LIMITED429SíSe superó el límite de peticiones. Respeta el header Retry-After.
INTERNAL_ERROR500SíError interno. Reintenta y comparte el requestId con soporte.
LOOKUP_UNAVAILABLE503SíLa consulta de RUC o DNI no está disponible; reintenta o envía customer.name.
SERVICE_UNAVAILABLE503SíUn servicio interno no responde. Reintenta en unos segundos.
Catálogos< PreviousWebhooksNext >

Powered by heyo

On this page

Cómo reaccionarRechazos de SUNATCódigos