Facturas
El ciclo de una factura
Sección titulada «El ciclo de una factura»pending → received → authorized ↘ rejected ↘ failed (no se pudo enviar después de varios intentos)authorized → voided (registraste la anulación)POST /v1/invoices responde 202 con la factura en pending. Chaski la firma y la envía al SRI en segundo plano. Cada cambio de estado genera un evento y un webhook.
El body
Sección titulada «El body»{ "issuer": "iss_01jbx3k9q2f8m4tn6vwz0yh5ce", "emission_point": "001-001", "external_ref": "pedido-1042", "buyer": { "id_type": "ruc", "id": "0993413686001", "name": "FLOW SOLUTIONS TECHNOLOGY FLOWST S.A.S.", "address": "Samborondón" }, "items": [ { "code": "PRO-M", "description": "Plan Pro mensual", "quantity": "1", "unit_price": "20.00", "discount": "0.00", "taxes": [{ "type": "iva", "rate": "15" }] } ], "payments": [{ "method": "credit_card", "amount": "23.00" }], "additional_info": { "Pedido": "1042" }, "metadata": { "order_id": "1042" }}- Montos como texto (
"20.00"), para no perder precisión. Los totales los calcula Chaski. buyer.id_type:ruc,cedula,passport,final_consumer(conid=9999999999999, solo hasta $50) oforeign. Validamos el dígito verificador de cédulas y RUC.taxes[].rate:15(tarifa general),5,0,exempt,not_subjectodifferentiated(ver abajo).payments[].method:no_financial_system(efectivo),credit_card,debit_card,electronic_money,prepaid_card,other_financial_system,debt_compensationoendorsement. Si no ponesamount, se usa el total.additional_infova en el XML y en el RIDE (hasta 14 campos).metadataes solo para ti: no va al SRI.send_email: por defecto, el comprador recibe el RIDE y el XML en producción y no en pruebas.
ICE, IRBPNR e IVA diferenciado
Sección titulada «ICE, IRBPNR e IVA diferenciado»Cada ítem lleva exactamente un IVA y, si aplica, un ICE y un IRBPNR en el mismo taxes:
"taxes": [ { "type": "iva", "rate": "15" }, { "type": "ice", "code": "3610", "rate": "20" }, { "type": "irbpnr" }]- ICE (
type: "ice"):codees el código de la tabla 18 del SRI. Conrate(porcentaje ad valorem), Chaski calcula el valor sobre el subtotal de la línea. Para el ICE específico o mixto (cigarrillos, alcohol, bebidas azucaradas), manda tambiénamountcon el valor calculado según la normativa vigente y, si la base es otra,base. El ICE entra en la base del IVA. - IRBPNR (
type: "irbpnr"): $0,02 por botella plástica no retornable. Por defecto, una botella por unidad; si no, mandabottles. No entra en la base del IVA. - IVA diferenciado (
rate: "differentiated"): para tarifas temporales por decreto (feriados, turismo). Manda el porcentaje vigente enpercent, por ejemplo{ "type": "iva", "rate": "differentiated", "percent": "8" }. Todos los ítems con IVA diferenciado de una factura deben tener el mismo porcentaje.
En la respuesta, totals.taxes trae una fila por impuesto: el IVA con su tarifa, el ICE con su código en rate y el IRBPNR con rate: "5001" y el número de botellas en base. Las notas de crédito aceptan los mismos impuestos; las liquidaciones de compra solo IVA (400 unsupported_tax).
Consultar
Sección titulada «Consultar»curl https://api.chaski.ec/v1/invoices/inv_… -H "Authorization: Bearer $CHASKI_API_KEY"curl "https://api.chaski.ec/v1/invoices?status=authorized&limit=50" -H "Authorization: Bearer $CHASKI_API_KEY"curl "https://api.chaski.ec/v1/invoices?external_ref=pedido-1042" -H "Authorization: Bearer $CHASKI_API_KEY"Los listados se paginan con limit y starting_after (el id del último de la página anterior) y responden { "data": [...], "has_more": true }.
RIDE, XML y correo
Sección titulada «RIDE, XML y correo»GET /v1/invoices/{id}/xml: el XML autorizado por el SRI, el que tiene validez.GET /v1/invoices/{id}/pdf: el RIDE, con el logo y el color del perfil de marca del punto de emisión.POST /v1/invoices/{id}/resend: vuelve a enviar el correo (opcional{ "to": "[email protected]" }).GET /v1/invoices/{id}/emails: los envíos y si llegaron, rebotaron o fueron marcados como spam.
