Blog
Desarrolladores·18 de julio de 2026 · 8 min

Cómo integrarse a una API de facturación electrónica en Costa Rica

Qué significa consumir una API de facturación, qué mirar antes de elegir una y la ruta técnica de la primera factura: autenticación, sandbox, emisión y webhooks.

Imagen de portadaRecomendado 16:9

Integrarte a una API de facturación electrónica significa que tu sistema (un ERP, un POS, un e-commerce o tu propia app) le pide a un servicio externo "emití esta factura" y ese servicio se encarga de armar el XML v4.4, firmarlo con el certificado del emisor y enviárselo a Hacienda. Vos no implementás firma digital, ni XSD, ni la comunicación con el Ministerio: hablás HTTP y recibís el resultado.

¿Por qué una API y no hacerlo yo?

Facturar directo contra Hacienda implica generar la clave de 50 dígitos, firmar con XAdES-BES, manejar consecutivos, reintentos, tarifas de IVA, catálogos CABYS y el ciclo de estados. Una API te lo abstrae todo detrás de un POST. Lo que antes eran semanas de desarrollo pasa a ser una integración de un día.

Qué mirar antes de elegir una API

  • Autenticación server-to-server (API key/secret), no un login de humano.
  • Sandbox gratis para probar sin emitir documentos reales.
  • Idempotencia en la emisión (que un reintento no genere doble factura).
  • Webhooks para enterarte del resultado sin estar consultando.
  • Documentación viva con los catálogos incluidos (tarifas, condición de venta, CABYS).
  • Cobertura de comprobantes: FE, TE, NC, ND, y también FEC, FEE y REP.

La ruta de la primera factura

1. Autenticá cada llamada

Todas las peticiones llevan tus credenciales en headers. Las emisiones además llevan un Idempotency-Key:

curl -X POST https://api.facturaencr.com/v2/efactura/documents/factura \
  -H "X-API-Key: efk_…" \
  -H "X-API-Secret: efs_…" \
  -H "Idempotency-Key: pedido-2026-000123" \
  -H "Content-Type: application/json" \
  -d '{
    "emisorLegalId": "3101000000",
    "condicionVenta": "01",
    "medioPago": ["01"],
    "receptor": { "tipoIdentificacion": "01", "numeroIdentificacion": "102340567" },
    "detalle": [
      { "codigoCabys": "8399000000000", "cantidad": 1, "unidadMedida": "Sp",
        "detalle": "Servicio de consultoría", "precioUnitario": 50000 }
    ]
  }'

2. Recibís un 202, no una aceptación

La respuesta es 202 Accepted: encolamos el documento, generamos la clave y el consecutivo, firmamos y enviamos a Hacienda. La aceptación real llega segundos después.

3. Enterate del resultado (webhook > polling)

Podés consultar el estado cada tanto (polling), pero lo recomendado es registrar un webhook: una URL HTTPS tuya a la que te avisamos apenas cambia el estado.

{
  "event": "document.accepted",
  "documentId": "65fe…",
  "clave": "506…199999999",
  "haciendaStatus": "aceptado"
}

Verificá siempre la firma HMAC-SHA256 del webhook antes de procesarlo, y respondé 2xx en menos de 10 segundos.

4. Sandbox → producción

Toda la integración se prueba en sandbox gratis. Cuando emitís en pruebas una factura y una nota de crédito que la referencia, ambas aceptadas, seguís el checklist (certificado de producción probado, secret en un vault) y pedís el cambio a production.

Un error clásico: confundir el 202 con "listo"

El 202 significa "lo recibí", no "Hacienda lo aceptó". Nunca le entregués el comprobante a tu cliente antes de recibir el estado aceptado. Ese es el bug número uno de las integraciones nuevas.

La documentación completa de la API, con todos los catálogos y ejemplos en varios lenguajes, está publicada. Si querés ver qué incluye y cuánto cuesta, mirá la API de factura electrónica de Factura en CR. El sandbox es gratis: podés dejar la integración lista antes de emitir un solo documento real.

Empezá a emitir con la API

Sandbox gratis. Tus primeros 100 documentos sin costo. Pagás solo por lo que emitís.