Volver a ayudas

01Introducción

Esta API permite a un sistema externo (tienda online, ERP de terceros, etc.) registrar una venta en Facturador Web y luego firmar/emitir el DTE (Documento Tributario Electrónico) correspondiente ante el SII.

El flujo típico de integración es:

  1. Registrar la venta con sus ítems mediante POST /api/save-sale.
  2. Firmar el DTE con GET /api/firmar/{identificador} — o bien firmarlo en el mismo paso anterior enviando "firmar": "Si".
  3. El sistema entrega la URL del PDF/timbre generado, que puedes mostrar o enviar al cliente final.

También puedes crear cotizaciones con POST /api/crear/cotizacion: quedan listadas en Ventas > Cotizaciones y no consumen folios del SII.

Si tienes una tienda online, puedes crear pedidos web con POST /api/crear/pedido: llegan a Sitio WEB > Pedidos, en Nuevos pedidos, con su comprobante de pago para revisarlo y confirmarlo.

02Autenticación

Todas las rutas de esta API requieren un token de acceso propio de tu empresa. Lo generas tú mismo en Mi perfil, en el recuadro API token CMS, con el botón "Generar API token" (haz clic sobre el campo para copiarlo). Envíalo de alguna de estas formas:

Authorization: Bearer TU_API_TOKEN

También se acepta como parámetro ?api_token=TU_API_TOKEN en la URL, o como campo api_token en el cuerpo del POST.

El token es por usuario y empresa: la empresa, la sucursal y el usuario con que quedan los documentos salen del token, nunca del cuerpo del llamado. Si vuelves a generarlo, el token anterior deja de funcionar al instante, así que actualízalo en tu integración. Sin token o con uno inválido la respuesta es HTTP 401. El límite de uso es de 60 peticiones por minuto.

03Registrar venta

POST https://sistema.facturadorweb.cl/api/save-sale

Crea el borrador de la venta junto con sus ítems. Opcionalmente puede firmar el DTE en el mismo llamado.

Parámetros del cuerpo (JSON)

CampoTipoDescripción
identificadorrequeridostringID de la venta en tu sistema externo. Se guarda como venta_externa_id y es lo que usarás para firmar el DTE después.
doc_tributariorequeridointTipo de documento a emitir. Ver tabla de tipos de documento.
rutrequeridostringRUT del cliente, formato 11111111-1.
nombrerequeridostringNombre o razón social del cliente.
emailopcionalstringCorreo del cliente (se usa para el envío automático del DTE).
telefonoopcionalstringTeléfono de contacto.
direccionopcionalstringDirección del cliente.
ciudadopcionalstringCiudad del cliente.
comunas_id o comunaopcionalint / stringComuna del cliente por ID o por nombre. Si no envías ninguna, queda la comuna de tu empresa.
giroopcionalstringGiro comercial del cliente.
formapago_idopcionalintForma de pago. Ver tabla de formas de pago. Por defecto 1 (Por pagar).
valor_neto, valor_iva, valor_exento, valor_bruto, valor_totalopcionalnumberTotales de la venta. Para documentos exentos (34/41) solo se usa valor_total.
detailrequeridoarrayListado de ítems de la venta (ver tabla siguiente). Sin este campo la venta no se crea.
firmaropcionalstringEnvía "Si" para firmar el DTE inmediatamente después de crear la venta, en el mismo llamado.

Cada elemento de detail

CampoTipoDescripción
nombrerequeridostringNombre/descripción del producto o servicio.
descripcionopcionalstringDetalle adicional del ítem.
codigoopcionalstringCódigo/SKU del producto. Si se omite, se genera uno automático.
productos_idopcionalintID de un producto ya existente en Facturador Web, si aplica.
cantidadrequeridonumberCantidad del ítem.
neto, ivarequerido*numberValor neto e IVA por unidad (no el total de la línea). No aplica para documentos exentos (34/41).
valorrequeridonumberValor total por unidad (neto + IVA si es afecto). El sistema multiplica por cantidad internamente al calcular los totales de la venta.

Ejemplo con curl

curl -X POST "https://sistema.facturadorweb.cl/api/save-sale" \ -H "Authorization: Bearer TU_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "identificador": "PEDIDO-1001", "doc_tributario": 39, "rut": "11111111-1", "nombre": "Cliente de prueba", "email": "cliente@correo.cl", "telefono": "912345678", "direccion": "Calle Falsa 123", "ciudad": "Santiago", "comunas_id": 295, "giro": "Particular", "formapago_id": 9, "detail": [ { "nombre": "Producto A", "cantidad": 2, "neto": 1000, "iva": 190, "valor": 1190 }, { "nombre": "Producto B", "cantidad": 1, "neto": 5000, "iva": 950, "valor": 5950 } ], "firmar": "Si" }'

Ejemplo de respuesta

{ "status": "success", "id": 1372600, "data": { "urlencoded": "https://.../PDF_....pdf", ... } }

Cuando la venta queda guardada la respuesta siempre trae su id en el sistema, también si la firma falla ("status": "warning"): el borrador queda guardado con ese id. Si no se guardó nada, la respuesta es un error sin id.

04Firmar DTE

GET https://sistema.facturadorweb.cl/api/firmar/{identificador}

Firma y emite el DTE de una venta creada previamente. {identificador} es el mismo valor que enviaste en el campo identificador al registrar la venta.

Ejemplo con curl

curl "https://sistema.facturadorweb.cl/api/firmar/PEDIDO-1001" \ -H "Authorization: Bearer TU_API_TOKEN"
No firmes dos veces el mismo identificador: cada firma consume un folio del SII. Si necesitas reintentar por una falla de red, primero confirma con soporte si el DTE ya fue timbrado.

05Crear cotización

POST https://sistema.facturadorweb.cl/api/crear/cotizacion

Crea una cotización con sus ítems. Queda listada en Ventas > Cotizaciones igual que las que se hacen a mano en el sistema. Una cotización no se firma ni consume folios del SII.

Parámetros del cuerpo (JSON)

CampoTipoDescripción
rutrequeridostringRUT del cliente. Acepta con o sin puntos (11.111.111-1 o 11111111-1).
nombrerequeridostringNombre o razón social del cliente.
detallesrequeridoarrayÍtems de la cotización, al menos uno (ver tabla siguiente).
venta_externa_idopcionalstringID de la cotización en tu sistema. Si lo envías y repites el llamado, se actualiza la misma cotización en vez de duplicarla: úsalo para reintentos.
documentotributario_idopcionalintDocumento que se emitiría: 33 factura (por defecto), 39 boleta, 34 factura exenta, 41 boleta exenta. Con 34 o 41 todo el detalle va exento.
fechaopcionaldateFormato YYYY-MM-DD. Por defecto la fecha de hoy.
comuna o comunas_idopcionalstring / intComuna por nombre o por ID. Si no envías ninguno queda la comuna de tu empresa.
email, telefono, celular, direccion, ciudad, giroopcionalstringDatos de contacto del cliente que salen impresos en la cotización.
condicionesdepago, atencion, titulo, comentario, pie_cotizacionopcionalstringTextos que se muestran en la cotización.
formapago_id, centro_costos_idopcionalintForma de pago (ver tabla, por defecto 30) y centro de costos.

Cada elemento de detalles

CampoTipoDescripción
descripcionrequeridostringNombre del producto o servicio.
cantidadrequeridonumberCantidad del ítem.
totalrequeridonumberPrecio unitario bruto, con IVA incluido. También se acepta como precio o valor_unitario. El neto y el IVA los calcula el sistema.
codigo, detalle, unidad_medidaopcionalstringCódigo/SKU, detalle adicional y unidad de medida (por defecto UN).
afecto_ivaopcional0 / 1Envía 0 para dejar esa línea exenta. Por defecto 1.
descuentoopcionalnumberDescuento unitario del ítem.

Ejemplo con curl

curl -X POST "https://sistema.facturadorweb.cl/api/crear/cotizacion" \ -H "Authorization: Bearer TU_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "venta_externa_id": "COT-2001", "rut": "11111111-1", "nombre": "Cliente de prueba", "email": "cliente@correo.cl", "telefono": "912345678", "direccion": "Calle Falsa 123", "comuna": "Santiago", "giro": "Servicios", "documentotributario_id": 33, "condicionesdepago": "30 dias", "detalles": [ { "codigo": "P1", "descripcion": "Producto uno", "cantidad": 2, "total": 11900 }, { "codigo": "P2", "descripcion": "Producto dos", "cantidad": 1, "total": 5950, "afecto_iva": 0 } ] }'

Ejemplo de respuesta

{ "status": "success", "mensaje": "Cotizacion creada", "id": 1371090, "correlativo": 2, "valor_neto": 20000, "valor_exento": 5950, "valor_iva": 3800, "valor_total": 29750, "url_cotizacion": "https://sistema.facturadorweb.cl/ver-cotizacion/MTM3MTA5MA==" }

Responde 201 al crear y 200 cuando actualizó una cotización existente. Si faltan campos obligatorios responde 422 con el detalle en errores.

url_cotizacion es un link público: puedes enviárselo al cliente para que vea la cotización y descargue su PDF sin tener usuario en el sistema. El sistema además registra si la abrió.

06Crear pedido web

POST https://sistema.facturadorweb.cl/api/crear/pedido

Registra un pedido de tu tienda online con sus productos y, si ya lo pagaron, el comprobante de pago. Llega a Sitio WEB > Pedidos en la pestaña que indiques con estado: por defecto Nuevos pedidos (Por Pagar). Desde ahí revisas el comprobante y presionas Confirmar Pago, que crea la venta en el sistema (y la firma, si tu sitio lo tiene configurado).

Parámetros del cuerpo (JSON)

CampoTipoDescripción
rutrequeridostringRUT del cliente, con o sin puntos.
nombrerequeridostringNombre o razón social del cliente.
correorequeridostringCorreo del cliente. También se acepta como email.
telefonorequeridostringTeléfono del cliente.
detallesrequeridoarrayProductos del pedido, al menos uno (ver tabla siguiente).
codigoopcionalstringID del pedido en tu tienda. Si repites el llamado con el mismo código no se crea otro: responde el pedido que ya existe y, si envías un estado más avanzado, lo mueve de pestaña. Úsalo para reintentos y para avanzar el pedido.
estadoopcionalstringPestaña donde queda el pedido: nuevo (por defecto, Nuevos pedidos), atendido (Pedidos Atendidos) o entregado (Pedidos Entregados). Ver estados del pedido.
documentorequeridoint / stringDocumento que se emitirá al confirmar el pago: 39 Boleta Electrónica, 33 Factura Electrónica, 41 Boleta Exenta Electrónica o 34 Factura Exenta Electrónica. Con 34 o 41 todo el detalle va exento, sin IVA. También se aceptan las palabras Boleta y Factura, por compatibilidad.
giroopcionalstringGiro del cliente, necesario si pide factura.
direccion, ciudadopcionalstringDirección de despacho del cliente.
comuna o comunas_idopcionalstring / intComuna por nombre o por ID. Si no envías ninguna queda la comuna de tu empresa.
retiroopcionalstringDomicilio, Sucursal o Tienda. Por defecto Domicilio si envías dirección y Tienda si no.
forma_pagoopcionalstringCómo pagó el cliente: transferencia (por defecto), webpay, flow, mercadopago.
costo_envio, descuentoopcionalintCosto de despacho y descuento del pedido, en pesos.
pagoopcionalobjectPago informado y su comprobante (ver objeto pago).

Cada elemento de detalles

CampoTipoDescripción
nombrerequeridostringNombre del producto.
cantidadrequeridointCantidad, mínimo 1.
valorrequeridonumberPrecio unitario con IVA incluido. El total del pedido se calcula solo: suma de valor × cantidad + costo_envio − descuento.
descripcionopcionalstringDetalle adicional del producto.
productos_idopcionalintID del producto en Facturador Web, si existe. Al confirmar el pago se usa para descontar stock.

Objeto pago (comprobante)

CampoTipoDescripción
comprobanteopcionalstring (base64)Archivo del comprobante en base64 (se acepta data URI). Imagen JPG, PNG o WEBP de hasta 15 MB, o PDF de hasta 5 MB. Las imágenes se optimizan al recibirlas: quedan como JPG de hasta 1.600 px por lado, con la orientación corregida. Los PDF se guardan tal cual.
comprobante_nombreopcionalstringNombre del archivo, por ejemplo transferencia.pdf.
montoopcionalnumberMonto pagado. No puede ser mayor al total del pedido.
fechaopcionaldateFecha del pago, formato YYYY-MM-DD. Por defecto hoy.
operacionopcionalstringNúmero de transferencia, voucher u operación.
Si prefieres no usar base64, envía el llamado como multipart/form-data con el archivo en pago[comprobante] y el resto como pago[monto], detalles[0][nombre], etc. Si algún dato viene malo el pedido no se crea: la respuesta es HTTP 422 con el detalle en errores.

Estados del pedido (estado)

ValorPestaña en Sitio WEB > PedidosEstado que muestra
nuevoNuevos pedidosPor Pagar
atendidoPedidos AtendidosPagado
entregadoPedidos EntregadosPagado y Entregado
Con atendido o entregado el pedido solo queda ubicado en esa pestaña: no se crea la venta en el sistema, no se descuenta stock y no se envían correos al cliente. Úsalos para registrar pedidos que ya gestionaste por otro lado. Si quieres que el sistema genere la venta, envía el pedido como nuevo y confírmalo con Confirmar Pago.

Para avanzar un pedido ya enviado, repite el llamado con el mismo codigo y el nuevo estado: pasa de nuevo a atendido y de ahí a entregado. Nunca retrocede, no modifica pedidos cancelados y el resto de los datos del pedido no cambia.

Mover un pedido ya creado (atendido / entregado)

Si el pedido ya existe en Facturador Web y solo necesitas cambiarlo de pestaña, no lo vuelvas a enviar completo: usa este endpoint con el id que te devolvió al crearlo. También acepta tu propio codigo en vez del id.

POST /api/pedido/{id}/estado
CampoTipoDescripción
estadoobligatoriostringatendido (queda en Pedidos Atendidos, estado Pagado) o entregado (queda en Pedidos Entregados, estado Pagado y Entregado).
notificaropcionalbooleanDecide si se le envía el correo al cliente por este cambio de estado. Por defecto false: no se envía ningún correo. Con true, al mover a atendido sale el correo de pago recibido y al mover a entregado el de pedido entregado. El correo solo se manda si el pedido realmente cambió de estado, y la respuesta te dice en correo_enviado si salió o no.
Este endpoint solo mueve el pedido: no registra la venta, no emite ni firma el DTE y no descuenta stock. Si necesitas que el sistema genere la venta, deja el pedido en nuevo y usa Confirmar Pago en Sitio WEB > Pedidos.

El estado nunca retrocede: si el pedido ya está en Pagado y Entregado y pides atendido, responde 200 sin cambiar nada y con "movido": false. Los pedidos cancelados, rechazados o que son cotización no se mueven (responde 422).

Ejemplo con curl (cambio de estado)

curl -X POST "https://sistema.facturadorweb.cl/api/pedido/145/estado" \ -H "Authorization: Bearer TU_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "estado": "entregado", "notificar": true }'

Ejemplo de respuesta (cambio de estado)

{ "status": "success", "message": "El pedido se movi\u00f3 a Pagado y Entregado", "id": 145, "codigo": "TIENDA-3001", "estado": "Pagado y Entregado", "estado_anterior": "Pagado", "movido": true, "correo_enviado": true, "venta_id": 1372576, "venta_folio": 4, "venta_firmada": true }

Si el ERP ya registró la venta de ese pedido con Confirmar Pago, la respuesta trae venta_id (el id en operacionestributarias), el folio en venta_folio y venta_firmada. Mientras el pedido no tenga venta, venta_id y venta_folio vienen en null y venta_firmada en false: este endpoint no crea la venta. Si quedó como borrador sin firmar, trae el venta_id del borrador con venta_folio en null y venta_firmada en false.

Ejemplo con curl

curl -X POST "https://sistema.facturadorweb.cl/api/crear/pedido" \ -H "Authorization: Bearer TU_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "codigo": "TIENDA-3001", "estado": "nuevo", "rut": "11111111-1", "nombre": "Cliente de prueba", "correo": "cliente@correo.cl", "telefono": "912345678", "direccion": "Calle Falsa 123", "comuna": "Santiago", "documento": 39, "forma_pago": "transferencia", "costo_envio": 3500, "detalles": [ { "nombre": "Producto A", "cantidad": 2, "valor": 11900 }, { "nombre": "Producto B", "cantidad": 1, "valor": 5950, "productos_id": 1520 } ], "pago": { "monto": 33250, "fecha": "2026-09-15", "operacion": "TRX-558812", "comprobante_nombre": "transferencia.pdf", "comprobante": "JVBERi0xLjQK... (archivo en base64)" } }'

Ejemplo de respuesta

{ "status": "success", "message": "Pedido creado", "id": 145, "codigo": "TIENDA-3001", "estado": "Por Pagar", "total": 33250, "comprobante_id": 12 }

Responde 201 al crear el pedido y 200 si ya existía un pedido con ese codigo: no se crea otro y, si enviaste un estado más avanzado, se mueve de pestaña (el message lo indica, por ejemplo "El pedido ya existía y se movió a Pagado").

Respuestas: siempre un id o un error

Todas las respuestas son JSON. Si el pedido quedó guardado trae "status": "success" y el id del pedido; si no, trae "status": "error" y el motivo en message, sin id. Revisa siempre el código HTTP:

HTTPResultadoQué hacer
201Pedido creado. Trae id.Guarda el id junto a tu codigo.
200Ya existía un pedido con ese codigo. Trae el id del existente.Nada: no se duplicó. Si enviaste un estado más avanzado, ya se movió.
401Token ausente o inválido.Envía Authorization: Bearer TU_API_TOKEN con un token vigente.
403El token no tiene una empresa válida.Genera un token nuevo en Mi perfil.
405Método no permitido.Usa POST.
422Datos inválidos. Trae el detalle por campo en errores.Corrige y vuelve a enviar: no se guardó nada.
429Superaste el límite de peticiones por minuto.Espera un momento y reintenta con el mismo codigo.
500Error interno al guardar.Reintenta con el mismo codigo; si persiste, avisa a soporte.
{ "status": "error", "message": "El pedido no se creó, revisa los errores", "errores": { "correo": ["Debe indicar el correo del cliente"], "detalles.0.cantidad": ["La cantidad de cada producto debe ser al menos 1"] } }

07Tipos de documento (doc_tributario)

CódigoDocumento
33Factura Electrónica
34Factura Exenta Electrónica
39Boleta Electrónica
41Boleta Exenta Electrónica
52Guía de Despacho Electrónica
56Nota de Débito Electrónica
61Nota de Crédito Electrónica

08Formas de pago (formapago_id)

CódigoForma de pago
1Por pagar
2Efectivo
3Tarjeta de Débito Transbank
4Tarjeta de Crédito Transbank
5Cheque al día
6Cheque a fecha
7Crédito de la empresa
8Transferencia
9Contado
10Pago Digital
30Sin pago registrado
31Pago Electrónico

09Errores y respuestas

Los errores se devuelven como JSON con la clave error o status: "warning". Casos comunes al firmar:

RespuestaCausa
{"error": "El certificado digital ha caducado"}El certificado digital de la empresa venció. Debe renovarse antes de poder firmar.
{"error": "No hay folios disponibles"}No quedan folios autorizados por el SII para ese tipo de documento.
{"error": "Los folios disponibles están vencidos"}Los folios existen pero superaron los 6 meses de vigencia (Facturas, Guías, Notas).
{"error": "El identificador de venta no es válido"}El identificador enviado a /api/firmar/... no corresponde a ninguna venta registrada previamente con /api/save-sale.
{"status": "warning", "message": "El borrador fue generado, pero no se pudo emitir el DTE"}La venta se guardó correctamente, pero la firma falló (ver error adjunto). Puedes reintentar con /api/firmar/{identificador}.

10Notas importantes

Guarda siempre tu identificador (venta_externa_id) de forma única por venta. Es la única forma de referenciarla después para firmarla o consultar su estado.
Los campos neto, iva y valor de cada ítem son valores unitarios: el sistema los multiplica por cantidad al calcular los totales de la venta. No envíes ya el total de la línea.
Para documentos exentos (Factura Exenta 34 y Boleta Exenta 41), no se calcula IVA: basta con enviar valor por ítem y valor_total en la venta.

Contacto

Teléfonos:
(+56) 97332 0636

Email:
contacto@facturadorweb.cl