Otros comprobantes · Ecuador
Notas de crédito
POST /api/v1/credit-notes/issue · scope documents:write
Una nota de crédito rebaja una factura que el SRI ya autorizó: una devolución, un descuento posterior a la venta o la anulación completa. Lo mínimo es la factura, el motivo y las líneas que se devuelven.
{ "factura_modificada": { "secuencial": "001-001-000000123" }, "motivo": "Devolución de mercadería", "items": [ { "descripcion": "Servicio de soporte mensual", "cantidad": 1, "precio_unitario": 100.00, "impuestos": [{ "codigo": "2", "codigo_porcentaje": "4" }] } ]}Campos de primer nivel
Sección titulada «Campos de primer nivel»| Campo | Obligatorio | Por defecto | Notas |
|---|---|---|---|
factura_modificada | ✅ | — | { "id" } o { "secuencial" }. Tiene que estar autorizada |
motivo | ✅ | — | Sale en el comprobante, hasta 300 caracteres |
items | ✅ | — | Las líneas que se devuelven, con su IVA |
comprador | — | El de la factura | Solo si quieres otro correo o dirección |
referencia_externa | — | — | Envíala siempre. Única por negocio entre notas de crédito |
fecha_emision | — | Hoy en Ecuador | No puede ser futura ni anterior a la factura |
establecimiento | — | El de la clave o el del negocio | { "codigo", "punto_emision" } |
secuencial | — | El siguiente de la serie de notas | Solo si controlas la numeración |
totales | — | — | Si lo envías, se comprueba |
enviar_email | — | true | Enviar el RIDE al comprador al autorizarse |
factura_modificada
Sección titulada «factura_modificada»Por id (el que devolvió POST /invoices/issue) o por número completo:
{ "factura_modificada": { "id": "6f1e8a24-91cd-4c73-9a1f-2b0f5d7e4c88" } }{ "factura_modificada": { "secuencial": "001-001-000000123" } }La factura tiene que estar en estado autorizado. Si todavía está pendiente o enviado, o si está
anulada, recibes 409 invoice_not_authorized; si no existe, 422 invoice_not_found. El SRI rechazaría
una nota sobre una factura sin autorizar, así que Olympus no la deja salir.
Las mismas líneas que en una factura: descripcion, cantidad, precio_unitario, descuento e
impuestos. Ver Emitir una factura.
- Nota parcial: solo las líneas (o las cantidades) que se devuelven.
- Nota total: las mismas líneas de la factura, con los mismos impuestos, para que el valor de la nota iguale al de la factura.
codigo_principal y unidad_medida se aceptan pero, en una nota, solo son informativos.
Respuesta
Sección titulada «Respuesta»202 Accepted, con la cabecera común y los campos propios de la nota:
{ "id": "0d4b1c7e-2f6a-4d0b-9e21-7c3a5b8f9a10", "tipo": "nota_credito", "pais": "EC", "estado": "pendiente", "secuencial": "001-001-000000018", "clave_acceso": "2509202604099999999900110010010000000181234567814", "numero_autorizacion": null, "fecha_autorizacion": null, "ambiente": "pruebas", "fecha_emision": "2026-09-25", "referencia_externa": "NC-2026-0031", "establecimiento": { "codigo": "001", "punto_emision": "001" }, "factura_modificada": { "id": "6f1e8a24-91cd-4c73-9a1f-2b0f5d7e4c88", "secuencial": "001-001-000000123", "fecha_emision": "2026-09-12", "clave_acceso": "1209202601099999999900110010010000001231234567810" }, "motivo": "Devolución de mercadería", "comprador": { "tipo_identificacion": "04", "identificacion": "1792060346001", "razon_social": "COMERCIAL ANDINA S.A.", "email": "facturas@andina.ec", "telefono": null, "direccion": null }, "totales": { "total_sin_impuestos": 100.0, "descuento": 0.0, "iva": 15.0, "importe_total": 115.0 }, "items": [ { "descripcion": "Servicio de soporte mensual", "cantidad": 1.0, "precio_unitario": 100.0, "descuento": 0.0, "subtotal": 100.0, "impuestos": [ { "codigo": "2", "codigo_porcentaje": "4", "tarifa": 15.0, "base_imponible": 100.0, "valor": 15.0 } ] } ], "mensajes": [], "intentos_envio": 0, "urls": { "detalle": "https://olympus.atharix.com/api/v1/credit-notes/0d4b1c7e-…", "pdf": null, "xml": null, "publica": null }, "creado_en": "2026-09-25T15:04:11-05:00", "actualizado_en": "2026-09-25T15:04:11-05:00"}Después, GET /credit-notes/{id} para el estado, /pdf y /xml cuando esté autorizado, y
GET /credit-notes?factura={id} para todas las notas emitidas sobre una factura.
Ejemplo completo
Sección titulada «Ejemplo completo»curl -X POST https://olympus.atharix.com/api/v1/credit-notes/issue \ -H "X-API-Key: $OLYMPUS_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: NC-2026-0031" \ -d '{ "referencia_externa": "NC-2026-0031", "factura_modificada": { "secuencial": "001-001-000000123" }, "motivo": "Devolución de mercadería", "items": [{ "descripcion": "Servicio de soporte mensual", "cantidad": 1, "precio_unitario": 100.00, "impuestos": [{ "codigo": "2", "codigo_porcentaje": "4" }] }], "totales": { "total_sin_impuestos": 100.00, "importe_total": 115.00 } }'import os, requests
nota = requests.post( "https://olympus.atharix.com/api/v1/credit-notes/issue", headers={"X-API-Key": os.environ["OLYMPUS_API_KEY"], "Idempotency-Key": "NC-2026-0031"}, json={ "referencia_externa": "NC-2026-0031", "factura_modificada": {"secuencial": "001-001-000000123"}, "motivo": "Devolución de mercadería", "items": [{ "descripcion": "Servicio de soporte mensual", "cantidad": 1, "precio_unitario": 100.00, "impuestos": [{"codigo": "2", "codigo_porcentaje": "4"}], }], "totales": {"total_sin_impuestos": 100.00, "importe_total": 115.00}, }, timeout=30,)nota.raise_for_status()print(nota.json()["clave_acceso"])const response = await fetch("https://olympus.atharix.com/api/v1/credit-notes/issue", { method: "POST", headers: { "X-API-Key": process.env.OLYMPUS_API_KEY, "Content-Type": "application/json", "Idempotency-Key": "NC-2026-0031", }, body: JSON.stringify({ referencia_externa: "NC-2026-0031", factura_modificada: { secuencial: "001-001-000000123" }, motivo: "Devolución de mercadería", items: [{ descripcion: "Servicio de soporte mensual", cantidad: 1, precio_unitario: 100.0, impuestos: [{ codigo: "2", codigo_porcentaje: "4" }], }], totales: { total_sin_impuestos: 100.0, importe_total: 115.0 }, }),});const nota = await response.json();console.log(nota.clave_acceso);$client = new \GuzzleHttp\Client(['base_uri' => 'https://olympus.atharix.com/api/v1/']);$response = $client->post('credit-notes/issue', [ 'headers' => ['X-API-Key' => getenv('OLYMPUS_API_KEY'), 'Idempotency-Key' => 'NC-2026-0031'], 'json' => [ 'referencia_externa' => 'NC-2026-0031', 'factura_modificada' => ['secuencial' => '001-001-000000123'], 'motivo' => 'Devolución de mercadería', 'items' => [[ 'descripcion' => 'Servicio de soporte mensual', 'cantidad' => 1, 'precio_unitario' => 100.00, 'impuestos' => [['codigo' => '2', 'codigo_porcentaje' => '4']], ]], 'totales' => ['total_sin_impuestos' => 100.00, 'importe_total' => 115.00], ],]);$nota = json_decode((string) $response->getBody(), true);echo $nota['clave_acceso'];