Referencia · REST

Emití facturas
por API.

El mismo motor que la UI: calcula totales en servidor, firma XAdES y escribe asiento en la misma transacción. Si reenviás, no factura dos veces.

Autenticación

Llave por alcance, no por usuario

Authorization: Bearer ik_live_… — se valida por empresa y por scope.

curl -X POST https://app.inarihq.com/api/v1/invoices \
  -H "Authorization: Bearer ik_live_•••" \
  -H "Content-Type: application/json" \
  -d '{
    "clientId": "uuid-del-cliente",
    "lines": [{ "serviceId": "uuid", "qty": 1, "price": "1250000.00" }],
    "currency": "CRC"
  }'

El precio y totales no se envían desde el cliente de tu tienda para evitar redondeo: el servidor los recalcula.

Recursos

Lo que existe hoy

POST /api/v1/invoicesEmitir / borrador

Scope write:invoices. Crea borrador, firma y envía a Hacienda según parámetro.

GET /api/v1/invoices/:idEstado y timeline

Scope read:invoices. Borrador, enviada, aceptada, rechazada con motivo traducido.

POST /api/v1/clientsAlta de cliente

Scope write:clients. Infere Nota 4, valida longitud y crea con direcciones.

GET /api/v1/clientsBúsqueda paginada

Scope read:clients. Filtros por cédula, nombre, saldo.

Rate limitsPor llave y por tenant

429 con Retry-After. Panel muestra consumo por llave.

IdempotenciaHeader Idempotency-Key

Reintento seguro: reenvío no duplica consecutivo ni asiento.

AislamientoPor empresa

Llave pertenece a una empresa; no cruza tenants.

Alcances

Mínimo privilegio

read:clientsCheckout que lee

Sin emitir.

read:invoicesDashboard externo

Sin tocar Hacienda.

write:invoicesEmitir

Necesario para tienda.

webhook:manageAlta de webhook

Desde Business.

¿Listo para emitir?

Abrí cuenta Business, creá tu llave y probá en sandbox antes de producción.

Sin permanencia. El contador entra sin costo en todos los planes.