Documentación oficial · API v1.1.1

Conecta tus aplicaciones con FacturaOne mediante una API REST de solo lectura

Consulta clientes, artículos, proveedores, facturas, ventas y catálogos auxiliares en formato JSON, con autenticación segura, filtros, paginación y respuestas documentadas.

Solo lectura HTTPS + JSON X-API-Key o Bearer Paginación estable

Última revisión: 26 de julio de 2026 · URL base: https://api.facturaone.com/v1/

Activar la API y generar el token no tiene coste adicional.

El uso efectivo se factura según el consumo realizado y las tarifas vigentes. FacturaOne registra el volumen de peticiones y permite consultar el uso del mes actual y de meses anteriores desde el ERP.

URL basehttps://api.facturaone.com/v1/Todos los recursos se consultan mediante parámetros GET.
Versión1.1.1La versión también se devuelve en el JSON y en X-API-Version.
MétodoGETNo existen operaciones POST, PUT, PATCH ni DELETE.
AutenticaciónX-API-Key o BearerEl token debe viajar en una cabecera HTTP.
Formatoapplication/jsonContenido UTF-8 y estructura uniforme de errores.
Límite predeterminado50 registrosSe modifica con el parámetro limit.
Límite máximo200 registrosLos valores fuera de 1–200 se rechazan.
Periodo máximo366 díasProtección aplicada a facturas y ventas.
01 · Integración

Inicio rápido

La primera llamada recomendada consulta cinco clientes activos. El token se obtiene dentro de FacturaOne y debe guardarse como un secreto del servidor.

Primera petición

Utilice la cabecera X-API-Key y sustituya TU_TOKEN_API por el valor generado en su instalación.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=clients&active=1&limit=5&fields=client_id,client_name,client_nif,client_email"
Más ejemplos de autenticación y códigoBearer, PHP y Node.js

Authorization Bearer

Alternativa estándar para clientes que ya trabajan con autenticación Bearer.

curl -sS \
  -H "Authorization: Bearer TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=resources"

Cabecera directa

La opción recomendada en Postman, PHP, Node.js y procesos de servidor.

X-API-Key: TU_TOKEN_API

PHP con cURL

<?php
$url = 'https://api.facturaone.com/v1/?resource=clients&active=1&limit=5';
$token = getenv('FACTURAONE_API_TOKEN');

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 20,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: ' . $token,
        'Accept: application/json',
    ],
]);

$body = curl_exec($ch);
if ($body === false) {
    throw new RuntimeException(curl_error($ch));
}

$status = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
$payload = json_decode($body, true, 512, JSON_THROW_ON_ERROR);

if ($status < 200 || $status >= 300 || empty($payload['ok'])) {
    $message = $payload['message'] ?? ('Error HTTP ' . $status);
    $requestId = $payload['request_id'] ?? 'sin request_id';
    throw new RuntimeException($message . ' [' . $requestId . ']');
}

foreach ($payload['data'] as $client) {
    echo $client['client_id'] . ' - ' . $client['client_name'] . PHP_EOL;
}

Node.js 18+ con fetch

// Node.js 18+ — utilícelo en backend, nunca en JavaScript público.
const url = 'https://api.facturaone.com/v1/?resource=clients&active=1&limit=5';
const token = process.env.FACTURAONE_API_TOKEN;

const response = await fetch(url, {
  method: 'GET',
  headers: {
    'X-API-Key': token,
    'Accept': 'application/json'
  }
});

const payload = await response.json();

if (!response.ok || payload.ok !== true) {
  throw new Error(
    `${payload.message || `Error HTTP ${response.status}`} ` +
    `[${payload.request_id || 'sin request_id'}]`
  );
}

for (const client of payload.data) {
  console.log(client.client_id, client.client_name);
}
No coloque el token en la URL
La API exige una cabecera HTTP. Use cURL, Postman, Insomnia o código de servidor. Enviar el token como parámetro lo expondría en historiales, analítica y registros.
02 · Convenciones

Reglas globales de consulta

Todos los recursos comparten una estructura coherente de autenticación, filtros, límites y errores.

ParámetroAliasFormatoComportamiento
resourcerecursoNombre de recursoSelecciona el recurso. Si se omite, se devuelve resources.
limitlimiteEntero de 1 a 200Por defecto devuelve 50 registros. Se combina con after_id o cursor.
searchbuscarTexto de hasta 100 caracteresBúsqueda parcial en los campos autorizados de cada recurso.
date_fromfecha_desde, fechaini, desde_fechaYYYY-MM-DDFecha inicial para recursos complejos. Debe enviarse con date_to.
date_tofecha_hasta, fechafin, hasta_fechaYYYY-MM-DDFecha final inclusiva. El intervalo no puede superar 366 días.

Fechas seguras

Si no se indican fechas en invoices o sales, se consulta desde el primer día del mes actual hasta hoy.

Identificadores

Los filtros de ID usan enteros positivos. El valor 0 o la ausencia del parámetro suele equivaler a no filtrar.

Un solo valor

Cada parámetro debe contener un valor escalar. Formatos como id[]=1 generan BAD_PARAMETER.

Estructura común de una respuesta correcta

ok
true cuando la consulta se ha completado.
read_only
Siempre true.
version
Versión de la API que respondió.
account
Cuenta o instalación identificada por el token.
resource
Nombre canónico del recurso consultado.
filters
Filtros normalizados y realmente aplicados.
pagination
Estado de la página y clave de continuación.
data
Registros devueltos.
request_id
Identificador de diagnóstico, también enviado en X-Request-ID.
La instalación se identifica mediante el token
El consumidor no envía el nombre de la base de datos ni un identificador de empresa. La API localiza la instalación asociada y devuelve su nombre en account. Las fechas predeterminadas se calculan con la zona horaria Europe/Madrid.
03 · Datos disponibles

Recursos y catálogos

La API expone maestros de clientes, artículos y proveedores; catálogos auxiliares; facturas emitidas; y líneas de venta procedentes de facturas y albaranes.

Descubrimiento automático: resource=resources

Esta llamada devuelve los recursos autorizados, su clave primaria, campos, filtros, paginación y límites. Es la primera consulta recomendada para un conector.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=resources"

Resumen de recursos

RecursoAliasClave primariaactiveFinalidad
clientsclientesclient_idMaestro de clientes, datos fiscales y comerciales actuales.
itemsarticulositem_lookup_idCatálogo actual de artículos, descripción, precios, stock y clasificación.
suppliersproveedoresproveedor_idMaestro de proveedores y sus datos fiscales, de contacto y contables.
familiesfamiliasfamilia_idNoCatálogo de familias utilizado por los artículos y por el filtro family_id de ventas.
item_typestipos_articulotipo_articulo_idClasificación por tipo de artículo utilizada por item_type_id.
invoice_seriesseries_facturaseriesinvoice_group_idSeries o grupos de facturación utilizados por series_id.
invoice_typestipos_facturatipo_factura_idCatálogo de tipos de factura utilizado por invoice_type_id.
routesrutasruta_idRutas comerciales o de reparto utilizadas por route_id.
usersusuariosuser_idNoUsuarios disponibles para filtros comerciales. Excluye usuarios configurados como solo catálogo.
tax_ratesimpuestostax_rate_idTipos impositivos utilizados por artículos, facturas y el filtro tax_rate_id.
payment_methodsformas_pagopayment_method_idNoCatálogo de formas de pago utilizado por facturas y pagos.
invoicesissued_invoicesfacturasfacturas_emitidasinvoice_idNoFacturas emitidas con importes, impuestos, validez y pagos opcionales.
salessales_linesitem_salesventasventas_articulossalida_articuloscursor compuestoNoLíneas vendidas desde facturas y/o albaranes, con coste, beneficio y margen históricos.

Filtros de los recursos simples

FiltroValoresDescripción
idEntero > 0Devuelve un registro concreto por la clave primaria.
active / activo0, 1, allSolo está disponible en recursos con una columna activa configurada.
search / buscarTexto ≤ 100Búsqueda parcial sobre los campos documentados de cada recurso.
fields / camposLista separada por comasReduce la respuesta. La clave primaria se añade automáticamente.
after_id / desde_idEntero ≥ 0Continúa después de la última clave. No puede combinarse con id.
limit / limite1–200Por defecto 50. La API consulta un registro adicional para calcular has_more.
fields solo existe en recursos simples
invoices y sales devuelven siempre una estructura fija y documentada.

Cómo obtener los identificadores usados por los filtros

FiltroRecurso que debe consultarCampo a utilizar
client_idclientsclient_id
user_id, owner_user_idusersuser_id
route_idroutesruta_id
series_idinvoice_seriesinvoice_group_id
invoice_type_idinvoice_typestipo_factura_id
family_idfamiliesfamilia_id
item_iditemsitem_lookup_id
item_type_iditem_typestipo_articulo_id
tax_rate_idtax_ratestax_rate_id
payment_method_idpayment_methodspayment_method_id
Descripción actual e histórica del artículo
items.item_description devuelve la descripción actual del catálogo. En cambio, sales.item.description conserva la descripción guardada en la línea del documento.

Diccionario completo de recursos simples

Abra cada recurso para ver alias, búsqueda, llamada recomendada y campos autorizados.

Clientes — clients24 campos autorizados

Maestro de clientes, datos fiscales y comerciales actuales.

Recurso
clients
Alias
clientes
Clave primaria
client_id
Filtro active
0, 1, all o todos

Campos usados por search

client_nameclient_name_comercialclient_nifclient_email

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=clients&active=1&limit=5&fields=client_id,client_name,client_nif,client_email,client_active"

Campos permitidos en fields

CampoSignificado
client_idIdentificador interno del cliente.
client_date_createdFecha de creación del cliente.
client_date_modifiedFecha de la última modificación.
client_numidNúmero o código interno asignado al cliente.
client_nameNombre fiscal o razón social.
client_name_comercialNombre comercial.
client_nifNIF, CIF o identificador fiscal.
client_address_1Primera línea de dirección.
client_address_2Segunda línea de dirección.
client_cityPoblación.
client_stateProvincia, estado o región.
client_zipCódigo postal.
client_countryPaís.
client_contactoPersona de contacto.
client_phoneTeléfono principal.
client_mobileTeléfono móvil.
client_emailCorreo electrónico.
client_webSitio web.
client_activeIndicador de cliente activo.
client_tarifaTarifa de precios asignada.
client_ruta_idIdentificador de la ruta actual del cliente.
user_idIdentificador del propietario actual del cliente.
recargoequivalenciaConfiguración de recargo de equivalencia.
retencionprofesionalConfiguración de retención profesional.
Artículos — items29 campos autorizados

Catálogo actual de artículos, descripción, precios, stock y clasificación.

Recurso
items
Alias
articulos
Clave primaria
item_lookup_id
Filtro active
0, 1, all o todos

Campos usados por search

item_nameitem_skuitem_barcode

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=items&active=1&limit=5&fields=item_lookup_id,item_name,item_description,item_sku,item_barcode,item_stock,item_price,item_familia"

Campos permitidos en fields

CampoSignificado
item_lookup_idIdentificador interno del artículo.
item_create_dateFecha de creación del artículo.
item_date_ultima_compraFecha de la última compra registrada.
item_date_ultima_ventaFecha de la última venta registrada.
item_activeIndicador de artículo activo.
item_web_activateIndicador de publicación o uso web.
item_erp_activateIndicador de disponibilidad en el ERP.
item_pos_activateIndicador de disponibilidad en el punto de venta.
item_nosaleIndicador de artículo no vendible.
item_is_stockIndica si el artículo se controla por stock.
item_stockStock actual almacenado en el catálogo.
item_nameNombre actual del artículo; en algunas cuentas se utiliza como código interno.
item_descriptionDescripción actual de la ficha del artículo; se diferencia de la descripción histórica guardada en cada línea de venta.
item_skuReferencia o SKU.
item_barcodeCódigo de barras.
item_unidadUnidad de medida.
item_cost_pricePrecio de coste actual.
item_pricePrecio principal de venta.
item_tarifa2Precio de la tarifa 2.
item_tarifa3Precio de la tarifa 3.
item_tarifa4Precio de la tarifa 4.
item_tarifa5Precio de la tarifa 5.
item_tax_rate_idIdentificador del impuesto asignado.
item_familiaIdentificador de la familia actual.
item_subfamiliaIdentificador de la subfamilia actual.
item_tipoarticuloidIdentificador del tipo de artículo actual.
item_formato_idIdentificador del formato predeterminado.
imageNombre o referencia de imagen guardada.
item_imageurlURL de imagen asociada.
Proveedores — suppliers23 campos autorizados

Maestro de proveedores y sus datos fiscales, de contacto y contables.

Recurso
suppliers
Alias
proveedores
Clave primaria
proveedor_id
Filtro active
0, 1, all o todos

Campos usados por search

client_nameclient_name_comercialclient_nifclient_email

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=suppliers&active=1&limit=5&fields=proveedor_id,client_name,client_nif,client_email,client_active"

Campos permitidos en fields

CampoSignificado
proveedor_idIdentificador interno del proveedor.
client_date_createdFecha de creación.
client_date_modifiedFecha de la última modificación.
client_numidNúmero o código interno.
client_nameNombre fiscal o razón social.
client_name_comercialNombre comercial.
client_nifNIF, CIF o identificador fiscal.
client_address_1Primera línea de dirección.
client_address_2Segunda línea de dirección.
client_cityPoblación.
client_stateProvincia, estado o región.
client_zipCódigo postal.
client_countryPaís.
client_contactoPersona de contacto.
client_phoneTeléfono principal.
client_mobileTeléfono móvil.
client_emailCorreo electrónico.
client_webSitio web.
client_activeIndicador de proveedor activo.
client_comprasIndicador de uso del proveedor en compras.
client_gastosIndicador de uso del proveedor en gastos.
client_contableIndicador de uso contable del proveedor.
recargoequivalenciaConfiguración de recargo de equivalencia.
Familias de artículos — families4 campos autorizados

Catálogo de familias utilizado por los artículos y por el filtro family_id de ventas.

Recurso
families
Alias
familias
Clave primaria
familia_id
Filtro active
No admitido

Campos usados por search

familia_name

Filtro active no disponible
Enviar active=0 o active=1 en este recurso produce FILTER_NOT_SUPPORTED.

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=families&limit=100&fields=familia_id,familia_name,familia_web_activate"

Campos permitidos en fields

CampoSignificado
familia_idIdentificador de la familia.
familia_web_activateIndicador de publicación o uso web.
familia_nameNombre interno de la familia.
familia_name_tiendaNombre de la familia mostrado en tienda.
Tipos de artículo — item_types4 campos autorizados

Clasificación por tipo de artículo utilizada por item_type_id.

Recurso
item_types
Alias
tipos_articulo
Clave primaria
tipo_articulo_id
Filtro active
0, 1, all o todos

Campos usados por search

tipo_articulo_nametipo_articulo_descripcion

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=item_types&active=1&limit=100"

Campos permitidos en fields

CampoSignificado
tipo_articulo_idIdentificador del tipo de artículo.
tipo_articulo_activateIndicador de tipo activo.
tipo_articulo_nameNombre del tipo.
tipo_articulo_descripcionDescripción del tipo.
Series de factura — invoice_series7 campos autorizados

Series o grupos de facturación utilizados por series_id.

Recurso
invoice_series
Alias
series_facturaseries
Clave primaria
invoice_group_id
Filtro active
0, 1, all o todos

Campos usados por search

invoice_group_nameinvoice_group_name_menuinvoice_group_prefix

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoice_series&active=1&limit=100"

Campos permitidos en fields

CampoSignificado
invoice_group_idIdentificador de la serie o grupo.
invoice_group_activateIndicador de serie activa.
invoice_group_nameNombre de la serie.
invoice_group_name_menuNombre corto o mostrado en menús.
invoice_group_prefixPrefijo de numeración.
invoice_group_prefix_yearConfiguración de inclusión del año en el prefijo.
invoice_group_prefix_monthConfiguración de inclusión del mes en el prefijo.
Tipos de factura — invoice_types4 campos autorizados

Catálogo de tipos de factura utilizado por invoice_type_id.

Recurso
invoice_types
Alias
tipos_factura
Clave primaria
tipo_factura_id
Filtro active
0, 1, all o todos

Campos usados por search

tipo_factura_nametipo_factura_descripcion

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoice_types&active=1&limit=100"

Campos permitidos en fields

CampoSignificado
tipo_factura_idIdentificador del tipo de factura.
tipo_factura_activateIndicador de tipo activo.
tipo_factura_nameNombre del tipo de factura.
tipo_factura_descripcionDescripción del tipo.
Rutas — routes3 campos autorizados

Rutas comerciales o de reparto utilizadas por route_id.

Recurso
routes
Alias
rutas
Clave primaria
ruta_id
Filtro active
0, 1, all o todos

Campos usados por search

ruta_name

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=routes&active=1&limit=100"

Campos permitidos en fields

CampoSignificado
ruta_idIdentificador de la ruta.
ruta_activeIndicador de ruta activa.
ruta_nameNombre de la ruta.
Usuarios y comerciales — users4 campos autorizados

Usuarios disponibles para filtros comerciales. Excluye usuarios configurados como solo catálogo.

Recurso
users
Alias
usuarios
Clave primaria
user_id
Filtro active
No admitido

Campos usados por search

user_nameuser_company

Filtro active no disponible
Enviar active=0 o active=1 en este recurso produce FILTER_NOT_SUPPORTED.
Usuarios solo catálogo excluidos
El recurso aplica internamente acceso_solo_catalogo = 0.

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=users&limit=100&fields=user_id,user_name,user_company,user_type"

Campos permitidos en fields

CampoSignificado
user_idIdentificador del usuario.
user_nameNombre del usuario o comercial.
user_companyEmpresa asociada al usuario.
user_typeTipo de usuario.
Impuestos — tax_rates6 campos autorizados

Tipos impositivos utilizados por artículos, facturas y el filtro tax_rate_id.

Recurso
tax_rates
Alias
impuestos
Clave primaria
tax_rate_id
Filtro active
0, 1, all o todos

Campos usados por search

tax_rate_name

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=tax_rates&active=1&limit=100"

Campos permitidos en fields

CampoSignificado
tax_rate_idIdentificador del tipo impositivo.
tax_rate_activeIndicador de impuesto activo.
tax_rate_nameNombre del impuesto.
tax_rate_tipoClasificación interna del impuesto.
tax_rate_percentPorcentaje impositivo.
recargoequivalenciaPorcentaje de recargo de equivalencia asociado.
Formas de pago — payment_methods2 campos autorizados

Catálogo de formas de pago utilizado por facturas y pagos.

Recurso
payment_methods
Alias
formas_pago
Clave primaria
payment_method_id
Filtro active
No admitido

Campos usados por search

payment_method_name

Filtro active no disponible
Enviar active=0 o active=1 en este recurso produce FILTER_NOT_SUPPORTED.

Ejemplo recomendado

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=payment_methods&limit=100"

Campos permitidos en fields

CampoSignificado
payment_method_idIdentificador de la forma de pago.
payment_method_nameNombre de la forma de pago.
Ejemplo de respuesta de resourcesFragmento ilustrativo
{
  "ok": true,
  "read_only": true,
  "version": "1.1.1",
  "account": "Empresa de ejemplo",
  "defaults": {
    "limit": 50,
    "maximum_limit": 200,
    "complex_date_range": "mes_actual",
    "maximum_date_range_days": 366
  },
  "resources": [
    {
      "resource": "clients",
      "nombre": "clientes",
      "description": "Maestro de clientes.",
      "primary_key": "client_id",
      "fields": ["client_id", "client_name", "..."],
      "filters": ["id", "active", "search", "after_id", "limit", "fields"],
      "pagination": "after_id",
      "maximum_limit": 200
    }
  ],
  "request_id": "a1b2c3d4e5f60708"
}
Ejemplo de respuesta de un recurso simpleclients con fields y paginación
{
  "ok": true,
  "read_only": true,
  "version": "1.1.1",
  "account": "Empresa de ejemplo",
  "resource": "clients",
  "nombre": "clientes",
  "filters": {
    "id": null,
    "active": "1",
    "search": null,
    "after_id": 0,
    "limit": 1,
    "fields": ["client_id", "client_name", "client_nif", "client_email"]
  },
  "pagination": {
    "returned": 1,
    "has_more": true,
    "next_after_id": 12
  },
  "data": [
    {
      "client_id": 12,
      "client_name": "CLIENTE DE EJEMPLO, S.L.",
      "client_nif": "B12345678",
      "client_email": "[email protected]"
    }
  ],
  "request_id": "a1b2c3d4e5f60708"

}
04 · Documentos

Facturas emitidas — resource=invoices

Consulta estructurada de cabeceras de factura, cliente, serie, estado, validez, importes, impuestos y pagos opcionales.

Alias aceptados

invoicesissued_invoicesfacturasfacturas_emitidas

Para nuevas integraciones use preferentemente el nombre canónico invoices.

Periodo predeterminado

Sin fechas y sin id: desde el primer día del mes actual hasta hoy.

Impuestos

Siempre se devuelven en data[].taxes como colección estructurada.

Pagos

Solo aparecen con include_payments=1 para evitar carga innecesaria.

Filtros disponibles

ParámetroAliasFormatoPredeterminadoDescripción
idinvoice_idEntero mayor que 0Sin filtroObtiene una factura concreta. Cuando se usa, no se aplica el periodo predeterminado.
after_iddesde_idEntero igual o mayor que 00Paginación ascendente por invoice_id. No puede combinarse con id.
date_fromfecha_desde fechaini desde_fechaYYYY-MM-DDPrimer día del mes actualFecha de emisión inicial, inclusiva. Debe enviarse junto con date_to.
date_tofecha_hasta fechafin hasta_fechaYYYY-MM-DDFecha actualFecha de emisión final, inclusiva. El intervalo máximo es de 366 días.
client_idclienteEntero mayor que 0Sin filtroFiltra por el cliente de la factura.
user_idusuarioEntero mayor que 0Sin filtroFiltra por el usuario o comercial guardado en la factura.
owner_user_idpropietario_user_idEntero mayor que 0Sin filtroFiltra por el propietario actual del cliente.
route_idruta_idEntero mayor que 0Sin filtroFiltra por la ruta actual del cliente.
series_idserie invoice_group_idEntero mayor que 0Sin filtroFiltra por serie o grupo de facturación.
invoice_type_idtipo_factura tipofacturaEntero mayor que 0Sin filtroFiltra por tipo de factura.
statusestadoEnumallall, draft, sent, viewed, paid o pending. También admite 1 a 6 como alias históricos.
validityvalidezEnumallall, valid, cancelled, substituted o invalid.
searchbuscarTexto, máximo 100 caracteresSin búsquedaBusca por número, referencia, nombre o NIF del cliente, tanto en la factura como en el maestro actual.
include_paymentsincluir_pagosBooleano 0/10Añade data[].payments. También acepta true/false, yes/no y si/sí.
limitlimiteEntero de 1 a 20050Número máximo de facturas por página.

Valores de status

ValorComportamiento
allSin filtro de estado.
draft / 1invoice_status_id = 1.
sent / 2invoice_status_id = 2.
viewed / 3invoice_status_id = 3.
paid / 4Saldo absoluto menor o igual que 0,01.
pending / 5 / 6Saldo absoluto mayor que 0,01; incluye saldo pendiente y saldo a favor.

Valores de validity

ValorComportamiento
allIncluye válidas, anuladas y sustituidas.
validNo anulada y no sustituida.
cancelledAnulada.
substitutedSustituida.
invalidAnulada o sustituida.
Alias de valores por compatibilidad
status: todo, todos, borrador, enviados, vistos, pagados y pendientes. validity: todos, válidas, canceled, anuladas, sustituidas e inválidas. Para integraciones nuevas utilice los valores canónicos en inglés.
status=6 no elimina el límite de fechas
El valor histórico 6 se normaliza a pending. Para pendientes antiguos recorra periodos explícitos de hasta 366 días.
Estado documental y estado de cobro son distintos
status.code representa el estado documental. El cobro se informa en status.payment_status: paid, pending o credit.

Ejemplos de consulta

Consultas habituales de facturasPeriodo, ID, pagos, pendientes, búsqueda y página siguiente

Facturas del periodo

Hasta 100 facturas emitidas entre dos fechas.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoices&date_from=2026-07-01&date_to=2026-07-26&limit=100"

Factura exacta por ID

Permite recuperar una factura antigua sin enviar fechas.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoices&id=12345"

Factura con pagos

Añade la colección payments.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoices&id=12345&include_payments=1"

Facturas válidas y pendientes

Combina saldo pendiente con exclusión de anuladas y sustituidas.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoices&date_from=2026-01-01&date_to=2026-12-31&status=pending&validity=valid&limit=100"

Cliente y serie

Los ID se obtienen desde clients e invoice_series.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoices&date_from=2026-01-01&date_to=2026-12-31&client_id=949&series_id=1"

Búsqueda por texto

Busca por número, referencia, nombre o NIF.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoices&date_from=2026-01-01&date_to=2026-12-31&search=garcia"

Página siguiente

Conserve exactamente los mismos filtros y añada next_after_id.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=invoices&date_from=2026-01-01&date_to=2026-12-31&status=pending&validity=valid&limit=100&after_id=12345"

Datos históricos y actuales

  • Nombre, NIF y datos fiscales principales priorizan la instantánea guardada en la factura.
  • Dirección estructurada, propietario y ruta proceden del maestro actual del cliente.
  • Importes e impuestos corresponden al documento.
  • Anuladas y sustituidas no se ocultan por defecto: se identifican en validity.

Origen de impuestos

La fuente principal es fi_invoice_tax_rates. Para facturas históricas sin desglose, la API agrupa las líneas y marca el origen.

source=invoice_tax_ratessource=invoice_items_fallback

Diccionario de campos de data[]

Identificación y fechas11 rutas documentadas
Ruta JSONTipoSignificado
invoice_idintegerIdentificador de la factura.
numberstringNúmero completo de factura.
referencestring|nullReferencia externa o interna.
descriptionstring|nullDescripción de la operación.
originstring|nullOrigen indicado en la factura.
incotermsstring|nullIncoterm asociado.
dates.issueddate|nullFecha de emisión.
dates.operationdate|nullFecha de operación.
dates.duedate|nullFecha de vencimiento.
dates.modified_atdatetime|nullÚltima modificación.
dates.confirmed_atdatetime|nullFecha y hora de confirmación.
Estado y validez11 rutas documentadas
Ruta JSONTipoSignificado
status.idintegerEstado interno de la factura.
status.codestringdraft, sent, viewed o unknown según status.id.
status.confirmedbooleanIndica si la factura está confirmada.
status.payment_statusstringpaid, pending o credit según el saldo.
validity.is_validbooleantrue cuando no está anulada ni sustituida.
validity.cancelledbooleanIndica anulación TicketBAI/VeriFactu u otra anulación registrada.
validity.cancellation_systemstring|nullverifactu, ticketbai, unspecified o null.
validity.substitutedbooleanIndica que la factura fue sustituida.
validity.rectifies_invoice_idinteger|nullID de la factura original que este documento rectifica, almacenado en invoice_rec_id.
validity.rectified_from_invoice_idinteger|nullID adicional relacionado con el origen de la rectificación, almacenado en invoice_rec_from_invoice_id.
validity.rectification_typeintegerCódigo interno del tipo de rectificación.
Factura electrónica, serie y tipo10 rutas documentadas
Ruta JSONTipoSignificado
electronic_invoice.ticketbai_typestring|nullTipo TicketBAI.
electronic_invoice.ticketbai_numberstring|nullNúmero o identificador TicketBAI.
electronic_invoice.verifactu_statusstring|nullEstado VeriFactu almacenado.
electronic_invoice.verifactu_csvstring|nullCSV VeriFactu.
electronic_invoice.verifactu_qr_urlstring|nullURL del QR VeriFactu.
electronic_invoice.verifactu_validationstring|nullURL de validación VeriFactu.
series.invoice_group_idintegerID de serie o grupo.
series.namestring|nullNombre de la serie.
invoice_type.invoice_type_idintegerID del tipo de factura.
invoice_type.namestring|nullNombre del tipo de factura.
Participantes y cliente25 rutas documentadas
Ruta JSONTipoSignificado
sellerobject|nullComercial de la factura.
seller.user_idinteger|nullID del comercial cuando seller no es null.
seller.namestring|nullNombre del comercial.
ownerobject|nullPropietario actual del cliente.
owner.user_idinteger|nullID del propietario cuando owner no es null.
owner.namestring|nullNombre del propietario actual.
routeobject|nullRuta actual del cliente.
route.route_idinteger|nullID de la ruta cuando route no es null.
route.namestring|nullNombre de la ruta actual.
client.client_idintegerID del cliente.
client.namestring|nullNombre guardado en la factura; si falta, nombre actual. En factura simplificada de contado se devuelve una etiqueta genérica.
client.nifstring|nullNIF guardado en la factura; si falta, NIF actual. En factura simplificada de contado se devuelve vacío/null.
client.fiscal_datastring|nullDatos fiscales textuales guardados en la factura.
client.address_1string|nullDirección actual del maestro de clientes.
client.address_2string|nullSegunda línea de dirección actual.
client.postal_codestring|nullCódigo postal actual.
client.citystring|nullPoblación actual.
client.provincestring|nullProvincia o región actual.
client.countrystring|nullPaís actual.
client.phonestring|nullTeléfono actual.
client.mobilestring|nullMóvil actual.
client.emailstring|nullEmail actual.
issuer.namestring|nullNombre del emisor guardado en la factura.
issuer.nifstring|nullNIF del emisor guardado en la factura.
issuer.fiscal_datastring|nullDatos fiscales del emisor guardados en la factura.
Configuración e importes23 rutas documentadas
Ruta JSONTipoSignificado
payment_method_idintegerForma de pago de la factura.
bank_method_idintegerCuenta o método bancario asociado.
tax_exemption_causestring|nullCausa de exención fiscal.
display_options.hide_taxesbooleanIndica que la factura oculta impuestos en su presentación.
display_options.hide_line_pricebooleanIndica que la factura oculta precios de línea.
amounts.item_subtotalnumberSubtotal de líneas.
amounts.item_tax_totalnumberImpuesto calculado en líneas.
amounts.tax_totalnumberTotal de impuestos de la factura.
amounts.surcharge_totalnumberRecargo de equivalencia.
amounts.irpf_totalnumberImporte de IRPF.
amounts.irpf_percentnumberPorcentaje de IRPF.
amounts.retention_totalnumberImporte de retención.
amounts.retention_percentnumberPorcentaje de retención.
amounts.suppliesnumberSuplidos.
amounts.irpf_on_totalnumberIRPF calculado sobre el total.
amounts.irpf_on_total_percentnumberPorcentaje de IRPF sobre el total.
amounts.totalnumberTotal de la factura.
amounts.paidnumberImporte pagado.
amounts.balancenumberSaldo pendiente; negativo implica saldo a favor.
amounts.profitnumberBeneficio almacenado.
currency.symbolstring|nullSímbolo de la divisa.
currency.exchange_ratenumber|nullTipo de cambio; null cuando no se aplica.
currency.converted_totalnumber|nullTotal convertido; null cuando no se aplica.
Impuestos y pagos24 rutas documentadas
Ruta JSONTipoSignificado
taxes[]arrayDesglose fiscal de la factura.
taxes[].invoice_tax_rate_idinteger|nullID del desglose; null en recuperación histórica.
taxes[].tax_rate_idintegerID del tipo impositivo.
taxes[].namestring|nullNombre del impuesto.
taxes[].percentnumberPorcentaje de impuesto.
taxes[].basenumberBase del tipo impositivo.
taxes[].tax_amountnumberCuota del impuesto.
taxes[].surcharge_percentnumberPorcentaje de recargo.
taxes[].surcharge_amountnumberCuota de recargo.
taxes[].include_item_taxbooleanIndicador almacenado en el desglose.
taxes[].sourcestringinvoice_tax_rates o invoice_items_fallback.
payments[]array opcionalSolo aparece con include_payments=1.
payments[].payment_idintegerID del pago.
payments[].numberstring|nullNúmero o referencia del pago.
payments[].datedate|nullFecha del pago.
payments[].amountnumberImporte del pago.
payments[].paidbooleanIndicador de pago realizado.
payments[].returnedbooleanIndicador de pago devuelto.
payments[].payment_method_idintegerID de forma de pago.
payments[].payment_method_namestring|nullNombre de la forma de pago.
payments[].bank_method_idintegerID del método o cuenta bancaria.
payments[].bank_method_namestring|nullNombre del método bancario.
payments[].bank_accounting_codestring|nullCódigo contable bancario.
payments[].notestring|nullNota del pago, limitada a 1.000 caracteres.
Ejemplo completo de respuesta de una facturaIncluye impuestos y payments
Valores ilustrativos
La colección payments solo aparece con include_payments=1.
{
  "ok": true,
  "read_only": true,
  "version": "1.1.1",
  "account": "Empresa de ejemplo",
  "resource": "invoices",
  "nombre": "facturas_emitidas",
  "filters": {
    "id": 12345,
    "date_from": null,
    "date_to": null,
    "date_defaulted": false,
    "client_id": null,
    "user_id": null,
    "owner_user_id": null,
    "route_id": null,
    "series_id": null,
    "invoice_type_id": null,
    "status": "all",
    "validity": "all",
    "search": null,
    "include_payments": true,
    "after_id": 0,
    "limit": 50
  },
  "pagination": {
    "returned": 1,
    "has_more": false,
    "next_after_id": null
  },
  "data": [
    {
      "invoice_id": 12345,
      "number": "F/2026/00125",
      "reference": "PED-7781",
      "description": "Venta de material",
      "origin": null,
      "incoterms": null,
      "dates": {
        "issued": "2026-07-10",
        "operation": "2026-07-10",
        "due": "2026-08-09",
        "modified_at": "2026-07-10 12:41:03",
        "confirmed_at": "2026-07-10 12:40:55"
      },
      "status": {
        "id": 2,
        "code": "sent",
        "confirmed": true,
        "payment_status": "pending"
      },
      "validity": {
        "is_valid": true,
        "cancelled": false,
        "cancellation_system": null,
        "substituted": false,
        "rectifies_invoice_id": null,
        "rectified_from_invoice_id": null,
        "rectification_type": 0
      },
      "electronic_invoice": {
        "ticketbai_type": null,
        "ticketbai_number": null,
        "verifactu_status": "REGISTRADA",
        "verifactu_csv": "CSV-DE-EJEMPLO",
        "verifactu_qr_url": "https://ejemplo.test/qr",
        "verifactu_validation": "https://ejemplo.test/validar"
      },
      "series": {"invoice_group_id": 1, "name": "FACTURAS"},
      "invoice_type": {"invoice_type_id": 1, "name": "FACTURA COMPLETA"},
      "seller": {"user_id": 3, "name": "ANA COMERCIAL"},
      "owner": {"user_id": 3, "name": "ANA COMERCIAL"},
      "route": {"route_id": 2, "name": "RUTA NORTE"},
      "client": {
        "client_id": 949,
        "name": "CLIENTE DE EJEMPLO, S.L.",
        "nif": "B12345678",
        "fiscal_data": "Calle Ejemplo 1, 28000 Madrid",
        "address_1": "Calle Ejemplo 1",
        "address_2": null,
        "postal_code": "28000",
        "city": "Madrid",
        "province": "Madrid",
        "country": "España",
        "phone": "910000000",
        "mobile": null,
        "email": "[email protected]"
      },
      "issuer": {
        "name": "EMPRESA EMISORA, S.L.",
        "nif": "B87654321",
        "fiscal_data": "Avenida Principal 10, Madrid"
      },
      "payment_method_id": 2,
      "bank_method_id": 1,
      "tax_exemption_cause": null,
      "display_options": {"hide_taxes": false, "hide_line_price": false},
      "amounts": {
        "item_subtotal": 100.0,
        "item_tax_total": 21.0,
        "tax_total": 21.0,
        "surcharge_total": 0.0,
        "irpf_total": 0.0,
        "irpf_percent": 0.0,
        "retention_total": 0.0,
        "retention_percent": 0.0,
        "supplies": 0.0,
        "irpf_on_total": 0.0,
        "irpf_on_total_percent": 0.0,
        "total": 121.0,
        "paid": 50.0,
        "balance": 71.0,
        "profit": 34.5
      },
      "currency": {"symbol": "€", "exchange_rate": null, "converted_total": null},
      "taxes": [
        {
          "invoice_tax_rate_id": 987,
          "tax_rate_id": 1,
          "name": "IVA 21%",
          "percent": 21.0,
          "base": 100.0,
          "tax_amount": 21.0,
          "surcharge_percent": 0.0,
          "surcharge_amount": 0.0,
          "include_item_tax": false,
          "source": "invoice_tax_rates"
        }
      ],
      "payments": [
        {
          "payment_id": 4567,
          "number": "REC-4567",
          "date": "2026-07-12",
          "amount": 50.0,
          "paid": true,
          "returned": false,
          "payment_method_id": 2,
          "payment_method_name": "TRANSFERENCIA",
          "bank_method_id": 1,
          "bank_method_name": "BANCO PRINCIPAL",
          "bank_accounting_code": "572000001",
          "note": null
        }
      ]
    }
  ],
  "request_id": "a1b2c3d4e5f60708"
}
05 · Líneas vendidas

Venta y salida de artículos — resource=sales

Consulta líneas de facturas y/o albaranes con documento, cliente, artículo, cantidades, precios, impuestos, coste, beneficio, margen y comisión.

Alias aceptados

salessales_linesitem_salesventasventas_articulossalida_articulos

Fuente predeterminada

source=all: combina facturas y albaranes.

Base predeterminada

basis=invoices: prevalece la factura cuando existe vínculo.

Paginación

Cursor opaco por fecha, fuente, documento y línea.

Filtros disponibles

ParámetroAliasFormatoPredeterminadoDescripción
date_fromfecha_desde fechaini desde_fechaYYYY-MM-DDPrimer día del mes actualFecha inicial del documento, inclusiva. Debe enviarse junto con date_to.
date_tofecha_hasta fechafin hasta_fechaYYYY-MM-DDFecha actualFecha final del documento, inclusiva. El intervalo máximo es de 366 días.
sourceorigenEnumallall, invoices o delivery_notes. Decide qué fuentes se consultan.
basisdesdeEnuminvoicesinvoices o delivery_notes. Decide qué documento prevalece al deduplicar; solo afecta a source=all.
movementverEnumallall, sales o returns. sales exige cantidad > 0; returns exige cantidad < 0.
document_iddocumento_idEntero mayor que 0Sin filtroID de factura o albarán. Con source=all puede coincidir en ambas tablas.
client_idclienteEntero mayor que 0Sin filtroFiltra por cliente.
user_idusuarioEntero mayor que 0Sin filtroFiltra por el usuario o comercial del documento.
owner_user_idpropietario_user_idEntero mayor que 0Sin filtroFiltra por el propietario actual del cliente.
route_idruta_idEntero mayor que 0Sin filtroFiltra por la ruta actual del cliente.
family_idfamiliaEntero mayor que 0Sin filtroFiltra por la familia actual del artículo.
item_idarticuloEntero mayor que 0Sin filtroFiltra por item_lookup_id.
item_type_idtipoEntero mayor que 0Sin filtroFiltra por el tipo actual del artículo.
tax_rate_idimpuesto_idEntero mayor que 0Sin filtroFiltra por tipo impositivo. El valor 0 equivale a no filtrar, por lo que no selecciona exclusivamente líneas exentas.
searchbuscarTexto, máximo 100 caracteresSin búsquedaBusca en documento, cliente, línea, artículo, SKU y código de barras.
cursorTexto opacoSin cursorCursor devuelto por pagination.next_cursor. No debe modificarse ni reutilizarse con otros filtros; longitud máxima admitida: 1.024 caracteres.
limitlimiteEntero de 1 a 20050Número máximo de líneas por página.

Cómo interactúan source y basis

sourcebasisResultado
allinvoicesIncluye facturas válidas y albaranes aún no vinculados a una factura existente. Es la combinación predeterminada.
alldelivery_notesIncluye albaranes y omite facturas procedentes de un albarán vinculado.
invoicesCualquier valor válidoConsulta únicamente líneas de factura. basis no realiza deduplicación.
delivery_notesCualquier valor válidoConsulta únicamente líneas de albarán. basis no realiza deduplicación.
Alias de valores admitidos
source: both, todos, invoice, factura, delivery_note y albaranes. basis: invoice, factura, delivery_note y albaranes. movement: todos, ventas, sale, return y devoluciones. Se recomiendan los valores canónicos en inglés.

Facturas incluidas

La rama de facturas excluye documentos anulados y sustituidos, además de líneas técnicas cuyo nombre contiene ALB-.

Movimiento

sales exige cantidad positiva; returns, cantidad negativa. all no aplica condición de signo.

Ejemplos de consulta

Consultas habituales de ventasPeriodo, familia, devoluciones, fuentes, búsqueda y cursor

Ventas del periodo

Aplica source=all, basis=invoices y movement=all.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=sales&date_from=2026-07-01&date_to=2026-07-26&limit=100"

Ventas positivas de una familia

La familia procede del catálogo actual.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=sales&date_from=2026-01-01&date_to=2026-12-31&family_id=4&movement=sales&limit=100"

Devoluciones de un artículo

Filtra cantidades negativas del artículo.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=sales&date_from=2026-01-01&date_to=2026-12-31&item_id=57248&movement=returns"

Solo facturas

Consulta únicamente líneas de factura.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=sales&date_from=2026-07-01&date_to=2026-07-26&source=invoices"

Vista basada en albaranes

Los albaranes prevalecen al deduplicar.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=sales&date_from=2026-07-01&date_to=2026-07-26&source=all&basis=delivery_notes"

Búsqueda por documento o artículo

Busca en documento, cliente, artículo, SKU y código de barras.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=sales&date_from=2026-01-01&date_to=2026-12-31&search=SKU-100"

Página siguiente

Sustituya CURSOR_DEVUELTO por pagination.next_cursor y conserve los filtros.

curl -sS \
  -H "X-API-Key: TU_TOKEN_API" \
  -H "Accept: application/json" \
  "https://api.facturaone.com/v1/?resource=sales&date_from=2026-07-01&date_to=2026-07-26&source=all&basis=invoices&limit=100&cursor=CURSOR_DEVUELTO"

Datos históricos y actuales en cada línea

  • Históricos: nombre y descripción de línea, lote, unidad, formato, cantidad, precio, coste, beneficio, margen, descuento e importes.
  • Actuales: SKU, código de barras, familia, tipo, nombre de la unidad de formato y porcentaje de comisión.
  • pricing.unit_cost, unit_profit y margin_percent se leen de la línea histórica; no se recalculan con el coste actual.
  • Si el artículo cambia de familia, una consulta histórica por family_id refleja la familia actual.
  • Propietario y ruta proceden del maestro actual del cliente.
page_totals no representa todo el periodo
Solo suma las líneas de la página actual. Para el total completo debe recorrer todas las páginas y acumular los resultados.

Diccionario de campos de data[]

Fuente y documento8 rutas documentadas
Ruta JSONTipoSignificado
sourcestringinvoice o delivery_note.
document.document_idintegerID de factura o albarán según source.
document.line_idintegerID de la línea.
document.linked_invoice_idinteger|nullFactura vinculada al albarán; en facturas es null.
document.status_idintegerEstado interno del documento.
document.datedate|nullFecha del documento.
document.numberstringNúmero del documento.
document.referencestring|nullReferencia del documento.
Cliente y responsables12 rutas documentadas
Ruta JSONTipoSignificado
client.client_idintegerID del cliente.
client.namestring|nullNombre del cliente.
client.nifstring|nullNIF del cliente.
sellerobject|nullComercial del documento.
seller.user_idinteger|nullID del comercial cuando seller no es null.
seller.namestring|nullNombre del comercial.
ownerobject|nullPropietario actual del cliente.
owner.user_idinteger|nullID del propietario cuando owner no es null.
owner.namestring|nullNombre del propietario actual.
routeobject|nullRuta actual del cliente.
route.route_idinteger|nullID de la ruta cuando route no es null.
route.namestring|nullNombre de la ruta actual.
Artículo y clasificación18 rutas documentadas
Ruta JSONTipoSignificado
item.item_lookup_idintegerID del artículo del catálogo; puede ser 0 si la línea es libre.
item.skustring|nullSKU actual del catálogo.
item.barcodestring|nullCódigo de barras actual.
item.namestring|nullNombre histórico guardado en la línea, limitado a 500 caracteres.
item.descriptionstring|nullDescripción histórica guardada en la línea, limitada a 2.000 caracteres.
item.lotstring|nullLote de la línea.
item.unitstring|nullUnidad guardada en la línea.
item.familyobject|nullFamilia actual del artículo.
item.family.family_idinteger|nullID de la familia cuando family no es null.
item.family.namestring|nullNombre actual de la familia.
item.typeobject|nullTipo actual del artículo.
item.type.item_type_idinteger|nullID del tipo cuando type no es null.
item.type.namestring|nullNombre actual del tipo.
item.formatobject|nullFormato asociado a la línea.
item.format.format_idinteger|nullID de formato guardado en la línea.
item.format.unitsnumberUnidades de formato guardadas en la línea.
item.format.unitstring|nullNombre actual de la unidad del catálogo de formatos.
quantitynumberCantidad de la línea, con hasta 4 decimales.
Precio, coste, margen, impuesto y comisión15 rutas documentadas
Ruta JSONTipoSignificado
pricing.unit_pricenumberPrecio unitario histórico guardado en la línea.
pricing.unit_costnumberCoste unitario histórico guardado en item_cost_price de la línea de factura o albarán.
pricing.unit_profitnumberBeneficio unitario histórico guardado en item_beneficio de la línea de factura o albarán.
pricing.margin_percentnumberMargen histórico guardado en item_margen de la línea de factura o albarán.
pricing.discount_percentnumberPorcentaje de descuento.
pricing.discount_amountnumberImporte calculado del descuento.
pricing.subtotalnumberSubtotal de la línea.
pricing.tax.tax_rate_idintegerID del impuesto de la línea.
pricing.tax.namestring|nullNombre del impuesto.
pricing.tax.percentnumberPorcentaje efectivo del impuesto.
pricing.tax.amountnumberCuota de impuesto.
pricing.tax.surcharge_amountnumberCuota de recargo de equivalencia.
pricing.totalnumberTotal de la línea.
commission.percentnumberPorcentaje actual de comisión del artículo.
commission.amountnumberComisión calculada sobre el subtotal.

Campos de page_totals

CampoTipoSignificado en la página actual
quantitynumberSuma de cantidades, incluidas negativas cuando hay devoluciones.
discount_amountnumberImporte de descuento de las líneas.
subtotalnumberSuma de bases o subtotales.
tax_amountnumberSuma de cuotas de impuesto.
surcharge_amountnumberSuma de cuotas de recargo de equivalencia.
totalnumberSuma del total de las líneas.
commission_amountnumberSuma de la comisión calculada.
Ejemplo completo de respuesta de ventasLínea de factura, cursor y totales de página
Valores ilustrativos
Cuando source sea delivery_note, document.document_id será el ID del albarán.
{
  "ok": true,
  "read_only": true,
  "version": "1.1.1",
  "account": "Empresa de ejemplo",
  "resource": "sales",
  "nombre": "salida_articulos",
  "filters": {
    "date_from": "2026-07-01",
    "date_to": "2026-07-15",
    "date_defaulted": false,
    "source": "all",
    "basis": "invoices",
    "movement": "sales",
    "document_id": null,
    "client_id": null,
    "user_id": null,
    "owner_user_id": null,
    "route_id": null,
    "family_id": 4,
    "item_id": null,
    "item_type_id": null,
    "tax_rate_id": null,
    "search": null,
    "limit": 1
  },
  "pagination": {
    "returned": 1,
    "has_more": true,
    "next_cursor": "eyJ2IjoxLCJmIjoiLi4uIn0"
  },
  "page_totals": {
    "quantity": 2.0,
    "discount_amount": 10.0,
    "subtotal": 90.0,
    "tax_amount": 18.9,
    "surcharge_amount": 0.0,
    "total": 108.9,
    "commission_amount": 1.8
  },
  "data": [
    {
      "source": "invoice",
      "document": {
        "document_id": 12345,
        "line_id": 67890,
        "linked_invoice_id": null,
        "status_id": 2,
        "date": "2026-07-10",
        "number": "F/2026/00125",
        "reference": "PED-7781"
      },
      "client": {
        "client_id": 949,
        "name": "CLIENTE DE EJEMPLO, S.L.",
        "nif": "B12345678"
      },
      "seller": {"user_id": 3, "name": "ANA COMERCIAL"},
      "owner": {"user_id": 3, "name": "ANA COMERCIAL"},
      "route": {"route_id": 2, "name": "RUTA NORTE"},
      "item": {
        "item_lookup_id": 57248,
        "sku": "SKU-100",
        "barcode": "8400000000100",
        "name": "ARTÍCULO DE EJEMPLO",
        "description": "Descripción guardada en la línea",
        "lot": "L-2026-07",
        "unit": "ud",
        "family": {"family_id": 4, "name": "CONSUMIBLES"},
        "type": {"item_type_id": 2, "name": "PRODUCTO"},
        "format": {"format_id": 1, "units": 1.0, "unit": "ud"}
      },
      "quantity": 2.0,
      "pricing": {
        "unit_price": 50.0,
        "unit_cost": 30.0,
        "unit_profit": 15.0,
        "margin_percent": 33.33,
        "discount_percent": 10.0,
        "discount_amount": 10.0,
        "subtotal": 90.0,
        "tax": {
          "tax_rate_id": 1,
          "name": "IVA 21%",
          "percent": 21.0,
          "amount": 18.9,
          "surcharge_amount": 0.0
        },
        "total": 108.9
      },
      "commission": {"percent": 2.0, "amount": 1.8}
    }
  ],
  "request_id": "a1b2c3d4e5f60708"
}
06 · Recorrido

Paginación correcta

La API no utiliza offset. Emplea paginación por clave en catálogos y facturas, y cursor compuesto en ventas.

Recursos simples e invoices

{
  "pagination": {
    "returned": 100,
    "has_more": true,
    "next_after_id": 12345
  }
}

Añada after_id=12345 y mantenga los demás filtros.

sales

{
  "pagination": {
    "returned": 100,
    "has_more": true,
    "next_cursor": "eyJ2IjoxLC..."
  }
}

Envíe el valor completo como cursor. No lo modifique.

No cambie filtros entre páginas
En ventas, el cursor contiene una huella de los filtros y se rechazará con CURSOR_FILTER_MISMATCH cuando detecte otra combinación.

Patrón recomendado

  1. Realice la primera petición sin after_id ni cursor.
  2. Procese todos los elementos de data.
  3. Si has_more es true, guarde la clave de continuación.
  4. Repita la misma URL añadiendo únicamente esa clave.
  5. Finalice cuando has_more sea false.
07 · Diagnóstico

Errores y códigos HTTP

Los errores no exponen SQL, rutas internas ni credenciales. Guarde siempre el request_id cuando necesite soporte.

Respuesta de error

{
  "ok": false,
  "read_only": true,
  "error": "BAD_DATE_RANGE",
  "message": "date_from no puede ser posterior a date_to.",
  "request_id": "a1b2c3d4e5f60708"
}

Cabeceras útiles

X-Request-ID
Identificador de diagnóstico.
X-API-Version
Versión que respondió.
X-API-Read-Only
Siempre true.
Allow
En un 405 indica que solo se admite GET.
HTTPCódigoSignificado
400BAD_PARAMETERUn parámetro no tiene el tipo, rango o formato esperado.
400BAD_DATEUna fecha no tiene formato YYYY-MM-DD o no es una fecha real.
400INCOMPLETE_DATE_RANGESe ha enviado solo date_from o solo date_to.
400BAD_DATE_RANGEdate_from es posterior a date_to.
400DATE_RANGE_TOO_LARGEEl intervalo supera 366 días.
400SEARCH_TOO_LONGsearch supera 100 caracteres.
400BAD_FIELDSfields está vacío o no contiene campos válidos.
400FIELD_NOT_ALLOWEDSe ha solicitado un campo no autorizado.
400CONFLICTING_PAGINATIONSe han combinado id y after_id.
400FILTER_NOT_SUPPORTEDSe ha usado active en un recurso que no lo admite.
400BAD_ACTIVE_FILTERactive no es 0, 1 o all.
400BAD_STATUS_FILTERstatus no pertenece a los valores admitidos.
400BAD_VALIDITY_FILTERvalidity no pertenece a los valores admitidos.
400BAD_SOURCE_FILTERsource no es all, invoices o delivery_notes.
400BAD_BASIS_FILTERbasis no es invoices o delivery_notes.
400BAD_MOVEMENT_FILTERmovement no es all, sales o returns.
400BAD_CURSOREl cursor está dañado, tiene formato incorrecto o supera el tamaño permitido.
400CURSOR_FILTER_MISMATCHEl cursor pertenece a otra combinación de filtros.
401MISSING_TOKENNo se ha enviado Authorization Bearer ni X-API-Key.
401INVALID_TOKENEl token es incorrecto, está revocado o la API está desactivada.
404RESOURCE_NOT_FOUNDEl recurso solicitado no existe.
405METHOD_NOT_ALLOWEDSe ha usado un método distinto de GET.
500AUTH_DATABASE_ERRORNo se ha podido validar el token en la base maestra.
500INVALID_DATABASE_CONFIGLa instalación asociada no tiene una configuración válida.
500DATABASE_ERRORNo se ha podido completar la consulta de lectura.
500JSON_ENCODE_ERRORLa respuesta no se ha podido codificar como JSON.
501RESOURCE_NOT_IMPLEMENTEDEl recurso existe en el enrutador pero no está implementado.

Tratamiento recomendado

  • 400: no reintentar sin corregir filtros, fechas, campos o cursor.
  • 401: revisar el token y sustituirlo si fue regenerado.
  • 404/405: corregir recurso o método.
  • 500: registrar request_id y aplicar reintentos limitados con espera progresiva.
  • 501: revisar versión o recurso; no reintentar automáticamente.
08 · Control económico

Consumo, medición y facturación

FacturaOne registra cada petición para que la empresa pueda conocer de dónde procede su consumo y revisar la evolución mensual antes de valorar el coste económico.

Solicitudes

Número de llamadas ejecutadas, recurso consultado, estado HTTP y tiempo de respuesta.

Volumen

Filas devueltas y tamaño de entrada y salida generado por cada petición.

Consumo estimado

Estimación reproducible de tokens de entrada, salida y total para comparar periodos y tipos de consulta.

Consulta mensual dentro de FacturaOne

Desde Configuración → API externa → Mostrar uso puede abrir la pantalla de consumo, consultar el mes actual por defecto y seleccionar meses y años anteriores. La gráfica desglosa el uso por recurso para detectar qué integración o tipo de consulta genera el mayor consumo.

El uso efectivo puede generar costes
La activación y la generación del token no añaden coste por sí mismas. La facturación se calcula según el consumo real y las tarifas vigentes; por ese motivo conviene paginar correctamente, limitar campos y evitar consultas repetitivas innecesarias.
09 · Producción

Seguridad y comprobaciones

Recomendaciones para consumir la API sin exponer el token ni sobrecargar una instalación.

Buenas prácticas

  • No coloque el token en la URL, archivos públicos, repositorios ni JavaScript del navegador.
  • Guárdelo como secreto del servidor o variable de entorno.
  • Envíelo únicamente por HTTPS.
  • Regénere el token si sospecha que se ha expuesto.
  • No registre cabeceras completas de autenticación.
  • Use el menor limit razonable y periodos acotados.

Probar con Postman

  1. Cree una petición GET.
  2. Use https://api.facturaone.com/v1/?resource=resources.
  3. Añada la cabecera X-API-Key.
  4. Coloque el token guardado como valor.
  5. Añada opcionalmente Accept: application/json.
  6. Compruebe que la respuesta contiene ok=true.

Lista de comprobación para un conector nuevo

  • Validar primero resource=resources y guardar la versión recibida.
  • Sincronizar catálogos auxiliares antes de filtrar por ID.
  • Implementar paginación hasta has_more=false.
  • Guardar request_id en errores y no mostrar el token.
  • Tratar campos null y objetos opcionales.
  • No asumir que page_totals representa todas las páginas.
  • Diferenciar datos históricos del documento y datos actuales del maestro.
  • Probar pagadas, pendientes, anuladas, sustituidas, devoluciones y albaranes facturados.
Regenerar invalida el token anterior inmediatamente
Antes de regenerar en producción, coordine el cambio con todos los conectores. No existe un periodo de convivencia entre el token antiguo y el nuevo.
10 · Ayuda

Preguntas frecuentes sobre la API de FacturaOne

Respuestas rápidas a las dudas más habituales antes de iniciar una integración.

¿La API puede crear o modificar datos?

No. Esta versión es exclusivamente de lectura. Solo admite peticiones GET y no ofrece operaciones POST, PUT, PATCH ni DELETE.

¿Cómo se autentica una integración?

Mediante un token enviado en la cabecera X-API-Key o en Authorization: Bearer. El token no debe formar parte de la URL.

¿Qué datos puedo consultar?

Clientes, artículos, proveedores, familias, tipos, series, rutas, usuarios, impuestos, formas de pago, facturas emitidas y líneas de venta.

¿Cómo se recorren más de 200 registros?

Con paginación. Los recursos simples y las facturas usan next_after_id; las ventas utilizan un next_cursor opaco.

¿La activación de la API tiene coste?

Activar la API y generar el token no tiene coste adicional. El uso efectivo se factura según el consumo y las tarifas vigentes.

¿Dónde puedo ver el consumo?

En FacturaOne, dentro de Configuración → API externa → Mostrar uso. Puede consultar el mes actual y periodos anteriores.

¿Qué debo enviar a soporte cuando falla una llamada?

El request_id devuelto en el JSON o en la cabecera X-Request-ID, junto con el recurso y la hora aproximada. Nunca envíe el token en claro.

Una integración predecible, segura y medible

Empiece consultando resource=resources, implemente la paginación y conserve el request_id de cualquier error. Con estas tres reglas, el conector podrá adaptarse a los recursos disponibles y controlar su consumo.

Documentación correspondiente a FacturaOne API v1.1.1. Los ejemplos contienen datos ficticios y el marcador TU_TOKEN_API; nunca publique un token real.