Emite comprobantes electrónicos ante SUNAT con una API
Tu sistema manda un JSON; Comprobia numera, firma con el certificado del emisor, envía a SUNAT, guarda el XML y la CDR, dibuja el PDF y te avisa cuando SUNAT contesta.
llms.txt y llms-full.txt: pégalo en Claude, Cursor o ChatGPT.
Qué emite
Factura, boleta, notas de crédito y de débito, guía de remisión remitente y transportista, comprobantes de retención y de percepción, y liquidación de compra. Las boletas se informan por resumen diario y la anulación elige sola el mecanismo correcto (comunicación de baja o resumen). Detracción, percepción, anticipos, cuotas de crédito, ISC, ICBPER, exportación, gratuitas y dólares con su tipo de cambio.
Cómo funciona
La emisión responde 202 Accepted en el acto, con el número ya asignado, el código QR
y el enlace al PDF: tu punto de venta nunca espera a SUNAT. El envío ocurre en cola, con
reintentos y contingencia si SUNAT se cae. El resultado lo consultas con
GET /comprobantes/{id} o te llega por webhook.
No somos OSE ni PSE: cada emisor firma con su propio certificado digital y sus comprobantes van a SUNAT a su nombre (SEE – Del Contribuyente).
Empieza en cinco pasos
-
Crea un sandbox.
Es un emisor de prueba completo: RUC de prueba, certificado autofirmado, series
F001,B001yT001. Confirmas tu correo y entras al panel; lo que emites lo contesta un simulador de SUNAT, y puedes forzar sus errores. Crearlo. -
Crea tu clave de API.
En el panel, «Claves de API». Se enseña una sola vez; empieza por
cmp_beta_en pruebas y porcmp_produccion_en producción. Va en cada petición comoAuthorization: Bearer …. -
Emite tu primera factura.
{ruc}es el RUC de tu emisor. LaIdempotency-Keyes obligatoria en todo lo que crea algo: si la red se corta y reintentas con la misma clave, recibes la misma respuesta y no un segundo comprobante.curl
curl -X POST https://comprobia.stackealabs.com/api/v1/{ruc}/comprobantes \ -H 'Authorization: Bearer cmp_beta_...' \ -H 'Idempotency-Key: venta-0001' \ -H 'Content-Type: application/json' \ -d '{"tipo_documento":"01","serie":"F001","fecha_emision":"2026-10-14","moneda":"PEN","cliente":{"tipo_documento":"6","numero_documento":"20100066603","razon_social":"CLIENTE DE PRUEBA SAC"},"forma_pago":{"tipo":"Contado"},"items":[{"codigo_interno":"P001","descripcion":"PRODUCTO DE PRUEBA","unidad":"NIU","cantidad":"1","precio_unitario":"11.80","tipo_afectacion":"10"}]}'PHP (Laravel)
use Illuminate\Support\Facades\Http; $respuesta = Http::withToken(env('COMPROBIA_CLAVE')) ->withHeaders(['Idempotency-Key' => 'venta-0001']) ->post('https://comprobia.stackealabs.com/api/v1/{ruc}/comprobantes', [ 'tipo_documento' => '01', 'serie' => 'F001', 'fecha_emision' => '2026-10-14', 'moneda' => 'PEN', 'cliente' => [ 'tipo_documento' => '6', 'numero_documento' => '20100066603', 'razon_social' => 'CLIENTE DE PRUEBA SAC', ], 'forma_pago' => [ 'tipo' => 'Contado', ], 'items' => [ [ 'codigo_interno' => 'P001', 'descripcion' => 'PRODUCTO DE PRUEBA', 'unidad' => 'NIU', 'cantidad' => '1', 'precio_unitario' => '11.80', 'tipo_afectacion' => '10', ], ], ]); $comprobante = $respuesta->json(); // 202: ya tiene númeroJavaScript
const respuesta = await fetch('https://comprobia.stackealabs.com/api/v1/{ruc}/comprobantes', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.COMPROBIA_CLAVE}`, 'Idempotency-Key': 'venta-0001', 'Content-Type': 'application/json', }, body: JSON.stringify({ "tipo_documento": "01", "serie": "F001", "fecha_emision": "2026-10-14", "moneda": "PEN", "cliente": { "tipo_documento": "6", "numero_documento": "20100066603", "razon_social": "CLIENTE DE PRUEBA SAC" }, "forma_pago": { "tipo": "Contado" }, "items": [ { "codigo_interno": "P001", "descripcion": "PRODUCTO DE PRUEBA", "unidad": "NIU", "cantidad": "1", "precio_unitario": "11.80", "tipo_afectacion": "10" } ] }), }); const comprobante = await respuesta.json(); // 202: ya tiene número -
Sigue el estado.
GET https://comprobia.stackealabs.com/api/v1/{ruc}/comprobantes/{id}devuelve el estado y la respuesta de SUNAT;/pdf,/xmly/cdrlos archivos. O registra un webhook en el panel y te avisamos concomprobante.aceptado,comprobante.rechazado,comprobante.anulado…, firmados con tu secreto. - Pasa a producción. El sandbox se queda en pruebas para siempre. Para emitir de verdad damos de alta tu emisor real con su RUC y su certificado registrado en SUNAT Operaciones en Línea; tu integración no cambia, sólo el RUC y la clave.
Lo que conviene saber antes de integrar
- Validamos antes de gastar el número. Lo que SUNAT rechazaría lo rechazamos nosotros
con
422, la regla y el código de SUNAT, y el correlativo no se pierde. - La beta de SUNAT valida estructura, no reglas de negocio. Que algo pase en beta no asegura que producción lo acepte; por eso nuestro validador es la red de seguridad.
- El sandbox no sale a SUNAT: lo contesta un simulador, y puedes forzar sus errores con
SIMULAR:<código>. Aun así, nada de pruebas de carga: el servidor es compartido. - No teclees el cliente:
GET /clientes/ruc/{ruc}o/clientes/dni/{dni}trae la razón social y la dirección del padrón de SUNAT (vía Acredita), con la fecha del dato y un aviso si el RUC no está activo o no habido. - ¿Ya vale? Mira
tiene_validez_fiscal(yaceptado_por_sunat) en vez de compararestado. La historia completa, con cada respuesta de SUNAT, está enGET /comprobantes/{id}/historial. - El PDF antes de emitir:
POST /comprobantes/vista-previacon el mismo JSON, sin gastar número. - Importes como texto (
"11.80"), fechasYYYY-MM-DDen hora de Lima. - Errores en un solo formato:
{ "code", "message", "request_id" }, yerrors[]con el campo cuando es de validación. - ¿Vienes de Facturalo Pro7?
/api/pro7acepta su JSON y contesta con su forma: migras cambiando la URL y el token.
Conecta tu asistente de IA (MCP)
Comprobia tiene un servidor MCP en
https://comprobia.stackealabs.com/api/mcp. Sin clave, tu asistente lee la guía, las recetas y
el contrato de cada endpoint. Con la clave de tu sandbox, además valida, emite y consulta
comprobantes de prueba mientras te ayuda a integrar. Por MCP no se emite en producción.
Claude Code
claude mcp add --transport http comprobia https://comprobia.stackealabs.com/api/mcp --header "Authorization: Bearer cmp_beta_…"
Otros clientes (.mcp.json, Cursor…)
{
"mcpServers": {
"comprobia": {
"type": "http",
"url": "https://comprobia.stackealabs.com/api/mcp",
"headers": { "Authorization": "Bearer cmp_beta_…" }
}
}
}
Herramientas: guia_de_integracion, listar_recetas, obtener_receta,
consultar_endpoint, buscar_cliente, validar_comprobante,
emitir_comprobante y consultar_comprobante.
Planes
Precios en soles, IGV incluido. Se cobra por volumen: todas las funciones en todos los planes. Pasar de lo incluido nunca corta la emisión; lo de más se cobra al cierre del mes. Pagando por año, 12 meses por el precio de 10.
¿Integrador o estudio contable? Con el plan Partner operas los RUC de tus clientes con una sola clave, los das de alta por API y pagas por emisor activo, con los documentos sumados entre todos. Pide tu cuenta desde el sandbox.
| Plan | Al mes | Documentos incluidos | Documento extra |
|---|---|---|---|
| Libre | Gratis | 100 | Ese mes no se cobra; al siguiente pasas a Inicial |
| Inicial | S/ 39.00 | 1,000 | S/ 0.05 |
| Negocio | S/ 89.00 | 3,000 | S/ 0.035 |
| Cadena | S/ 189.00 | 10,000 | S/ 0.022 |
| Prepago | Sin cuota: recargas que no vencen, 500 por S/ 25.00 · 2,000 por S/ 79.00 | ||
| A medida | Para volúmenes grandes o varios RUC: lo conversamos. | ||
En todos los planes
- Facturas, boletas, notas, guías de remisión, retenciones, percepciones y liquidaciones de compra.
- Envío asíncrono con reintentos y contingencia, webhooks firmados y alertas de plazo.
- Tipo de cambio automático incluido: en dólares, Comprobia pone el venta SBS publicado por SUNAT (vía Acredita). En otros proveedores, una API aparte.
- Búsqueda de RUC y DNI incluida (Acredita), con la procedencia de cada dato: el cliente se completa solo, en la API y en el panel.
- PDF en A4, A5 y ticket de 80, 58 y 50 mm con tu logo; portal para que tu cliente consulte su comprobante.
- SIRE (lectura de las propuestas de ventas y compras) y Registro de Ventas para tu contador.
Cuenta lo emitido en producción: facturas, boletas, notas, guías, retenciones, percepciones y liquidaciones. El sandbox es gratis.