Endpoints de la API. Especificación exacta de cada operación de la API v1 (parámetros, cuerpo, respuestas y ejemplos), generada del documento OpenAPI con el que se valida cada respuesta real. Los procedimientos completos están en Guías.

POST /transfer-orders

Crear una orden de transferencia

Crea una orden en borrador o, con release: true, la libera para surtido de inmediato. Con un cliente de integración, liberar exige picker_id (el surtidor). Un external_ref que ya existe responde 200 con esa orden.

Alcance (cliente de integración)
transfers:write
Permiso (token de usuario)
transfer-orders.manage
Idempotency-Key
Opcional
Requisitos
Órdenes de transferencia activas

Cabeceras

  • Idempotency-Key string

    Llave única por operación (se recomienda un UUID v4). Reenviar la misma solicitud con la misma llave en las siguientes 24 horas devuelve la respuesta original sin repetir la operación.

Cuerpo de la solicitud application/json

  • from_warehouse string obligatorio

    Código del almacén de origen.

  • to_warehouse string obligatorio

    Código del almacén de destino.

  • priority integer | null
  • reason string | null
  • due_at string (date-time) | null
  • external_ref string | null

    Referencia externa; no se crea dos veces.

  • release boolean | null

    true libera la orden para surtido al crearla.

  • picker_id integer | null

    El surtidor al liberar. Obligatorio con release y un cliente de integración.

  • lines array de objetos obligatorio
    5 campos de lines
    • item_code string obligatorio
    • qty number obligatorio
    • batch_num string | null
    • expected_series array de textos | null
    • expected_batches array de textos | null

Respuestas

200 Ya existía una orden con ese external_ref; se devuelve esa.
  • data objeto obligatorio
    26 campos de data
    • object string «transfer_order» obligatorio
    • id integer obligatorio
    • code string obligatorio
    • status string obligatorio
      Valores: draft, released, picking, picked, in_transit, receiving, received, closed, cancelled
    • status_label string
    • headline string | null
    • has_discrepancy boolean

      Lo recibido no coincide con lo despachado.

    • from objeto obligatorio
      3 campos de from
      • id integer | null
      • code string | null
      • name string | null
    • to objeto obligatorio
      3 campos de to
      • id integer | null
      • code string | null
      • name string | null
    • priority integer
    • reason string | null
    • due_at string (date-time) | null
    • lines_count integer
    • units objeto obligatorio
      4 campos de units
      • requested number
      • picked number
      • dispatched number
      • received number
    • dispatched_at string (date-time) | null
    • received_at string (date-time) | null
    • closed_at string (date-time) | null
    • seal_number string | null
    • vehicle_plate string | null
    • carrier_id integer | null
    • external_ref string | null
    • source string
      Valores: web, api, import, sap
    • picking_id integer | null
    • receipt_id integer | null
    • sap objeto | null

      Estado del envío al ERP cuando aplica.

    • lines array de objetos | null

      null en el listado; en el detalle, las líneas.

      11 campos de lines
      • id integer
      • line_num integer
      • product_id integer | null
      • item_code string | null
      • qty number
      • picked_qty number
      • dispatched_qty number
      • received_qty number
      • batch_num string | null
      • serial_numbers array de textos
      • status string
201 Orden creada. Location apunta al nuevo recurso.
  • data objeto obligatorio
    26 campos de data
    • object string «transfer_order» obligatorio
    • id integer obligatorio
    • code string obligatorio
    • status string obligatorio
      Valores: draft, released, picking, picked, in_transit, receiving, received, closed, cancelled
    • status_label string
    • headline string | null
    • has_discrepancy boolean

      Lo recibido no coincide con lo despachado.

    • from objeto obligatorio
      3 campos de from
      • id integer | null
      • code string | null
      • name string | null
    • to objeto obligatorio
      3 campos de to
      • id integer | null
      • code string | null
      • name string | null
    • priority integer
    • reason string | null
    • due_at string (date-time) | null
    • lines_count integer
    • units objeto obligatorio
      4 campos de units
      • requested number
      • picked number
      • dispatched number
      • received number
    • dispatched_at string (date-time) | null
    • received_at string (date-time) | null
    • closed_at string (date-time) | null
    • seal_number string | null
    • vehicle_plate string | null
    • carrier_id integer | null
    • external_ref string | null
    • source string
      Valores: web, api, import, sap
    • picking_id integer | null
    • receipt_id integer | null
    • sap objeto | null

      Estado del envío al ERP cuando aplica.

    • lines array de objetos | null

      null en el listado; en el detalle, las líneas.

      11 campos de lines
      • id integer
      • line_num integer
      • product_id integer | null
      • item_code string | null
      • qty number
      • picked_qty number
      • dispatched_qty number
      • received_qty number
      • batch_num string | null
      • serial_numbers array de textos
      • status string
401 Falta el token o no es válido.

Cuerpo: el sobre de error.

402 La función no está en el plan de la empresa, o la cuenta está suspendida o cancelada.

Cuerpo: el sobre de error.

403 Al cliente le falta el alcance (missing_scope), al usuario el permiso (forbidden), o el token de usuario no tiene acceso a la ruta (client_not_allowed: aplicación móvil o usuario con verificación en dos pasos).

Cuerpo: el sobre de error.

404 El módulo no está activo en la empresa.

Cuerpo: el sobre de error.

409 Otra solicitud con la misma Idempotency-Key sigue en proceso.

Cuerpo: el sobre de error.

422 Datos no válidos (validation_failed), una llave de idempotencia reutilizada con otra solicitud (idempotency_key_reused) o una regla de negocio que bloquea la operación (rule_blocked).

Cuerpo: el sobre de error.

429 Se superó el límite por minuto. Reintente después de los segundos de Retry-After.

Cuerpo: el sobre de error.

Probar

Probar con una instancia

La solicitud sale del navegador hacia la instancia indicada; nada pasa por chainlink.mx. El token se conserva solo en esta pestaña.

Obtener un token con un cliente de integración

Credenciales de Configuración › Clientes API (grant client_credentials). El secreto se usa una vez y no se guarda. Los tokens de usuario se obtienen fuera de la consola; ver Autenticación.

Solicitud
curl -X POST "https://empresa.chainlink.mx/api/v1/transfer-orders" \
  -H "Authorization: Bearer $CHAINLINK_TOKEN" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "from_warehouse": "CEDIS-GDL",
    "to_warehouse": "TDA-MTY",
    "priority": 50,
    "reason": "Reabasto semanal",
    "due_at": "2026-10-08T18:00:00-06:00",
    "external_ref": "TR-2026-0107",
    "lines": [
        {
            "item_code": "P-1001",
            "qty": 24
        }
    ]
}'
Respuesta
{
    "data": {
        "object": "transfer_order",
        "id": 1,
        "code": "TR-000001",
        "status": "draft",
        "status_label": "Borrador",
        "headline": "TR-000001 · De CEDIS-GDL a TDA-MTY · Borrador",
        "has_discrepancy": false,
        "from": {
            "id": 1,
            "code": "CEDIS-GDL",
            "name": "CEDIS Guadalajara"
        },
        "to": {
            "id": 2,
            "code": "TDA-MTY",
            "name": "Tienda Monterrey"
        },
        "priority": 0,
        "reason": null,
        "due_at": null,
        "lines_count": 1,
        "units": {
            "requested": 24,
            "picked": 0,
            "dispatched": 0,
            "received": 0
        },
        "dispatched_at": null,
        "received_at": null,
        "closed_at": null,
        "seal_number": null,
        "vehicle_plate": null,
        "carrier_id": null,
        "external_ref": "TR-2026-0107",
        "source": "api",
        "picking_id": null,
        "receipt_id": null,
        "sap": {
            "dispatch": null,
            "receipt": null
        },
        "lines": [
            {
                "id": 1,
                "line_num": 1,
                "product_id": 1,
                "item_code": "P-1001",
                "qty": 24,
                "picked_qty": 0,
                "dispatched_qty": 0,
                "received_qty": 0,
                "batch_num": null,
                "serial_numbers": [],
                "status": "open"
            }
        ]
    }
}