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.
/warehouses/{id}/layout
Mapa publicado del almacén
El mapa vigente del almacén (pasillos, racks y ubicaciones con sus coordenadas). Responde ETag con la
versión: con If-None-Match y ese valor, la respuesta es 304 sin cuerpo si no cambió. Requiere el módulo
de mapas; un almacén sin mapa publicado responde 404.
- Alcance (cliente de integración)
warehouses:read- Permiso (token de usuario)
- Token válido
- Idempotency-Key
- No aplica
- Requisitos
- Módulo de mapas del almacén
Parámetros de ruta
-
idinteger obligatorioIdentificador numérico del recurso.
Cabeceras
-
If-None-MatchstringEl
ETagde la última lectura.
Respuestas
200 El mapa publicado.
-
dataobjeto obligatorioEl mapa vigente; además de estos campos trae la geometría de pasillos, racks y ubicaciones.
3 campos de
data-
warehouse_codestring | null obligatorio -
versioninteger obligatorio -
published_atstring (date-time) | null
-
304
El mapa no cambió desde el ETag enviado; sin cuerpo.
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 recurso no existe.
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
curl "https://empresa.chainlink.mx/api/v1/warehouses/101/layout" \
-H "Authorization: Bearer $CHAINLINK_TOKEN" \
-H "Accept: application/json"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://empresa.chainlink.mx/api/v1/warehouses/101/layout', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHAINLINK_TOKEN'),
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);
const response = await fetch('https://empresa.chainlink.mx/api/v1/warehouses/101/layout', {
headers: {
Authorization: `Bearer ${process.env.CHAINLINK_TOKEN}`,
Accept: 'application/json',
},
});
const data = await response.json();
import os
import requests
response = requests.get(
"https://empresa.chainlink.mx/api/v1/warehouses/101/layout",
headers={
"Authorization": f"Bearer {os.environ['CHAINLINK_TOKEN']}",
"Accept": "application/json",
},
)
data = response.json()
{
"data": {
"warehouse_code": "CEDIS-MAPA",
"version": 1,
"published_at": "2026-10-06T10:20:11-06:00",
"width_m": 30,
"depth_m": 22,
"grid_m": 0.5,
"naming_mask": "{Z}-{A:2}-{B:2}-{L}",
"slots_per_level": 1,
"depot": {
"x": 0,
"y": 0
},
"zones": [
{
"code": "A",
"type": "storage",
"polygon": [
[
0,
0
],
[
25,
0
],
[
25,
17
],
[
0,
17
]
],
"color": "#3B82F6",
"temperature_class": null,
"naming_mask": "{Z}-{A:2}-{B:2}-{L}"
}
],
"aisles": [
{
"number": 1,
"x1": 4,
"y1": 0,
"x2": 4,
"y2": 14,
"width_m": 3,
"one_way": false,
"kind": "standard",
"zone": null
},
{
"number": 2,
"x1": 8,
"y1": 0,
"x2": 8,
"y2": 14,
"width_m": 3,
"one_way": false,
"kind": "standard",
"zone": null
}
],
"bays": [
{
"side": "L",
"number": 1,
"x": 2,
"y": 1.5,
"w": 2.7,
"d": 1,
"rotation": 90,
"rack_type": "selective",
"aisle": 1,
"aisle_zone": null,
"levels": [
{
"level_no": 1,
"z_from_m": 0,
"height_m": 1.5,
"max_weight_kg": null,
"golden": false
},
{
"level_no": 2,
"z_from_m": 1.5,
"height_m": 1.5,
"max_weight_kg": null,
"golden": true
}
]
},
{
"side": "L",
"number": 2,
"x": 2,
"y": 4.3,
"w": 2.7,
"d": 1,
"rotation": 90,
"rack_type": "selective",
"aisle": 1,
"aisle_zone": null,
"levels": [
{
"level_no": 1,
"z_from_m": 0,
"height_m": 1.5,
"max_weight_kg": null,
"golden": false
},
{
"level_no": 2,
"z_from_m": 1.5,
"height_m": 1.5,
"max_weight_kg": null,
"golden": true
}
]
}
],
"points": []
}
}
{
"error": {
"code": "unauthenticated",
"message": "Falta el token de acceso o ya no es válido.",
"doc_url": "https://chainlink.mx/developers/errores#unauthenticated",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "Falta el token de acceso o ya no es válido."
}
{
"error": {
"code": "feature_not_in_plan",
"message": "Función no disponible en tu plan actual.",
"feature": "webhooks.enabled",
"upgrade_url": "/billing/plans",
"doc_url": "https://chainlink.mx/developers/errores#feature_not_in_plan",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "Función no disponible en tu plan actual."
}
{
"error": {
"code": "missing_scope",
"message": "El cliente no tiene el alcance products:write.",
"scope": "products:write",
"doc_url": "https://chainlink.mx/developers/errores#missing_scope",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "El cliente no tiene el alcance products:write."
}
{
"error": {
"code": "not_found",
"message": "El recurso no existe.",
"doc_url": "https://chainlink.mx/developers/errores#not_found",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "El recurso no existe."
}
{
"error": {
"code": "rate_limited",
"message": "Superaste el límite de solicitudes por minuto. Espera los segundos que indica Retry-After.",
"doc_url": "https://chainlink.mx/developers/errores#rate_limited",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "Superaste el límite de solicitudes por minuto. Espera los segundos que indica Retry-After."
}