Saltearse al contenido

Facturar en Ecuador

PDF, XML y correo

Cuando el SRI autoriza una factura, quedan disponibles cuatro cosas: el RIDE en PDF, el XML autorizado, una página pública de verificación y el envío por correo.

Los enlaces llegan en urls del detalle de la factura:

{
"estado": "autorizado",
"urls": {
"detalle": "https://olympus.atharix.com/api/v1/invoices/6f1e…",
"pdf": "https://olympus.atharix.com/api/v1/invoices/6f1e…/pdf",
"xml": "https://olympus.atharix.com/api/v1/invoices/6f1e…/xml",
"publica": "https://olympus.atharix.com/api/public/sri/2409…13/"
}
}

Antes de la autorización son null, y pedirlos da 409 document_not_authorized.

La Representación Impresa del Documento Electrónico: el documento que reconoce el cliente, con el logo del negocio, el desglose, la clave de acceso y el código QR de verificación.

Ventana de terminal
curl https://olympus.atharix.com/api/v1/invoices/6f1e…/pdf \
-H "X-API-Key: $OLYMPUS_API_KEY" \
-o factura.pdf
pdf = client.get(f"/invoices/{factura_id}/pdf")
pdf.raise_for_status()
Path("factura.pdf").write_bytes(pdf.content)

El diseño (logo, color) sale de la configuración del negocio en Olympus; no se personaliza por la API.

Ventana de terminal
curl https://olympus.atharix.com/api/v1/invoices/6f1e…/xml \
-H "X-API-Key: $OLYMPUS_API_KEY" \
-o factura.xml

Es el comprobante firmado tal como lo autorizó el SRI. Guárdalo: el contribuyente debe conservar sus comprobantes electrónicos siete años.

urls.publica apunta a una página que cualquiera puede abrir sin clave: es la que hay detrás del código QR del RIDE. Permite al comprador ver y descargar su comprobante.

Puedes enviárselo a tus clientes: no expone nada del negocio más allá de ese comprobante.

Por defecto, al autorizarse la factura, Olympus envía al comprador un correo con el RIDE y el XML adjuntos. Solo hace falta que comprador.email venga en el payload.

Para desactivarlo en una factura concreta:

{ "enviar_email": false, "comprador": { … }, "items": [ … ] }

Útil si prefieres enviar tú la comunicación con tu propia plantilla.

Ventana de terminal
curl -X POST https://olympus.atharix.com/api/v1/invoices/6f1e…/send-email \
-H "X-API-Key: $OLYMPUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "destinatarios": ["contabilidad@andina.ec", "gerencia@andina.ec"] }'

Sin destinatarios, se envía al correo del comprador. Hasta 5 destinatarios por llamada. Requiere estado autorizado y scope invoices:write.

Casos típicos: el cliente dio mal su correo, pide copia meses después, o su contador quiere recibirla aparte.

def archivar(client, factura_id, carpeta: Path):
factura = client.get(f"/invoices/{factura_id}").json()
if factura["estado"] != "autorizado":
return None
clave = factura["clave_acceso"]
carpeta.mkdir(parents=True, exist_ok=True)
for extension in ("pdf", "xml"):
respuesta = client.get(f"/invoices/{factura_id}/{extension}")
respuesta.raise_for_status()
(carpeta / f"{clave}.{extension}").write_bytes(respuesta.content)
return clave

Nómbralos por la clave de acceso: es única, irrepetible y es lo que te pedirán si hay que buscar un comprobante concreto.