Comprobantes
El registro completo de comprobantes electrónicos del libro — facturas, notas, retenciones y guías, emitidos y de producción. Es la superficie de sincronización para un ERP: filtra por estado o fecha, ordena y pagina con la sintaxis JSON:API. Solo lectura: los comprobantes se crean con
POST /api/v1/invoices
y
POST /api/v1/purchases
.
El objeto document
#
country
enum
requerido
País del comprobante (
EC
,
PE
).
ECPE
currency
string
requerido
Moneda ISO 4217 (
USD
en Ecuador,
PEN
en Perú).
direction
enum
requerido
issued
— emitidos por ti. (El registro también guarda recibidos; por la API viajan solo los emitidos.)
issuedreceived
doc_type
enum
requerido
Tipo de comprobante (factura, nota de crédito, retención, guía…).
facturacredit_notedebit_notewithholdingwaybillliquidacion_compraboletaperceptionsummaryvoid
environment
enum
requerido
Partición del dato: por una llave solo viaja
production
.
testproduction
grand_total
string
requerido
Importe total, como cadena decimal.
issue_date
date
requerido
Fecha de emisión (AAAA-MM-DD).
issuer
object
requerido
El emisor del comprobante: RUC, razón social, establecimiento y punto de emisión.
lines
array
requerido
Las líneas: descripción, cantidad, precio, descuento, subtotal y sus impuestos.
receiver
object
requerido
El receptor: identificación, nombre, correo y dirección.
sequential
integer
requerido
El secuencial numérico del comprobante.
status
enum
requerido
Estado del ciclo de vida;
authorized
es el estado final feliz.
draftsignedfailedsubmittedauthorizedrejectedpendingsigningsubmittingvoided
tenant_slug
string
requerido
La organización dueña del libro.
total_discount
string
requerido
Descuento total, como cadena decimal.
total_without_taxes
string
requerido
Subtotal sin impuestos, como cadena decimal.
transport_failures
integer
requerido
Intentos de transporte fallidos hacia la autoridad.
access_key
string
Clave de acceso (Ecuador, 49 dígitos) o identificador de la autoridad.
authority_status
string
El veredicto literal de la autoridad (
AUTORIZADO
,
DEVUELTA
…).
authority_ticket
string
Ticket de cola de la autoridad (Perú), si aplica.
authorization_date
datetime
Momento de la autorización.
authorization_number
string
Número de autorización asignado por la autoridad.
authorized_xml
string
El XML autorizado por la autoridad — el documento legal. Pesado: exclúyelo con
fields[document]
.
book_id
uuid
El libro contable dueño del registro — siempre el de tu llave.
clearance_provider
enum
Vía de despacho ante la autoridad, cuando interviene un tercero (OSE en Perú).
sunatnubefact
delivered_at
datetime
Cuándo se envió el comprobante al receptor por correo.
detraction
object
doc_number
string
Número completo
estab-ptoEmi-secuencial
(
001-002-000000123
).
failure_notified_at
datetime
Cuándo se notificó la falla al emisor.
failure_reason
string
Por qué falló la emisión, si falló.
last_transport_error
string
El último error de transporte, literal.
messages
array
Mensajes literales devueltos por la autoridad.
operation_type
string
payments
array
Formas de pago del comprobante (canal y monto).
posted_at
datetime
Momento de contabilización.
propina
string
Propina (servicio 10%), si aplica.
references
array
Documentos referenciados (la factura que una nota modifica).
shipment
object
Datos de transporte (guías de remisión).
signed_xml
string
El XML firmado (XAdES-BES en Ecuador). Pesado: exclúyelo con
fields[document]
.
source_ref
string
Referencia de origen — el
external_ref
con el que se emitió, si hubo.
taxes
array
Totales de impuestos por código y tarifa.
transport_failed_at
datetime
Momento del último fallo de transporte.
unsigned_xml
string
El XML construido, antes de firmar. Pesado: exclúyelo con
fields[document]
.
withdrawal_applied_at
datetime
withholdings
array
Retenciones contenidas (en comprobantes de retención).
Filtrable por: access_keyauthority_statusauthority_ticketauthorization_dateauthorization_numberauthorized_xmlbook_idclearance_providercountrycurrencydelivered_atdirectiondoc_numberdoc_typeenvironmentfailure_notified_atfailure_reasongrand_totalidissue_datelast_transport_erroroperation_typeposted_atpropinasequentialsigned_xmlsource_refstatustenant_slugtotal_discounttotal_without_taxestransport_failed_attransport_failuresunsigned_xmlwithdrawal_applied_at
Ordenable por: access_keyauthority_statusauthority_ticketauthorization_dateauthorization_numberauthorized_xmlbook_idclearance_providercountrycurrencydelivered_atdirectiondoc_numberdoc_typeenvironmentfailure_notified_atfailure_reasongrand_totalidissue_datelast_transport_erroroperation_typeposted_atpropinasequentialsigned_xmlsource_refstatustenant_slugtotal_discounttotal_without_taxestransport_failed_attransport_failuresunsigned_xmlwithdrawal_applied_at
Listar comprobantes#
/api/v1/documents
Bearer
Los campos XML pesan: en sincronizaciones usa
fields[document]
para pedir solo los atributos que necesitas.
filter[…]
object
Filtra por atributo:
filter[kind]=customer
, u operadores anidados como
filter[issue_date][greater_than]=2026-07-01
. Combinable con
filter[and]
/
filter[or]
.
sort
string
Atributos separados por coma; prefijo
-
para descendente:
sort=-issue_date
.
page[limit]
integer
Máximo de registros por página.
page[offset]
integer
Desplazamiento desde el inicio del listado.
page[count]
boolean
Con
true
, la respuesta incluye el total en
meta.page.total
.
fields[tipo]
string
Atributos a devolver, separados por coma — el sparse fieldset de JSON:API.
Devuelve
·
200
con
data
— lista de objetos
document
.
curl "https://edge.datil.com/api/v1/documents?filter[status]=authorized&filter[issue_date][greater_than_or_equal]=2026-07-01&sort=-issue_date&page[limit]=20" \
-H "Authorization: Bearer $DATIL_API_KEY"
{
"data": [
{
"type": "document",
"id": "8e0b2d4f-6a1c-4e3b-9d5f-1a3c5e7b9d1f",
"attributes": {
"country": "EC",
"currency": "USD",
"direction": "issued",
"doc_type": "factura",
"environment": "production",
"grand_total": "115.00",
"issue_date": "2026-07-03",
"issuer": {
"ruc": "1790012345001",
"legal_name": "Datil Demo S.A.",
"establishment": "001",
"emission_point": "002",
"keeps_accounting": true
},
"lines": [
{
"description": "Consultoría mensual",
"quantity": "1.00",
"unit_price": "100.00",
"discount": "0.00",
"subtotal": "100.00",
"taxes": [
{
"code": "2",
"rate": "15.00",
"base": "100.00",
"amount": "15.00"
}
]
}
],
"receiver": {
"identification": "0992345678001",
"name": "ACME S.A.",
"email": "pagos@acme.ec"
},
"sequential": 123,
"status": "authorized",
"tenant_slug": "acme",
"total_discount": "0.00",
"total_without_taxes": "100.00",
"transport_failures": 0,
"access_key": "0307202601179001234500110010020000001231234567811",
"authority_status": "AUTORIZADO",
"authority_ticket": null,
"authorization_date": "2026-07-03T14:07:00Z",
"authorization_number": "0307202601179001234500110010020000001231234567811",
"authorized_xml": "<?xml version=\"1.0\"?>…",
"book_id": "1d2f4b6a-8c0e-4a2b-9d3f-5e7a9c1b3d5f",
"clearance_provider": "sunat",
"delivered_at": "2026-07-03T14:09:12Z",
"detraction": null,
"doc_number": "001-002-000000123",
"failure_notified_at": null,
"failure_reason": null,
"last_transport_error": null,
"messages": null,
"operation_type": null,
"payments": [
{
"channel": "bank",
"forma_pago": "20",
"total": "115.00"
}
],
"posted_at": "2026-07-03T14:07:00Z",
"propina": null,
"references": null,
"shipment": null,
"signed_xml": null,
"source_ref": "orden-1042",
"taxes": [
{
"code": "2",
"rate": "15.00",
"base": "100.00",
"amount": "15.00"
}
],
"transport_failed_at": null,
"unsigned_xml": null,
"withdrawal_applied_at": null,
"withholdings": null
}
}
]
}
Consultar un comprobante#
/api/v1/documents/:id
Bearer
id
uuid
requerido
Id del comprobante.
Devuelve
·
200
con
data
·
404
.
curl "https://edge.datil.com/api/v1/documents/8e0b2d4f-6a1c-4e3b-9d5f-1a3c5e7b9d1f" \
-H "Authorization: Bearer $DATIL_API_KEY"
{
"data": {
"type": "document",
"id": "8e0b2d4f-6a1c-4e3b-9d5f-1a3c5e7b9d1f",
"attributes": {
"country": "EC",
"currency": "USD",
"direction": "issued",
"doc_type": "factura",
"environment": "production",
"grand_total": "115.00",
"issue_date": "2026-07-03",
"issuer": {
"ruc": "1790012345001",
"legal_name": "Datil Demo S.A.",
"establishment": "001",
"emission_point": "002",
"keeps_accounting": true
},
"lines": [
{
"description": "Consultoría mensual",
"quantity": "1.00",
"unit_price": "100.00",
"discount": "0.00",
"subtotal": "100.00",
"taxes": [
{
"code": "2",
"rate": "15.00",
"base": "100.00",
"amount": "15.00"
}
]
}
],
"receiver": {
"identification": "0992345678001",
"name": "ACME S.A.",
"email": "pagos@acme.ec"
},
"sequential": 123,
"status": "authorized",
"tenant_slug": "acme",
"total_discount": "0.00",
"total_without_taxes": "100.00",
"transport_failures": 0,
"access_key": "0307202601179001234500110010020000001231234567811",
"authority_status": "AUTORIZADO",
"authority_ticket": null,
"authorization_date": "2026-07-03T14:07:00Z",
"authorization_number": "0307202601179001234500110010020000001231234567811",
"authorized_xml": "<?xml version=\"1.0\"?>…",
"book_id": "1d2f4b6a-8c0e-4a2b-9d3f-5e7a9c1b3d5f",
"clearance_provider": "sunat",
"delivered_at": "2026-07-03T14:09:12Z",
"detraction": null,
"doc_number": "001-002-000000123",
"failure_notified_at": null,
"failure_reason": null,
"last_transport_error": null,
"messages": null,
"operation_type": null,
"payments": [
{
"channel": "bank",
"forma_pago": "20",
"total": "115.00"
}
],
"posted_at": "2026-07-03T14:07:00Z",
"propina": null,
"references": null,
"shipment": null,
"signed_xml": null,
"source_ref": "orden-1042",
"taxes": [
{
"code": "2",
"rate": "15.00",
"base": "100.00",
"amount": "15.00"
}
],
"transport_failed_at": null,
"unsigned_xml": null,
"withdrawal_applied_at": null,
"withholdings": null
}
}
}