Crear y someter una factura
const url = 'https://sandbox.api.cierrelisto.com/v1/taxpayers/340f4500-e627-4f37-aaa8-9ad5baff8209/invoices';const options = { method: 'POST', headers: { 'Idempotency-Key': 'erp-venta-2026-000184-attempt-1', 'X-Request-Id': 'req_6a07a2bfa55e4e1ebf5a9f27482f09f1', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"external_id":"erp-venta-2026-000184","ecf_type":"31","issue_date":"2026-07-29","due_date":"2026-08-28","currency":"DOP","language":"es","payment_type":"credit","buyer":{"legal_name":"CLIENTE DE PRUEBA SRL","tax_id":"131246796","email":"cuentas@cliente.example","address":{"line1":"Av. Abraham Lincoln 1001","city":"Santo Domingo de Guzmán","province_or_state":"Distrito Nacional","country_code":"DO"}},"lines":[{"line_id":"1","description":"Servicios profesionales de julio de 2026","sku":"SERV-CONT-001","unit":"servicio","item_kind":"service","billing_indicator":1,"unit_code":28,"quantity":"1","unit_price":"70000.00","discount":null,"taxes":[{"code":"ITBIS","label":"ITBIS 18%","rate_percent":"18"}]}],"declared_totals":{"subtotal":"70000.00","discount_total":"0.00","tax_total":"12600.00","total":"82600.00"},"payment_terms":"Pago por transferencia dentro de 30 días."}'};
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://sandbox.api.cierrelisto.com/v1/taxpayers/340f4500-e627-4f37-aaa8-9ad5baff8209/invoices \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: erp-venta-2026-000184-attempt-1' \ --header 'X-Request-Id: req_6a07a2bfa55e4e1ebf5a9f27482f09f1' \ --data '{ "external_id": "erp-venta-2026-000184", "ecf_type": "31", "issue_date": "2026-07-29", "due_date": "2026-08-28", "currency": "DOP", "language": "es", "payment_type": "credit", "buyer": { "legal_name": "CLIENTE DE PRUEBA SRL", "tax_id": "131246796", "email": "cuentas@cliente.example", "address": { "line1": "Av. Abraham Lincoln 1001", "city": "Santo Domingo de Guzmán", "province_or_state": "Distrito Nacional", "country_code": "DO" } }, "lines": [ { "line_id": "1", "description": "Servicios profesionales de julio de 2026", "sku": "SERV-CONT-001", "unit": "servicio", "item_kind": "service", "billing_indicator": 1, "unit_code": 28, "quantity": "1", "unit_price": "70000.00", "discount": null, "taxes": [ { "code": "ITBIS", "label": "ITBIS 18%", "rate_percent": "18" } ] } ], "declared_totals": { "subtotal": "70000.00", "discount_total": "0.00", "tax_total": "12600.00", "total": "82600.00" }, "payment_terms": "Pago por transferencia dentro de 30 días." }'Requiere los alcances invoices.write y ecf.submit. El cuerpo siempre contiene datos estructurados compatibles con el dominio de facturación; no se acepta XML. Idempotency-Key evita duplicados por reintentos.
Authorizations
Sección titulada «Authorizations»Parameters
Sección titulada «Parameters»Path Parameters
Sección titulada «Path Parameters»Contribuyente autorizado dentro de la cuenta CierreListo.
Example
340f4500-e627-4f37-aaa8-9ad5baff8209Header Parameters
Sección titulada «Header Parameters»Clave única por intención de creación. Reutilizarla con un cuerpo diferente produce 409.
Example
erp-venta-2026-000184-attempt-1Identificador opcional del cliente. Si no es válido, CierreListo genera uno.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Request Bodyrequired
Sección titulada «Request Bodyrequired»Cuerpo JSON estructurado. Tamaño máximo: 1 MiB (1048576 bytes).
object
La API pública v1 emite únicamente facturas en pesos dominicanos (DOP).
Forma de pago pública: cash=TipoPago 1, credit=TipoPago 2, free_of_charge=TipoPago 3.
object
object
object
Naturaleza de la línea: product=IndicadorBienOServicio 1, service=2.
IndicadorFacturacion DGII explícito. Valores admitidos por el flujo comercial: 1-4.
Código UnidadMedida DGII explícito. Se usa cuando CierreListo no puede inferirlo.
object
object
Example
{ "external_id": "erp-venta-2026-000184", "ecf_type": "31", "issue_date": "2026-07-29", "due_date": "2026-08-28", "currency": "DOP", "language": "es", "payment_type": "credit", "buyer": { "legal_name": "CLIENTE DE PRUEBA SRL", "tax_id": "131246796", "email": "cuentas@cliente.example", "address": { "line1": "Av. Abraham Lincoln 1001", "city": "Santo Domingo de Guzmán", "province_or_state": "Distrito Nacional", "country_code": "DO" } }, "lines": [ { "line_id": "1", "description": "Servicios profesionales de julio de 2026", "sku": "SERV-CONT-001", "unit": "servicio", "item_kind": "service", "billing_indicator": 1, "unit_code": 28, "quantity": "1", "unit_price": "70000.00", "discount": null, "taxes": [ { "code": "ITBIS", "label": "ITBIS 18%", "rate_percent": "18" } ] } ], "declared_totals": { "subtotal": "70000.00", "discount_total": "0.00", "tax_total": "12600.00", "total": "82600.00" }, "payment_terms": "Pago por transferencia dentro de 30 días."}Responses
Sección titulada «Responses»La factura fue aceptada para validación y procesamiento asíncrono.
object
object
La API pública v1 emite únicamente facturas en pesos dominicanos (DOP).
object
object
Example
{ "data": { "id": "cc70a888-12db-48c5-8893-ef72046f57f1", "taxpayer_id": "340f4500-e627-4f37-aaa8-9ad5baff8209", "external_id": "erp-venta-2026-000184", "ecf_type": "31", "status": "queued", "fiscal_document_id": "261aa475-f462-4446-9f88-9525714ed925", "currency": "DOP", "issue_date": "2026-07-29", "totals": { "subtotal": "70000.00", "discount_total": "0.00", "tax_total": "12600.00", "total": "82600.00", "paid": "0.00", "balance": "82600.00" }, "created_at": "2026-07-29T14:05:10.000-04:00", "updated_at": "2026-07-29T14:05:10.000-04:00" }, "meta": { "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200Ruta canónica del recurso creado.
Example
/v1/taxpayers/340f4500-e627-4f37-aaa8-9ad5baff8209/invoices/cc70a888-12db-48c5-8893-ef72046f57f1Vale true cuando la respuesta fue recuperada de una solicitud idempotente anterior.
Example
trueSolicitud o JSON inválido.
object
object
object
Example
{ "error": { "code": "bad_request", "message": "La solicitud no pudo interpretarse.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200Credencial ausente o inválida.
object
object
object
Example
{ "error": { "code": "unauthorized", "message": "La credencial no es válida.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200La credencial no autoriza esta operación, integración o ambiente.
object
object
object
Example
{ "error": { "code": "forbidden", "message": "La credencial no tiene el alcance requerido.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200Conflicto de idempotencia o identificador externo.
object
object
object
Example
{ "error": { "code": "idempotency_mismatch", "message": "La clave de idempotencia ya fue utilizada con otro cuerpo.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200La factura estructurada no superó la validación.
object
object
object
Example
{ "error": { "code": "validation_error", "message": "La factura contiene campos inválidos.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1", "details": [ { "field": "lines.0.unit_price", "code": "invalid_decimal", "message": "Debe ser un decimal representado como string." } ] }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200Se excedió el límite temporal de solicitudes.
object
object
object
Example
{ "error": { "code": "rate_limited", "message": "Espera antes de volver a intentarlo.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200CierreListo no pudo completar la operación por un error interno.
object
object
object
Example
{ "error": { "code": "internal_error", "message": "No pudimos completar la operación. Conserva el request_id para soporte.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200El servicio no puede completar temporalmente la operación.
object
object
object
Example
{ "error": { "code": "service_unavailable", "message": "El servicio no está disponible temporalmente.", "request_id": "req_6a07a2bfa55e4e1ebf5a9f27482f09f1" }}Headers
Sección titulada «Headers»Identificador de trazabilidad de la solicitud.
Example
req_6a07a2bfa55e4e1ebf5a9f27482f09f1Máximo de solicitudes permitidas en la ventana actual.
Example
70Solicitudes disponibles antes de agotar la ventana actual.
Example
69Instante de reinicio de la ventana expresado como Unix time.
Example
1785337200Segundos que debe esperar el cliente antes de reintentar una operación temporalmente ocupada.
Example
1