Ir al contenido

Transferencia aceptada

Identificador del evento: transfer_request.accepted

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.

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.
CampoQué indica
typetransfer (transferencia directa) o request (solicitud de transferencia).
departure_storeTienda de salida. El evento se envía a la suscripción de esta tienda.
arrival_storeTienda de llegada. Puede ser la misma tienda de salida si el traslado es entre almacenes de una sola tienda.
  • 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).

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

  2. Responda 2xx de 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.

  3. Descarte los duplicados.

    Si ya procesó ese event_id del cuerpo, ya verificado, no lo procese otra vez. Como segunda clave use event_type junto con data.id (por ejemplo, transfer_request.accepted y el id de la orden).

  4. Procese el evento en segundo plano.

    Registre la orden en su sistema con data.id y reference. Use departure_warehouse y arrival_warehouse para saber de dónde a dónde se traslada, e items para el detalle. Lea solo los campos que necesita e ignore los que no reconozca.

transfer_request.accepted.json
{
"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.

CampoDescripción
id
string (UUID)
Identificador de la orden de transferencia
reference
string
Referencia de la orden: OT- seguido del número. Por ejemplo, OT-1042
number
entero · nulo
Número de la orden
type
string
Tipo de orden: transfer (transferencia directa) o request (solicitud de transferencia)
status
string
Estado de la orden cuando IDPOS prepara el aviso. Es accepted o, si la orden avanzó de inmediato, un estado posterior
concept
string · nulo
Concepto de la orden
observations
string · nulo
Observaciones
total_cost
número
Costo total de la orden
transfer_at
string (fecha) · nulo
Fecha y hora del traslado
processed_at
string (fecha) · nulo
Fecha y hora de procesamiento de la orden
created_at
string (fecha) · nulo
Fecha de creación
CampoDescripción
author
objeto
Usuario que creó la orden
author.first_name
string · nulo
Nombres
author.last_name
string · nulo
Apellidos
author.full_name
string
Nombres y apellidos separados por un espacio. Si no se encuentra al usuario, viene como un espacio en blanco
CampoDescripción
approver
objeto
Usuario que aprobó la orden. Si la orden no tiene aprobador, el objeto llega igual
approver.first_name
string · nulo
Nombres. Es nulo si la orden no tiene aprobador
approver.last_name
string · nulo
Apellidos. Es nulo si la orden no tiene aprobador
approver.full_name
string
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.

CampoDescripción
departure_warehouse
objeto
Almacén de salida
arrival_warehouse
objeto
Almacén de llegada
departure_warehouse.id
string (UUID) · nulo
Identificador del almacén
departure_warehouse.name
string · nulo
Nombre del almacén
departure_warehouse.description
string · nulo
Descripción del almacén
departure_warehouse.external_id
string · 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.

CampoDescripción
departure_store
objeto
Tienda de salida
departure_store.id
string (UUID) · nulo
Identificador de la tienda de salida
departure_store.name
string · nulo
Nombre de la tienda de salida
departure_store.external_id
string · nulo
Código externo de la tienda de salida
arrival_store
objeto
Tienda de llegada
arrival_store.id
string (UUID) · nulo
Identificador de la tienda de llegada
arrival_store.name
string · nulo
Nombre de la tienda de llegada
arrival_store.external_id
string · 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
CampoDescripción
items
lista
Ítems de la orden
items[].id
string (UUID)
Identificador de la línea de la orden. No es el identificador del ítem: para reconocer el ítem use sku
items[].sku
string
Código del ítem
items[].name
string
Nombre del ítem
items[].quantity
número
Cantidad a transferir
items[].unit_cost
string (3 dec)
Costo unitario