Liquidaciones de compra
POST /v1/purchase-settlements emite una liquidación de compra de bienes y prestación de servicios (XML 1.1.0). La emite el comprador, para respaldar una compra a un proveedor que no tiene RUC o no puede emitir facturas, como un agricultor o una persona que presta un servicio.
Solicitud
Sección titulada «Solicitud»curl https://api.flashpi.com.ec/v1/purchase-settlements \ -H "Authorization: Bearer $FLASHPI_API_KEY" \ -H "Idempotency-Key: purchase-CACAO-2026-10-15" \ -H "Content-Type: application/json" \ -d '{ "issuerId": "01a0fd6a-d098-76ca-b492-1bcb6505a7bd", "establishment": "001", "emissionPoint": "001", "issueDate": "2026-10-15", "supplier": { "idType": "cedula", "id": "1700000001", "name": "María Fernanda Quishpe", "address": "Recinto La Esperanza, Balzar" }, "items": [ { "code": "CACAO", "description": "Dried cocoa beans", "unit": "KILOGRAM", "quantity": "150.5", "unitPrice": "2.35", "taxes": [{ "type": "vat", "rate": "0" }] } ], "payments": [{ "method": "cash", "amount": "353.68", "term": "0", "termUnit": "days" }], "expectedTotal": "353.68" }'| Campo | Obligatorio | Notas |
|---|---|---|
supplier |
Sí | Quién vende: idType (cedula, passport, foreign_id o ruc, nunca final_consumer), id, name y, opcionalmente, address y email. Con un email, Flashpi le envía la liquidación autorizada. |
items |
Sí | Como en una factura, incluido code. Las líneas llevan solo IVA, sin ICE. |
payments |
Sí | Deben sumar el total, y cada uno requiere un term con su termUnit (days o months); "0" para un pago al contado. |
expectedTotal |
No | El total que esperas. |
Las liquidaciones de compra no tienen propina. Los campos que comparten todas las solicitudes funcionan igual que en todos los comprobantes.
Lo que calcula Flashpi
Sección titulada «Lo que calcula Flashpi»150.5 kg × 2.35 = 353.675, que se redondea mitad hacia arriba a 353.68. La tarifa de IVA es 0 %, así que el total es 353.68, que el pago debe igualar.
Respuesta
Sección titulada «Respuesta»202 Accepted. Sin correo del proveedor, email.status es skipped:
{ "id": "01a14197-e1d2-7d80-9450-c74268f341f2", "type": "purchase_settlement", "environment": "test", "status": "processing", "issuerId": "01a0fd6a-d098-76ca-b492-1bcb6505a7bd", "establishment": "001", "emissionPoint": "001", "sequential": 9, "number": "001-001-000000009", "accessKey": "1510202603179000000000110010010000000092647509116", "issueDate": "2026-10-15", "xmlVersion": "1.1.0", "counterparty": { "id": "1700000001", "name": "María Fernanda Quishpe" }, "totals": { "subtotal": "353.68", "discount": "0.00", "taxes": [{ "type": "vat", "rate": "0", "taxableBase": "353.68", "amount": "0.00" }], "total": "353.68" }, "authorization": { "number": null, "authorizedAt": null }, "ride": { "status": "pending", "template": null, "generatedAt": null }, "email": { "requested": true, "status": "skipped", "deliveries": [], "warnings": [] }, "sriMessages": [], "failure": null, "voidedAt": null, "createdAt": "2026-10-15T22:03:55.218Z", "updatedAt": "2026-10-15T22:03:55.218Z"}Con options.waitForAuthorization la respuesta puede ser 200 OK con el estado final (Modo síncrono y asíncrono). Los webhooks purchase_settlement.authorized y purchase_settlement.rejected informan la decisión del SRI.
Errores
Sección titulada «Errores»| Respuesta | Cuándo |
|---|---|
422 validation_failed |
Por ejemplo payments[0].term required, supplier.id invalid_check_digit, un ICE (unsupported_tax) o un consumidor final como proveedor. |
422 total_mismatch |
expectedTotal es distinto del total calculado. |
409 sequential_already_used, sequentials_exhausted |
Consulta Secuenciales. |