Emitir factura
const url = 'https://api.chaski.ec/v1/invoices';const options = { method: 'POST', headers: { 'Idempotency-Key': 'example', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"issuer":"example","emission_point":"example","external_ref":"example","buyer":{"id_type":"ruc","id":"example","name":"example","email":"[email protected]","address":"example"},"items":[{"code":"example","auxiliary_code":"example","description":"example","unit_of_measure":"example","quantity":"example","unit_price":"example","discount":"example","taxes":[{"type":"iva","rate":"0","percent":"example"}],"details":{"additionalProperty":"example"}}],"payments":[{"method":"no_financial_system","amount":"example","term":"example","time_unit":"example"}],"tip":"example","additional_info":{"additionalProperty":"example"},"metadata":{"additionalProperty":"example"},"send_email":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.chaski.ec/v1/invoices \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --data '{ "issuer": "example", "emission_point": "example", "external_ref": "example", "buyer": { "id_type": "ruc", "id": "example", "name": "example", "email": "[email protected]", "address": "example" }, "items": [ { "code": "example", "auxiliary_code": "example", "description": "example", "unit_of_measure": "example", "quantity": "example", "unit_price": "example", "discount": "example", "taxes": [ { "type": "iva", "rate": "0", "percent": "example" } ], "details": { "additionalProperty": "example" } } ], "payments": [ { "method": "no_financial_system", "amount": "example", "term": "example", "time_unit": "example" } ], "tip": "example", "additional_info": { "additionalProperty": "example" }, "metadata": { "additionalProperty": "example" }, "send_email": true }'Responde 202 con status: "pending"; el envío y la autorización del SRI ocurren en segundo plano y se notifican por webhook. En producción valida la cuota del plan y los paquetes: si no queda, 402 quota_exceeded (con limit, current, period_end y addon_offer). Los comprobantes de pruebas no consumen cuota. Cada ítem lleva su IVA en taxes y, si aplica, ice (código de la tabla 18 y tarifa; el ICE específico o mixto se manda con amount) e irbpnr (0,02 por botella). El ICE entra en la base del IVA; el IRBPNR no. IVA diferenciado: rate: "differentiated" con el percent del decreto.
Authorizations
Sección titulada «Authorizations»Parameters
Sección titulada «Parameters»Header Parameters
Sección titulada «Header Parameters»Una clave única por petición (por ejemplo un UUID). Vale 24 h: reintentar con la misma clave y el mismo body devuelve la misma respuesta.
Request Bodyrequired
Sección titulada «Request Bodyrequired»object
object
object
object
object
object
object
Responses
Sección titulada «Responses»OK
object
Clave de acceso de 49 dígitos
object
object
object
object
object
Example
{ "id": "inv_01jbx3k9q2f8m4tn6vwz0yh5ce", "status": "pending", "environment": "test", "emission_point": "001-001", "number": "001-001-000000123", "totals": { "taxes": [ { "type": "iva" } ] }}Petición inválida
object
object
Example
{ "error": { "code": "invalid_request" }}Falta la API key o no es válida
object
object
Example
{ "error": { "code": "invalid_request" }}Cuota de comprobantes agotada (quota_exceeded)
object
object
Example
{ "error": { "code": "invalid_request" }}Sin permiso (cuenta suspendida, emisor no habilitado en producción, límite del plan…)
object
object
Example
{ "error": { "code": "invalid_request" }}Conflicto (recurso repetido, Idempotency-Key en curso…)
object
object
Example
{ "error": { "code": "invalid_request" }}No se puede procesar (certificado vencido, Idempotency-Key reutilizada…)
object
object
Example
{ "error": { "code": "invalid_request" }}Demasiadas peticiones
object
object
Example
{ "error": { "code": "invalid_request" }}