Documentación

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 #

Atributos

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#

GET /api/v1/documents Bearer

Los campos XML pesan: en sincronizaciones usa fields[document] para pedir solo los atributos que necesitas.

Parámetros

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
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"
Respuesta · 200
{
  "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#

GET /api/v1/documents/:id Bearer

Parámetros

id uuid requerido

Id del comprobante.

Devuelve · 200 con data · 404 .

cURL
curl "https://edge.datil.com/api/v1/documents/8e0b2d4f-6a1c-4e3b-9d5f-1a3c5e7b9d1f" \
  -H "Authorization: Bearer $DATIL_API_KEY"
Respuesta · 200
{
  "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
    }
  }
}
Sin conexión — reintentando…

Esenciales

Sesión, seguridad, idioma y tema. Sin ellas el sitio no funciona.

Siempre activas