Ir al contenido
API v1.0.0 · COMPROBANTES

Facturas

Envía el cliente, los ítems con su precio sin IVA y la forma de pago. Golem calcula subtotales, IVA y total, asigna el número y la clave de acceso, firma el XML y lo envía al SRI.

Datos de una factura

Una factura necesita como mínimo:

  • establecimiento y puntoEmision: los códigos de 3 dígitos del punto de emisión (GET /empresa los lista). Si los omites, se usa el punto por defecto del token.
  • cliente: la identificación, la razón social y, para enviarle la factura, el correo.
  • items: el código, la descripción, la cantidad, el precio unitario sin IVA y el IVA de cada ítem.
  • formaPago (una forma por el total) o pagos (varias formas).

La tabla de la referencia lista todos los campos. Un campo que no está en ella se rechaza con 400 VALIDACION.

Cliente

  • Identificación: cédula (10 dígitos), RUC (13 dígitos), pasaporte o identificación del exterior. Golem valida la cédula y el RUC.
  • Tipo de identificación: si omites tipoIdentificacion, se deduce: 13 dígitos válidos → RUC (04), 10 dígitos válidos → cédula (05), 9999999999999 → consumidor final (07). Para pasaportes (06) y documentos del exterior (08) indícalo siempre.
  • Identificación inválida: sin tipoIdentificacion, una cédula o un RUC que no son válidos no permiten deducir el tipo y la respuesta es 400 VALIDACION, con CAMPO_REQUERIDO en cliente.tipoIdentificacion. Con tipoIdentificacion 04 o 05, la respuesta es 422 IDENTIFICACION_INVALIDA en cliente.identificacion.
  • Datos por comprobante: la razón social, la dirección y el correo de la solicitud se usan en esta factura. Golem no toma ni cambia los datos que otra empresa registró para la misma identificación.
  • Correo: si omites email, se usa el último que tu empresa registró para ese cliente, si existe. En producción, cuando el SRI autoriza la factura, Golem envía al cliente el XML y el RIDE a ese correo.

Consumidor final

Para ventas sin identificar al comprador, envía "identificacion": "9999999999999". La razón social es opcional (se imprime CONSUMIDOR FINAL) y solo se usa el correo que venga en la solicitud.

El SRI limita el valor de una factura a consumidor final: por encima de USD 50.00 la solicitud responde 422 CONSUMIDOR_FINAL_EXCEDE_LIMITE y hay que identificar al comprador. Una factura a consumidor final no admite notas de crédito.

Ítems y productos

  • codigo identifica el producto en el catálogo de tu empresa. Si ya existe, se usa ese producto y el catálogo no se modifica. Si no existe, se crea con el código, la descripción, el precio y el IVA de la solicitud (codigoAuxiliar y tipo solo se usan al crearlo; tipo es BIEN por defecto).
  • descripcion es la que se imprime en el comprobante, aunque el producto del catálogo tenga otra.
  • cantidad admite hasta 2 decimales y precioUnitario hasta 4. El precio va sin IVA.
  • descuento es el valor en dólares de la línea completa, no un porcentaje, y no puede superar cantidad × precio (422 DESCUENTO_INVALIDO).
  • Si el producto existe con control de inventario y no hay existencias suficientes, la factura no se emite: 422 SIN_STOCK. Los productos que crea el API no llevan control de inventario.

IVA de cada ítem

Indica el IVA con iva (porcentaje) o con codigoIva (código del SRI):

ivacodigoIvaTarifa
154IVA 15 %
55IVA 5 %
1310IVA 13 %
88IVA diferenciado
00IVA 0 %
—6No objeto de IVA
—7Exento de IVA

El porcentaje 0 siempre es la tarifa 0 %: para no objeto o exento usa codigoIva 6 o 7. Las tarifas de 12 % y 14 % ya no están vigentes y responden 422 TARIFA_IVA_NO_VIGENTE en una factura; solo se usan en notas de crédito de facturas de esas fechas. El catálogo tarifas-iva tiene la vigencia de cada código.

Cálculo de totales

Golem calcula la factura con el mismo método que la aplicación, redondeando la mitad hacia arriba:

  1. Por ítem: cantidad × precio unitario, redondeado a 4 decimales; menos el descuento; redondeado a 2 decimales. Es el subtotal de la línea.
  2. IVA de la línea: subtotal × tarifa / 100, redondeado a 2 decimales.
  3. Por tarifa: la base es la suma de los subtotales y el IVA es la suma del IVA de sus líneas.
  4. Total: suma de subtotales + suma de IVA + propina.
ÍtemCálculoSubtotalIVA
Mantenimiento mensual, IVA 15 %1 × 120.00 − 12.00108.0016.20
Libro técnico, IVA 0 %2 × 15.5031.000.00
Total108.00 + 31.00 + 16.20155.20

La respuesta trae el desglose en totales: subtotal, descuento, subtotalesIva (base y valor por tarifa), iva, propina y total.

Comparar con tu sistema

Si envías totalEsperado con el total que calculó tu sistema, Golem lo compara con el suyo: si difieren en más de 0.01, la factura no se emite y la respuesta 422 TOTAL_NO_COINCIDE muestra el desglose. Así detectas diferencias de cálculo antes de crear el comprobante.

Precios con IVA incluido

El API recibe el precio unitario sin IVA. Si tu sistema guarda el precio de venta con IVA (PVP), conviértelo:

Conversión del precio
precioUnitario = PVP ÷ (1 + tarifa / 100), redondeado a 4 decimales

Ejemplo con IVA 15 %: un PVP de 1.15 da un precio unitario de 1.0000; 3 unidades suman 3.00 + 0.45 de IVA = 3.45, lo mismo que se cobró.

Como el IVA se redondea por línea, el total puede diferir en 0.01 por línea de lo cobrado. Por ejemplo, un PVP de 1.03 da 0.8957; la línea queda en 0.90 + 0.14 de IVA = 1.04. Para esos casos:

  • Envía en totalEsperado lo cobrado: una diferencia de 0.01 se acepta y una mayor se rechaza antes de emitir.
  • Con pagos, la suma puede diferir del total en 0.01. Con formaPago, el pago es el total que calcula Golem.

La emisión con precios con IVA incluido está en la hoja de ruta.

Formas de pago

  • formaPago: un código del catálogo formas-pago, por el total de la factura. Por ejemplo 01 (sin utilización del sistema financiero, efectivo) o 20 (otros con utilización del sistema financiero, como una transferencia).
  • pagos: hasta 10 formas, cada una con su total y, si es a plazo, plazo y unidadTiempo (DIAS, MESES o ANIOS). Deben sumar el total de la factura con una diferencia de hasta 0.01; si no, 422 PAGOS_NO_CUADRAN.

Envía uno de los dos: si faltan ambos o vienen los dos, 400 VALIDACION.

Otros campos

  • fechaEmision: por defecto hoy; se acepta hoy o ayer (hora de Ecuador). Ver Fecha de emisión desde 2026.
  • referencia: identificador del documento en tu sistema, por ejemplo el número de pedido, hasta 100 caracteres. No se imprime y sirve para buscar la factura.
  • propina: propina o cargo por servicio; se suma al total.
  • guiaRemision: número de la guía de remisión con el formato 001-001-000000001.
  • informacionAdicional: hasta 14 campos con nombre y valor que se imprimen en el RIDE. Golem agrega el campo obligatorio “RUC Proveedor”.

Después de emitir

La respuesta es 201 con el estado final o 202 si el SRI no respondió en 12 segundos (ver Estados). Cuando la factura está autorizada, descarga el XML y el RIDE. Para corregir una factura autorizada, emite una nota de crédito.

Emitir una factura

POST /comprobantes/facturas

  • Requiere token
  • Idempotency-Key
  • Espera al SRI hasta 12 s

Crea una factura (código 01) en el punto de emisión indicado, calcula subtotales, IVA y total, asigna el secuencial y la clave de acceso, la firma y la envía al SRI.

  • establecimiento y puntoEmision son los códigos de 3 dígitos. Si los omites, se usa el punto por defecto del token.
  • Envía el precio unitario sin IVA, con hasta 4 decimales, y la cantidad con hasta 2. Si tu sistema maneja precios con IVA incluido, la guía de facturas explica cómo convertirlos. El IVA de cada ítem se indica con iva (porcentaje) o con codigoIva (código del SRI). Para no objeto de IVA usa codigoIva: "6" y para exento "7".
  • Indica el pago con formaPago (una sola forma por el total) o con pagos (varias formas; deben sumar el total).
  • Si envías totalEsperado, Golem compara su cálculo con ese valor y rechaza la factura si difieren en más de 0.01.
  • Si un ítem usa el código de un producto de tu catálogo con control de inventario y no hay existencias, la factura no se emite (422 SIN_STOCK).
  • Envía siempre Idempotency-Key: si la conexión se corta, repite la solicitud con la misma clave.

Límites: 60 solicitudes por minuto por token; 20 emisiones por minuto por token y 40 por empresa.

Parámetros

Parámetros de emitir una factura
Campo Descripción
Idempotency-Key
cabecera string

Clave única de la operación, generada por tu sistema (se recomienda un UUID v4). Entre 8 y 100 caracteres: letras, números, -, _, . o :. Vale 24 horas por empresa y por ambiente. Es opcional, pero sin ella un reintento después de un corte de red crea otro comprobante.

  • De 8 a 100 caracteres
  • Formato ^[A-Za-z0-9._:-]{8,100}$
Prefer
cabecera string

respond-async responde de inmediato con 202 sin esperar al SRI. Sin esta cabecera, Golem espera el resultado hasta 12 segundos. Otros valores se ignoran.

X-Request-Id
cabecera string

Identificador propio de la solicitud (hasta 64 caracteres: letras, números y -). Si no lo envías, Golem genera uno. Vuelve en la cabecera de respuesta y en los errores; cítalo al escribir a soporte.

  • Hasta 64 caracteres
  • Formato ^[A-Za-z0-9-]{1,64}$

Cuerpo de la solicitud

JSON (application/json). Los campos que no están en esta tabla se rechazan con 400 VALIDACION.

Campos del cuerpo (FacturaSolicitud)
Campo Descripción
establecimiento
string

Código de 3 dígitos del establecimiento, como en el número del comprobante.

  • Formato ^\d{3}$
puntoEmision
string

Código de 3 dígitos del punto de emisión.

  • Formato ^\d{3}$
fechaEmision
string (date)

Fecha de emisión (hora de Ecuador). Por defecto, hoy. Solo se acepta la de hoy o la de ayer: el SRI exige transmitir el comprobante al emitirlo. Otra fecha responde 422 FECHA_FUERA_DE_RANGO.

referencia
string

Identificador del documento en tu sistema (por ejemplo, el número de pedido), para buscarlo después. No se imprime ni tiene que ser único.

  • De 1 a 100 caracteres
cliente
object obligatorio

Comprador. Sus datos se usan en este comprobante: la razón social, la dirección y el correo al que se envía. Golem no toma ni cambia los datos que otra empresa registró para la misma identificación. Si omites el email, se usa el último que tu empresa registró para ese cliente, si existe. Para consumidor final solo se usa el email de esta solicitud. En una nota de crédito no se admite consumidor final.

cliente. tipoIdentificacion
string

Tipo de identificación del SRI (tabla 6): 04 RUC, 05 cédula, 06 pasaporte, 07 consumidor final, 08 identificación del exterior.

  • Valores: 04, 05, 06, 07, 08
cliente. identificacion
string obligatorio

Cédula (10 dígitos), RUC (13 dígitos), pasaporte o identificación del exterior. Para consumidor final, 9999999999999. Si omites tipoIdentificacion, se deduce: 13 dígitos válidos → RUC, 10 dígitos válidos → cédula, 9999999999999 → consumidor final; en otro caso indícalo.

  • De 3 a 20 caracteres
  • Formato ^[A-Za-z0-9-]{3,20}$
cliente. razonSocial
string

Nombres y apellidos o razón social. Obligatorio salvo para consumidor final.

  • De 3 a 300 caracteres
cliente. email
string (email)
  • Hasta 255 caracteres
cliente. direccion
string
  • Hasta 300 caracteres
cliente. telefono
string
  • Hasta 30 caracteres
items
object[] obligatorio
  • De 1 a 200 elementos
items[]. codigo
string obligatorio

Código principal del ítem. Si no existe en el catálogo de la empresa, se crea con estos datos.

  • De 1 a 25 caracteres
items[]. codigoAuxiliar
string
  • Hasta 25 caracteres
items[]. descripcion
string obligatorio

Descripción que se imprime en el comprobante (el catálogo no se modifica).

  • De 1 a 300 caracteres
items[]. cantidad
number obligatorio

Cantidad, mayor que 0, con hasta 2 decimales (por ejemplo 1.25 kg).

  • Mayor que 0, hasta 999999999.99
items[]. precioUnitario
number obligatorio

Precio unitario sin IVA, con hasta 4 decimales. Si tu sistema tiene el precio con IVA incluido (PVP), envía PVP ÷ (1 + tarifa/100) redondeado a 4 decimales y, si quieres comparar con lo cobrado, usa totalEsperado (tolera 0.01).

  • Desde 0, hasta 999999999.9999
items[]. descuento
number

Descuento en dólares de la línea completa, con hasta 2 decimales. No puede superar cantidad × precio.

  • Desde 0
  • Por defecto 0
items[]. iva
number

Porcentaje de IVA del ítem. Se traduce al código del SRI (15 → 4, 5 → 5, 0 → 0, 13 → 10, 8 → 8; 12 → 2 y 14 → 3 solo en notas de crédito de facturas de esas fechas). Obligatorio si no envías codigoIva.

  • Valores: 0, 5, 8, 12, 13, 14, 15
items[]. codigoIva
string

Código de porcentaje de IVA del SRI (tabla 17): 0 (0 %), 2 (12 %, hasta el 31-03-2024), 3 (14 %, del 01-06-2016 al 31-05-2017), 4 (15 %, desde el 01-04-2024), 5 (5 %), 6 (no objeto de IVA), 7 (exento de IVA), 8 (IVA diferenciado), 10 (13 %).

  • Valores: 0, 2, 3, 4, 5, 6, 7, 8, 10
items[]. tipo
string

Tipo del ítem. Solo se usa para crear el producto en el catálogo de la empresa cuando su código no existe.

  • Valores: BIEN, SERVICIO
items[]. detallesAdicionales
object[]

Hasta 3 detalles adicionales del ítem.

  • Hasta 3 elementos
items[].detallesAdicionales[]. nombre
string obligatorio
  • De 1 a 300 caracteres
items[].detallesAdicionales[]. valor
string obligatorio
  • De 1 a 300 caracteres
formaPago
string

Una sola forma de pago por el total de la factura. No se combina con pagos.

  • Valores: 01, 15, 16, 17, 18, 19, 20, 21
pagos
object[]

Varias formas de pago. Deben sumar el total de la factura (±0.01). No se combina con formaPago.

  • De 1 a 10 elementos
pagos[]. formaPago
string obligatorio

Forma de pago del SRI (tabla 24): 01 sin utilización del sistema financiero, 15 compensación de deudas, 16 tarjeta de débito, 17 dinero electrónico, 18 tarjeta prepago, 19 tarjeta de crédito, 20 otros con utilización del sistema financiero, 21 endoso de títulos.

  • Valores: 01, 15, 16, 17, 18, 19, 20, 21
pagos[]. total
number obligatorio

Valor pagado con esta forma, con hasta 2 decimales.

  • Mayor que 0, hasta 999999999.99
pagos[]. plazo
integer

Plazo de pago. Requiere unidadTiempo.

  • Desde 0, hasta 9999
pagos[]. unidadTiempo
string

Unidad del plazo de pago.

  • Valores: DIAS, MESES, ANIOS
propina
number

Propina o cargo por servicio, con hasta 2 decimales. Por defecto 0.

  • Desde 0, hasta 999999999.99
guiaRemision
string

Número del comprobante con establecimiento, punto de emisión y secuencial.

  • Formato ^\d{3}-\d{3}-\d{9}$
informacionAdicional
object[]

Hasta 14 campos. Golem agrega el campo obligatorio "RUC Proveedor".

  • Hasta 14 elementos
informacionAdicional[]. nombre
string obligatorio
  • De 1 a 300 caracteres
informacionAdicional[]. valor
string obligatorio
  • De 1 a 300 caracteres
totalEsperado
number

Total que calculó tu sistema. Si difiere en más de 0.01 del cálculo de Golem, la factura no se emite (422 TOTAL_NO_COINCIDE).

  • Desde 0, hasta 999999999.99

Ejemplo de solicitud

Los ejemplos leen el token de la variable de entorno GOLEM_TOKEN. Usa una clave nueva por cada comprobante en Idempotency-Key: la del ejemplo de curl es solo una muestra. Si repites la solicitud después de un corte de conexión, usa la misma clave.

Terminal
# Usa una clave nueva por cada comprobante en Idempotency-Key (por ejemplo, un UUID v4).
curl -X POST https://api.golem.ec/v1/comprobantes/facturas \
  --max-time 30 \
  -H "Authorization: Bearer $GOLEM_TOKEN" \
  -H "Idempotency-Key: f57ae464-4a05-49b1-bf73-e18ca8e85f8e" \
  -H "Content-Type: application/json" \
  -d '{
    "establecimiento": "001",
    "puntoEmision": "001",
    "cliente": {
      "identificacion": "0990000000001",
      "razonSocial": "CLIENTE DEMO S.A.",
      "email": "[email protected]"
    },
    "items": [
      {
        "codigo": "P-001",
        "descripcion": "Producto de ejemplo",
        "cantidad": 10,
        "precioUnitario": 7.8,
        "iva": 15
      }
    ],
    "formaPago": "20"
  }'

Respuestas

201 application/json

Comprobante creado y procesado hasta un estado final: AUTORIZADO, NO_AUTORIZADO, DEVUELTO o ERROR. En los tres últimos el crédito vuelve al saldo y los motivos están en mensajes.

Esquema Comprobante.

Respuesta 201: Factura autorizada
{
  "tipo": "FACTURA",
  "codDoc": "01",
  "claveAcceso": "2409202601179000000000120010010000001481234567815",
  "numero": "001-001-000000148",
  "estado": "AUTORIZADO",
  "ambiente": "PRODUCCION",
  "fechaEmision": "2026-09-24",
  "fechaEnvio": "2026-09-24T10:42:28-05:00",
  "fechaAutorizacion": "2026-09-24T10:42:31-05:00",
  "numeroAutorizacion": "2409202601179000000000120010010000001481234567815",
  "fechaActualizacion": "2026-09-24T10:42:33.512-05:00",
  "establecimiento": "001",
  "puntoEmision": "001",
  "referencia": null,
  "origen": "API",
  "total": 89.7,
  "cliente": {
    "tipoIdentificacion": "04",
    "identificacion": "0990000000001",
    "razonSocial": "CLIENTE DEMO S.A.",
    "email": "[email protected]",
    "direccion": null,
    "telefono": null
  },
  "items": [
    {
      "codigo": "P-001",
      "codigoAuxiliar": null,
      "descripcion": "Producto de ejemplo",
      "cantidad": 10,
      "precioUnitario": 7.8,
      "descuento": 0,
      "subtotal": 78,
      "codigoIva": "4",
      "tarifaIva": 15,
      "valorIva": 11.7,
      "detallesAdicionales": []
    }
  ],
  "pagos": [
    {
      "formaPago": "20",
      "total": 89.7,
      "plazo": null,
      "unidadTiempo": null
    }
  ],
  "guiaRemision": null,
  "totales": {
    "subtotal": 78,
    "descuento": 0,
    "subtotalesIva": [
      {
        "codigoIva": "4",
        "tarifa": 15,
        "baseImponible": 78,
        "valor": 11.7
      }
    ],
    "iva": 11.7,
    "propina": 0,
    "total": 89.7
  },
  "mensajes": [],
  "anulacion": null,
  "informacionAdicional": [
    {
      "nombre": "RUC Proveedor",
      "valor": "0195113076001"
    }
  ],
  "enlaces": {
    "self": "https://api.golem.ec/v1/comprobantes/2409202601179000000000120010010000001481234567815",
    "pdf": "https://api.golem.ec/v1/comprobantes/2409202601179000000000120010010000001481234567815/pdf",
    "xml": "https://api.golem.ec/v1/comprobantes/2409202601179000000000120010010000001481234567815/xml"
  }
}
Más ejemplos de la respuesta 201
Factura devuelta por el SRI (el crédito vuelve al saldo)
{
  "tipo": "FACTURA",
  "codDoc": "01",
  "claveAcceso": "2609202601179000000000120010010000001501122334419",
  "numero": "001-001-000000150",
  "estado": "DEVUELTO",
  "ambiente": "PRODUCCION",
  "fechaEmision": "2026-09-26",
  "fechaEnvio": "2026-09-26T09:20:11-05:00",
  "fechaAutorizacion": null,
  "numeroAutorizacion": null,
  "fechaActualizacion": "2026-09-26T09:20:12.845-05:00",
  "establecimiento": "001",
  "puntoEmision": "001",
  "referencia": "PED-2026-00483",
  "origen": "API",
  "total": 11.5,
  "cliente": {
    "tipoIdentificacion": "04",
    "identificacion": "0990000000001",
    "razonSocial": "CLIENTE DEMO S.A.",
    "email": "[email protected]",
    "direccion": null,
    "telefono": null
  },
  "items": [
    {
      "codigo": "P-002",
      "codigoAuxiliar": null,
      "descripcion": "Servicio de ejemplo",
      "cantidad": 1,
      "precioUnitario": 10,
      "descuento": 0,
      "subtotal": 10,
      "codigoIva": "4",
      "tarifaIva": 15,
      "valorIva": 1.5,
      "detallesAdicionales": []
    }
  ],
  "pagos": [
    {
      "formaPago": "20",
      "total": 11.5,
      "plazo": null,
      "unidadTiempo": null
    }
  ],
  "guiaRemision": null,
  "totales": {
    "subtotal": 10,
    "descuento": 0,
    "subtotalesIva": [
      {
        "codigoIva": "4",
        "tarifa": 15,
        "baseImponible": 10,
        "valor": 1.5
      }
    ],
    "iva": 1.5,
    "propina": 0,
    "total": 11.5
  },
  "mensajes": [
    {
      "origen": "SRI",
      "identificador": "56",
      "mensaje": "ESTABLECIMIENTO CERRADO",
      "informacionAdicional": "El establecimiento 001 del RUC 1790000000001 está cerrado en el catastro.",
      "tipo": "ERROR"
    }
  ],
  "anulacion": null,
  "informacionAdicional": [],
  "enlaces": {
    "self": "https://api.golem.ec/v1/comprobantes/2609202601179000000000120010010000001501122334419",
    "pdf": null,
    "xml": null
  }
}
Nota de crédito autorizada
{
  "tipo": "NOTA_CREDITO",
  "codDoc": "04",
  "claveAcceso": "2609202604179000000000120010010000000095550123411",
  "numero": "001-001-000000009",
  "estado": "AUTORIZADO",
  "ambiente": "PRODUCCION",
  "fechaEmision": "2026-09-26",
  "fechaEnvio": "2026-09-26T11:02:40-05:00",
  "fechaAutorizacion": "2026-09-26T11:02:43-05:00",
  "numeroAutorizacion": "2609202604179000000000120010010000000095550123411",
  "fechaActualizacion": "2026-09-26T11:02:44.087-05:00",
  "establecimiento": "001",
  "puntoEmision": "001",
  "referencia": "DEV-2026-0012",
  "origen": "API",
  "total": 17.94,
  "cliente": {
    "tipoIdentificacion": "04",
    "identificacion": "0990000000001",
    "razonSocial": "CLIENTE DEMO S.A.",
    "email": "[email protected]",
    "direccion": null,
    "telefono": null
  },
  "documentoModificado": {
    "codDoc": "01",
    "numero": "001-001-000000148",
    "fechaEmision": "2026-09-24",
    "claveAcceso": "2409202601179000000000120010010000001481234567815"
  },
  "motivo": "Devolución de 2 unidades",
  "items": [
    {
      "codigo": "P-001",
      "codigoAuxiliar": null,
      "descripcion": "Producto de ejemplo",
      "cantidad": 2,
      "precioUnitario": 7.8,
      "descuento": 0,
      "subtotal": 15.6,
      "codigoIva": "4",
      "tarifaIva": 15,
      "valorIva": 2.34,
      "detallesAdicionales": []
    }
  ],
  "totales": {
    "subtotal": 15.6,
    "descuento": 0,
    "subtotalesIva": [
      {
        "codigoIva": "4",
        "tarifa": 15,
        "baseImponible": 15.6,
        "valor": 2.34
      }
    ],
    "iva": 2.34,
    "total": 17.94
  },
  "mensajes": [],
  "anulacion": null,
  "informacionAdicional": [
    {
      "nombre": "RUC Proveedor",
      "valor": "0195113076001"
    }
  ],
  "enlaces": {
    "self": "https://api.golem.ec/v1/comprobantes/2609202604179000000000120010010000000095550123411",
    "pdf": "https://api.golem.ec/v1/comprobantes/2609202604179000000000120010010000000095550123411/pdf",
    "xml": "https://api.golem.ec/v1/comprobantes/2609202604179000000000120010010000000095550123411/xml"
  }
}
Comprobante de retención autorizado
{
  "tipo": "RETENCION",
  "codDoc": "07",
  "claveAcceso": "2609202607179000000000120010010000000223141592611",
  "numero": "001-001-000000022",
  "estado": "AUTORIZADO",
  "ambiente": "PRODUCCION",
  "fechaEmision": "2026-09-26",
  "fechaEnvio": "2026-09-26T12:10:05-05:00",
  "fechaAutorizacion": "2026-09-26T12:10:08-05:00",
  "numeroAutorizacion": "2609202607179000000000120010010000000223141592611",
  "fechaActualizacion": "2026-09-26T12:10:09.301-05:00",
  "establecimiento": "001",
  "puntoEmision": "001",
  "referencia": "CXP-2026-0931",
  "origen": "API",
  "total": 62.5,
  "sujetoRetenido": {
    "tipoIdentificacion": "04",
    "identificacion": "0990000000001",
    "razonSocial": "PROVEEDOR DEMO S.A.",
    "email": "[email protected]",
    "direccion": null,
    "telefono": null
  },
  "periodoFiscal": "2026-09",
  "documentoSustento": {
    "codDoc": "01",
    "numero": "002-001-000004521",
    "fechaEmision": "2026-09-22",
    "claveAcceso": null
  },
  "retenciones": [
    {
      "codigoImpuesto": "1",
      "codigoRetencion": "312",
      "baseImponible": 1000,
      "porcentaje": 1.75,
      "valorRetenido": 17.5
    },
    {
      "codigoImpuesto": "2",
      "codigoRetencion": "1",
      "baseImponible": 150,
      "porcentaje": 30,
      "valorRetenido": 45
    }
  ],
  "mensajes": [],
  "anulacion": null,
  "informacionAdicional": [
    {
      "nombre": "RUC Proveedor",
      "valor": "0195113076001"
    }
  ],
  "enlaces": {
    "self": "https://api.golem.ec/v1/comprobantes/2609202607179000000000120010010000000223141592611",
    "pdf": "https://api.golem.ec/v1/comprobantes/2609202607179000000000120010010000000223141592611/pdf",
    "xml": "https://api.golem.ec/v1/comprobantes/2609202607179000000000120010010000000223141592611/xml"
  }
}

202 application/json

Comprobante creado; el SRI aún no responde. Estado EN_PROCESO. Consulta Location más tarde (por ejemplo a los 5, 15 y 60 segundos). Golem reintenta el envío y la autorización por su cuenta.

Esquema Comprobante.

Respuesta 202: Factura en proceso (el SRI aún no responde)
{
  "tipo": "FACTURA",
  "codDoc": "01",
  "claveAcceso": "2609202601179000000000120010010000001498765432115",
  "numero": "001-001-000000149",
  "estado": "EN_PROCESO",
  "ambiente": "PRODUCCION",
  "fechaEmision": "2026-09-26",
  "fechaEnvio": "2026-09-26T09:15:04-05:00",
  "fechaAutorizacion": null,
  "numeroAutorizacion": null,
  "fechaActualizacion": "2026-09-26T09:15:04.120-05:00",
  "establecimiento": "001",
  "puntoEmision": "001",
  "referencia": "PED-2026-00482",
  "origen": "API",
  "total": 89.7,
  "cliente": {
    "tipoIdentificacion": "04",
    "identificacion": "0990000000001",
    "razonSocial": "CLIENTE DEMO S.A.",
    "email": "[email protected]",
    "direccion": null,
    "telefono": null
  },
  "items": [
    {
      "codigo": "P-001",
      "codigoAuxiliar": null,
      "descripcion": "Producto de ejemplo",
      "cantidad": 10,
      "precioUnitario": 7.8,
      "descuento": 0,
      "subtotal": 78,
      "codigoIva": "4",
      "tarifaIva": 15,
      "valorIva": 11.7,
      "detallesAdicionales": []
    }
  ],
  "pagos": [
    {
      "formaPago": "20",
      "total": 89.7,
      "plazo": null,
      "unidadTiempo": null
    }
  ],
  "guiaRemision": null,
  "totales": {
    "subtotal": 78,
    "descuento": 0,
    "subtotalesIva": [
      {
        "codigoIva": "4",
        "tarifa": 15,
        "baseImponible": 78,
        "valor": 11.7
      }
    ],
    "iva": 11.7,
    "propina": 0,
    "total": 89.7
  },
  "mensajes": [],
  "anulacion": null,
  "informacionAdicional": [],
  "enlaces": {
    "self": "https://api.golem.ec/v1/comprobantes/2609202601179000000000120010010000001498765432115",
    "pdf": null,
    "xml": null
  }
}
Errores: HTTP 400, 401, 402, 403, 409, 413, 415, 422, 429, 500, 503
Códigos de error de emitir una factura
HTTP Código Causa y solución
400 JSON_INVALIDO

El cuerpo no es un JSON válido.

Revisa la sintaxis cerca de la línea y la columna que indica el mensaje.

400 VALIDACION

Uno o más campos no cumplen el formato. detalles lista cada campo con su código: CAMPO_REQUERIDO, CAMPO_DESCONOCIDO, TIPO_INVALIDO, FORMATO_INVALIDO, VALOR_INVALIDO, LONGITUD_INVALIDA o DECIMALES_EXCEDIDOS.

Corrige los campos de detalles. Los campos que el API no conoce se rechazan: revisa los nombres.

400 PARAMETRO_INVALIDO

Un parámetro de la ruta o de la consulta no es válido: por ejemplo, una clave de acceso sin 49 dígitos, un rango de fechas de más de 366 días o un cambiadoDesde anterior a 90 días.

Corrige el parámetro que indica campo.

400 IDEMPOTENCY_KEY_INVALIDA

La cabecera Idempotency-Key no tiene entre 8 y 100 caracteres, o usa caracteres distintos de letras, números, -, _, . y :.

Genera la clave con un UUID v4.

400 TOKEN_EN_URL

La URL incluye token, access_token o api_key.

Envía el token solo en la cabecera Authorization. Revoca ese token y crea otro: la URL pudo quedar en registros.

401 TOKEN_REQUERIDO

Falta la cabecera Authorization.

Envía Authorization: Bearer <token>.

401 TOKEN_INVALIDO

El token no existe o no tiene el formato de un token de Golem.

Copia el token completo, con su prefijo. Si no lo tienes, crea otro: Golem no puede mostrarlo de nuevo.

401 TOKEN_REVOCADO

El token fue revocado.

Crea otro en Cuenta > API e integraciones.

402 SIN_CREDITOS

La empresa no tiene créditos para emitir o reprocesar.

Compra una recarga en la aplicación. Las consultas y descargas siguen disponibles.

403 EMPRESA_SUSPENDIDA

La empresa no está activa. Afecta a las emisiones y las acciones; las consultas siguen disponibles.

Escribe a [email protected].

403 PUNTO_NO_PERMITIDO

El token no puede emitir en ese punto de emisión, o está restringido y no tiene puntos.

Usa uno de los puntos que devuelve GET /empresa en token.puntosPermitidos, o cambia los puntos del token en la aplicación.

403 PLAN_NO_PERMITE

El plan de la empresa no incluye la emisión de comprobantes electrónicos.

Revisa el plan en la aplicación o escribe a [email protected].

409 IDEMPOTENCIA_CUERPO_DISTINTO

La Idempotency-Key ya se usó con otro cuerpo o en otra ruta.

Usa una clave nueva para cada operación distinta y la misma clave solo para repetir la misma solicitud.

409 IDEMPOTENCIA_EN_PROCESO

La solicitud original con esa Idempotency-Key todavía se está procesando.

Repite la solicitud después de los segundos de Retry-After.

413 CUERPO_DEMASIADO_GRANDE

El cuerpo supera 256 KB.

Reduce el comprobante: admite hasta 200 ítems.

415 TIPO_CONTENIDO_NO_SOPORTADO

Una emisión llegó sin Content-Type: application/json.

Envía el cuerpo como JSON con esa cabecera.

422 PUNTO_EMISION_NO_EXISTE

El establecimiento o el punto de emisión que indica la solicitud no existe en la empresa.

Usa los códigos que devuelve GET /empresa.

422 IDENTIFICACION_INVALIDA

La cédula o el RUC no son válidos para el tipoIdentificacion indicado, o se indicó consumidor final como sujeto retenido. Sin tipoIdentificacion, una cédula o un RUC inválido responde 400 VALIDACION (CAMPO_REQUERIDO en tipoIdentificacion), porque no se puede deducir el tipo.

Corrige la identificación. Para pasaportes y documentos del exterior, indica tipoIdentificacion 06 u 08.

422 TARIFA_IVA_NO_VIGENTE

La tarifa de IVA no está vigente en la fecha del comprobante (en notas de crédito, en la fecha de la factura modificada).

Usa una tarifa del catálogo tarifas-iva vigente en esa fecha.

422 TARIFA_IVA_NO_COINCIDE

En una nota de crédito sobre una factura de Golem, un ítem usa una tarifa de IVA que la factura no tiene.

Usa en cada ítem una de las tarifas de la factura modificada.

422 PAGOS_NO_CUADRAN

La suma de pagos difiere del total de la factura en más de 0.01.

Ajusta los pagos al total calculado, o usa formaPago para un solo pago por el total.

422 TOTAL_NO_COINCIDE

El total que calcula Golem difiere de totalEsperado en más de 0.01. El mensaje muestra el desglose.

Compara el cálculo de tu sistema con el de la guía de facturas; con precios con IVA incluido, revisa la conversión.

422 DESCUENTO_INVALIDO

El descuento de una línea supera la cantidad por el precio unitario.

Envía el descuento en dólares de la línea completa, sin superar su valor.

422 CONSUMIDOR_FINAL_EXCEDE_LIMITE

Una factura a consumidor final supera el tope que permite el SRI.

Identifica al comprador con su cédula, RUC o pasaporte.

422 FECHA_FUERA_DE_RANGO

La fecha de emisión no es la de hoy ni la de ayer (hora de Ecuador), o es anterior a la del documento modificado o sustento.

Omite fechaEmision para usar la de hoy. El SRI exige transmitir el comprobante al emitirlo.

422 FIRMA_NO_VIGENTE

La empresa no tiene firma electrónica o la firma venció.

Carga una firma vigente en la aplicación.

422 SIN_STOCK

Un ítem usa un producto con control de inventario sin existencias suficientes.

Registra el ingreso en la aplicación o quita el control de inventario del producto.

422 SUSTENTO_NO_ENCONTRADO

La factura que modifica la nota de crédito no existe en la empresa y el ambiente del token.

Revisa la clave de acceso. Si la factura se emitió fuera de Golem, envía codDoc, numero y fechaEmision.

422 SUSTENTO_NO_AUTORIZADO

La factura que modifica la nota de crédito no está autorizada.

Emite la nota de crédito cuando la factura esté autorizada.

422 NOTA_CREDITO_EXCEDE_SALDO

La nota de crédito, sumada a las anteriores de la misma factura, supera el total de la factura.

Reduce el valor de la nota de crédito al saldo de la factura.

422 CLIENTE_NO_COINCIDE

La identificación de cliente no es la de la factura modificada.

Omite cliente: se toma de la factura.

422 CLIENTE_NO_PERMITIDO

Una nota de crédito a consumidor final, o sobre una factura emitida a consumidor final.

El SRI exige un receptor identificado en las notas de crédito.

422 CODIGO_RETENCION_INVALIDO

El código de retención no existe o no está vigente para ese impuesto.

Usa un código de los catálogos retenciones-renta o retenciones-iva.

422 PORCENTAJE_RETENCION_INVALIDO

Falta porcentaje en un código de porcentaje variable, o el porcentaje enviado no coincide con el de un código de porcentaje fijo.

Envía porcentaje solo en los códigos con porcentaje variable.

422 SIN_CORREO

El comprobante no tiene un correo de destino.

El correo se toma del comprobante al emitirlo; en ese caso, envía el XML y el RIDE por tu cuenta.

429 LIMITE_EXCEDIDO

Se superó un límite de solicitudes por minuto.

Repite la solicitud después de los segundos de Retry-After.

500 ERROR_INTERNO

Error inesperado de Golem.

Si ocurrió al emitir, repite la solicitud con la misma Idempotency-Key. Escribe a [email protected] con el requestId.

503 SRI_NO_DISPONIBLE

El SRI no responde.

Repite la solicitud después de los segundos de Retry-After.

503 SERVICIO_NO_DISPONIBLE

Un servicio interno de Golem no responde.

Repite la solicitud después de los segundos de Retry-After.

503 MANTENIMIENTO

Golem está en mantenimiento. Los mantenimientos se avisan por correo con 24 horas de anticipación.

Repite la solicitud después de los segundos de Retry-After.

Formato y lista completa en Errores.

Más ejemplos de solicitud

Otros cuerpos válidos de la especificación: una factura con descuento, dos tarifas de IVA, dos pagos y referencia, y una factura a consumidor final.

Factura con descuento, dos tarifas, dos pagos y referencia
{
  "establecimiento": "001",
  "puntoEmision": "001",
  "referencia": "PED-2026-00481",
  "cliente": {
    "tipoIdentificacion": "05",
    "identificacion": "1700000001",
    "razonSocial": "PERSONA DEMO",
    "email": "[email protected]",
    "direccion": "Av. Amazonas N24-03, Quito",
    "telefono": "022000000"
  },
  "items": [
    {
      "codigo": "SERV-01",
      "descripcion": "Mantenimiento mensual",
      "cantidad": 1,
      "precioUnitario": 120,
      "descuento": 12,
      "iva": 15,
      "tipo": "SERVICIO"
    },
    {
      "codigo": "LIB-07",
      "descripcion": "Libro técnico",
      "cantidad": 2,
      "precioUnitario": 15.5,
      "codigoIva": "0",
      "detallesAdicionales": [
        {
          "nombre": "Edición",
          "valor": "2026"
        }
      ]
    }
  ],
  "pagos": [
    {
      "formaPago": "19",
      "total": 100
    },
    {
      "formaPago": "20",
      "total": 55.2,
      "plazo": 30,
      "unidadTiempo": "DIAS"
    }
  ],
  "informacionAdicional": [
    {
      "nombre": "Pedido",
      "valor": "PED-2026-00481"
    }
  ],
  "totalEsperado": 155.2
}
Factura a consumidor final
{
  "cliente": {
    "identificacion": "9999999999999"
  },
  "items": [
    {
      "codigo": "CAFE-01",
      "descripcion": "Café de especialidad 250 g",
      "cantidad": 1,
      "precioUnitario": 8.5,
      "iva": 15
    }
  ],
  "formaPago": "01"
}

Soporte del API: [email protected], incluido en el precio. Cita el requestId del error o la cabecera X-Request-Id de la respuesta.

Los mantenimientos programados se avisan por correo con 24 horas de anticipación.