Para saber más

Archivar y eliminar

Filmo tiene varias maneras de retirar un registro de uso, y no son intercambiables. Algunas se pueden deshacer y otras no; consulta esta página antes de llamar a una operación destructiva.

Cada operación que elimina o retira un registro pertenece a uno de cinco grupos. La tabla siguiente se genera a partir de la especificación y marca también qué operaciones la especificación califica de irreversibles o finales.

AcciónQué hace¿Se puede deshacer?
EliminarElimina el registro y lo que depende de él físicamente. Su GET responde 404 después, y la API no guarda ninguna lápida, así que un registro borrado no deja rastro en los listados.No para los borrados de abajo. No se conserva nada que puedas restaurar. En la v1 no hay borrado de pedidos ni de proyectos: se cancelan, se archivan o se desvinculan.
ArchivarSaca un pedido o un proyecto de las vistas activas. No borra nada y no toca stock, líneas, documentos ni equipo.Sí, solo cambia la visibilidad. Un pedido se restaura con PUT /api/v1/orders/{orderId}/archive y archived: false.
AnularPasa un documento validado a voided. Conserva su número, de modo que la numeración sigue siendo continua.La especificación no describe ninguna vuelta atrás. El motivo que indicas se conserva.
CancelarTermina un pedido o la ruta de firma de un contrato.No para un pedido. Un contrato cancelado ya no se puede firmar.
DesvincularElimina solo el vínculo entre dos registros. No borra ninguno de los dos.Sí: el vínculo se vuelve a crear con el POST correspondiente.

Operaciones que la especificación califica de irreversibles o finales

Enlace a esta sección: Operaciones que la especificación califica de irreversibles o finales

Estas descripciones lo dicen de forma explícita, o califican el resultado de bloqueado o terminal. Trata cada una como final.

OperaciónQué dice la especificación
DELETE /api/v1/contacts/{contactId}Descrito como no reversible. También elimina sus relaciones, notas, archivos, tareas y métodos de pago. En su lugar, archiva un contacto con status: archived.
DELETE /api/v1/contacts/{contactId}/addresses/{addressId}Descrito como no reversible. Se rechaza con address_in_use mientras un pedido use la dirección.
DELETE /api/v1/items/{itemId}Descrito como no reversible.
DELETE /api/v1/spaces/{spaceId}Descrito como no reversible.
DELETE /api/v1/vehicles/{vehicleId}Descrito como no reversible.
DELETE /api/v1/staff/{staffId}Descrito como no reversible.
DELETE /api/v1/tags/{tagId}Descrito como no reversible. Quita la etiqueta de todos los registros que la tenían.
DELETE /api/v1/availability/unavailabilities/{unavailabilityId}Descrito como no reversible.
DELETE /api/v1/tasks/{taskId}Descrito como no reversible. Elimina sus asignaciones de personal y su reflejo en el calendario externo.
POST /api/v1/orders/{orderId}/cancelDescrito como no reversible desde la API. Para recuperar el pedido lo duplicas; cancelar también libera el stock y cancela las tareas de logística.
POST /api/v1/invoices/{invoiceId}/validateBloquea la factura como inmutable. Una factura validada se anula, no se edita.
POST /api/v1/credit-notes/{creditNoteId}/validateBloquea la nota de crédito como inmutable.
POST /api/v1/contracts/{contractId}/validateBloquea el contrato como inmutable.
POST /api/v1/supplier-invoices/{supplierInvoiceId}/validateBloquea la factura recibida como inmutable.
POST /api/v1/contracts/{contractId}/cancelLa especificación llama terminal a cancelled. Un contrato firmado no se puede cancelar: anúlalo en su lugar.

POST /api/v1/orders/{orderId}/unreserve no está en esta lista. Devuelve el pedido a borrador y el pedido se puede volver a reservar, pero elimina las tareas de entrega y devolución que creó la reserva, y estas no se recrean a mano.

Antes de llamar a cualquiera de estas desde un agente o un script, lee la página de la operación y considera enviar tu propio clave de idempotencia y, en las operaciones que aceptan If-Match (todas las anteriores salvo DELETE /api/v1/tags/{tagId} y DELETE /api/v1/availability/unavailabilities/{unavailabilityId}), el ETag que has leído, de modo que una vista obsoleta no pueda desencadenar la acción.

PUT /api/v1/orders/{orderId}/archive archiva o restaura un pedido: el cuerpo es { "archived": true } o { "archived": false }. Es un PUT que fija un valor, no hay alternancia, y responde 204 sin cuerpo. La especificación dice que repetir la llamada no hace nada nuevo, pero no cuentes con que updatedAt se quede quieto: una repetición todavía puede actualizarlo, así que el pedido puede volver a aparecer en una lectura incremental.

  • Solo se puede archivar un pedido en borrador o cancelado. Cualquier otro estado responde 409 conflict, indicando el estado.
  • Un pedido archivado deja de ser visible para la API: su GET responde 404, igual que con un pedido que no existe, se excluye de las listas y no hay ninguna opción includeArchived.
  • Para restaurar un pedido, llama a PUT /api/v1/orders/{orderId}/archive con archived: false y el id que guardaste: mientras el pedido está archivado no puedes listarlo ni leerlo. Tras el 204 vuelve a leerse con su GET.
  • OrderDto.status lista archived como valor posible, pero Filmo nunca lo produce: archivar no cambia el estado.

Los proyectos se comportan de otra manera. PUT /api/v1/projects/{projectId}/archive también acepta solo un proyecto en borrador o cancelado, pero un proyecto archivado solo se oculta del listado: archived con valor true lista solo los archivados, y su GET sigue respondiendo con archived: true.

Un 404 no significa eliminado

Durante una sincronización, un 404 en un pedido puede significar que se eliminó o que se archivó. No borres el registro de tu lado solo por un 404. Sigue los pasos de conciliación en sincronizar datos.

Algunos borrados se niegan a ejecutarse cuando algo todavía usa el registro. contact_in_use y address_in_use devuelven 409 y no borran nada; errors[] tiene una entrada por cada tipo de registro que lo usa, con un count. Mueve o elimina antes esos registros, o archiva el contacto en su lugar.

  • 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ó.

  • Para saber más

    Capacidades y límites de la v1

    La API cubre la mayor parte del trabajo diario con pedidos, contactos, artículos, facturas y la agenda, y deja una lista corta de cosas a la app. Compruébalo aquí antes de diseñar una integración en torno a una función.

  • 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.

  • Guías

    Concurrencia y bloqueo optimista

    Cada lectura de detalle devuelve un ETag. Envíalo de vuelta en la cabecera If-Match de una escritura y Filmo rechaza la escritura con 412 si el registro ha cambiado desde que lo leíste, de modo que dos integraciones no puedan sobrescribirse en silencio.

¿Te ha resultado útil esta página?