Ir al contenido
BiguAyuda
Facturación electrónica

Facturación por API

Integrá la facturación electrónica de Uruguay con la API incluida en Bigu: emisión, consulta, reintentos y cupo de la tarifa profesional.

Con Bigu Facturas, conectá tu ERP o tienda sin registrar cada venta en la interfaz de Bigu. El alta del negocio, certificado, numeración y habilitación fiscal se completan una vez en Tu negocio › Facturación. El consumo diario puede ser sólo por API. En Facturas, las emisiones API quedan en el registro fiscal del servicio sin crear ventas, caja ni stock; el ERP conserva el registro comercial. En Integra, cada e-Ticket o e-Factura pedido por API crea su venta en Bigu y emite desde ella. La respuesta conserva el estado fiscal, CAE, serie, número y archivos, y suma sale_id para consultar la venta.

EtapaOperacionesResultado que tenés que comprobar
ConectarClave con permisos y consulta de capacidadesEl negocio y el alcance son los correctos
Preparar sin emitirGuardar y validar un borradorReceptor, bases, IVA y total revisados
EmitirEnviar una identidad estable con contenido definitivoPedido registrado; 202 todavía no es aceptación
Seguir y entregarConsultar el estado, descargar y enviarAceptación fiscal y entrega verificadas por separado

Si buscás el recorrido de pantalla, seguí Preparar, revisar y emitir un comprobante. Esta referencia describe la integración para quienes desarrollan el sistema que llama a Bigu.

Primeros pasos

1. Creá la clave

Abrí Tu negocio › Facturación. En la tarjeta Conectá tu sistema, elegí la fila API de facturación para abrir su modal. Quien administra la facturación del negocio puede crear la clave con el permiso Administrar facturación electrónica (fiscal.manage): no depende sólo de ser propietario.

Escribí el Nombre de la integración, dejá Consultar comprobantes y archivos marcado y marcá Emitir comprobantes. Si querés probar sin emitir, marcá también Preparar borradores, clientes y conceptos. Después elegí Crear clave. Al crearla, Bigu muestra la clave una sola vez y el aviso Guardá esta clave en tu servidor. Se muestra una sola vez. Guardala antes de cerrar con Ya la guardé.

Configurá BIGU_API_KEY como variable de entorno del servidor de tu integración. Los comandos siguientes leen esa variable; no escribas la clave en el comando, en el navegador ni en el repositorio.

2. Emití un comprobante

Antes de enviar, completá el alta fiscal y reemplazá la fecha, el receptor, los conceptos y los importes del ejemplo por los del comprobante real. Cada emisión se transmite a DGI. Elegí un external_id por comprobante y conservá el mismo pedido para recuperarlo.

Este pedido emite un comprobante real en producción. Consume numeración y cupo. Para anular el comprobante emitido, tenés que emitir una nota de crédito, que también consume numeración y cupo.

Como primera prueba segura, guardá un borrador con POST /api/v1/fiscal/borradores y validá su revisión con POST /api/v1/fiscal/borradores/validar. Ambas operaciones requieren fiscal:prepare; no emiten, no reservan numeración ni consumen cupo. Seguí Borradores y revisión fiscal para preparar el UUID, el documento y la revisión.

: "${BIGU_API_KEY:?Configurá BIGU_API_KEY en tu servidor}"
curl --include --request POST 'https://bigu.ai/api/v1/facturas' \
  --header "Authorization: Bearer $BIGU_API_KEY" \
  --header 'Content-Type: application/json' \
  --data-binary @- <<'JSON'
{
  "external_id": "venta-2026-001",
  "tipo_cfe": 111,
  "fecha": "2026-10-06",
  "contado": true,
  "moneda": "UYU",
  "receptor": {
    "tipo_documento": 2,
    "documento": "214844360018",
    "razon_social": "Receptor de ejemplo",
    "direccion": "Domicilio del receptor",
    "ciudad": "Montevideo"
  },
  "lineas": [
    {
      "nombre": "Servicio",
      "cantidad": 1,
      "unidad_medida": "un",
      "precio_unitario": 100000,
      "categoria_iva": "tasa_basica"
    }
  ]
}
JSON

La respuesta de ejemplo es HTTP 202. Confirma que se encoló el pedido; todavía no significa aceptación de DGI. nueva distingue un envío nuevo de un reintento.

{
  "external_id": "venta-2026-001",
  "estado": "pendiente",
  "nueva": true
}

3. Consultá el estado

Usá el mismo identificador y la misma clave para consultar:

curl --include 'https://bigu.ai/api/v1/facturas/venta-2026-001' \
  --header "Authorization: Bearer $BIGU_API_KEY"

Esta es una respuesta de ejemplo HTTP 200 cuando DGI ya aceptó el comprobante. serie y numero los asigna el motor fiscal; no los elegís al emitir. Una consulta devuelve nueva: false.

{
  "external_id": "venta-2026-001",
  "estado": "aceptada",
  "nueva": false,
  "serie": "A",
  "numero": 123
}

Mientras esté pendiente, firmada o enviada, consultá cada cinco segundos y después con espera creciente. Revisá motivo cuando haya observaciones o un rechazo; un estado en_duda requiere conciliación antes de repetir o entregar el comprobante.

Planes y límites

La API está incluida junto con la web en Bigu Facturas, sin un adicional por usar ambos canales. La oferta estándar no tiene límite de comprobantes; la tarifa profesional incluye hasta cinco por mes calendario, compartidos con la web, el asistente y las tareas programadas. Consultá las condiciones y precios vigentes.

En Integra, cada nuevo e-Ticket o e-Factura pedido por API genera una venta y se emite desde ella, también si sólo incluye servicios. La emisión y su consulta devuelven además sale_id: abrí esa venta en Bigu para consultar su cuenta, cobros y comprobante. El mismo external_id conserva una sola venta y un solo comprobante, incluso si DGI falla o rechaza el envío. En Factura, siguen siendo comprobantes sueltos.

Con contado: true, la venta cobra sólo en UYU, con el medio de pago y la caja o cuenta por defecto de Nueva venta, si ese medio está habilitado. Si no puede registrar el cobro —otra moneda, efectivo con la caja sin su primera apertura o un cheque sin sus datos— queda a cobrar. Con contado: false, queda a cobrar en la cuenta del cliente. Si no hay cobro y falta el receptor, responde 409 sale_credit_customer_required sin guardar la venta ni el comprobante. Un e-Ticket sin receptor se admite cuando queda totalmente cobrado.

El receptor se busca por RUT o CI; si no existe, se crea. Si su nombre ya corresponde a otro cliente sin teléfono, se distingue con el documento, por ejemplo María Rodríguez · CI 12345678. Si ese nombre completo también está ocupado, devuelve 409 customer_name_already_exists: revisá la ficha existente.

Las notas de crédito y débito por API quedan como comprobantes sueltos en Integra, incluidos los originales históricos y las facturas externas. Si referencias[0] apunta a un comprobante que tiene venta, devuelve 409 sale_required: corregí desde esa venta para mantener sus saldos y stock. Al anular un comprobante suelto histórico, su nota conserva la sucursal fiscal del original. Las facturas programadas requieren receptor y generan una venta por fecha, sin registrar un cobro.

Si efactura falla después de guardar la venta, la emisión responde 503, con retryable: true, el código del servicio y sale_id. La venta y su posible cobro ya existen: reintentá con el mismo external_id y contenido. Cambiar la identidad puede duplicar la operación. Si falta numeración, resolvé el CAE antes de reintentar. El GET de un CFE todavía sin transmitir responde 200 desde el espejo, con estado: pendiente, sale_id y el motivo; ese estado no confirma que efactura lo haya recibido.

El reintento sólo transmite un comprobante en borrador cuya venta sigue confirmada; los otros estados se devuelven desde el espejo. Si anulaste la venta, responde 409 venta_anulada, con sale_id y retryable: false, sin llamar a efactura. Consultá la venta de origen: cargar un CAE o recuperar el servicio no habilita su emisión.

fecha define la fecha del CFE y el cálculo de los plazos. La venta y el cobro se registran con la hora real; una fecha fiscal de ayer no modifica la caja de ayer.

En otra moneda, el comprobante conserva su moneda y cotización y la venta registra sus importes en UYU. Las correcciones parciales y los comprobantes fiscales de cobranza sobre esas facturas todavía no están disponibles; los cobros comerciales siguen registrándose en la venta.

Cupo de la tarifa profesional

409 fiscal_monthly_limit_reached indica que el negocio alcanzó los cinco comprobantes del mes calendario en su zona horaria. El sexto envío nuevo queda bloqueado antes de transmitir y no cambia la tarifa ni genera un cobro. La persona dueña puede revisar el uso en Ventas y confirmar el cambio a Facturas sin límite desde Suscripción.

El cupo incluye notas de crédito y débito y se comparte entre todos los canales. Los borradores y las vistas previas no consumen cupo; los envíos pendientes reservan su lugar. Un reintento con el mismo identificador y contenido conserva su lugar original. Este cupo comercial es distinto del límite técnico de solicitudes por minuto: una consulta de estado no consume un comprobante.

Acceso

El endpoint de emisión es https://bigu.ai/api/v1/facturas. Consultá el OpenAPI para ver todos los campos y operaciones. El acceso al endpoint no reemplaza el alta fiscal ni los permisos de emisión del negocio.

Abrí Tu negocio › Facturación. En la tarjeta Conectá tu sistema, elegí la fila API de facturación para abrir su modal. Quien administra la facturación del negocio crea la clave allí. La clave se muestra una vez, se almacena como hash y vence a los 90 días. Se envía únicamente como Authorization: Bearer $BIGU_API_KEY. No la incluyas en URLs, código del navegador ni repositorios. Creá una segunda clave antes de revocar la anterior para rotar sin interrupciones. Cada clave accede sólo a su negocio; no se admite business_id en el cuerpo. Límite: 120 solicitudes/minuto por clave, compartido por todas las réplicas. Un 429 incluye Retry-After. Las respuestas no se cachean.

Elegí los permisos de la clave

En el modal API de facturación, que abrís desde la tarjeta Conectá tu sistema, escribí el Nombre de la integración y revisá Permisos de esta conexión antes de elegir Crear clave. Una clave nueva empieza con consulta: para emitir, también tenés que marcar Emitir comprobantes. Guardá la clave en tu servidor antes de cerrar el aviso con Ya la guardé.

PermisoPara qué lo necesita la integración
fiscal:readConsultar comprobantes, estados y archivos
fiscal:preparePreparar borradores, clientes y conceptos
fiscal:issueEmitir comprobantes
fiscal:deliverEnviar comprobantes por correo
fiscal:paymentsRegistrar cobros ya recibidos
fiscal:rulesProgramar emisión y entrega automáticas

Elegí los permisos que requiere esa integración. Si recibís 403 insufficient_scope, revisá qué operación está intentando; no se corrige repitiendo la misma solicitud. Creá una clave con el alcance necesario, actualizá la integración y después revocá la anterior.

Revocar o rotar una clave

En el modal API de facturación, que abrís desde la tarjeta Conectá tu sistema, localizá la integración por su nombre, prefijo y vencimiento. Elegí Revocar para quitarle acceso y comprobá Clave revocada. Esa integración ya no puede acceder. No es necesario esperar a que venza: las solicitudes siguientes dejan de estar autorizadas.

Para rotar sin interrumpir tu sistema, creá otra clave con sus permisos, guardala donde corre la integración, comprobá la conexión y recién después revocá la anterior. Una clave guardada no vuelve a mostrarse; si perdiste el secreto, necesitás crear otra. Quien administra la facturación puede revocar la clave incluso cuando se restringe el acceso operativo del negocio.

Emitir

Los importes son enteros en centésimos y los precios incluyen IVA: 100000 = $1.000, salvo con precios_sin_iva (más abajo). Las cantidades admiten hasta tres decimales. Máximo 200 líneas y 256 KiB por solicitud. Tipos: 101 e-Ticket; 111 e-Factura; 102/112 notas de crédito; 103/113 notas de débito. En e-Factura y sus notas son obligatorios el RUT, razón social, dirección y ciudad del receptor. Las notas usan una referencia con tipo_cfe, serie, numero, fecha y razon del original. El original debe estar aceptado en este negocio y tener la misma moneda y familia. El crédito acumulado, incluidas notas pendientes, no puede superar su importe. Las referencias globales no están disponibles en esta API. El motor valida las reglas fiscales; la API no permite elegir serie, número ni firma. Categorías IVA: tasa_basica, tasa_minima, exento, no_facturable, exportacion. Monedas: UYU, USD, EUR, ARS, BRL. Fuera de UYU enviá tipo_cambio como string decimal (por ejemplo "40.500"), la cotización fiscal en pesos por unidad, con hasta tres decimales. Consultá el esquema OpenAPI para los campos opcionales.

Código del catálogo y sucursal opcionales

El contrato OpenAPI 1.5.0, bajo las mismas rutas /api/v1, conserva estos campos opcionales y agrega sale_id a los errores de transmisión de una venta registrada:

CampoUso
lineas[].codigoEn Integra, código exacto del catálogo del negocio: SKU o código de barras para un producto, UUID para un servicio. Cuando coincide, el nombre sale del catálogo aunque envíes otro nombre. Los productos usan su unidad del catálogo; los servicios conservan la unidad_medida pedida, por ejemplo 1,5 hora. categoria_iva tiene que coincidir con el ítem: si difiere, responde 409 catalog_tax_mismatch con la tasa del catálogo, sin venta ni CFE. Si es producto, mueve stock como Nueva venta. Completá nombre, precio y demás campos requeridos. Sin código, o sin coincidencia, usa la descripción, precio e IVA enviados como concepto y no crea un producto. Los productos de stock requieren cantidad entera; un código ambiguo se rechaza.
sucursalUUID de la sucursal activa del negocio, para la venta y la emisión. Sin ella usa la principal. Otra sucursal o una inactiva devuelve 400 invalid_branch. Su código y domicilio fiscal se leen de Bigu; no se envían en el pedido. Una sucursal sin datos de DGI no puede emitir.

Por ejemplo, podés sumar "codigo": "SKU-001" a una línea y "sucursal": "UUID_DE_TU_SUCURSAL" al documento. Conservá ambos campos al reintentar; cambiar cualquiera con el mismo external_id devuelve 409 idempotency_conflict.

Precios sin IVA

El contrato OpenAPI 1.6.0 agrega precios_sin_iva, opcional. Con "precios_sin_iva": true, precio_unitario y descuento de cada línea van sin IVA y el comprobante suma el IVA de cada tasa, calculado una sola vez sobre la suma de sus líneas y redondeado al centésimo. El comprobante muestra tu precio sin IVA y el IVA aparte. Sin el campo, los precios llevan el IVA adentro, como siempre, aunque en Bigu hayas elegido Mis precios son sin IVA. En Integra, la venta que se registra guarda esos precios sin IVA y su total incluye el IVA sumado. Conservá el campo al reintentar: cambiarlo con el mismo external_id devuelve 409 idempotency_conflict.

Reintentos sin duplicados

Si se pierde la respuesta del pedido venta-2026-001, conservá ese identificador y el mismo contenido. Cambiar a venta-2026-002 sería otro pedido, no la recuperación del primero.

La respuesta se perdió; la identidad se conserva

Un pedido de emisión · external_id: venta-2026-001

Primer intento
Identidad
venta-2026-001
Precio con IVA
100000 centésimos · $ 1.000 UYU
Respuesta recibida
Ninguna: conexión interrumpida
Recuperación
Identidad
venta-2026-001, la misma
Contenido
El mismo que se envió
Resultado a consultar
El estado del pedido original
Cambiar a venta-2026-002 prepararía otro pedido. La falta de respuesta no demuestra que el primero no exista.

external_id es obligatorio: 1–80 letras, números, guiones o guiones bajos. Conservá un identificador por comprobante, incluso si rotás la clave. La primera solicitud válida reserva el identificador y congela su contenido. Repetir el mismo pedido devuelve la misma emisión; cambiar el contenido devuelve 409 idempotency_conflict. Si la red falla o devuelve 503, reintentá el MISMO pedido. No generes un external_id nuevo para resolver un timeout: duplicaría la operación. Si corregís datos de un pedido reservado que nunca se emitió, usá una identidad nueva sólo después de conciliar su estado. Una fecha omitida se resuelve cuando el motor acepta el pedido; enviá fecha explícita para preservar la fecha comercial.

Consultar y descargar

202 significa encolado, NO aceptado por DGI. La respuesta contiene external_id, estado, nueva y, cuando existen, serie, numero y motivo. En Integra también contiene sale_id, la venta generada por ese pedido. Consultá GET /api/v1/facturas/EXTERNAL_ID cada 5 segundos y luego con espera creciente. Estados en curso: pendiente, firmada, enviada. Otros estados: aceptada, observada, rechazada, invalida, en_duda. No entregues como aceptado un comprobante pendiente, rechazado o en_duda. Cobros, saldos, entregas y exportación por esta API admiten sólo el estado aceptada. Un comprobante observada queda fuera de esas operaciones y no cambia esperando: revisá el motivo y conciliá la corrección necesaria. Un estado en_duda requiere conciliación antes de entregar o repetir el envío. No hay webhooks en v1; la integración consulta el estado.

GET /api/v1/facturas/EXTERNAL_ID/pdf descarga la representación impresa. GET /api/v1/facturas/EXTERNAL_ID/xml descarga los bytes exactos del XML firmado. Ambas rutas exigen la misma autenticación. Antes de firmar devuelven 409. El XML puede descargarse para diagnóstico aunque DGI lo rechace: disponer del archivo no demuestra aceptación. El PDF conserva el logo y presentación del negocio.

Errores

Las respuestas de error usan este formato. Por ejemplo, cambiar el contenido de un pedido reservado devuelve HTTP 409:

{
  "ok": false,
  "error": {
    "code": "idempotency_conflict",
    "message": "Ese external_id ya pertenece a otro contenido. Reintentá el pedido original o usá uno nuevo.",
    "retryable": false,
    "reference": "solicitud-001"
  }
}

retryable: true indica que podés reintentar la misma solicitud con espera creciente, conservando la identidad y el contenido. Un 429 incluye Retry-After: 60: esperá ese tiempo. retryable: false exige revisar la causa antes de volver a enviar; esperar por sí solo no corrige los datos, el permiso ni el plan. Si estás esperando la firma o aceptación, consultá el estado antes de repetir la operación.

La tabla reúne los códigos de la API y los que conserva del servicio fiscal y de los controles compartidos. El HTTP es el que recibe tu integración; un problema de autorización entre Bigu y el servicio fiscal se informa como 503, aunque tu clave sea válida.

Cuando falla la transmisión de una venta ya guardada, el mismo código fiscal puede llegar con 503, retryable: true y sale_id. Antes de que exista la venta, conserva su HTTP de validación. Guiate por el HTTP y retryable de esa respuesta y recuperá siempre la misma identidad.

Al emitir con POST /api/v1/facturas, un RUT inválido devuelve 400 invalid_request. 422 invalid_customer_rut corresponde a la preparación de clientes o reglas fiscales, no a esa emisión directa.

CódigoHTTPQué significaretryableQué hacer
bad_json400El cuerpo no es JSON válido.falseCorregí la sintaxis y enviá Content-Type: application/json.
invalid_request400Los campos o sus combinaciones no cumplen el contrato.falseRevisá el OpenAPI, el RUT y la cotización; no agregues campos fuera del esquema.
invalid_id400El external_id de la ruta no es válido.falseUsá entre 1 y 80 letras, números, guiones o guiones bajos.
invalid_query400Los filtros o el límite no son válidos.falseRevisá fechas, filtros y el límite de la consulta.
invalid_cursor400El cursor no se puede interpretar.falseUsá el next_cursor de la respuesta anterior y conservá los filtros.
invalid_draft_request400El UUID, la revisión o el cuerpo del borrador no son válidos.falseRevisá id, revision y document; consultá el borrador actual.
invalid_draft400El borrador no tiene todos los datos fiscales o una fecha explícita.falseCompletá el documento y fecha antes de validar.
invalid_customer400La ficha de cliente asociada no pertenece al negocio o no admite una nueva asociación.falseRevisá la ficha y elegí un cliente activo del negocio; no modifiques el receptor histórico para resolver la asociación.
catalog_product_unavailable400El producto identificado por product:UUID no está disponible en el negocio.falseVolvé a consultar el catálogo y revisá la línea antes de emitir.
fiscal_rule_document_unsupported400La plantilla no es un e-Ticket o una e-Factura sin referencias.falseProgramá un tipo 101 o 111 sin referencias; prepará las notas y correcciones manualmente desde el original.
rule_currency_unsupported400La regla usa una moneda que no admite la emisión automática.falseUsá UYU o USD; prepará las otras monedas por borrador con su cotización.
rule_exchange_rate_owned400La regla en USD trae una cotización fija.falseOmití tipo_cambio; cada ocurrencia obtiene la cotización del BCU.
rule_date_owned400La plantilla define identidad, emisión o vencimiento de una ocurrencia.falseOmití external_id, fecha y fecha_vencimiento dentro de document; usá el calendario de la regla.
rule_ended400La fecha final no deja ninguna ocurrencia futura.falseRevisá las fechas del calendario.
unauthorized401La clave no es válida, venció o fue revocada.falseRevisá la variable de entorno y el encabezado Bearer; creá otra clave si hace falta.
insufficient_scope403La clave no tiene el permiso de la operación.falseCreá una clave con el permiso necesario, actualizá la integración y revocá la anterior.
rule_owner_required403No se pudo verificar al autor de la regla con permiso fiscal vigente.falseRevisá el acceso y el permiso de quien creó la clave o la regla.
not_found404El comprobante o borrador no existe en el negocio de la clave.falseComprobá el identificador y el negocio; buscá el pedido antes de crear otro.
delivery_not_found404No existe esa entrega en el negocio.falseConsultá con el UUID original de la entrega.
business_missing404El negocio no está disponible para preparar la entrega.falseRevisá el acceso al negocio y contactá a soporte con la referencia.
rule_not_found404No existe esa regla fiscal en el negocio.falseRecuperá la regla por su UUID original.
sale_required409La referencia de la nota identifica un comprobante con venta en Integra.falseCorregí desde la venta de origen.
service_correction_required409La nota referencia un comprobante vinculado a una venta o trabajo.falsePrepará la corrección desde esa venta o trabajo para conservar sus efectos operativos.
fiscal_correction_origin_unavailable409No se pudo verificar un único original vigente del mismo negocio y de la familia fiscal correspondiente.falseRevisá tipo, serie y número; volvé a preparar la nota desde el original. No cambies el identificador para reintentar.
fiscal_correction_receiver_changed409El receptor de la nota difiere del receptor guardado en el original.falseConservá los datos históricos del receptor; volvé a preparar la nota desde el comprobante original.
fiscal_correction_branch_changed409La sucursal elegida difiere de la sucursal fiscal del original.falsePrepará la nota desde el original para conservar su sucursal fiscal.
fiscal_correction_customer_changed409La asociación de cliente de la nota difiere de la del original.falseVolvé a preparar la nota desde el original; conservá su asociación, incluso cuando no tiene una ficha de cliente.
sale_credit_customer_required409Falta receptor para una venta sin cobro o una factura programada integrada.falseCompletá el receptor antes de emitir o activar la regla.
catalog_tax_mismatch409El IVA pedido no coincide con el ítem identificado por código.falseUsá la tasa del catálogo indicada en el mensaje o revisá el ítem antes de facturar.
invalid_branch400La sucursal no está activa o no pertenece al negocio de la clave.falseUsá el UUID de una sucursal activa del negocio u omití el campo para usar la principal.
sale_customer_archived409El receptor coincide con un cliente archivado.falseReactivalo desde Clientes antes de venderle.
idempotency_conflict409El external_id ya está reservado para otro contenido.falseConsultá el estado y recuperá el pedido original; no cambies la identidad para resolver un timeout.
emitter_missing409Falta el emisor fiscal del negocio.falseCompletá el alta en Tu negocio › Facturación.
fiscal_document_authority_changed409La identidad o el acceso fiscal actual no coincide con el pedido guardado.falseConservá el identificador original y revisá el acceso antes de reintentar.
fiscal_test_access_inactive, consumidor_no_habilitado409El acceso delegado de un entorno de prueba está revocado o ya no corresponde a la identidad habilitada.falseRevisá el acceso de prueba; no cambies el identificador ni vuelvas a crear el pedido.
fiscal_test_branch_unavailable, consumidor_sucursal_no_permitida400Un acceso delegado de prueba recibió una sucursal distinta de la casa principal del emisor.falseOmití la sucursal. Este acceso no permite modificar los locales del emisor.
fiscal_test_business_required, consumo_solo_prueba403La solicitud no cumple las restricciones del acceso delegado de prueba.falseRevisá el entorno y el negocio autorizado. Estos códigos no habilitan una función de producción.
consumidor_no_existe404No se pudo verificar la delegación de prueba para ese negocio y emisor.falseConsultá a soporte con la referencia del error; no uses la identidad de otro negocio.
draft_revision_conflict409El borrador cambió, no está validado o ya se envió.falseConsultá la revisión actual; volvé a validar sólo si corresponde y recuperá el mismo envío si ya comenzó.
service_payment_required409El comprobante pertenece a una venta o trabajo cuyos cobros se gestionan desde su operación.falseConsultá o registrá el cobro desde la venta, el trabajo o A cobrar.
document_not_accepted409El estado no es aceptada, el único admitido para cobros, saldos y entregas.falseSi sigue pendiente, consultá su estado. Si está observada, esperar no lo resuelve: revisá el motivo y conciliá la corrección necesaria.
payment_idempotency_conflict409El UUID del pago ya corresponde a otros datos.falseRecuperá el pago original y conciliá el saldo.
payment_outside_balance409El pago usa otra moneda o supera el saldo del comprobante.falseCorregí moneda e importe después de consultar el saldo.
delivery_idempotency_conflict409El UUID de entrega ya corresponde a otro comprobante o destinatario.falseConsultá la entrega original antes de preparar una distinta.
rule_idempotency_conflict409El UUID ya corresponde a otra regla o plantilla.falseConsultá la regla original antes de autorizar otra.
fiscal_monthly_limit_reached409Se agotó el cupo de comprobantes del mes calendario.falseRevisá el uso y el cambio a Facturas sin límite en Suscripción; los reintentos conservan su lugar.
body_too_large413El cuerpo supera el tamaño permitido.falseReducí el pedido; la emisión admite hasta 256 KiB y 200 líneas.
attachments_too_large413Los adjuntos superan el límite de 12 MiB de entrega por correo.falseRevisá los archivos y el logo del emisor; contactá a soporte si no podés reducirlos.
invalid_customer_rut422El RUT del cliente o de la plantilla de una regla fiscal no es válido.falseCorregí el RUT y su dígito verificador antes de guardar o autorizar la regla; la emisión directa devuelve 400 invalid_request.
customer_document_required422El e-Ticket pasa el tope de DGI para no identificar al cliente: 5.000 UI de neto, con la UI de la fecha del comprobante.falseMandá el receptor con la cédula u otro documento que no sea RUT; con RUT corresponde una e-Factura. No se reservó nada.
receptor_country_required422El receptor trae un pasaporte, un DNI u otro documento extranjero sin receptor.pais.falseMandá receptor.pais con el código del país que emitió el documento: Bigu no usa el país del negocio. No se reservó nada.
receptor_country_invalid422El DNI del receptor viene con un país que no emite DNI.falseRevisá receptor.pais o el tipo de documento. No se reservó nada.
rate_limited429La clave superó 120 solicitudes por minuto.trueEsperá Retry-After y reintentá con la misma identidad y contenido.
unavailable503No se pudo completar la solicitud.trueConsultá el estado y reintentá el mismo pedido con espera creciente.
email_not_configured503El servicio de correo no está configurado.trueContactá a soporte y conservá el UUID de la entrega para recuperarla.
fiscal_exchange_rate_unavailable503No se pudo verificar la cotización del BCU.trueReintentá más tarde con el mismo UUID de regla.
datos_invalidos400, 503El motor fiscal rechazó los datos del comprobante.false en 400; true en 503Revisá los campos, impuestos, receptor y referencias del pedido.
no_existe404, 503El servicio fiscal no encuentra el comprobante.false en 404; true en 503Recuperá el estado del pedido; contactá a soporte si Bigu conserva el registro.
emisor_no_habilitado, ingreso_no_autorizado, familia_fiscal_no_lista409, 503Falta habilitación fiscal del emisor o de la familia de comprobantes.false en 409; true en 503Revisá los requisitos pendientes en Tu negocio › Facturación.
emisor_dado_de_baja409, 503El emisor está dado de baja.false en 409; true en 503Contactá a soporte para revisar su reactivación.
cae_tipo_sin_rango409, 503El tipo de comprobante no tiene un rango CAE.false en 409; true en 503Gestioná y cargá la numeración correspondiente antes de emitir.
cae_tipo_vencido409, 503El CAE del tipo de comprobante venció.false en 409; true en 503Cargá un CAE vigente para ese tipo.
cae_tipo_agotado409, 503Se agotó el rango CAE del tipo de comprobante.false en 409; true en 503Gestioná un nuevo rango y revisá la numeración.
cae_tipo_no_disponible409, 503El rango CAE no está disponible para emitir.false en 409; true en 503Revisá la vigencia y disponibilidad de la numeración.
referencia_invalida409, 503La nota no corresponde a un original aceptado o excede su importe disponible.false en 409; true en 503Revisá negocio, moneda, familia, referencia y crédito acumulado del original.
fecha_regimen_faltante409Falta la fecha de incorporación o resolución DGI para el PDF.falseCompletá ese dato en la presentación del emisor y volvé a descargar.
not_signed, todavia_no409Aún no hay XML firmado o el estado no permite obtener el archivo.falseConsultá el estado; si fue rechazado o inválido, revisá el motivo.
sin_numeracion, no_habilitado503El servicio usa un código fiscal anterior para numeración o habilitación faltante.trueResolvé el requisito fiscal y reintentá con el mismo external_id; si trae sale_id, la venta ya está registrada.
readiness_no_disponible, servicio_caido503No se pudo consultar o completar una operación del servicio fiscal.trueConsultá el estado y reintentá la misma solicitud con espera creciente.
permiso_insuficiente, no_autorizado503El servicio fiscal rechazó el acceso de Bigu.trueContactá a soporte con la referencia; rotar tu clave no corrige esa conexión.
salesperson_unavailable403El vendedor elegido no está activo en el equipo del negocio.falseElegí una persona activa con vendedor_persona_id.
customer_archived, customer_not_found403El cliente está archivado o ya no existe.falseRevisá su ficha y el UUID antes de actualizarlo.
customer_phone_already_exists403El teléfono del cliente coincide con otra ficha activa o archivada.falseRevisá el cliente existente antes de cambiar o fusionar datos.
customer_email_already_exists403Sin teléfono, el email del cliente coincide con otra ficha activa o archivada.falseRevisá el cliente existente antes de cambiar o fusionar datos.
customer_name_already_exists409Sin teléfono ni email, el nombre, incluso desambiguado con el documento, coincide con otro cliente sin teléfono.falseRevisá esa ficha antes de cambiar o fusionar datos.
customer_identity_changed403La identidad del cliente cambió mientras POST /api/v1/fiscal/clientes lo editaba.falseVolvé a consultar la ficha y enviá tu actualización sobre la identidad vigente.
product_not_found403El concepto que se intenta actualizar ya no existe.falseConsultá el catálogo y revisá el UUID del concepto.
fiscal_subscription_missing403Falta el contrato comercial para reservar el comprobante.falseRevisá la suscripción del negocio antes de emitir.
commercial_feature_missing403El plan no incluye la operación.falseRevisá los permisos comerciales de tu plan en Suscripción.
commercial_feature_writes_disabled403La suscripción está disponible sólo para consulta.falseRevisá Suscripción y contactá a soporte antes de intentar nuevas escrituras.
sale_product_not_found, product_not_offered, sale_service_unavailable, service_not_offered403Un ítem de catálogo ya no está disponible para venderlo en esa sucursal.falseRevisá el catálogo y su disponibilidad en la sucursal antes de emitir.
sale_credit_limit_exceeded403La venta supera el tope de fiado del cliente.falseRegistrá el cobro recibido o revisá el tope del cliente.
stock_location_required403No hay una ubicación de stock activa única para la sucursal.falseRevisá las ubicaciones de la sucursal; la API no elige entre varias.
sucursal_sin_codigo_dgi403Falta el código o domicilio fiscal de la sucursal.falseCompletá los datos fiscales del local antes de emitir.
venta_anulada409La venta del comprobante ya está anulada; la respuesta incluye sale_id.falseConsultá la venta de origen; no reintentes su emisión.
capability_inactive, capability_needs_setup, capability_paused403Una herramienta necesaria para registrar la venta o su cobro no está operativa.falseActivala, completá su preparación o retomala desde Tu negocio › Herramientas; para efectivo, abrí la caja del día.
capability_entitlement_missing, capability_writes_disabled, capability_disabled, capability_not_published, capability_not_in_rollout403Una función de la venta integrada no está disponible para nuevas operaciones.falseRevisá el plan y la disponibilidad de la herramienta con soporte.
forbidden, business_access_removed403Falta el acceso o permiso vigente de la persona que autoriza la operación.falseRevisá el acceso y los permisos del equipo.
business_suspended, account_suspended403El negocio o la cuenta está suspendido.falseContactá a soporte para revisar el acceso.
policy_missing_profile, policy_catalog_mismatch403Falta el perfil del negocio o no coincide con el catálogo vigente.falseContactá a soporte para revisar el perfil antes de volver a enviar.
policy_invalid_configuration, policy_invalid_capability_states, policy_invalid_lifecycle403La configuración de la función no permite autorizar la operación.falseContactá a soporte con la referencia de la solicitud.
policy_invalid_commercial_plan, policy_invalid_entitlement_grant, policy_invalid_subscription, policy_missing_commercial_contract403El control comercial del negocio no pudo validar su contrato.falseRevisá Suscripción y contactá a soporte si los datos parecen correctos.
policy_persistence_unavailable403No se pudo leer el estado necesario para autorizar la operación.falseContactá a soporte; este código no habilita un reintento automático.

Guardá x-request-id y error.reference para soporte. No registres la clave ni datos fiscales en logs públicos. Si recibís un código más específico del servicio fiscal, conservá también el HTTP, message y retryable al consultar a soporte.

Descubrir y recuperar

GET /api/v1/fiscal/capacidades informa los permisos de la clave y las operaciones disponibles. GET /api/v1/fiscal/emisor consulta la habilitación actual, certificado y requisitos por tipo de comprobante. Un fallo del servicio se informa como error; nunca se interpreta como habilitación.

GET /api/v1/facturas?query=CLIENTE&limit=20 busca por identificador externo, documento o razón social. La respuesta contiene items y next_cursor. Pasá el cursor en la consulta siguiente conservando los filtros. from es la fecha de registro inclusiva y to exclusiva, ambas ISO 8601 con zona horaria. El listado incluye pedidos conservados antes de transmitir: consultá su status_url para conocer el resultado fiscal. La presencia en el listado no demuestra emisión ni aceptación.

Las claves anteriores conservan consulta y emisión. Una clave restringida a fiscal:read puede consultar y descargar, pero una emisión devuelve 403 insufficient_scope sin reservar el pedido.

Borradores y revisión fiscal

Los borradores se comparten entre la web, la API y el MCP del mismo negocio. Guardar no emite ni reserva numeración. Podés guardar contenido incompleto; validar exige todos los datos fiscales y fecha explícita en formato YYYY-MM-DD. fecha_vencimiento es opcional y no puede ser anterior a la emisión.

  1. Generá un UUID y conservá ese id antes de llamar a POST /api/v1/fiscal/borradores. Enviá { "id": "UUID", "revision": 0, "document": { ... } }. El documento usa los campos del pedido de emisión; Bigu asigna external_id como draft_UUID.
  2. Para editar, enviá el mismo id y la última revision devuelta. Cada guardado aumenta la revisión e invalida la revisión fiscal anterior.
  3. Llamá a POST /api/v1/fiscal/borradores/validar con id y revision. Obtendrás bases, IVA y total en centésimos, calculados por el motor fiscal real. Esta respuesta no significa emisión ni aceptación de DGI.
  4. Emití con POST /api/v1/fiscal/borradores/emitir, usando el mismo id y revision. El contenido queda congelado antes del envío al servicio fiscal.
  5. Confirmá el resultado en GET /api/v1/facturas/draft_UUID. Ante una interrupción, consultá y reintentá la misma identidad; no crees otro borrador para repetir el envío.

GET /api/v1/fiscal/borradores lista borradores con limit y cursor; continuá con next_cursor para recuperar todos. GET /api/v1/fiscal/borradores/UUID recupera el contenido y la revisión actual. Un 409 draft_revision_conflict exige volver a consultar: puede haber una edición concurrente, una revisión sin validar o una emisión ya iniciada. Un borrador enviado no se edita.

Guardar y validar requieren fiscal:prepare; emitir requiere fiscal:issue; consultar requiere fiscal:read. Las claves anteriores conservan sus permisos originales de consulta y emisión; creá una nueva clave con preparación para usar borradores.

Observaciones y vencimiento

nota permite hasta 1000 caracteres de observaciones comerciales por comprobante. Queda congelada al emitir y aparece en el PDF; no forma parte del XML fiscal ni cambia los impuestos. La nota general del negocio se configura por separado en la presentación del emisor.

fecha_vencimiento se conserva en el CFE y se muestra en su PDF. Tanto la fecha como las observaciones se revisan antes de emitir; editar un borrador invalida su revisión anterior.

Clientes y conceptos

La API permite buscar y mantener los clientes y conceptos del negocio con permisos de preparación fiscal. Reutiliza el catálogo y las identidades existentes sin conceder stock ni gestión general.

GET y POST /api/v1/fiscal/clientes consultan o guardan destinatarios; GET y POST /api/v1/fiscal/conceptos hacen lo mismo con los conceptos. Para recuperar una escritura consultá el mismo id; para recorrer una búsqueda, conservá sus filtros y continuá hasta agotar next_cursor. El detalle de campos, actualización parcial y permisos está en la guía enlazada.

Al crear o editar un cliente sin teléfono, un email repetido devuelve customer_email_already_exists sin guardar el cambio: revisá la ficha existente o usá otro email. Si esa ficha está archivada, reactivala antes de elegirla. Esta regla corresponde al alta y la edición; el traspaso de planillas y otros sistemas conserva sus propias reglas de conciliación.

Entrega, cobros y resúmenes

La guía de cobros y entrega cubre el formato y la recuperación de estas operaciones:

OperaciónRuta y resultado
Registrar un pago recibidoPOST /api/v1/fiscal/cobros, con UUID estable, importe, moneda y fecha con zona horaria
Consultar cobros y saldoGET /api/v1/fiscal/saldos?external_id=ID, para ese comprobante
Leer los importes firmadosGET /api/v1/fiscal/resumen?external_id=ID, desde el XML histórico
Exportar por moneda e impuestoGET /api/v1/fiscal/exportar, recorriendo todas las páginas con sus filtros
Preparar una entrega por correoPOST /api/v1/fiscal/entregas, con UUID, comprobante aceptado y destinatario
Seguir o conciliar la entregaGET /api/v1/fiscal/entregas?id=UUID, antes de decidir si hace falta recuperar el envío

Cada efecto requiere su scope específico y un identificador estable. Un correo recibido por el proveedor todavía no equivale a entrega confirmada. Registrar un pago anota dinero que ya recibiste y no ejecuta una cobranza.

Reglas y ocurrencias automáticas

Con fiscal:rules, POST /api/v1/fiscal/reglas guarda una plantilla y autoriza su calendario semanal o mensual. Conservá un UUID por regla y revisá los campos de fecha, zona horaria, vencimiento y correo en Facturación automática antes de activarla.

POST /api/v1/fiscal/reglas/estado recibe el id y status: paused o active para pausar o reanudar. Pausar impide trabajo nuevo; una ocurrencia ya iniciada puede terminar. Revocar la clave que creó la regla no la pausa.

En Integra, la regla exige receptor. Las reglas antiguas activas con fechas vencidas quedan pausadas en este despliegue y sus ocurrencias pendientes anteriores quedan omitidas, con motivo. Reanudar lleva la próxima fecha a hoy o después, respetando la frecuencia y la última fecha: no emite esos períodos atrasados. Factura conserva su recorrido anterior.

GET /api/v1/fiscal/reglas permite listar o recuperar por id. GET /api/v1/fiscal/reglas/ocurrencias consulta el progreso de las fechas y acepta id para filtrar una regla. Ambas consultas usan limit, cursor y next_cursor. Agotá las páginas y consultá el comprobante de cada ocurrencia antes de darla por emitida o aceptada. Las consultas requieren fiscal:read.

En esta página