Documentación Finanzas
Facturas, documentos y estados: endpoints, parámetros y ejemplos listos para usar.
/apiV2/documentos/facturas Crear factura / documento
Crea un documento de facturación remoto (Factura, Rectificativa, etc. según plantilla). Devuelve id,
rand y referencia.
Resumen
id_plantillasFactura controla numeración, tipo y validaciones.
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization | Bearer {accessToken} | Sí |
Content-Type | application/json | Sí |
Requisitos previos
- El token debe pertenecer a un usuario válido.
- La cuenta debe tener facturación activa (
FacturacionUsuarioSettings.activo=true). id_plantillasFacturadebe existir y pertenecer al rol.
Body (JSON)
| Parámetro | Tipo | Oblig. | Descripción |
|---|---|---|---|
id_plantillasFactura |
int | Sí | ID de la plantilla. Determina numeración, tipo y validaciones. |
fecha |
string | No | Fecha ISO YYYY-MM-DD. Si no se envía, se usa la fecha del día. |
razonSocial | string | No | Razón social del cliente. |
cif | string | No | CIF/NIF. |
email | string | No | Email. |
telefono | string | No | Teléfono. |
direccion | string | No | Dirección. |
codigoPostal | string | No | Código postal. |
poblacion | string | No | Población. |
provincia | string | No | Provincia. |
pais | string | No | País ISO-2. Por defecto ES. |
iva | number | No | IVA % cabecera. Por defecto 21. |
irpf | number | No | IRPF % (puede ser 0). |
re | number | No | Recargo equivalencia % (puede ser 0). |
formaPago |
string | No | Texto libre. Si no existe, el sistema puede crearlo automáticamente (según reglas del rol). |
ch_pagado |
boolean | No |
true = pendiente (NO pagado). false = pagado. Si no se envía, se asume false. |
observaciones | string | No | Observaciones del documento. |
comment | string | No | Comentario interno. |
detalles |
array | No | Listado de líneas. Si no se envía, se crea el documento sin líneas. |
detalles[].id | int | No | Solo en edición: id de línea existente. |
detalles[].producto | string | No | Referencia / SKU (si vacío, puede normalizar a -). |
detalles[].desc | string | Sí* | Descripción (obligatoria si hay línea). |
detalles[].uds | number | No | Unidades (por defecto 1). |
detalles[].precio | number | No | Precio neto (recomendado hasta 3 decimales). |
detalles[].iva | number | No | IVA % de línea. |
detalles[].dto | number | No | Descuento %. |
detalles[].orden | number | No | Orden de línea (si no, por posición). |
totalIva | number | No | Informativo. El sistema recalcula los totales. |
baseImponible | number | No | Informativo. El sistema recalcula los totales. |
detalles, cada línea debe tener al menos desc.
Respuesta esperada (HTTP 200)
{
"success": true,
"id": 123,
"rand": 123456789,
"referencia": "INV-ES-00001",
"fecha": "2026-01-01",
"url": "https://finanzas.z-bombilla.com/...",
"total": 121,
"iva": 21,
"neto": 100,
"irpf": 0,
"re": 0,
"message": "Documento creado correctamente."
}
/apiV2/documentos/facturas?id={id} Editar documento existente
Edita un documento existente. El id va como query param.
Notas de edición de líneas
- Las líneas con
detalles[].idse actualizan. - Las líneas sin
idse crean. - Las líneas existentes que no se incluyan en
detallesse eliminan.
Errores posibles
- 400 Bad Request: validaciones fallidas (plantilla, campos requeridos, etc.).
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 404 Not Found: documento no encontrado o no pertenece al rol.
- 500 Internal Server Error: error interno.
{
"success": false,
"error": "Falta campo obligatorio: id_plantillasFactura"
}
Notas adicionales
- La numeración (
referencia) y elrandse generan automáticamente al crear. - Se recomienda enviar
preciocon decimales (hasta 3) para minimizar redondeos.
/apiV2/documentos/facturas/ultimaFecha Última fecha de factura
Devuelve la fecha (y referencia) de la última factura emitida en una plantilla + año.
Úsala ANTES de crear una factura nueva (POST /apiV2/documentos/facturas) para
comprobar de antemano si la fecha que vas a enviar sería aceptada: por numeración
correlativa, Finanzas rechaza cualquier factura nueva cuya fecha sea anterior a la
última ya emitida en esa misma plantilla+año (HTTP 400, ver sección
"Crear/Editar Facturas"). Esta consulta no sustituye esa validación —
es solo una comprobación de antemano para evitar intentos que ya sabes que van a fallar.
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization | Bearer {accessToken} | Sí |
Query params
| Parámetro | Tipo | Oblig. | Descripción |
|---|---|---|---|
idPlantillasFactura |
int | Sí | Plantilla (serie) sobre la que quieres comprobar la numeración. Es el
id que devuelve GET /apiV2/documentos/plantillas, el mismo
que usarías al crear la factura. Si tu cuenta usa el motor V2 ese
id es el de la plantilla V2, no el legacyId; la consulta
resuelve la serie completa por su cuenta. |
year |
int | No | Año de la factura que vas a crear (por defecto, el año actual). La correlatividad es siempre dentro del mismo año. |
Respuesta (HTTP 200) — con facturas previas
{
"success": true,
"tieneFacturas": true,
"fecha": "2026-08-31",
"referencia": 118
}
Respuesta (HTTP 200) — sin facturas todavía en esa plantilla+año
{
"success": true,
"tieneFacturas": false
}
Cómo usarla
- Si
tieneFacturasesfalse: cualquier fecha de hoy hacia atrás es válida (sujeto también a la regla general de no facturar en el futuro). - Si
tieneFacturasestrue: tu nueva factura debe tenerfecha >= fecha(la de esta respuesta). Si va a ser anterior, elPOSTla rechazará — resuelve la fecha antes de intentarlo.
Errores posibles
- 400 Bad Request: falta
idPlantillasFactura. - 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 500 Internal Server Error: error interno.
{
"error": "Falta idPlantillasFactura"
}
Notas
- La numeración es por plantilla+año, compartida entre todos los documentos que uses en esa serie — no es exclusiva de un cliente o envío concreto.
- Es la misma comprobación que usa internamente Shipping antes de lanzar la facturación automática de envíos, para avisar de un posible rechazo antes de esperar a que termine el proceso.
/apiV2/documentos Listado paginado de documentos
Devuelve un listado paginado de documentos de facturación (según filtros).
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization | Bearer {accessToken} | Sí |
Resumen
Query params
| Parámetro | Tipo | Oblig. | Descripción |
|---|---|---|---|
tipo |
string | No |
todos (por defecto) o un valor de Plantilla.TipoDocumento.
Ej: FACTURA, RECTIFICACIONES.
|
idPlantillasFactura |
int | No | Filtra por plantilla concreta. Si no se envía, se usan todas las plantillas del tipo/rol. |
q |
string | No | Búsqueda por texto libre (cliente, email, cif...). Si incluye números, se intenta filtrar también por referencia. |
pagado | boolean | No | true o false. |
year | int | No | Año del documento (ej. 2026). |
importeMin | number | No | Importe mínimo del total del documento. |
importeMax | number | No | Importe máximo del total del documento. |
pageNumber | int | No | Página (por defecto 1). |
pageSize | int | No | Tamaño de página (por defecto 50). Recomendado máximo 100. |
orderField |
string | No |
Campo de ordenación permitido: id, fecha, referencia, razonSocial,
chPagado, totalGrossAmount.
|
orderDir | string | No | ASC o DESC (por defecto ASC si no es DESC). |
Respuesta (HTTP 200)
Devuelve filas, total y años disponibles para el conjunto actual (tipo/plantilla).
{
"rows": [
{
"id": 123,
"pagado": false,
"numero": "INV-ES-00001",
"fecha": "01/01/2026",
"cliente": "Cliente SL",
"total": "121,00 ?",
"comment": "Revisar",
"rand": 123456789
}
],
"total": 1,
"yearsAvailable": [2026, 2025, 2024]
}
Errores posibles
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 400 Bad Request: parámetros inválidos.
- 500 Internal Server Error: error interno.
{
"error": "Usuario no autenticado"
}
Notas
yearsAvailableestá ordenado de más reciente a más antiguo.- Los campos
totalyfechavienen formateados (human friendly).
/apiV2/documentos/years Años disponibles
Devuelve los años disponibles para el conjunto actual de documentos (según tipo y/o idPlantillasFactura).
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization | Bearer {accessToken} | Sí |
Query params
| Parámetro | Tipo | Oblig. | Descripción |
|---|---|---|---|
tipo |
string | No | todos (por defecto) o un valor de Plantilla.TipoDocumento (ej: FACTURA). |
idPlantillasFactura |
int | No | Si se envía, devuelve los años disponibles solo para esa plantilla. |
Respuesta (HTTP 200)
{
"yearsAvailable": [2026, 2025, 2024]
}
Errores posibles
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 400 Bad Request: parámetros inválidos.
- 500 Internal Server Error: error interno.
{
"error": "Usuario no autenticado"
}
Notas
- Útil para construir selectores de año en integraciones/ERP.
/apiV2/documentos/plantillas Plantillas disponibles
Devuelve las plantillas activas disponibles para el rol. Puede filtrar por tipo.
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization | Bearer {accessToken} | Sí |
Query params
| Parámetro | Tipo | Oblig. | Descripción |
|---|---|---|---|
tipo |
string | No | todos (por defecto) o un valor de Plantilla.TipoDocumento (ej: FACTURA). |
Respuesta (HTTP 200)
{
"success": true,
"rows": [
{ "id": 12, "nombre": "Factura Nacional", "legacyId": 61 },
{ "id": 13, "nombre": "Factura UE", "legacyId": null }
]
}
Qué id devuelve: motor legacy vs motor V2
Cada cuenta usa uno de los dos motores de plantillas, y el id que devuelve
este endpoint es siempre el que hay que enviar como
idPlantillasFactura en el resto de endpoints (crear factura,
última fecha, listado, años). No hace falta que sepas en qué motor
estás: usa el id de aquí y ya está.
- Motor legacy: el
ides el de la plantilla clásica. El campolegacyIdno aparece. - Motor V2: el
ides el de la plantilla V2, ylegacyIdtrae la plantilla clásica equivalente, onullsi esa plantilla V2 se creó ya en V2 y no tiene equivalente.
El legacyId es informativo: sirve para casar documentos antiguos, emitidos
antes de la migración, que solo llevan ese identificador. Una serie puede
tener documentos guardados de las dos formas, así que cualquier consulta
por serie (numeración, años, listado) tiene en cuenta las dos — no hace falta
que hagas dos llamadas.
Errores posibles
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 400 Bad Request:
tipoinválido. - 500 Internal Server Error: error interno.
{
"error": "Usuario no autenticado"
}
Notas
- Útil para construir selectores de plantilla en integraciones.
- Si no se envía
tipo, devuelve todas las plantillas activas del rol.
/apiV2/documentos/pendientes/summary Pendientes: resumen
Devuelve un resumen de documentos pendientes (contador y suma de importes) para el rol del token.
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization | Bearer {accessToken} | Sí |
Descripción
- El resumen se calcula sobre documentos del rol que cumplan la condición de pendiente según la lógica de backend.
- Suele limitarse a plantillas de tipo
FACTURAactivas (según implementación).
Respuesta (HTTP 200)
{
"count": 5,
"totalImporte": 1234.56
}
Errores posibles
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 500 Internal Server Error: error interno.
{
"error": "Cuenta de facturación no activa"
}
Notas
totalImportees numérico (no formateado). Útil para dashboards/KPIs.
/apiV2/documentos/togglePagado Cambiar estado pagado
Alterna el estado pagado (true/false) de un documento dentro del rol del token.
Resumen
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization |
Bearer {accessToken} |
Sí |
Parámetros
| Parámetro | Ubicación | Tipo | Oblig. | Descripción |
|---|---|---|---|---|
id |
query | int | Sí | ID del documento (Factura) a modificar. |
Respuesta (HTTP 200)
{
"success": true,
"pagado": true
}
Errores posibles
- 400 Bad Request: id inválido o ausente.
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 404 Not Found: documento no encontrado o fuera del rol.
- 500 Internal Server Error: error interno.
{
"error": "Factura no encontrada"
}
Notas
- Se registra la acción en el log del sistema.
/apiV2/documentos/updateComment Actualizar comentario
Actualiza el comentario interno (comment) de un documento dentro del rol del token.
Resumen
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization |
Bearer {accessToken} |
Sí |
Parámetros
| Parámetro | Ubicación | Tipo | Oblig. | Descripción |
|---|---|---|---|---|
id |
query | int | Sí | ID del documento. |
comment |
query | string | No | Nuevo comentario (texto libre). Si no se envía o viene vacío, se guarda vacío/null según implementación. |
Respuesta (HTTP 200)
{
"success": true
}
Errores posibles
- 400 Bad Request: id inválido o ausente.
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 404 Not Found: documento no encontrado o fuera del rol.
- 500 Internal Server Error: error interno.
{
"error": "Factura no encontrada"
}
Notas
- Se registra la acción en el log del sistema.
/apiV2/documentos/delete Eliminar documento
Elimina un documento si cumple las validaciones (rol, presentado, numeración posterior, etc.).
Resumen
Autenticación
| Cabecera | Valor | Oblig. |
|---|---|---|
Authorization |
Bearer {accessToken} |
Sí |
Parámetros
| Parámetro | Ubicación | Tipo | Oblig. | Descripción |
|---|---|---|---|---|
id |
query | int | Sí | ID del documento a eliminar. |
Validaciones (resumen)
- El documento debe existir y pertenecer al rol del token.
- Si el documento es de tipo
FACTURAoRECTIFICACIONES:- No puede estar presentado (según
periodoFinen backend). - No puede haber documentos posteriores con numeración mayor en el mismo año/plantilla.
- No puede estar presentado (según
Respuesta (HTTP 200)
{
"success": true
}
Errores posibles
- 400 Bad Request: id inválido o ausente.
- 401 Unauthorized: token ausente o inválido.
- 403 Forbidden: facturación no activa.
- 404 Not Found: documento no encontrado o fuera del rol.
- 409 Conflict: no se puede eliminar por reglas de negocio (presentado o numeración posterior).
- 500 Internal Server Error: error interno.
Ejemplo de error 409
{
"error": "No se puede eliminar esta factura porque existen facturas con numeración posterior en 2026."
}
Notas
- Se registra la acción en el log del sistema cuando la eliminación es correcta.
- Este endpoint elimina también las líneas asociadas al documento.