Guías
Filtrado y orden
La mayoría de las listas aceptan sort y los filtros de tiempo created* y updated*, muchas aceptan filtros con lista de valores como statuses, y algunas aceptan q para búsqueda de texto libre. Los ejemplos usan la lista de pedidos.
Envía sort con hasta tres campos separados por comas; repetir un campo es un 400. Las listas como incidencias, kits, servicios, pagos, pagos de facturas y cuentas de tesorería admiten un solo campo (consulta la descripción del parámetro). Un - al principio ordena ese campo de forma descendente: sort=-startDate,orderNumber. Cada lista nombra sus campos ordenables en la descripción del parámetro; para los pedidos son createdAt, updatedAt, startDate, endDate, orderNumber, grossPrice, rentalDays y itemsCount, y el valor por defecto es -createdAt.
- Un campo que no está en la lista de campos ordenables se rechaza con 400
validation_error, y el error lo nombra. - Los empates se deshacen por
id, así que el orden es estable entre páginas. - Un cursor está ligado al orden con el que se emitió: mantén el mismo
sorten cada página. Consulta Paginación. GET /apino acepta/v1 /availability /unavailabilities sort: sigue el cursor de fecha de su origen. Las listas que no están paginadas (consulta Paginación) tampoco se pueden ordenar.- Si ordenas por un campo que cambia mientras paginas, como
updatedAt, un registro puede repetirse u omitirse.
Los campos ordenables de cada lista:
| Operación | Ordenar por |
|---|---|
GET /api | createdAt, updatedAt, name, contactType, role, status, email |
GET /api | createdAt, updatedAt, name, sku, salePrice, depositValue, serializedItemsCount, collectionName |
GET /api | createdAt, updatedAt, startDate, endDate, orderNumber, grossPrice, rentalDays, itemsCount |
GET /api | position, itemName, quantity, startDate, endDate, rentalDays, unitPrice, linePrice, status, resourceType, transactionType |
GET /api | createdAt, updatedAt, invoiceNumber, invoiceDate, dueDate, subTotal, grossPrice |
GET /api | createdAt, updatedAt, quoteNumber, issueDate, startDate, endDate, subTotal, grossPrice, operativeStatus |
GET /api | createdAt, updatedAt, name, projectNumber, startDate, endDate, status |
GET /api | date, amount, createdAt, updatedAt |
GET /api | position, itemName, quantity, startDate, endDate, rentalDays, unitPrice, linePrice, resourceType, transactionType |
GET /api | position, itemName, quantity, startDate, endDate, rentalDays, unitPrice, linePrice, resourceType, transactionType |
GET /api | createdAt, updatedAt, code, serialNumber, status, condition, itemName |
GET /api | createdAt, updatedAt, name, internalReference, isWarehouse, building, floor |
GET /api | createdAt, updatedAt, date, status, total |
GET /api | createdAt, updatedAt, name, registrationNumber, status, seats, payloadKg |
GET /api | createdAt, updatedAt, fullName, staffType |
GET /api | createdAt, updatedAt, startDate, endDate, pickupDate, returnDate, status, type, quantity |
GET /api | createdAt, updatedAt, poNumber, poDate, status, type, grossPrice, netPrice, isDraft |
GET /api | createdAt, updatedAt, contractNumber, contractDate, startDate, endDate, status, signedAt, grossPrice |
GET /api | name, createdAt, updatedAt |
GET /api | path, name, order, depth, itemCount, createdAt, updatedAt |
GET /api | name, serviceType, defaultQty, createdAt, updatedAt |
GET /api | startDate, endDate, title, status, createdAt, updatedAt |
GET /api | createdAt, updatedAt, dueDate, identifier, title, status, priority |
GET /api | createdAt, updatedAt |
GET /api | createdAt, updatedAt, startDate, endDate, title, isCompleted, type |
GET /api | createdAt, updatedAt, name, identifier, status, amount, expectedCloseDate |
GET /api | createdAt, updatedAt, invoiceDate, dueDate |
GET /api | name, type, status, currency, createdAt, updatedAt |
GET /api | date, amount, createdAt, updatedAt |
GET /api | createdAt, updatedAt, issueDate, grossPrice |
GET /api | createdAt, updatedAt, issueDate, proformaNumber |
GET /api | name, isActive, triggerType, createdAt, updatedAt |
GET /api | name, type, createdAt, updatedAt |
GET /api | name, email, status, createdAt, updatedAt |
Filtros de tiempo
Enlace a esta sección: Filtros de tiempoLa mayoría de las listas filtran por el momento en que se creó o se actualizó por última vez un registro. Las dos familias comparten cinco sufijos:
| Sufijo | La hora del registro es… | Creado | Actualizado |
|---|---|---|---|
| En | en esa fecha | createdOn | updatedOn |
| Después | después de esa fecha | createdAfter | updatedAfter |
| Antes | antes de esa fecha | createdBefore | updatedBefore |
| Desde | desde esa fecha, incluida | createdFrom | updatedFrom |
| Para | hasta esa fecha, incluida | createdTo | updatedTo |
Cada valor es una fecha sin hora (YYYY-MM-DD) o un instante ISO 8601 con desplazamiento. Una fecha sin hora se interpreta en la zona horaria del negocio de la cuenta (timezone): From empieza al comienzo de ese día, To termina al final de él, After significa después del final de ese día, Before significa antes de su comienzo y On abarca el día entero. Un instante con desplazamiento se aplica tal cual, salvo con On, que abarca todo el día de negocio que lo contiene.
Los operadores son estrictos donde lo dicen sus nombres: After es >, Before es <, From es >= y To es <=, comparados con precisión de milisegundo. Para una fecha sin hora, From y Before usan las 00:00:00.000 de ese día y To y After usan las 23:59:59.999, de modo que updatedAfter=2026-10-09 excluye todo el 9 de octubre. From junto con Before da una ventana semiabierta, [from, before), cuyos bordes nunca se solapan con la ventana siguiente. Esa es la forma Sincronizar datos en el que se basa. No todas las listas tienen estos filtros: GET /api, GET /api, GET /api, GET /api y GET /api rechazan con 400 cualquier filtro created* o updated*; GET /api, GET /api, GET /api, GET /api, GET /api, GET /api, GET /api y GET /api no tienen filtros updated*, y GET /api solo tiene created*; GET /api, GET /api y GET /api se pueden ordenar por updatedAt pero no tienen filtros updated*. Comprueba los parámetros de la operación. Las listas añaden además sus propios filtros de fecha; los pedidos filtran también por cuándo empiezan y terminan (por ejemplo startsFrom y endsBefore) y por un periodo de alquiler que se solapa con una ventana (overlapsFrom y overlapsTo).
Filtros que admiten varios valores
Enlace a esta sección: Filtros que admiten varios valoresAlgunos filtros tienen un gemelo que admite listas de valores. statuses, contactIds y projectIds admiten hasta 50 valores y devuelven los registros que coinciden con cualquiera de ellos. Repite el parámetro o separa los valores con comas: statuses=reserved,prepared y statuses=reserved&statuses=prepared son el mismo filtro.
- El filtro de un solo valor es otro parámetro:
statusadmite un grupo operativo (draft,reserved,prepared,in_use,returned,completedocancelled),contactIdun contacto. - Más de 50 valores es un 400. Para filtrar por un conjunto mayor, divídelo en lotes de 50 y combina los resultados.
Búsqueda de texto libre
Enlace a esta sección: Búsqueda de texto libreCuando una lista ofrece q, es una búsqueda de texto libre cuya descripción indica qué compara. En pedidos busca el número de pedido, el nombre o alias del proyecto y la referencia externa, con una longitud de 1 a 200 caracteres.
Un ejemplo
Enlace a esta sección: Un ejemploPedidos reservados o preparados, actualizados desde el 1 de octubre y antes del 8 de octubre, cuyo texto coincide con acme, primero los que empiezan antes y, entre inicios iguales, primero los más grandes:
curl -sS --fail-with-body -G "${FILMO_BASE_URL:-https://app.filmo.io}/api/v1/orders" \
-H "Authorization: Bearer $FILMO_API_KEY" \
--data-urlencode "statuses=reserved,prepared" \
--data-urlencode "updatedFrom=2026-10-01" \
--data-urlencode "updatedBefore=2026-10-08T00:00:00+02:00" \
--data-urlencode "q=acme" \
--data-urlencode "sort=startDate,-grossPrice" \
--data-urlencode "limit=50" |
jq -r '.data[] | [.orderNumber, .status, .startDate, .grossPrice] | @tsv'const base = process.env.FILMO_BASE_URL ?? "https://app.filmo.io";
const url = new URL("/api/v1/orders", base);
url.searchParams.set("statuses", "reserved,prepared"); // or repeat: statuses=reserved&statuses=prepared
url.searchParams.set("updatedFrom", "2026-10-01"); // on or after the start of that day (account timezone)
url.searchParams.set("updatedBefore", "2026-10-08T00:00:00+02:00"); // before this instant
url.searchParams.set("q", "acme");
url.searchParams.set("sort", "startDate,-grossPrice"); // soonest start first, then the biggest order
url.searchParams.set("limit", "50");
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.FILMO_API_KEY}` } });
if (!res.ok) throw new Error(res.status + " " + (await res.text()));
const { data } = await res.json();
for (const order of data) console.log(order.orderNumber, order.status, order.startDate, order.grossPrice);import os
import requests
base = os.environ.get("FILMO_BASE_URL", "https://app.filmo.io")
params = {
"statuses": ["reserved", "prepared"], # sent as repeated parameters; a comma-separated string works too
"updatedFrom": "2026-10-01", # on or after the start of that day (account timezone)
"updatedBefore": "2026-10-08T00:00:00+02:00", # before this instant
"q": "acme",
"sort": "startDate,-grossPrice", # soonest start first, then the biggest order
"limit": 50,
}
res = requests.get(
base + "/api/v1/orders",
headers={"Authorization": f"Bearer {os.environ['FILMO_API_KEY']}"},
params=params,
timeout=30,
)
res.raise_for_status()
for order in res.json()["data"]:
print(order["orderNumber"], order["status"], order["startDate"], order["grossPrice"])Combina los filtros con el bucle de Paginación: mantén los mismos filtros, sort y limit en cada página.
Páginas relacionadas
Enlace a esta sección: Páginas relacionadasGuías
Paginación
Las listas devuelven una página cada vez. Pide una página con
limity, mientraspagination.seahasMore true, vuelve a llamar con elnextCursorque te dieron.Guías
Sincronizar datos
Filmo v1 no envía webhooks, así que mantienes otro sistema sincronizado consultando periódicamente: lee lo que cambió en ventanas de tiempo semiabiertas y ejecuta un barrido aparte para encontrar lo que se eliminó. No sigas el cursor de paginación para decidir qué cambió o qué desapareció.
Guías
Tipos de datos
El dinero es una cadena decimal, las fechas son ISO 8601, una propiedad puede estar presente y ser null, y los campos personalizados son mapas. Interpreta cada tipo una sola vez, en el borde de tu integración.
¿Te ha resultado útil esta página?