Emisión de comprobantes electrónicos
Firma XMLDSig y envío directo a SUNAT (Factura, Boleta, Nota de Crédito, Nota de Débito y Guías de Remisión), sin depender de proveedores externos. Pensado para reemplazar servicios tipo "Facturalaya": tú generas el XML de tu comprobante (UBL 2.1), nosotros lo firmamos con tu certificado digital y lo enviamos a SUNAT — o, para la mayoría de casos, puedes saltarte el XML por completo y mandarnos solo los datos.
X-Api-Key (no Authorization: Bearer). Es el token de tu cuenta, con el servicio "Emisión de Comprobantes" habilitado en tu plan.Habilitar el servicio
Contáctanos para que activemos "Emisión de Comprobantes" en tu cuenta y te asignen un ambiente (Beta para pruebas, Producción cuando estés listo).
1. Subir tu certificado digital
POST/emision/certificado
Se hace una sola vez (o cada vez que renueves el certificado). Acepta .p12, .pfx, .pem o .cer.
| Nombre | Requerido | Descripción |
|---|---|---|
certificado_base64 | Sí | Contenido del archivo del certificado, en base64. |
password_certificado | Depende | Contraseña del certificado (los .p12/.pfx normalmente la tienen). |
tipo_certificado | Opcional | p12 (por defecto), pfx, pem o cer. |
curl -X POST https://mblapirest.com/api/v1/emision/certificado \
-H "X-Api-Key: TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"certificado_base64":"MIIK...","password_certificado":"mi_clave"}'
Consultar el certificado vigente
GET/emision/certificado
{
"tiene_certificado": true,
"tipo": "p12",
"valido": true,
"dias_restantes": 340,
"fecha_expira": "2027-01-15 00:00:00",
"titular": {"cn": "...", "ou": "20123456789"}
}
2. La forma fácil: emitir sin armar XML
POST/emision/emitir-simple (Factura/Boleta/NC/ND) · POST/emision/emitir-guia-simple · POST/emision/emitir-guia-transportista-simple
Mándanos los datos del comprobante en JSON simple — nosotros armamos el XML, lo firmamos y lo enviamos a SUNAT, todo en una sola llamada. Elige tu caso en la lista de abajo: cada variante tiene su propia página con el ejemplo completo listo para copiar.
Campos comunes (Factura, Boleta, Nota de Crédito, Nota de Débito)
| Nombre | Requerido | Descripción |
|---|---|---|
id_tipodoc_electronico | Sí | 01 Factura, 03 Boleta, 07 Nota de Crédito, 08 Nota de Débito. |
serie_comprobante / numero_comprobante | Sí | Ej. F001 / 123. |
fecha_emision | Opcional | Formato YYYY-MM-DD. Por defecto, hoy. |
moneda | Opcional | PEN (por defecto) o USD. |
emisor_razon_social | Opcional | Tu razón social tal como aparece en el comprobante. Si no la mandas, se usa tu RUC. |
cliente_tipo_documento | Opcional | 1 DNI, 6 RUC (por defecto), 0 "Sin documento". |
cliente_numero_documento / cliente_razon_social | Sí* | Documento y nombre/razón social del cliente. El número de documento no es obligatorio si cliente_tipo_documento es 0. |
cliente_direccion | Opcional | Dirección del cliente, texto libre. |
emisor_direccion | Opcional | Dirección del emisor. Requerida si mandas emisor_codigo_de_anexo. |
tipo_afectacion_igv | Opcional | 10 Gravado 18% (por defecto), 20 Exonerado, 30 Inafecto, 40 Exportación. Aplica a todo el comprobante (no se mezclan afectaciones distintas en el mismo documento). |
items | Sí | Array de {"descripcion", "cantidad", "precio_unitario", "unidad_medida"} (unidad_medida opcional, por defecto NIU). |
forma_pago | Opcional | contado (por defecto) o credito (requiere cuotas). |
enviar_a_sunat | Opcional | true (por defecto): firma y envía en el mismo paso. false: solo arma y firma, tú decides cuándo enviar con /emision/enviar. |
cliente_email, monto_total | Opcional | Igual que en /emision/enviar — si los mandas, se notifica por correo al cliente al ser aceptado, con un link directo a su PDF y XML que no requiere token (se abre desde cualquier cliente de correo). |
Factura
- Factura simple
- Factura al crédito
- Factura exonerada / inafecta
- Factura de exportación
- Factura con detracción
- Factura con placa vehicular
- Factura con anexo
- Factura con anticipos
- Factura con descuento global
Boleta
- Boleta simple
- Boleta sin documento
- Boleta a cliente extranjero
- Boleta con descuento por ítem
- Boleta con descuento global
- Boleta inafecta
- Boleta exonerada
- Boleta gratuita
- Boleta de exportación
Nota de Crédito / Débito
Guías de Remisión
Otros
- Consulta de comprobante (por RUC)
- Reporte de Compras/Ventas detallado
- Resumen Diario de Boletas y Comunicación de Baja
- Verificación rápida
3. Firmar el comprobante (con tu propio XML)
POST/emision/firmar
Recibe el XML UBL 2.1 sin firmar (tú lo generas con los datos del comprobante), lo firma con tu certificado y arma el ZIP listo para SUNAT. Necesario para Guía de Remisión con XML propio, o si necesitas mezclar más de una afectación de IGV en el mismo comprobante.
| Nombre | Requerido | Descripción |
|---|---|---|
id_tipodoc_electronico | Sí | 01 Factura, 03 Boleta, 07 Nota de Crédito, 08 Nota de Débito, 09 Guía Remitente, 31 Guía Transportista. |
serie_comprobante | Sí | Ej. F001. |
numero_comprobante | Sí | Número correlativo. |
xml_sin_firmar | Sí | XML UBL del comprobante, en base64. |
curl -X POST https://mblapirest.com/api/v1/emision/firmar \
-H "X-Api-Key: TU_TOKEN" -H "Content-Type: application/json" \
-H "Idempotency-Key: factura-F001-123" \
-d '{
"id_tipodoc_electronico": "01",
"serie_comprobante": "F001",
"numero_comprobante": 123,
"xml_sin_firmar": "PD94bWwgdmVyc2lvbj0i..."
}'
{
"nombre_zip": "20123456789-01-F001-123.zip",
"zip_base64": "UEsDBBQA...",
"xml_firmado_base64": "PD94bWwgdmVyc2lvbj0i...",
"ambiente": "beta",
"siguiente_paso": "POST /v1/emision/enviar para enviarlo a SUNAT."
}
4. Enviar a SUNAT
POST/emision/enviar
Envía el ZIP ya firmado (sendBill) y devuelve el resultado del CDR en la misma llamada.
Mismos parámetros id_tipodoc_electronico/serie_comprobante/numero_comprobante que /firmar.
{
"estado": "aceptado",
"codigo_sunat": "0",
"descripcion": "La Factura numero F001-123, ha sido aceptada",
"notas": []
}
estado puede ser aceptado o rechazado. Si necesitas reintentar el envío (por ejemplo tras un timeout), usa POST /emision/reenviar con los mismos parámetros — es la misma operación, segura de repetir.
Idempotency-Key (un valor único por comprobante) en /firmar y /enviar. Si repites la llamada con la misma clave, te devolvemos la respuesta original en vez de reprocesar — útil si tu sistema reintenta automáticamente ante un timeout de red.Consultar el estado
POST/emision/consultar-sunat — punto único recomendado: detecta automáticamente si corresponde consultar el CDR oficial ante SUNAT o el estado en nuestra base de datos, y sincroniza.
Alternativas específicas:
- POST
/emision/cdr— CDR oficial, solo Factura/NC/ND con serie que empieza con "F" (Anexo 2 del Manual SUNAT). - POST
/emision/estado— estado en nuestra base de datos (Boletas y demás casos).
Consultar el historial de un documento
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /emision/documentos | Lista tus documentos (filtros opcionales: ?estado=&tipo=&desde=&hasta=). |
| GET | /emision/documentos/{tipo}/{serie}/{numero} | Detalle de un documento. |
| GET | /emision/documentos/{tipo}/{serie}/{numero}/historial | Línea de tiempo de eventos (firmado, enviado, consultado...). |
| GET | /emision/documentos/{tipo}/{serie}/{numero}/xml | Descarga el XML firmado. |
| GET | /emision/documentos/{tipo}/{serie}/{numero}/cdr | Descarga el CDR (ZIP) recibido de SUNAT. |
| GET | /emision/documentos/{tipo}/{serie}/{numero}/pdf | Descarga la representación impresa en PDF (solo Factura/Boleta/NC/ND). |
El PDF se genera automáticamente la primera vez que lo pides (a partir del XML ya firmado) y se guarda en caché — no necesitas llamar a ningún otro endpoint antes, solo haber firmado el comprobante.
curl https://mblapirest.com/api/v1/emision/documentos/01/F001/123/historial \
-H "X-Api-Key: TU_TOKEN"
Última actualización: 03/09/2026