Skip to content

facturaBoEmitirFactura

Issues a Bolivian electronic invoice with factura.bo (SIN SIAT): validates the data and sends it to the SIAT. Supports 12 sectors (sales, rental, export, tourism, zero rate, education, utilities, ICE, hotel, hospital…). Returns the CUF, number, state and links to the PDF, XML and ticket. Protects against duplicates with the idempotency key.

Part of the Bolivia Fiscal Hub as an alternative to connecting directly to the SIAT: factura.bo (SimplifyIT S.R.L.) is a provider that builds and signs the XML and sends it to the SIN. Node: «Emitir factura».

FieldTypeRequiredDescription
credentials_idcredentialsYesfacturabo credential
document_sectorselectNoSector — Sector-specific data goes in “Sector fields”. Required per 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_codenumberNoBranch (SIAT code) — 0 = head office. Empty = the credential default branch
point_of_sale_codenumberNoPoint of sale (SIAT code) — 0 = main point. Empty = the credential one
economic_activitytextNoIssuer economic activity (CAEB) — Optional if every line carries it or a default is set
client_document_typeselectNoClient document type — 5, 1, 2, 3, 4
client_document_numbertextYesDocument number — NIT of 7 to 15 digits (dots and dashes accepted). 0 = final consumer
client_business_nametextNoBusiness name — Required with NIT
client_emailtextNoClient email — If set, factura.bo emails the PDF and public link (emails are never sent in sandbox)
client_complementtextNoID complement — ID card only
client_country_codenumberNoBuyer country (SIAT code) — Exports only (paises catalog)
client_addresstextNoBuyer address — Exports only
payment_method_codenumberNoPayment method (SIAT code) — 1 cash, 2/3 card, 7 transfer (metodos_pago catalog)
card_numbertextNoCard number — Only with payment method 2 or 3. The service always masks the middle digits
itemsjsonYesInvoice lines (JSON) — Array of lines: descripcion, cantidad, precio_unitario and optional codigo_producto, codigo_sin, unidad_medida, descuento, actividad_economica. Also accepts description, quantity, priceUnit… Missing values come from the defaults below
default_codigo_sinnumberNoDefault SIN product code — Applied to lines without codigo_sin (productos_servicios catalog)
default_unit_measurenumberNoDefault unit of measure — 58 = Service, 1 = Unit (unidades_medida catalog)
default_activitytextNoDefault economic activity (CAEB) — 6 or 7 digits. Applied to lines without actividad_economica
sector_fieldsjsonNoSector fields (JSON) — Header data of the chosen sector, with factura.bo names. Validated before sending
additional_discountnumberNoAdditional discount (Bs) — Global discount; added to line discounts
currency_codenumberNoCurrency (SIAT code) — 1 = bolivianos, 2 = dollars
exchange_ratenumberNoExchange rate — Required with a currency other than bolivianos. Use the “Exchange rate” node
exception_codeselectNoException code — "", 1
usertextNoUser / cashier — Stored for audit
legendtextNoLegend — Empty = the current one for the economic activity
contingencybooleanNoIssue in contingency (offline) — Requires a contingency event registered first
cafctextNoCAFC — Contingency only (required for events 5, 6 and 7)
invoice_numbernumberNoManual invoice number — Only to transcribe a paper-pad invoice, together with its CAFC
issue_datetextNoEarlier issue date — ISO 8601 in Bolivia time, up to 48 h back, together with contingency
debugbooleanNoInclude SIAT XML (diagnostics)
idempotency_modeselectNoDuplicate protection — With a key, a retry after a failure does not duplicate the invoice: the API returns the one already issued (keys are remembered for 30 days). For two identical invoices in a loop use a manual key (e.g. the order id) · auto, manual, off
idempotency_keytextNoIdempotency key — 1–128 visible characters, no spaces. Recommended: the sale id
include_pdfbooleanNoInclude PDF as base64
include_rawbooleanNoInclude raw response
output_keytextNoOutput key — The result is added to data[key] keeping the rest of the data

This module requires a credential of type facturabo with the fields:

  • API key: get it at app.factura.bo → More → API Key
  • Environment: testing (sandbox, pilot SIAT) or production; the key does not reveal it, you choose
  • NIT and SIAT system code: to sync CUIS/CUFD and catalogs
  • Default branch and point of sale: 0 = head office / main point
  • Webhook secret (whsec_…): to verify event signatures
{
"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"
}

The output is stored under the configured key (output_key, default facturabo) and the rest of data is kept. On error: error.message, error.type and, where applicable, status and siat_code.

{
"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"
}
  • Each sector has its own endpoint (/v1/facturas, /alquiler, /exportacion, /turismo, /tasa-cero, /educacion, /servicio-basico, /ice, /hotel, /hospital…): the node picks the right one and validates the sector-specific fields before sending.
  • The idempotency key (X-Idempotency-Key, 30 days) is generated for you: if the workflow is retried the API returns the original invoice instead of duplicating it. For two identical invoices in a loop use a manual key (the order id).
  • The factura.bo key does not reveal the environment: the credential sets it (sandbox by default). No emails are ever sent in sandbox.
  • If the SIAT goes down, issue with “contingency” on: the invoice stays OFFLINE and consumes no credit until the package is validated.
  • A SIAT rejection carries its code in error.siat_code and, for the common ones (123 expired CUFD, 981, 984, 1040…), a hint in the message.
  • The base64 PDF is not included by default (it is heavy): use the public links, which never expire, or enable “Include PDF”.