API de facturación
electrónica.
Interfaz pública para emitir y consultar comprobantes de una empresa registrada.
00 / Acceso
Autenticación empresarial
empresa_id: cualquier valor recibido será reemplazado por la empresa asociada al token.- 01GET:
?token=TU_TOKEN. - 02POST: campo
"token": "TU_TOKEN"en el JSON. - 03JWT y cookies del dashboard no autentican esta API.
- 04Un token solo accede a comprobantes de su propia empresa.
- 05El destino SUNAT se toma de
empresas_facturacion.entorno:betausa el servicio de pruebas yproduccionusa los servicios productivos.
01 / Operación
Flujo de emisión
- 1
POST /comprobantesreserva el correlativo y crea un registropendiente. - 2
POST /comprobantes/{id}/procesargenera XML, firma, envía a SUNAT y genera los PDF.
02 / Respuestas
Errores
{
"success": false,
"error": { "code": "UNAUTHORIZED", "message": "Token empresarial inválido o inactivo" }
}
| HTTP | Código | Significado |
|---|---|---|
| 400 | VALIDATION_ERROR | JSON, campos o estado no válidos. |
| 401 | UNAUTHORIZED | Token ausente, inválido o inactivo. |
| 403 | ACCOUNT_SUSPENDED | La empresa está suspendida y no puede usar ningún endpoint de comprobantes. |
| 404 | NOT_FOUND | Comprobante inexistente/ajeno o archivo no disponible. |
| 422 | SUNAT_ERROR | Error o rechazo devuelto por SUNAT. |
| 500 | INTERNAL_ERROR | Error interno sin detalles técnicos. |
03 / Referencia
Endpoints públicos
/api/facturacion/comprobantes#01Lista comprobantes propios. Filtros opcionales: estado y tipo_comprobante.
GET https://apisunat.codemultiall.net.pe/api/facturacion/comprobantes?token=TU_TOKEN&estado=aceptado&tipo_comprobante=03
200: {"success":true,"data":[...]}
/api/facturacion/comprobantes/{id}#02Devuelve datos, detalles y URLs de descarga de un comprobante propio.
GET https://apisunat.codemultiall.net.pe/api/facturacion/comprobantes/12?token=TU_TOKEN
200: objeto del comprobante. 404: ID inexistente o ajeno.
/api/facturacion/comprobantes#03Crea el comprobante y reserva su correlativo; todavía no lo envía a SUNAT. La serie debe existir previamente en la empresa autenticada y corresponder al tipo enviado.
| Código | Comprobante | Serie habitual | Cliente |
|---|---|---|---|
| 01 | Factura | F001 | RUC (tipo 6) |
| 03 | Boleta de venta | B001 | DNI (tipo 1) |
| 07 | Nota de crédito | FC01 | Según comprobante afectado |
| 08 | Nota de débito | FD01 | Según comprobante afectado |
Factura electrónica · tipo 01
Ejemplo con cliente identificado mediante RUC y dos conceptos gravados.
{
"token": "TU_TOKEN",
"tipo_comprobante": "01",
"serie": "F001",
"moneda": "PEN",
"fecha_emision": "2026-09-17",
"cliente": {
"tipo_documento": "6",
"numero_documento": "20123456789",
"nombre": "COMERCIAL ANDINA S.A.C.",
"direccion": "Av. Javier Prado 1234, Lima"
},
"items": [
{
"codigo": "SERV-001",
"descripcion": "Servicio de consultoría",
"unidad": "ZZ",
"cantidad": 1,
"precio_unitario": 1180.00,
"afectacion_igv": "10"
},
{
"codigo": "P001",
"descripcion": "Licencia mensual",
"unidad": "NIU",
"cantidad": 2,
"precio_unitario": 59.00,
"afectacion_igv": "10"
}
]
}
Boleta de venta electrónica · tipo 03
Ejemplo con cliente identificado mediante DNI.
{
"token": "TU_TOKEN",
"tipo_comprobante": "03",
"serie": "B001",
"moneda": "PEN",
"fecha_emision": "2026-09-16",
"cliente": {
"tipo_documento": "1", "numero_documento": "12345678",
"nombre": "Juan Perez", "direccion": "Av. Lima 123"
},
"items": [{
"codigo": "P001", "descripcion": "Producto de prueba", "unidad": "NIU",
"cantidad": 1, "precio_unitario": 118.00, "afectacion_igv": "10"
}]
}
Nota de crédito electrónica · tipo 07
Usa una serie de nota de crédito configurada para la empresa. Limitación actual: el XML usa internamente el motivo 01 (anulación), el tipo afectado 01 y la referencia fija 0001-00000001; estos valores todavía no se reciben en el JSON.
{
"token": "TU_TOKEN",
"tipo_comprobante": "07",
"serie": "FC01",
"moneda": "PEN",
"fecha_emision": "2026-09-17",
"cliente": {
"tipo_documento": "6",
"numero_documento": "20123456789",
"nombre": "COMERCIAL ANDINA S.A.C.",
"direccion": "Av. Javier Prado 1234, Lima"
},
"items": [{
"codigo": "P001",
"descripcion": "Anulación de producto facturado",
"unidad": "NIU",
"cantidad": 1,
"precio_unitario": 118.00,
"afectacion_igv": "10"
}]
}
Nota de débito electrónica · tipo 08
Usa una serie de nota de débito configurada para la empresa. Limitación actual: el XML usa internamente el motivo 01, el tipo afectado 01 y la referencia fija 0001-00000001; estos valores todavía no se reciben en el JSON.
{
"token": "TU_TOKEN",
"tipo_comprobante": "08",
"serie": "FD01",
"moneda": "PEN",
"fecha_emision": "2026-09-17",
"cliente": {
"tipo_documento": "6",
"numero_documento": "20123456789",
"nombre": "COMERCIAL ANDINA S.A.C.",
"direccion": "Av. Javier Prado 1234, Lima"
},
"items": [{
"codigo": "CARGO-001",
"descripcion": "Cargo adicional por diferencia de precio",
"unidad": "ZZ",
"cantidad": 1,
"precio_unitario": 59.00,
"afectacion_igv": "10"
}]
}
Respuesta de creación
{
"success": true,
"data": {
"id": 12, "tipo": "01", "serie": "F001", "correlativo": "00000012",
"numero": "F001-00000012", "estado": "pendiente", "entorno": "beta",
"message": "Comprobante creado. Usar POST /procesar para enviar a SUNAT."
}
}
PEN y USD; afectaciones IGV 10, 20, 30 y 21. El precio_unitario gravado incluye IGV. No envíes empresa_id: la empresa se obtiene del token.201 Created. El comprobante queda en estado pendiente y debe procesarse en una segunda solicitud.
/api/facturacion/comprobantes/{id}/procesar#04Genera y firma XML, envía a SUNAT y genera PDF A4 y ticket. Estados admitidos: pendiente, generando y error.
{ "token": "TU_TOKEN" }200: estado, entorno usado, hash, rutas y mensaje SUNAT. 400: estado no procesable. 404: ID inexistente o ajeno.
/api/facturacion/comprobantes/{id}/estado#05En producción consulta el servicio de estado de SUNAT. En beta devuelve el estado confirmado durante el envío y el CDR almacenado, porque SUNAT no ofrece un servicio beta de consulta de CDR.
GET https://apisunat.codemultiall.net.pe/api/facturacion/comprobantes/12/estado?token=TU_TOKEN
200: respuesta normalizada; en beta incluye source=local_cdr y cdr_disponible. 422: error o rechazo SUNAT en producción.
/api/facturacion/comprobantes/{id}/pdf#06Devuelve application/pdf. Usa A4 por defecto o formato=ticket.
GET https://apisunat.codemultiall.net.pe/api/facturacion/comprobantes/12/pdf?token=TU_TOKEN&formato=ticket GET https://apisunat.codemultiall.net.pe/api/facturacion/comprobantes/12/pdf?token=TU_TOKEN&formato=ticket&disposicion=inline
disposicion=attachment fuerza la descarga y es el valor predeterminado. disposicion=inline permite mostrar el PDF en una pestaña, visor o iframe.
200: contenido binario del PDF. 400: disposición inválida. 404: comprobante o formato no disponible.
/api/facturacion/comprobantes/{id}/xml#07Descarga el XML firmado como application/xml.
GET https://apisunat.codemultiall.net.pe/api/facturacion/comprobantes/12/xml?token=TU_TOKEN
/api/facturacion/comprobantes/{id}/cdr#08Descarga la constancia CDR como application/zip.
GET https://apisunat.codemultiall.net.pe/api/facturacion/comprobantes/12/cdr?token=TU_TOKEN