Chainlink Developers

Documentos y órdenes

Recibe documentos desde otro sistema: entradas y salidas con su concepto y líneas, y órdenes de compra o surtido.

Diseño objetivo (aún no disponible en v1)

Estos endpoints describen el contrato objetivo para recibir documentos desde un sistema externo (crear/sincronizar entradas, salidas y órdenes). Aún no forman parte de la v1 pública; su forma actual en el sistema es distinta. Escríbenos a soporte@chainlink.mx para coordinar tu integración.

URL base

Todas las rutas son relativas a https://tu-empresa.chainlink.mx (el subdominio de tu tenant) y requieren un token Bearer. Consulta Autenticación y Convenciones.
POST /api/v1/inbound/entries entries.manage Planeado

Sincronizar entradas

Crea o actualiza documentos de entrada (recepciones, órdenes de compra, entradas de mercancía) con su concepto y líneas. Acepta un documento o un arreglo de documentos.

Cuerpo (JSON)

external_id requerido string Identificador único del documento en tu sistema. La operación es idempotente: reenviar el mismo `external_id` actualiza el documento en lugar de duplicarlo.
concept requerido string Concepto del documento de entrada. Uno de: `purchase_order`, `goods_receipt`, `delivery_good`.
number string Número o folio visible del documento.
status string Estatus del documento: `open`, `close` o `cancelled`. Por defecto `open`.
cancelled boolean Marca el documento como cancelado.
send_to_wms boolean Si el documento debe procesarse en el WMS (equivale a ENVIOWMS). Por defecto `true`.
date string Fecha del documento (ISO 8601).
due_date string Fecha de vencimiento (ISO 8601).
partner object Socio de negocio: `{ code, name }` (proveedor en entradas, cliente en salidas).
reference string Referencia del socio (equivale a NumAtCard).
total number Total del documento.
currency string Moneda (por ejemplo `MXN`).
comments string Comentarios libres.
lines requerido array Líneas del documento (ver el ejemplo). Cada objeto de `lines[]` acepta: `line_number`, `item_code` (obligatorio; debe existir en el catálogo), `description`, `quantity`, `unit_price`, `warehouse_code`, `expected_series` y `expected_batches` (listas para restringir qué series/lotes puede escanear el operador), y `locations[]` con el desglose por ubicación (`bin_code`, `warehouse_code`, `quantity`, `serial_number`, `batch_number`).
Idempotente por `external_id` (upsert), y cada línea por `line_number`. Las líneas cuyo `item_code` no exista en el catálogo se omiten. Para enviar varios documentos en una sola llamada, manda un arreglo JSON de objetos con esta misma forma.
Cuerpo del request
{
  "external_id": "45012",
  "number": "100045",
  "concept": "purchase_order",
  "status": "open",
  "cancelled": false,
  "send_to_wms": true,
  "date": "2026-07-20",
  "due_date": "2026-07-27",
  "partner": {
    "code": "PROV-001",
    "name": "Proveedor Ejemplo SA de CV"
  },
  "reference": "REF-8891",
  "total": 1500.0,
  "currency": "MXN",
  "comments": "Orden de compra semanal",
  "lines": [
    {
      "line_number": 0,
      "item_code": "ITEM-ABC-001",
      "description": "Caja de tornillos 5mm",
      "quantity": 100,
      "unit_price": 15.0,
      "warehouse_code": "01",
      "expected_batches": [
        "LOTE-2026-07-A",
        "LOTE-2026-07-B"
      ],
      "expected_series": [],
      "locations": [
        {
          "bin_code": "A-01-02",
          "warehouse_code": "01",
          "quantity": 100,
          "batch_number": "LOTE-2026-07-A",
          "serial_number": null
        }
      ]
    }
  ]
}
cURL
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/inbound/entries" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "external_id": "45012",
  "number": "100045",
  "concept": "purchase_order",
  "status": "open",
  "cancelled": false,
  "send_to_wms": true,
  "date": "2026-07-20",
  "due_date": "2026-07-27",
  "partner": {
    "code": "PROV-001",
    "name": "Proveedor Ejemplo SA de CV"
  },
  "reference": "REF-8891",
  "total": 1500.0,
  "currency": "MXN",
  "comments": "Orden de compra semanal",
  "lines": [
    {
      "line_number": 0,
      "item_code": "ITEM-ABC-001",
      "description": "Caja de tornillos 5mm",
      "quantity": 100,
      "unit_price": 15.0,
      "warehouse_code": "01",
      "expected_batches": [
        "LOTE-2026-07-A",
        "LOTE-2026-07-B"
      ],
      "expected_series": [],
      "locations": [
        {
          "bin_code": "A-01-02",
          "warehouse_code": "01",
          "quantity": 100,
          "batch_number": "LOTE-2026-07-A",
          "serial_number": null
        }
      ]
    }
  ]
}'
Respuesta (ejemplo)
{
  "data": {
    "external_id": "45012",
    "number": "100045",
    "concept": "purchase_order",
    "status": "open",
    "lines_synced": 1,
    "created": true
  }
}
POST /api/v1/inbound/exits exits.manage Planeado

Sincronizar salidas

Crea o actualiza documentos de salida (órdenes de venta, entregas, salidas de mercancía) con su concepto y líneas. Acepta un documento o un arreglo de documentos.

Cuerpo (JSON)

external_id requerido string Identificador único del documento en tu sistema. La operación es idempotente: reenviar el mismo `external_id` actualiza el documento en lugar de duplicarlo.
concept requerido string Concepto del documento de salida. Uno de: `sale_order`, `delivery_note`, `dispatch_good`, `goods_issue`.
number string Número o folio visible del documento.
status string Estatus del documento: `open`, `close` o `cancelled`. Por defecto `open`.
cancelled boolean Marca el documento como cancelado.
send_to_wms boolean Si el documento debe procesarse en el WMS (equivale a ENVIOWMS). Por defecto `true`.
date string Fecha del documento (ISO 8601).
due_date string Fecha de vencimiento (ISO 8601).
partner object Socio de negocio: `{ code, name }` (proveedor en entradas, cliente en salidas).
reference string Referencia del socio (equivale a NumAtCard).
total number Total del documento.
currency string Moneda (por ejemplo `MXN`).
comments string Comentarios libres.
lines requerido array Líneas del documento (ver el ejemplo). Cada objeto de `lines[]` acepta: `line_number`, `item_code` (obligatorio; debe existir en el catálogo), `description`, `quantity`, `unit_price`, `warehouse_code`, `expected_series` y `expected_batches` (listas para restringir qué series/lotes puede escanear el operador), y `locations[]` con el desglose por ubicación (`bin_code`, `warehouse_code`, `quantity`, `serial_number`, `batch_number`).
Idempotente por `external_id` (upsert), y cada línea por `line_number`. Las líneas con `item_code` desconocido se omiten. Puedes enlazar una línea a su documento base con `base_external_id` / `base_line` cuando la salida proviene de otra orden.
Cuerpo del request
{
  "external_id": "78230",
  "number": "200078",
  "concept": "sale_order",
  "status": "open",
  "cancelled": false,
  "send_to_wms": true,
  "date": "2026-07-20",
  "partner": {
    "code": "CLI-0099",
    "name": "Cliente Ejemplo SA"
  },
  "reference": "PO-CLI-551",
  "total": 450.0,
  "currency": "MXN",
  "lines": [
    {
      "line_number": 0,
      "item_code": "ITEM-XYZ-777",
      "description": "Botella 1L",
      "quantity": 30,
      "unit_price": 15.0,
      "warehouse_code": "01",
      "expected_series": [
        "SN-0001",
        "SN-0002"
      ],
      "expected_batches": [],
      "locations": [
        {
          "bin_code": "B-03-01",
          "warehouse_code": "01",
          "quantity": 30,
          "serial_number": "SN-0001",
          "batch_number": null
        }
      ]
    }
  ]
}
cURL
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/inbound/exits" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "external_id": "78230",
  "number": "200078",
  "concept": "sale_order",
  "status": "open",
  "cancelled": false,
  "send_to_wms": true,
  "date": "2026-07-20",
  "partner": {
    "code": "CLI-0099",
    "name": "Cliente Ejemplo SA"
  },
  "reference": "PO-CLI-551",
  "total": 450.0,
  "currency": "MXN",
  "lines": [
    {
      "line_number": 0,
      "item_code": "ITEM-XYZ-777",
      "description": "Botella 1L",
      "quantity": 30,
      "unit_price": 15.0,
      "warehouse_code": "01",
      "expected_series": [
        "SN-0001",
        "SN-0002"
      ],
      "expected_batches": [],
      "locations": [
        {
          "bin_code": "B-03-01",
          "warehouse_code": "01",
          "quantity": 30,
          "serial_number": "SN-0001",
          "batch_number": null
        }
      ]
    }
  ]
}'
Respuesta (ejemplo)
{
  "data": {
    "external_id": "78230",
    "number": "200078",
    "concept": "sale_order",
    "status": "open",
    "lines_synced": 1,
    "created": true
  }
}
POST /api/v1/inbound/purchase-orders entries.manage Planeado

Crear orden de compra

Registra una orden de compra hacia un proveedor con sus partidas.

Cuerpo (JSON)

external_id requerido string Identificador único de la orden en tu sistema. Idempotente: reenviar el mismo actualiza en vez de duplicar.
provider requerido string Código del proveedor.
currency string Moneda (por ejemplo `MXN`).
lines requerido array Partidas de la orden. Cada línea: `item_code` (obligatorio; debe existir en el catálogo) y `quantity`.
Idempotente por `external_id`. Las líneas usan el mismo formato que el resto de la API (`lines[].item_code` / `lines[].quantity`); un `item_code` desconocido rechaza la orden.
Cuerpo del request
{
  "external_id": "OC-000123",
  "provider": "PROV-001",
  "currency": "MXN",
  "lines": [
    {
      "item_code": "ITEM-ABC-001",
      "quantity": 10
    },
    {
      "item_code": "ITEM-DEF-002",
      "quantity": 5
    }
  ]
}
cURL
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/inbound/purchase-orders" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "external_id": "OC-000123",
  "provider": "PROV-001",
  "currency": "MXN",
  "lines": [
    {
      "item_code": "ITEM-ABC-001",
      "quantity": 10
    },
    {
      "item_code": "ITEM-DEF-002",
      "quantity": 5
    }
  ]
}'
Respuesta (ejemplo)
{
  "data": {
    "external_id": "OC-000123",
    "provider": "PROV-001",
    "lines_synced": 2,
    "created": true
  }
}
POST /api/v1/inbound/picking-orders exits.manage Planeado

Crear orden de surtido

Registra una orden de surtido (picking) para un cliente con sus partidas y concepto.

Cuerpo (JSON)

external_id requerido string Identificador único de la orden en tu sistema (idempotente).
client requerido string Código del cliente.
concept requerido string Concepto de la orden: `invoice`, `sale_order`, `credit_note`, `refund`, `production_order`, `delivery_note`, `good_issue` o `dispatch_good`.
currency string Moneda (por ejemplo `MXN`).
lines requerido array Partidas: `item_code` (obligatorio) y `quantity`.
Idempotente por `external_id`. Mismo formato de líneas que el resto de la API (`lines[].item_code` / `lines[].quantity`).
Cuerpo del request
{
  "external_id": "PICK-000500",
  "client": "CLI-001",
  "concept": "sale_order",
  "currency": "MXN",
  "lines": [
    {
      "item_code": "ITEM-ABC-001",
      "quantity": 3
    }
  ]
}
cURL
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/inbound/picking-orders" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "external_id": "PICK-000500",
  "client": "CLI-001",
  "concept": "sale_order",
  "currency": "MXN",
  "lines": [
    {
      "item_code": "ITEM-ABC-001",
      "quantity": 3
    }
  ]
}'
Respuesta (ejemplo)
{
  "data": {
    "external_id": "PICK-000500",
    "concept": "sale_order",
    "client": "CLI-001",
    "lines_synced": 1,
    "created": true
  }
}

¿Necesitas habilitar un endpoint o tienes dudas? Contáctanos.

← Volver al inicio de Developers