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.

Crear un sandbox Un emisor de prueba en dos minutos, con un simulador de SUNAT. Gratis. Referencia de la API Cada endpoint, sus campos y sus errores. Recetas Un JSON por caso: crédito, detracción, exportación, dólares, notas… Contrato OpenAPI 3.1 Para generar tu cliente o importarlo en Postman. Herramientas Validar un RUC, certificado de prueba .pfx y XML contra el XSD de SUNAT. Para tu asistente de IA 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

  1. Crea un sandbox. Es un emisor de prueba completo: RUC de prueba, certificado autofirmado, series F001, B001 y T001. Confirmas tu correo y entras al panel; lo que emites lo contesta un simulador de SUNAT, y puedes forzar sus errores. Crearlo.
  2. Crea tu clave de API. En el panel, «Claves de API». Se enseña una sola vez; empieza por cmp_beta_ en pruebas y por cmp_produccion_ en producción. Va en cada petición como Authorization: Bearer ….
  3. Emite tu primera factura. {ruc} es el RUC de tu emisor. La Idempotency-Key es 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úmero
    JavaScript
    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
  4. Sigue el estado. GET https://comprobia.stackealabs.com/api/v1/{ruc}/comprobantes/{id} devuelve el estado y la respuesta de SUNAT; /pdf, /xml y /cdr los archivos. O registra un webhook en el panel y te avisamos con comprobante.aceptado, comprobante.rechazado, comprobante.anulado…, firmados con tu secreto.
  5. 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

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.

PlanAl mesDocumentos incluidosDocumento 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

Cuenta lo emitido en producción: facturas, boletas, notas, guías, retenciones, percepciones y liquidaciones. El sandbox es gratis.