Transferencia aceptada
Identificador del evento: transfer_request.accepted
En pocas palabras
Sección titulada «En pocas palabras»IDPOS le avisa de que se aceptó una orden de transferencia de mercadería entre almacenes. El aviso trae la orden completa: sus ítems con cantidad y costo unitario, los almacenes y las tiendas de salida y de llegada, y los usuarios que intervinieron.
Cuándo llega
Sección titulada «Cuándo llega»Cuando una orden de transferencia pasa al estado «aceptada». Ocurre en estos casos:
- Se crea una transferencia directa (
type=transfer): nace aceptada. - Se acepta una solicitud de transferencia (
type=request) o una orden que todavía no estaba aceptada. - IDPOS genera una transferencia automática entre almacenes por una transformación. La orden se acepta y se completa de inmediato.
| Campo | Qué indica |
|---|---|
type | transfer (transferencia directa) o request (solicitud de transferencia). |
departure_store | Tienda de salida. El evento se envía a la suscripción de esta tienda. |
arrival_store | Tienda de llegada. Puede ser la misma tienda de salida si el traslado es entre almacenes de una sola tienda. |
Para qué le sirve
Sección titulada «Para qué le sirve»- Registrar la orden de transferencia en su ERP o sistema de logística en cuanto se acepta, con sus ítems, cantidades y costos.
- Avisar al almacén de salida de la mercadería que debe preparar y enviar.
- Conciliar el costo total de la transferencia (
total_cost) con el de sus ítems.
Este evento informa que la orden fue aceptada. Los cambios de stock se informan aparte, con Stock actualizado (stock.updated).
Qué hacer al recibirlo
Sección titulada «Qué hacer al recibirlo»-
Verifique la firma.
Calcule el HMAC con el cuerpo crudo y compárelo con
X-Webhook-Signature. Si no coincide, no procese el evento. Los pasos están en Autenticación y firma. -
Responda
2xxde inmediato.Guarde el evento en una cola y responda sin esperar a procesarlo. Si tarda más que el tiempo de espera, IDPOS lo trata como fallido y lo reintenta.
-
Descarte los duplicados.
Si ya procesó ese
event_iddel cuerpo, ya verificado, no lo procese otra vez. Como segunda clave useevent_typejunto condata.id(por ejemplo, transfer_request.accepted y el id de la orden). -
Procese el evento en segundo plano.
Registre la orden en su sistema con
data.idyreference. Usedeparture_warehouseyarrival_warehousepara saber de dónde a dónde se traslada, eitemspara el detalle. Lea solo los campos que necesita e ignore los que no reconozca.
Ejemplo
Sección titulada «Ejemplo»{ "event_id": "01J9ZQ6S8V0X3Z5B7D9F2H4K6M", "event_type": "transfer_request.accepted", "timestamp": "2026-10-12T15:02:12Z", "api_version": "v1", "data": { "id": "c4e6a8b0-2d4f-4b6a-9c8e-0a2b4d6f8e15", "reference": "OT-1042", "number": 1042, "type": "transfer", "processed_at": null, "transfer_at": "2026-10-12T15:00:00Z", "observations": "Entregar antes del mediodía", "total_cost": 82.8, "status": "accepted", "created_at": "2026-10-12T15:02:11Z", "author": { "first_name": "Ana", "last_name": "Torres", "full_name": "Ana Torres" }, "approver": { "first_name": null, "last_name": null, "full_name": " " }, "departure_warehouse": { "id": "5f7b9d1a-3c5e-4b7a-9d2f-1a3c5e7b9d04", "name": "Almacén principal", "description": "Almacén central de la tienda", "external_id": "A01" }, "arrival_warehouse": { "id": "8a0c2e4b-6d8f-4a1c-b3e5-7f9a1c3e5b26", "name": "Almacén de barra", "description": null, "external_id": null }, "departure_store": { "id": "6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53", "name": "Tienda Centro", "external_id": "T01" }, "arrival_store": { "id": "6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53", "name": "Tienda Centro", "external_id": "T01" }, "items": [ { "id": "d1f3a5c7-9b2e-4d4a-8f6c-0e2a4c6b8d37", "sku": "BEB-001", "name": "Gaseosa 500 ml", "quantity": 24.0, "unit_cost": "1.850" }, { "id": "e2a4b6d8-0c3f-4e5b-9a7d-1f3b5d7c9e48", "sku": "SNK-014", "name": "Papas fritas 150 g", "quantity": 12.0, "unit_cost": "3.200" } ], "concept": "Reposición semanal de bebidas" }}Cómo leer las tablas: el tipo aparece debajo del nombre del campo y «nulo» indica que puede venir como null. Los demás términos están en la guía de lectura de campos.
| Campo | Descripción |
|---|---|
idstring (UUID) | Identificador de la orden de transferencia |
referencestring | Referencia de la orden: OT- seguido del número. Por ejemplo, OT-1042 |
numberentero · nulo | Número de la orden |
typestring | Tipo de orden: transfer (transferencia directa) o request (solicitud de transferencia) |
statusstring | Estado de la orden cuando IDPOS prepara el aviso. Es accepted o, si la orden avanzó de inmediato, un estado posterior |
conceptstring · nulo | Concepto de la orden |
observationsstring · nulo | Observaciones |
total_costnúmero | Costo total de la orden |
transfer_atstring (fecha) · nulo | Fecha y hora del traslado |
processed_atstring (fecha) · nulo | Fecha y hora de procesamiento de la orden |
created_atstring (fecha) · nulo | Fecha de creación |
Autor (author)
Sección titulada «Autor (author)»| Campo | Descripción |
|---|---|
authorobjeto | Usuario que creó la orden |
author.first_namestring · nulo | Nombres |
author.last_namestring · nulo | Apellidos |
author.full_namestring | Nombres y apellidos separados por un espacio. Si no se encuentra al usuario, viene como un espacio en blanco |
Aprobador (approver)
Sección titulada «Aprobador (approver)»| Campo | Descripción |
|---|---|
approverobjeto | Usuario que aprobó la orden. Si la orden no tiene aprobador, el objeto llega igual |
approver.first_namestring · nulo | Nombres. Es nulo si la orden no tiene aprobador |
approver.last_namestring · nulo | Apellidos. Es nulo si la orden no tiene aprobador |
approver.full_namestring | Nombres y apellidos separados por un espacio. Si la orden no tiene aprobador, viene como un espacio en blanco |
Almacenes (departure_warehouse y arrival_warehouse)
Sección titulada «Almacenes (departure_warehouse y arrival_warehouse)»Los dos objetos tienen la misma estructura.
| Campo | Descripción |
|---|---|
departure_warehouseobjeto | Almacén de salida |
arrival_warehouseobjeto | Almacén de llegada |
departure_warehouse.idstring (UUID) · nulo | Identificador del almacén |
departure_warehouse.namestring · nulo | Nombre del almacén |
departure_warehouse.descriptionstring · nulo | Descripción del almacén |
departure_warehouse.external_idstring · nulo | Código externo del almacén |
Lo mismo aplica a arrival_warehouse.id, arrival_warehouse.name, arrival_warehouse.description y arrival_warehouse.external_id.
Tiendas (departure_store y arrival_store)
Sección titulada «Tiendas (departure_store y arrival_store)»| Campo | Descripción |
|---|---|
departure_storeobjeto | Tienda de salida |
departure_store.idstring (UUID) · nulo | Identificador de la tienda de salida |
departure_store.namestring · nulo | Nombre de la tienda de salida |
departure_store.external_idstring · nulo | Código externo de la tienda de salida |
arrival_storeobjeto | Tienda de llegada |
arrival_store.idstring (UUID) · nulo | Identificador de la tienda de llegada |
arrival_store.namestring · nulo | Nombre de la tienda de llegada |
arrival_store.external_idstring · nulo | Hoy trae el código externo de la tienda de salida, el mismo de departure_store.external_id, y no el de la tienda de llegada. Para identificar la tienda de llegada use arrival_store.id |
Ítems (items[])
Sección titulada «Ítems (items[])»| Campo | Descripción |
|---|---|
itemslista | Ítems de la orden |
items[].idstring (UUID) | Identificador de la línea de la orden. No es el identificador del ítem: para reconocer el ítem use sku |
items[].skustring | Código del ítem |
items[].namestring | Nombre del ítem |
items[].quantitynúmero | Cantidad a transferir |
items[].unit_coststring (3 dec) | Costo unitario |