URL base
Todas las rutas son relativas ahttps://tu-empresa.chainlink.mx (el subdominio de tu tenant)
y requieren un token Bearer. Consulta Autenticación
y Convenciones.
En esta página
- GET Listar tokens de dispositivo
- POST Crear token de dispositivo
- GET Obtener token de dispositivo
- DELETE Revocar token de dispositivo
- GET Configuración de la app móvil
- POST Enviar trabajo de impresión
- GET Listar plantillas de etiqueta
- GET Listar impresoras
- GET Listar trabajos de impresión
- GET Listar portales RFID
- GET Obtener mobile
- GET Perfil del token actual
- GET Listar rfid portals
- GET Listar discovery
- GET Listar device
- POST Crear device
- POST Crear device
- POST Crear device
- POST Crear device
- POST Crear device
- POST Crear device
- POST Crear device
- POST Crear device
Listar tokens de dispositivo
Lista los tokens de dispositivo (impresoras, lectores RFID, apps) de forma paginada.
Parámetros de consulta
page
|
integer | Número de página para la paginación (20 por página) |
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/device-tokens" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"message": "No tienes permiso para realizar esta acción."
}
}
Crear token de dispositivo
Emite un nuevo token de dispositivo y devuelve el token en texto plano una sola vez.
Cuerpo (JSON)
device_type
requerido
|
string (enum) | Tipo de dispositivo que autentica el token; debe ser uno de los cuatro valores del enum |
device_name
requerido
|
string | Nombre legible del dispositivo; máximo 255 caracteres |
device_id
|
string | Identificador de dispositivo opcional provisto por el hardware/cliente; máximo 255 caracteres |
capabilities
|
array | Lista opcional de cadenas de capacidades a otorgar al dispositivo; por defecto es un arreglo vacío |
expires_at
|
string (date) | Fecha y hora de expiración opcional; debe ser futura. Null u omitido significa que el token nunca expira |
{
"device_type": "<device_type>",
"device_name": "<device_name>"
}
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device-tokens" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"device_type": "<device_type>",
"device_name": "<device_name>"
}'
{
"data": {
"data.id": "integer",
"data.device_name": "string",
"data.device_type": "string (enum)",
"data.token": "string (64-char)",
"data.expires_at": "string",
"warning": "string"
}
}
Obtener token de dispositivo
Muestra los metadatos de un token de dispositivo específico (sin el secreto).
Parámetros de ruta
id
requerido
|
integer | Clave primaria del token de dispositivo; 404 si no se encuentra |
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/device-tokens/{id}" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"data.id": "integer",
"data.device_type": "string (enum)",
"data.device_name": "string",
"data.device_id": "string",
"data.capabilities": "array",
"data.is_active": "boolean",
"data.last_seen_at": "string",
"data.expires_at": "string",
"data.created_at": "string (ISO 8601 datetime)"
}
}
Revocar token de dispositivo
Revoca (desactiva) un token de dispositivo.
Parámetros de ruta
id
requerido
|
integer | Clave primaria del token de dispositivo a revocar; 404 si no se encuentra |
curl -X DELETE "https://tu-empresa.chainlink.mx/api/v1/device-tokens/{id}/revoke" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"message": "string"
}
}
Configuración de la app móvil
Devuelve la configuración de la app móvil dirigida por el servidor para el tenant actual: modos de operación/rastreo, política de escaneo por módulo, visibilidad de campos, módulos habilitados y branding.
Sin parámetros.
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/mobile/config" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"operation_mode": "warehouse",
"tracking_mode": "mixed",
"scan_modes": [
"barcode",
"rfid"
],
"scan_policy": {
"stock_review": [
"barcode",
"rfid"
],
"pickings": [
"barcode",
"rfid"
],
"transfers": [
"barcode",
"rfid"
],
"receiving": [
"barcode"
],
"receipts": [
"barcode"
],
"catalog": [
"barcode"
],
"lookup": [
"barcode",
"rfid"
],
"validate": [
"barcode",
"rfid"
],
"positioning": [
"barcode",
"rfid"
]
},
"preferred_input": "auto",
"allow_camera_fallback": true,
"inventory_modes": [
"by_zone",
"by_position"
],
"field_visibility": {
"products": {
"show_serial": true,
"show_batch": true,
"show_pallet": false
},
"stock_review": {
"show_zones": true,
"allow_unknown_items": true
}
},
"ui_hierarchy": {
"stock_review_grouping": [
"warehouse",
"zone",
"position"
]
},
"feature_flags": [
"api.public.enabled",
"modules.rfid",
"modules.crossdock",
"erp.sap.enabled",
"webhooks.enabled",
"erp.enabled",
"modules.printing",
"modules.rfid_portals"
],
"modules": {
"rfid": true,
"crossdock": true
},
"branding": [],
"min_app_version": "1.0.0"
}
}
Enviar trabajo de impresión
Crea uno o más trabajos de impresión desde la app móvil para una plantilla de etiqueta, generando un EPC RFID único por cada copia en plantillas RFID.
Cuerpo (JSON)
printer_id
|
integer | Id de la impresora destino. Si es null se usa la impresora por defecto del tenant. |
template_slug
requerido
|
string | Slug de un LabelTemplate activo a renderizar (404 si no coincide ninguna plantilla activa). |
variables
requerido
|
object | Mapa clave/valor de variables de la plantilla. En plantillas RFID, un 'epc' o 'epc_hex' faltante/vacío se autogenera por copia como 'C1' + 22 caracteres hex. |
copies
|
integer | Número de copias a imprimir; por defecto 1. Cada copia es un trabajo independiente (todo o nada en una sola transacción de BD). |
{
"template_slug": "<template_slug>",
"variables": "<variables>"
}
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/mobile/print" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"template_slug": "<template_slug>",
"variables": "<variables>"
}'
{
"data": {
"job_id": "integer",
"status": "string",
"printer_name": "string",
"copies": "integer"
}
}
Listar plantillas de etiqueta
Lista las plantillas de etiqueta activas disponibles para impresión móvil.
Sin parámetros.
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/mobile/print/templates" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": [
{
"id": "integer",
"name": "string",
"slug": "string",
"type": "string",
"variables": "array",
"content_options": "object"
}
]
}
Listar impresoras
Lista las impresoras con su estado y su indicador de impresora por defecto.
Sin parámetros.
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/mobile/print/printers" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": [
{
"id": "integer",
"name": "string",
"ip_address": "string",
"status": "string",
"is_default": "boolean",
"printer_type": "string",
"location": "string",
"last_heartbeat_at": "datetime"
}
]
}
Listar trabajos de impresión
Devuelve los trabajos de impresión recientes con su estado en vivo para la pantalla de monitoreo de impresión móvil.
Sin parámetros.
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/mobile/print/jobs" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": [
{
"id": 1,
"status": "pending",
"template": "Etiqueta RFID de Tag",
"printer": "Zebra ZD421 - Oficina",
"source": "mobile",
"attempts": 0,
"error_message": null,
"created_at": "2026-07-08T03:04:49-06:00",
"completed_at": null
}
]
}
Listar portales RFID
Lista todos los portales RFID con un resumen de estado/en línea para la app móvil.
Sin parámetros.
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/mobile/rfid-portals" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": [
{
"id": "integer",
"name": "string",
"slug": "string",
"status": "string",
"is_online": "boolean",
"is_active": "boolean",
"reader_brand": "string",
"reader_model": "string",
"last_heartbeat_at": "datetime (ISO8601)",
"antenna_count": "integer",
"mode": "string"
}
]
}
Obtener mobile
Devuelve los eventos recientes de un portal RFID (últimos 5 minutos) junto con un encabezado compacto de estado del portal.
Parámetros de ruta
portal
requerido
|
integer | Id del portal; resuelto por route model binding implícito (404 si no se encuentra). |
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/mobile/rfid-portals/{portal}/live" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"portal": "object",
"events": "array",
"event_count": "integer"
}
}
Perfil del token actual
Devuelve el perfil y los roles del usuario autenticado.
Sin parámetros.
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/auth/me" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"id": 2,
"name": "Operador Demo",
"email": "operador@demo.chainlink.mx",
"username": "operador",
"roles": [
"Operador"
],
"avatar_url": null
}
}
Listar rfid portals
Lista el estado de los portales RFID (solo portales activos) autenticada por usuario.
Sin parámetros.
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/rfid-portals/status" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": [
{
"id": "integer",
"name": "string",
"status": "string",
"is_online": "boolean",
"last_heartbeat": "datetime (ISO8601)",
"brand": "string",
"mode": "string"
}
]
}
Listar discovery
Descubrimiento público de tenant: dado un dominio, devuelve las URLs base de API/OAuth, branding, features y la configuración de arranque móvil para que la app se autoconfigure antes del login.
Parámetros de consulta
domain
requerido
|
string | Dominio/host del tenant a resolver (p. ej. demo.chainlink.mx). 422 si está ausente, 404 si el dominio es desconocido o el tenant está ausente o no está 'active'. |
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/discovery" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"api_base_url": "string",
"oauth_url": "string",
"name": "string",
"branding": "object",
"features": "string[]",
"mobile": "object"
}
}
Listar device
Consulta (polling) los trabajos de impresión pendientes que el dispositivo de impresión que llama puede reclamar.
Parámetros de consulta
printer_id
|
integer | Restringe los trabajos pendientes a un id de impresora específico. |
limit
|
integer | Máximo de trabajos a devolver. |
curl -X GET "https://tu-empresa.chainlink.mx/api/v1/device/print/pending" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": [
{
"data[].id": "integer",
"data[].zpl_content": "string",
"data[].printer_ip": "string",
"data[].printer_id": "integer",
"data[].priority": "integer",
"data[].status": "string",
"data[].created_at": "datetime (ISO8601)",
"meta.count": "integer",
"meta.device": "string"
}
]
}
Crear device
Reclama de forma atómica un trabajo de impresión pendiente para este dispositivo.
Parámetros de ruta
jobId
requerido
|
integer | Id del trabajo a reclamar. 404 si no está pendiente o está enrutado a otro dispositivo. |
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/print/{jobId}/claim" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"data.id": "integer",
"data.zpl_content": "string",
"data.printer_ip": "string",
"data.status": "string"
}
}
Crear device
Marca como completado un trabajo de impresión reclamado.
Parámetros de ruta
jobId
requerido
|
integer | Id del trabajo a completar. 404 salvo que este dispositivo lo haya reclamado previamente y esté en sent/printing. |
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/print/{jobId}/complete" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"data.id": "integer",
"data.status": "string",
"data.completed_at": "datetime (ISO8601)"
}
}
Crear device
Reporta que un trabajo de impresión reclamado falló (con conteo de reintentos).
Parámetros de ruta
jobId
requerido
|
integer | Id del trabajo que falló. 404 salvo que este dispositivo lo haya reclamado y esté en sent/printing. |
Cuerpo (JSON)
error_message
requerido
|
string | Motivo de falla legible que se registra en el trabajo. |
{
"error_message": "<error_message>"
}
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/print/{jobId}/failed" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"error_message": "<error_message>"
}'
{
"data": {
"data.id": "integer",
"data.status": "string",
"data.attempts": "integer",
"data.max_attempts": "integer",
"data.will_retry": "boolean"
}
}
Crear device
Heartbeat del dispositivo de impresión; refresca el last-seen, combina las capacidades y devuelve el número de trabajos reclamables.
Cuerpo (JSON)
capabilities
|
object | Mapa de capacidades opcional a combinar con el token de dispositivo. |
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/print/heartbeat" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"status": "string",
"server_time": "datetime (ISO8601)",
"pending_jobs": "integer"
}
}
Crear device
Registra o actualiza la impresora física que gestiona este dispositivo (idempotente por ip_address). Lo usa el asistente de configuración de escritorio.
Cuerpo (JSON)
name
requerido
|
string | Nombre visible de la impresora. |
ip_address
requerido
|
string | IP de la impresora; clave única para updateOrCreate (idempotente). |
port
|
integer | Puerto TCP; por defecto 9100. |
printer_type
|
string | Tipo de driver; por defecto 'zebra_zpl'. |
location
|
string | Etiqueta de ubicación física. |
is_default
|
boolean | Cuando es true, marca esta impresora como la predeterminada del tenant tras guardar. |
capabilities
|
array | Lista de capacidades de la impresora; por defecto []. |
model
|
string | Modelo de la impresora; se incorpora a description. |
serial
|
string | Serie de la impresora; se incorpora a description como 'SN ...'. |
{
"name": "Producto de ejemplo",
"ip_address": "<ip_address>"
}
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/print/register" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "Producto de ejemplo",
"ip_address": "<ip_address>"
}'
{
"data": {
"data.id": "integer",
"data.name": "string",
"data.ip_address": "string",
"data.port": "integer",
"data.is_default": "boolean",
"data.status": "string"
}
}
Crear device
Ingiere un payload crudo de lectura RFID del portal asignado al dispositivo; resuelve los EPC a etiquetas/existencias.
Cuerpo (JSON)
(raw body)
requerido
|
object | Payload de escaneo específico del lector (EPCs, antena, RSSI, etc.). La forma depende del driver del lector del portal; se procesa aguas abajo, no se valida aquí. |
{
"(raw body)": "<(raw body)>"
}
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/rfid/ingest" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"(raw body)": "<(raw body)>"
}'
{
"data": {
"ok": "boolean",
"received": "integer",
"portal": "string",
"timestamp": "datetime (ISO8601)"
}
}
Crear device
Heartbeat del dispositivo RFID; marca el portal asignado como en línea y refresca el last-seen.
Sin parámetros.
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/rfid/heartbeat" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
{
"data": {
"status": "string",
"server_time": "datetime (ISO8601)",
"portal_id": "integer"
}
}
Crear device
Registra un nuevo portal RFID para este dispositivo, generando una URL de callback y un secreto de webhook, y devuelve los pasos de autoconfiguración del driver.
Cuerpo (JSON)
name
requerido
|
string | Nombre del portal; el slug se deriva como slug(name)+'-'+random(4). |
reader_brand
requerido
|
string | Marca del lector RFID. |
reader_model
|
string | Modelo del lector. |
reader_host
requerido
|
string | Host/IP del lector. |
reader_port
|
integer | Puerto del lector; por defecto 5084 (LLRP). |
connection_protocol
requerido
|
string | Cómo se comunican el servidor y el lector. |
mode
|
string | Modo de operación del portal; por defecto 'tunnel_verification'. |
antennas
|
array | Lista opcional de configuración de antenas. |
antennas.*.port
|
integer | Número de puerto de la antena (requerido cuando se proporcionan antenas). |
antennas.*.name
|
string | Etiqueta de la antena. |
antennas.*.power_dbm
|
integer | Potencia de la antena en dBm. |
antennas.*.enabled
|
boolean | Si la antena está habilitada. |
{
"name": "Producto de ejemplo",
"reader_brand": "<reader_brand>",
"reader_host": "<reader_host>",
"connection_protocol": "<connection_protocol>"
}
curl -X POST "https://tu-empresa.chainlink.mx/api/v1/device/rfid/register" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "Producto de ejemplo",
"reader_brand": "<reader_brand>",
"reader_host": "<reader_host>",
"connection_protocol": "<connection_protocol>"
}'
{
"data": {
"data.id": "integer",
"data.name": "string",
"data.slug": "string",
"data.callback_url": "string",
"data.webhook_secret": "string",
"data.status": "string",
"data.supports_auto_configuration": "boolean",
"data.configuration_steps": "array"
}
}
¿Necesitas habilitar un endpoint o tienes dudas? Contáctanos.
← Volver al inicio de Developers