Conceptos básicos

Registros e ids

Cada registro tiene un id opaco que asigna Filmo. Guarda tus propios ids en una tabla de correspondencias de tu lado, y usa un campo de referencia solo donde la API lo tenga.

Los identificadores son cadenas opacas. No supongas nunca su formato, su longitud ni su orden, y no construyas ninguno. Los cursores de paginación son opacos de la misma manera. Los números legibles, como orderNumber o contactNumber, son para las personas: usa id para direccionar un registro.

Solo algunos recursos tienen un campo escribible para una referencia de tu sistema. La tabla se genera a partir de la especificación.

CampoSí o no
ContactDto.contactNumberNo
ContactDetailDto.contactNumberNo
ContactCreateBody.contactNumberSí
ContactUpdateBody.contactNumberSí
OrderDto.externalReferenceNo
OrderDetailDto.externalReferenceNo
ProjectDto.externalReferenceNo
ProjectDetailDto.externalReferenceNo
ProjectCreateBody.externalReferenceSí
StaffMemberDto.externalRefNo
StaffUpdateBody.externalRefSí
ProjectUpdateBody.externalReferenceSí
upsertExternalInvoice.originSystemSí
upsertExternalInvoice.originExternalIdSí
RecursoQué existe hoy
ProyectosexternalReference al crear y externalReference al actualizar, hasta 200 caracteres.
PersonalexternalRef, solo al actualizar; el cuerpo de creación no lo tiene. null lo borra.
Facturas emitidas en otro sitioEl par originSystem y originExternalId en la ruta de PUT /api/v1/invoices/external/{originSystem}/{originExternalId} es la clave del espejo: repetirlo actualiza el mismo espejo.
PedidosexternalReference se devuelve, pero los cuerpos de creación y actualización no tienen ese campo: puedes leerlo, pero todavía no escribirlo a través de la API.
ContactosNo hay campo de referencia externa. contactNumber es una referencia libre, de hasta 50 caracteres, que puedes escribir al crear y al actualizar. No es único: Filmo no impide que dos contactos compartan un número, así que comprueba lo que devuelve una búsqueda.

POST /api/v1/contacts/lookup acepta hasta 200 referencias y compara cada una, de forma exacta y sin ninguna normalización, con el contactNumber de los contactos, y con nada más. Devuelve dos listas: notFound, las referencias que no coinciden con ningún contacto, y contacts, los contactos que coincidieron, cada uno con id, name y contactNumber. No escribe nada, aunque sea un POST.

La respuesta no empareja una referencia con un contacto, y el orden de contacts no está garantizado. Empárejalos tú mismo comparando el contactNumber de cada contacto con tu referencia. Como contactNumber no es único, pueden devolverse varios contactos para una referencia: decide qué hacer en ese caso en lugar de tomar el primero. Usa notFound para saber qué crear, y guarda el id de Filmo en tu propia tabla cuando lo tengas.

Guarda tu id externo y el id de Filmo juntos en tu propia base de datos. Una Idempotency-Key solo deduplica reintentos durante 24 horas; no sustituye esa tabla (Idempotencia). Con la tabla puedes actualizar el registro correcto, detectar duplicados y decidir qué eliminar. Para el patrón en un CRM, consulta el tutorial de sincronización de contactos.

Los valores de los campos personalizados se leen en el mapa customFields de un registro, indexados por el identificador de la definición del campo. Las definiciones vienen de GET /api/v1/custom-fields, con la entidad a la que se aplica cada una (applyAt), el tipo y los valores que acepta un desplegable. Los valores viajan dentro de cada recurso; el endpoint de definiciones no los devuelve. v1 no tiene ninguna operación que escriba un campo personalizado: los cuerpos de creación y actualización no tienen la propiedad customFields, así que establécelos en la app.

  • Conceptos básicos

    Modelo de datos

    Los pedidos conectan un contacto, un proyecto opcional y el equipo alquilado; de ellos cuelgan los documentos, los pagos, la planificación y el catálogo.

  • 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

    Idempotencia y reintentos seguros

    Envía una cabecera Idempotency-Key con cada escritura y reutiliza el mismo valor cuando reintentes esa operación: Filmo devuelve el resultado almacenado del primer intento en lugar de escribir dos veces.

  • Tutoriales

    Sincronizar contactos desde tu CRM

    Replica a las personas de tu CRM como contactos de Filmo y controla los duplicados, ya que la API no puede descartarlos: busca por email o por el número de contacto que establezcas, conserva tu propia tabla de ids e ignora el eco de tus propias escrituras.

¿Te ha resultado útil esta página?