facturaBoEmitirFactura
Descripción
Sección titulada «Descripción»Emite una factura electrónica de Bolivia con factura.bo (SIAT del SIN): valida los datos y la envía al SIAT. Admite 12 sectores (compra-venta, alquiler, exportación, turismo, tasa cero, educación, servicio básico, ICE, hotel, hospital…). Devuelve el CUF, el número, el estado y los enlaces al PDF, XML y ticket. Protege contra duplicados con la clave de idempotencia.
Forma parte del Hub Fiscal de Bolivia como alternativa a la conexión directa con el SIAT: factura.bo (SimplifyIT S.R.L.) es un proveedor que construye y firma el XML y lo envía al SIN. Nodo: «Emitir factura».
Configuración
Sección titulada «Configuración»| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| credentials_id | credentials | Sí | Credencial facturabo |
| document_sector | select | No | Sector — Los datos propios de cada sector van en «Campos del sector». Obligatorios por sector → 1 Compra y venta · 2 Alquiler de bien inmueble (periodo_facturado) · 3 Exportación de bienes · 4 Exportación en libre consignación · 6 Turismo y hospedaje (Ley 292) (fecha_ingreso, cantidad_huespedes, cantidad_habitaciones) · 8 Tasa cero · 11 Educativo · 13 Servicio básico (mes, gestion, numero_medidor, domicilio_cliente, consumo_periodo) · 14 Alcanzada por el ICE · 16 Hotel (fecha_ingreso, cantidad_huespedes, cantidad_habitaciones) · 17 Hospital y clínica · 28 Exportación de servicios · 1, 2, 3, 4, 6, 8, 11, 13, 14, 16, 17, 28 |
| branch_code | number | No | Sucursal (código SIAT) — 0 = casa matriz. Vacío = la sucursal por defecto de la credencial |
| point_of_sale_code | number | No | Punto de venta (código SIAT) — 0 = punto principal. Vacío = el de la credencial |
| economic_activity | text | No | Actividad económica del emisor (CAEB) — Opcional si todas las líneas la traen o hay una por defecto |
| client_document_type | select | No | Tipo de documento del cliente — 5, 1, 2, 3, 4 |
| client_document_number | text | Sí | Número de documento — NIT de 7 a 15 dígitos (se aceptan puntos y guiones). 0 = consumidor final |
| client_business_name | text | No | Razón social / nombre — Obligatoria con NIT |
| client_email | text | No | Email del cliente — Si se indica, factura.bo le envía el PDF y el enlace público (en sandbox nunca se envían emails) |
| client_complement | text | No | Complemento del CI — Solo con cédula de identidad |
| client_country_code | number | No | País del comprador (código SIAT) — Solo exportaciones (catálogo paises) |
| client_address | text | No | Dirección del comprador — Solo exportaciones |
| payment_method_code | number | No | Método de pago (código SIAT) — 1 efectivo, 2/3 tarjeta, 7 transferencia (catálogo metodos_pago) |
| card_number | text | No | Número de tarjeta — Solo con método de pago 2 o 3. El servicio enmascara siempre los dígitos centrales |
| items | json | Sí | Líneas de la factura (JSON) — Array de líneas: descripcion, cantidad, precio_unitario y opcionales codigo_producto, codigo_sin, unidad_medida, descuento, actividad_economica. Acepta también description, quantity, priceUnit… Lo que falte se toma de los valores por defecto de abajo |
| default_codigo_sin | number | No | Código de producto SIN por defecto — Se aplica a las líneas que no traen codigo_sin (catálogo productos_servicios) |
| default_unit_measure | number | No | Unidad de medida por defecto — 58 = Servicio, 1 = Unidad (catálogo unidades_medida) |
| default_activity | text | No | Actividad económica por defecto (CAEB) — 6 o 7 dígitos. Se aplica a las líneas que no traen actividad_economica |
| sector_fields | json | No | Campos del sector (JSON) — Datos de cabecera propios del sector elegido, con los nombres de factura.bo. Se validan antes de enviar |
| additional_discount | number | No | Descuento adicional (Bs) — Descuento global; se suma a los descuentos de línea |
| currency_code | number | No | Moneda (código SIAT) — 1 = bolivianos, 2 = dólares |
| exchange_rate | number | No | Tipo de cambio — Obligatorio con moneda distinta de bolivianos. Usa el nodo «Tipo de cambio» |
| exception_code | select | No | Código de excepción — "", 1 |
| user | text | No | Usuario / cajero — Se guarda para auditoría |
| legend | text | No | Leyenda — Vacío = la vigente según la actividad económica |
| contingency | boolean | No | Emitir en contingencia (offline) — Requiere un evento de contingencia registrado antes |
| cafc | text | No | CAFC — Solo con contingencia (obligatorio en eventos 5, 6 y 7) |
| invoice_number | number | No | Número de factura manual — Solo para transcribir una factura de talonario, junto con su CAFC |
| issue_date | text | No | Fecha de emisión anterior — ISO 8601 en hora de Bolivia, hasta 48 h atrás, junto con contingencia |
| debug | boolean | No | Incluir el XML del SIAT (diagnóstico) |
| idempotency_mode | select | No | Protección contra duplicados — Con clave, un reintento tras un corte no duplica la factura: la API devuelve la ya emitida (las claves se recuerdan 30 días). Para dos facturas idénticas en un bucle usa una clave manual (p. ej. el id del pedido) · auto, manual, off |
| idempotency_key | text | No | Clave de idempotencia — 1–128 caracteres visibles, sin espacios. Recomendado: el id de la venta |
| include_pdf | boolean | No | Incluir el PDF en base64 |
| include_raw | boolean | No | Incluir la respuesta cruda |
| output_key | text | No | Clave de salida — El resultado se añade a data[clave] sin perder el resto de datos |
Credenciales
Sección titulada «Credenciales»Este módulo requiere una credencial de tipo facturabo con los campos:
- API key: se obtiene en app.factura.bo → Más → API Key
- Entorno: pruebas (sandbox, SIAT piloto) o producción; la clave no lo delata, lo eliges tú
- NIT y código de sistema del SIAT: para sincronizar CUIS/CUFD y catálogos
- Sucursal y punto de venta por defecto: 0 = casa matriz / punto principal
- Secreto de webhooks (
whsec_…): para verificar la firma de los eventos
{ "success": true, "sector": { "code": 1, "name": "Compra y venta", "path": "/v1/facturas" }, "invoice": { "cuf": "2872F7294502332E637FABFBC3654EA82202AD48E0969F14EBEB8AF74", "invoice_number": 12, "state": "EMITIDA", "issued_at": "2026-10-26T10:00:00", "url_public": "https://api.factura.bo/f/2872F7294502332E637FABFBC3654EA82202AD48E0969F14EBEB8AF74", "url_pdf": "https://…/pdf", "url_xml": "https://…/xml", "url_ticket": "https://…/ticket", "siat_response": { "codigoEstado": 908 } }, "urls": { "verify": "https://api.factura.bo/f/2872F7294502332E637FABFBC3654EA82202AD48E0969F14EBEB8AF74", "pdf": "https://api.factura.bo/f/2872F7294502332E637FABFBC3654EA82202AD48E0969F14EBEB8AF74/pdf", "ticket": "https://api.factura.bo/f/2872F7294502332E637FABFBC3654EA82202AD48E0969F14EBEB8AF74/ticket", "xml": "https://api.factura.bo/f/2872F7294502332E637FABFBC3654EA82202AD48E0969F14EBEB8AF74/xml" }, "idempotency": { "key": "floogos-exec-1-node-1-3f9a…", "mode": "auto" }, "expected_total": 500, "warnings": [], "environment": "production"}La salida se guarda en la clave configurada (output_key, por defecto facturabo) y se conserva el resto de data. En error: error.message, error.type y, si aplica, status y siat_code.
Ejemplo de Uso
Sección titulada «Ejemplo de Uso»{ "credentials_id": "cred-facturabo", "document_sector": "1", "client_document_number": "1023456789", "client_business_name": "EMPRESA DEMO S.R.L.", "items": [ { "codigo_producto": "SERV-1", "codigo_sin": 83141, "descripcion": "Servicio de desarrollo", "cantidad": 1, "precio_unitario": 500, "unidad_medida": 58 } ], "output_key": "facturabo"}- Cada sector tiene su propio endpoint (
/v1/facturas,/alquiler,/exportacion,/turismo,/tasa-cero,/educacion,/servicio-basico,/ice,/hotel,/hospital…): el nodo elige el correcto y valida los campos propios del sector antes de enviar. - La clave de idempotencia (
X-Idempotency-Key, 30 días) se genera sola: si el workflow se reintenta, la API devuelve la factura original en lugar de duplicarla. Para dos facturas idénticas en un bucle usa una clave manual (el id del pedido). - La clave de factura.bo no delata el entorno: lo elige la credencial (por defecto, sandbox). En sandbox nunca se envían emails.
- Si el SIAT cae, emite con «contingencia» activada: la factura queda
OFFLINEy no descuenta crédito hasta validar el paquete. - El rechazo del SIAT trae su código en
error.siat_codey, para los habituales (123 CUFD vencido, 981, 984, 1040…), un consejo en el mensaje. - El PDF en base64 no se incluye por defecto (pesa): usa los enlaces públicos, que no caducan, o activa «Incluir el PDF».
Nodos Relacionados
Sección titulada «Nodos Relacionados»- facturaBoEmitirLote - Emitir facturas en lote
- facturaBoNota - Nota de crédito/débito
- facturaBoAnular - Anular o revertir factura
- facturaBoValidarNit - Validar NIT
- facturaBoTipoCambio - Tipo de cambio