Issue withholding
A withholding receipt ("comprobante de retención") records what you, as the buyer, withhold of renta, IVA or ISD from a supplier's documents. Give the supplier and, in support_documents, each document withheld from (usually the supplier's invoice: its number, date, access key, tax_support, subtotal, total, taxes and payments) with its withholdings. POST /v1/ec/withholding-suggestions builds that entry from the invoice's access key, with the renta code and IVA percent that apply; GET /v1/ec/catalogs/renta_withholdings, iva_withholdings and tax_support explain the codes.
Issuing numbers the document, stores it and queues it to be signed and sent to the SRI, all at once: the issue date is today in Ecuador. The status then advances on its own (pending, submitted, then authorized, returned or not_authorized): send wait to answer once the SRI decides, or retrieve it or receive a webhook. A refused document says why in sri_messages, each with its remedy. Check the body first with POST /v1/ec/withholdings/preview, which spends no number, and pass its preview_id to issue exactly what was previewed. Send an Idempotency-Key to retry without duplicating.
Your API key, which acts for the one business it was created for: fb_sandbox_… issues in sandbox, fb_test_… in test, the tax authority's testing service, and fb_live_… in live.
In: header
Query Parameters
Seconds, up to 25, to wait for the SRI's decision before answering: the answer comes as soon as the document leaves pending and submitted (authorized, returned or not_authorized), or when the time runs out, still undecided. Without it, at once. The SRI usually decides within seconds; when it is slow, keep the webhook or retrieve the document later.
0 <= value <= 25The preview_id of POST /v1/ec/withholdings/preview for this same body: if the body isn't the one previewed, or the preview is from an earlier day, nothing is issued and the answer is 409 preview_mismatch.
^[0-9a-f]{64}$Header Parameters
1 <= length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The issue date is always today in Ecuador: documents are transmitted when issued.
Natural person or company (tipoSujetoRetenido), required if the supplier has a foreign identification.
Value in
- "persona_natural"
- "sociedad"
Whether the supplier is a related party (parteRel).
falseThe supplier's documents that support the withholding.
1 <= itemsThe fiscal machine the document is issued from (annex 13). Only when one issues it.
[]The establishment whose series numbers it, such as 001. Without it, the first active series of the document type.
^\d{3}$The emission point of that establishment, such as 001. Without it, the first active one.
^\d{3}$Up to 20 pairs of your own, such as your order id, returned as sent and never interpreted; lists filter by them (metadata[key]=value).
{}Only with a sandbox key (422 in test and live, where the SRI decides): the outcome the simulator gives this revision, to rehearse how your system handles each one. Without it, it is authorized.
Response Body
application/json
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/ec/withholdings" \ -H "Content-Type: application/json" \ -d '{ "supplier": { "identification_type": "ruc", "identification": "string", "name": "string", "email": "user@example.com" }, "support_documents": [ { "document_type": "factura", "number": "string", "issue_date": "2019-08-24", "tax_support": "10", "subtotal": "string", "total": "string", "taxes": [ { "type": "iva", "rate": "iva_15", "base": "string", "value": "string" } ], "withholdings": [ { "tax": "renta", "code": "strin", "base": "string" } ], "payments": [ { "method": "sin_sistema_financiero" } ] } ] }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "country": "ec", "currency": "string", "environment": "sandbox", "status": "pending", "status_transitions": { "pending": "2019-08-24T14:15:22Z", "submitted": "2019-08-24T14:15:22Z", "authorized": "2019-08-24T14:15:22Z", "returned": "2019-08-24T14:15:22Z", "not_authorized": "2019-08-24T14:15:22Z", "annulled": "2019-08-24T14:15:22Z" }, "entity_id": "8161163a-f227-466f-bc01-090a01e80165", "number": "string", "access_key": "stringstringstringstringstringstringstringstrings", "authorization": { "number": "string", "authorized_at": "2019-08-24T14:15:22Z" }, "sri_messages": [ { "code": "string", "message": "string", "detail": "string", "type": "error", "cause": "string", "remedy": "string" } ], "metadata": { "property1": "string", "property2": "string" }, "issued_at": "2019-08-24T14:15:22Z", "delivery_status": "sent", "emails": [ { "to": "string", "status": "sent", "sent_at": "2019-08-24T14:15:22Z", "delivered_at": "2019-08-24T14:15:22Z", "opened_at": "2019-08-24T14:15:22Z", "bounced_at": "2019-08-24T14:15:22Z", "complained_at": "2019-08-24T14:15:22Z", "bounce_type": "permanent" } ], "portal_views": 0, "portal_last_viewed_at": "2019-08-24T14:15:22Z", "channel": "api", "import_id": "13230382-dadc-41f2-963d-e123bd5c0585", "verification": "sri", "listing": { "import_id": "13230382-dadc-41f2-963d-e123bd5c0585", "file": "string", "entry": "string", "sha256": "stringstringstringstringstringstringstringstringstringstringstri", "line": 1, "authorized_at": "2019-08-24T14:15:22Z" }, "object": "withholding", "issue_date": "string", "fiscal_period": "string", "supplier": { "identification_type": "ruc", "identification": "string", "name": "string", "address": "string", "email": "string" }, "supplier_type": "persona_natural", "related_party": true, "support_documents": [ { "document_type": "factura", "number": "string", "issue_date": "string", "authorization_number": "string", "accounting_date": "string", "tax_support": "10", "foreign_payment": { "regime": "general", "country": "string", "double_taxation_treaty": true, "subject_to_withholding": true, "preferential_regime_payment": true }, "subtotal": "string", "total": "string", "taxes": [ { "type": "iva", "rate": "iva_15", "base": "string", "value": "string" } ], "withholdings": [ { "tax": "renta", "code": "string", "percent": "string", "base": "string", "value": "string", "dividends": { "payment_date": "string", "income_tax_paid": "string", "fiscal_year": "string" }, "banana_boxes": { "boxes": 0, "box_price": "string" } } ], "reimbursement": { "document_type": "factura", "total": "string", "base": "string", "tax": "string", "documents": [ { "supplier": { "identification_type": "ruc", "identification": "string" }, "supplier_type": "persona_natural", "payment_country": "string", "document_type": "factura", "number": "string", "issue_date": "string", "authorization_number": "string", "taxes": [ { "type": "iva", "rate": "iva_15", "base": "string", "value": "string" } ], "compensations": [ { "code": "string", "rate": "string", "value": "string" } ] } ] }, "payments": [ { "method": "sin_sistema_financiero", "amount": "string", "term": { "length": 0, "unit": "days" } } ] } ], "renta": "string", "iva": "string", "isd": "string", "total": "string", "fiscal_machine": { "brand": "string", "model": "string", "serial": "string" }, "additional_info": [ { "name": "string", "value": "string" } ], "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z"}Record the annulment of withholding POST
Only records an annulment you already made in the SRI's online portal; it does not request it from the SRI. The document goes to `annulled`, keeps its files, leaves your customer's portal and `<object>.annulled` is sent to your webhooks. Only for an `authorized` one, and never for one issued to a `consumidor_final` buyer, which the SRI does not annul.
List withholdings GET
From newest to oldest, in your key's environment.