API y asistentes de IA
Consultar y cargar los datos del laboratorio desde planillas, scripts y asistentes como Claude, ChatGPT o Cursor, con un token o conectándolos desde el asistente.
La API permite usar los datos del laboratorio desde otros programas: una planilla de Excel que se actualiza sola, un script en Python que arma un reporte, un equipo que registra sus muestras al terminar una corrida o un sistema del instituto que necesita saber dónde está una muestra o cuánto queda de un reactivo.
Cada programa se identifica con un token: una clave larga que empieza con trz_.
Un token actúa en tu nombre, solo en este laboratorio y con el permiso que elijas al
crearlo. Lo que hace queda en el historial como hecho por vos, vía API. Ve lo mismo
que vos: si la administración te limitó algunos módulos, equipos, cuentas o servicios, el token
tampoco los ve (GET /api/v1/lab trae tu acceso parcial en token.scopes).
Con un token de Consulta solo se consulta. Con uno de Colaborador/a también se carga y se modifica: muestras, equipos, mantenimientos, reservas, insumos, lotes, consumos, pedidos, alarmas de temperatura, pedidos de servicios y facturas, movimientos del presupuesto, protocolos y capacitaciones, y controles, residuos e incidentes de Seguridad e Higiene (ver Cargar y modificar datos). Cada cambio queda en el historial del registro con tu nombre y «vía API · <nombre del token>», igual que si lo hubieras hecho desde la web.
Encender la API (administración)
La API viene apagada en cada laboratorio. Para encenderla, la administración va a Acceso por API y toca Encender.
Desde esa misma pantalla la administración ve los tokens de todas las personas y puede revocar cualquiera. Si la apaga, todos los tokens dejan de funcionar hasta que la vuelva a encender (no se borran).
Crear un token
- Andá a Acceso por API. Si no administrás el laboratorio, lo encontrás en el menú junto a Ayuda, cuando la API está encendida.
- Tocá Crear token y completá:
- Nombre: dónde lo vas a usar, por ejemplo «Planilla de stock».
- Qué puede hacer: como mucho, tu propio rol. Para leer datos alcanza con Consulta; para cargar o modificar, hace falta Colaborador/a.
- Vence en: 30, 90, 180 días o un año.
- Copiá el token y guardalo donde lo vayas a usar o en un gestor de contraseñas. Vialo no lo guarda y no lo vas a poder ver de nuevo. Si lo perdés, revocalo y creá otro.
Cada persona puede tener hasta 10 tokens vigentes por laboratorio.
Tratá el token como una contraseña: quien lo tenga puede ver los datos del laboratorio en tu nombre. No lo pegues en una planilla compartida ni en un mensaje. Si creés que se filtró, revocalo: deja de funcionar en ese mismo momento.
Qué podés consultar
La dirección de la API es la de Vialo seguida de /api/v1: https://vialolab.com/api/v1.
| Dirección | Qué devuelve |
|---|---|
/lab | El laboratorio, su logo, su plan (subscription, con can_write) y qué puede hacer el token. Sirve para probar que anda. |
/audience?module=budget | Antes de cargar algo: quiénes lo van a ver. La gente que usa el módulo y, con kind e ids separados por coma (un equipo, un lugar, un documento, un servicio o una cuenta), solo quienes también ven esos recursos. |
/biobank/samples | Muestras, con filtros (ver abajo). Hasta 200 por página. |
/biobank/samples/PL-2026-00042 | Una muestra por su código (o su id), con su ubicación y sus alícuotas. |
/biobank/samples/<id>/history | El historial de cambios de una muestra. |
/biobank/samples/<id>/attachments | Los adjuntos, con un enlace de descarga que vence a los 5 minutos. |
/biobank/locations | Salas, equipos, racks y cajas, con cuántos lugares ocupados tiene cada caja. |
/biobank/boxes/<id> | La grilla de una caja: cada posición, ocupada o libre, y las muestras en la caja sin posición (unplaced). |
/biobank/sample-types | Los tipos de muestra. |
/biobank/projects | Los proyectos del laboratorio. Las muestras traen su project; al cargar o editar se manda project (id o nombre; null la saca del proyecto). |
/biobank/fields | Los campos de la muestra, incluidos los personalizados del laboratorio. |
/equipment/items | Equipos, con filtros (ver abajo). Hasta 200 por página. |
/equipment/items/EQ-0004 | Un equipo por su código (o su id), con su plan de mantenimiento y sus fallas abiertas. |
/equipment/items/<id>/events | El registro del equipo: mantenimientos, calibraciones, fallas, reparaciones. |
/equipment/items/<id>/history | El historial de cambios de los datos del equipo. |
/equipment/items/<id>/access | Si el equipo es restringido y quiénes lo ven o también lo gestionan (level: view o manage). Se elige desde la ficha del equipo, no con un token. |
/biobank/locations/<id>/access | Lo mismo para una ubicación del biobanco (alcanza a lo que tiene adentro; es el mismo árbol de lugares que usa Insumos, así que vale para los dos). Se elige desde su ficha, no con un token. |
/reagents/places/<id>/access | Lo mismo para un lugar de guardado de insumos (alcanza a los lotes guardados ahí). Se elige desde su ficha, no con un token. |
/equipment/items/<id>/attachments | Manuales y certificados, con un enlace de descarga que vence a los 5 minutos. |
/equipment/due | Lo vencido y lo que está por vencer de todos los equipos (status, until). |
/equipment/items/<id>/todos | Los pendientes de un equipo, con fecha límite y proveedor. |
/equipment/items/<id>/photo/suggestions | Fotos posibles del equipo; con q, otro texto o un enlace. Pide Colaborador/a. |
/equipment/failures | Las fallas abiertas de todos los equipos. |
/equipment/bookings | Reservas de un rango de días (from, to, equipment; q busca por motivo, equipo o persona; status, también las canceladas o rechazadas). |
/equipment/usage | Registro de uso de un rango de días (from, to, equipment). |
/equipment/types | Los tipos de equipo. |
/equipment/providers | Los proveedores de servicio técnico, con su contacto. |
/equipment/fields | Los campos del equipo, incluidos los personalizados del laboratorio. |
/reagents/items | Insumos (reactivos, kits, plásticos, descartables), con su stock y filtros (ver abajo). |
/reagents/items/RE-0003 | Un insumo por su código (o su id), con su stock, sus lotes y si tiene un pedido abierto. |
/reagents/items/<id>/movements | Ingresos, consumos, descartes, ajustes y traslados de un insumo. |
/reagents/items/<id>/history | El historial de cambios de los datos del insumo. |
/reagents/items/<id>/attachments | Fichas de seguridad y certificados, con un enlace de descarga que vence a los 5 minutos. |
/reagents/items/<id>/photo/suggestions | Fotos posibles del insumo; con q, otro texto o un enlace. Pide Colaborador/a. |
/reagents/lots | Lotes vencidos o por vencer que siguen en stock (status, until, q). |
/reagents/movements | El libro de movimientos del laboratorio (item, kind, from, to, controlled). |
/reagents/to-order | Lo que llegó al punto de pedido y todavía no se pidió, con la cantidad sugerida. |
/reagents/orders | Pedidos abiertos (o cerrados, con open=false). |
/reagents/gas-cylinders | Tubos de gas: estado, proveedor, equipo al que alimentan, vencimiento y pedido de carga en curso (gas, status). |
/reagents/gas-orders | Pedidos de carga de gases, abiertos (o cerrados, con open=false). |
/reagents/places | Lugares de guardado, en árbol (path: «Sala › Heladera › Estante 1»), con su grilla si tienen (grid). |
/reagents/places/<id>/grid | La grilla de un lugar: cada posición, ocupada (con su lote) o libre. |
/reagents/categories | Las categorías de insumos. |
/reagents/suppliers | Los proveedores, con su contacto. |
/reagents/fields | Los campos del insumo y del lote, incluidos los personalizados del laboratorio. |
/monitoring/sensors | Los sensores de temperatura, con su estado ahora y la última lectura (equipment). |
/monitoring/sensors/<id> | Un sensor, con la mínima y la máxima de un período y sus alarmas (ver abajo). |
/monitoring/sensors/<id>/readings | Las lecturas de un período, resumidas por tramos para graficar (points). |
/monitoring/sensors/<id>/history | Quién lo conectó, le cambió el rango o lo desconectó. |
/monitoring/alarms | Las alarmas, con la acción correctiva registrada (pending, sensor, from, to). |
/services/catalog/<id>/access | Si el servicio es restringido y quiénes lo ven. Se elige desde el catálogo, no con un token. |
/services/catalog | El catálogo de servicios (sin los restringidos que la persona no ve) y, con «Ver montos», sus precios por lista con su historial. |
/services/clients | Los clientes, con sus áreas y su lista de precios. |
/services/clients/<id> | Un cliente, por id, sigla, nombre o identificación fiscal (CUIT, RUT, RFC…). |
/services/orders | Los pedidos de servicios (q, status, client, from, to; billing pide «Ver montos»). |
/services/orders/<id> | Un pedido por id o código, con sus ítems y, con «Ver montos», precio, cotización y factura de cada uno. |
/services/orders/<id>/history | Quién cargó o modificó el pedido. |
/services/to-invoice | Lo que hay para facturar, por cliente (pide «Ver montos»). |
/services/invoices | Las facturas con su total, lo cobrado y el estado (status, client; pide «Ver montos»). |
/services/invoices/<id> | Una factura por id o número, con sus ítems, sus cobros y el resumen para facturar. |
/services/balance | Lo facturado, lo cobrado, lo pendiente, cada deducción del reparto y el neto (year o from/to, filtros month, service, client, client_kind; group_by: service, client, client_kind o month); por servicio o por mes, también los egresos imputados y el saldo. Pide «Ver montos». |
/services/productivity | La productividad cobrada por persona y servicio (year). Sin «Ver montos», solo la de la persona del token, con el permiso «Ver su productividad». |
/services/invoices/<id>/productivity | La productividad de lo cobrado de una factura, por participante, servicio y porcentaje (pide «Ver montos»). |
/services/orders/<id>/productivity | La parte de un pedido en la productividad de los cobros de sus facturas (pide «Ver montos»). |
/services/split | La cadena de deducciones con sus tramos y los participantes de la productividad (pide «Ver montos»). |
/services/quotes | Las cotizaciones con su total y su estado (status: open, draft, sent, expired, accepted, rejected o all; client). Pide «Ver montos». |
/services/quotes/<id> | Una cotización por id o código, con sus ítems y la cotización del dólar usada. |
/services/settings | La configuración de Servicios del laboratorio: fuente de la cotización, impuestos, formato del resumen para facturar, avisos, cotizaciones, criterio del reparto y muestras. |
/services/stages | Las etapas del pedido del laboratorio, cada una sobre un estado (vacío: no usa etapas). |
/services/orders/<id>/samples | Las muestras de un pedido, con su estado y su resultado. |
/budget/accounts | Las cuentas del presupuesto que ve la persona, con su moneda, su saldo, lo comprometido y lo disponible, si se rinden, quién aprueba y los rubros que aceptan (las restringidas que no ve no aparecen). |
/budget/accounts/<id> | Una cuenta por id o nombre. |
/budget/movements | Ingresos, gastos y transferencias, cada uno con la moneda de su cuenta (q, account, kind, status, committed, missing_amount, from, to). |
/budget/movements/<id> | Un movimiento, con el estado de su rendición. |
/budget/movements/<id>/history | Quién lo cargó, lo rindió o lo aprobó. |
/budget/summary | El año contable por cuenta y por mes: gastado, comprometido, ingresado y transferencias (year: el año en que empieza). |
/budget/accounts/<id>/balance | El balance de una cuenta en un año contable: mes a mes con saldo al cierre, y lo gastado por rubro (contra lo asignado), proveedor, servicio y rendición, más los gastos más grandes. Filtros: month, category, supplier, service, status. |
/budget/settings | La configuración del presupuesto: año contable, rendición, quién aprueba, comprometidos, avisos, país y moneda. |
/budget/category-templates | Los rubros sugeridos por financiador. |
/budget/categories | Los rubros del gasto. |
/budget/allocations | Lo asignado a cada cuenta en el año contable (year) o para toda su vigencia, en total o por rubro, con lo gastado, lo comprometido y lo que queda. |
/budget/suggestions | Los registros de Equipos y lotes de Insumos con costo que todavía no están en el presupuesto («Para imputar»). |
/protocols/documents | Los documentos con su versión vigente, quién la aprobó y cuándo toca revisarla (q, category, state: effective, draft, archived o review; linked_type + linked: los de un equipo, tipo de equipo, servicio, insumo o ubicación). Quien solo consulta ve los publicados. |
/protocols/documents/<id> | Un documento por código (PRO-001) o id, con el texto de la versión vigente (o la que pidas con number), todas sus versiones, tu lectura pendiente y a qué se aplica (links). |
/protocols/documents/<id>/history | Quién creó el documento y le cambió el título, la categoría o el responsable. |
/protocols/documents/<id>/access | Si el documento es restringido y quiénes lo ven o también lo gestionan. |
/protocols/documents/<id>/attachments | El archivo adjunto de una versión, con un enlace de descarga que vence a los 5 minutos. |
/protocols/reading | Las lecturas que te asignaron y no confirmaste (confirmed=true: también las confirmadas). |
/protocols/compliance | Por documento vigente, quién confirmó la lectura y quién falta. Pide el permiso «Aprobar documentos». |
/protocols/trainings | El registro de capacitaciones (document, person, from, to). Quien solo consulta ve las suyas. |
/safety/elements | Los elementos de seguridad (matafuegos, duchas, lavaojos…) con sus controles y cuándo vence cada uno (kind, due, archived). |
/safety/elements/<id> | Un elemento por id, nombre o identificación, con sus controles y los últimos 50 registrados. |
/safety/hazards | Los productos peligrosos de Insumos con stock, por mueble, con las incompatibilidades por pictograma y los que no tienen hoja de seguridad. |
/safety/waste | Las corrientes de residuos con lo que hay en acopio, y los registros de un período (from, to; por defecto, el trimestre en curso). |
/safety/controlled | El informe de sustancias controladas de un período (from, to; por defecto, el último cerrado), con su vencimiento y si se presentó. |
/floorplan/plans | Los planos (uno por planta o sector) con sus salas dibujadas, a qué sala de Lugares corresponde cada una y lo que tiene adentro: lugares con sus tubos, equipos y elementos de seguridad. |
/floorplan/locate | Dónde está algo: busca equipos, lugares, elementos de seguridad, salas y tubos (q, por nombre o código) y dice en qué plano y sala está cada uno y adentro de qué. |
/safety/incidents | Los incidentes con su acción correctiva (open). |
/safety/people | El personal con los campos propios del laboratorio (archived). Los campos de tipo archivo vienen por nombre. |
/safety/people/<id> | Una persona por id o nombre. |
/safety/people/fields | Los campos del personal, incluidos los propios del laboratorio (EPP, aptos…). |
La lista completa, con todos los parámetros, los datos que se mandan y lo que responde cada
endpoint, está en la Referencia de la API, que se arma sola con la API real.
También está en /api/v1/openapi.json, una descripción estándar (OpenAPI) que muchas
herramientas saben leer.
Filtros de muestras
Se agregan a la dirección después de un ? y se combinan con &. Una muestra aparece si
cumple todos los filtros.
| Filtro | Ejemplo | Qué hace |
|---|---|---|
q | q=PAC-0012 | Busca en el código, el donante, las notas y los campos de texto. |
type | type=Plasma,Suero | Tipos de muestra, por nombre o id. |
status | status=available,in_use | Estados: available, in_use, depleted, discarded, transferred. |
location | location=<id del freezer> | Lo que está en esa ubicación, incluido lo que hay adentro. |
donor | donor=PAC-00 | Parte del código de paciente o donante. |
collected_from, collected_to | collected_from=2026-01-01 | Fecha de extracción, desde y hasta (AAAA-MM-DD). |
created_from, created_to | created_to=2026-06-30 | Fecha de carga, desde y hasta. |
created_by | created_by=me | Quién las cargó: me (la persona del token), id, nombre o email. |
placement | placement=unlocated | located: solo las ubicadas en una caja; unlocated: solo las que todavía no tienen lugar. |
origin | origin=aliquot | primary: solo muestras originales; aliquot: solo alícuotas y derivadas. |
sort | sort=-collection_date | Orden. Con - adelante, de mayor a menor. |
page, limit | page=2&limit=200 | Página y resultados por página. |
Filtros de equipos
| Filtro | Ejemplo | Qué hace |
|---|---|---|
q | q=Eppendorf | Busca en el código, el nombre, la marca, el modelo y los números de serie e inventario. |
type | type=Centrífuga | Tipos de equipo, por nombre o id. |
status | status=out_of_service | Estados: in_service, out_of_service, retired. |
room | room=Sala 2 | Salas. |
responsible | responsible=me | Responsables: me (la persona del token), id, nombre o email. |
provider | provider=Biotec | Servicio técnico, por nombre o id. |
warranty | warranty=active | active: solo los que están en garantía; expired: solo los de garantía vencida. |
biobank | biobank=linked | linked: vinculados con un lugar del Biobanco; unlinked: sin vincular. Pide el Biobanco habilitado. |
attention | attention=overdue | due (vencido o por vencer), overdue (vencido) u open_failure (con una falla abierta). |
sort | sort=next_due | Orden. Con - adelante, de mayor a menor. |
page, limit | page=2&limit=200 | Página y resultados por página. |
Filtros de insumos
| Filtro | Ejemplo | Qué hace |
|---|---|---|
q | q=etanol | Busca en el código, el nombre, la marca, los números de catálogo y CAS, y el código o n.º de un lote. |
category | category=Plásticos | Categorías, por nombre o id. |
place | place=Heladera 2 | Lugares, por nombre, camino o id, incluido lo que tienen adentro. |
supplier | supplier=Biodynamics | Proveedor habitual, por nombre o id. |
storage | storage=fridge | Conservación: room_temp, fridge, freezer_20, freezer_80, ln2, other. |
hazards | hazards=GHS02,GHS06 | Con cualquiera de estos pictogramas de peligro (GHS01 a GHS09). |
responsible | responsible=me | Responsables: me (la persona del token), id, nombre o email. |
attention | attention=reorder | any, reorder (en el punto de pedido), due (lotes vencidos o por vencer), expired u out (sin stock). |
controlled | controlled=yes | yes: solo las sustancias controladas; no: sin ellas. |
archived | archived=include | include suma los archivados; only, solo ellos. |
sort | sort=next_expiry | Orden. Con - adelante, de mayor a menor. |
page, limit | page=2&limit=200 | Página y resultados por página. |
El stock de un insumo no cuenta los lotes vencidos y está en la unidad del insumo
(unit).
Sensores y alarmas
Un sensor se indica por su id o, si su equipo tiene uno solo, por el código del equipo
(/monitoring/sensors/EQ-0003). El período de /monitoring/sensors/<id> y de readings se
elige con period (12h, 24h, 7d o 30d, hasta ahora; por defecto 24h) o con from y to
(días AAAA-MM-DD en la hora del laboratorio, hasta un año). Las lecturas vienen resumidas: el
período se divide en tramos y de cada uno llegan la más baja y la más alta, así un pico corto
no se pierde. Las temperaturas están en °C.
El state de cada sensor es ok (en rango), out (fuera de rango, todavía dentro de la
demora), alarm (fuera de rango más tiempo que la demora), offline (dejó de mandar
lecturas o está desconectado) o waiting (nunca mandó). /monitoring/alarms devuelve solo
lo que llegó a alarma; con pending=true, las que todavía no tienen anotado qué se hizo.
Las horas de las reservas y del registro de uso vienen en UTC (2026-10-24T13:00:00Z); la
zona horaria del laboratorio está en /lab. Los días de from y to se toman en la hora
del laboratorio.
Los valores de los campos personalizados vienen en custom_fields, con la clave de cada
campo (la que devuelven /biobank/fields, /equipment/fields y /reagents/fields). En las listas se devuelve el texto de la
opción elegida.
Cargar y modificar datos
Con un token de Colaborador/a también se puede escribir. Los datos van en el cuerpo del
pedido, en JSON, con el encabezado Content-Type: application/json. Se aplican las
mismas reglas que en la web: los campos obligatorios del laboratorio, que una posición
esté libre, que haya stock para consumir, que una reserva no choque con otra.
- Historial. Cada cambio queda en el historial del registro con tu nombre y «vía API · <nombre del token>». Lo ve cualquiera que abra el registro en la web.
- Códigos. Los códigos nuevos (muestras, equipos, insumos, lotes) los asigna Vialo con el formato del laboratorio. La respuesta trae el registro creado, con su código y su id.
- Campos personalizados. Van en
custom_fields, con la clave de cada campo. En las listas se puede mandar el texto de la opción («EDTA»). Al editar, solo cambian las claves que mandás;nullborra un valor. - Versión. Para editar (
PATCH) hay que mandar laversionque devolvió la API al leer el registro. Si otra persona lo cambió mientras tanto, la respuesta es409y no se pisa nada: volvé a leerlo y decidí. - Reintentos sin duplicar. En los
POSTpodés mandar el encabezadoIdempotency-Keycon una clave única por operación (por ejemplo un UUID). Si el pedido se repite con la misma clave en las 24 horas siguientes (porque se cortó la conexión, por ejemplo), no se vuelve a ejecutar: recibís la primera respuesta, con el encabezadoIdempotent-Replayed: true. - Borrar. Las muestras se borran con
DELETE, y es un borrado lógico: la administración las puede restaurar desde «Borradas». También se borran movimientos del presupuesto (solo la coordinación), capacitaciones, vínculos de un protocolo y tus recordatorios; cada sección dice cuáles. Los asistentes de IA no borran muestras ni registros (ver Asistentes de IA).
Biobanco
| Pedido | Qué hace |
|---|---|
POST /biobank/samples | Carga hasta 100 muestras en samples. Se crean todas o ninguna. |
PATCH /biobank/samples/PL-2026-00042 | Cambia tipo, donante, fecha, cantidad, unidad, notas o campos personalizados. |
POST /biobank/samples/<id>/move | La guarda en una caja (box_id, position como «B4») o la deja sin ubicar (box_id: null). |
POST /biobank/samples/<id>/status | Cambia el estado. Agotada, descartada y transferida liberan su lugar. |
POST /biobank/samples/status | Cambia el estado de hasta 200 muestras juntas (samples: ids o códigos, status). |
POST /biobank/samples/<id>/aliquots | Crea alícuotas (count, quantity, unit, box_id). |
DELETE /biobank/samples/<id> | Borra la muestra (se puede restaurar). |
La grilla de una caja es opcional, y la posición también. En una caja con grilla y sin
position, cada muestra va al primer lugar libre; con position: null queda en la caja sin
posición. En una caja sin grilla (box.grid: false en /biobank/locations), las muestras
van siempre sin posición. El type va por nombre o por id (ver /biobank/sample-types) y
la caja por su id (ver /biobank/locations).
Equipos
| Pedido | Qué hace |
|---|---|
POST /equipment/items | Da de alta un equipo (name, type y el resto de sus datos). |
PATCH /equipment/items/EQ-0004 | Cambia datos del equipo, su estado, responsable o servicio técnico. |
POST /equipment/items/<id>/events | Registra un mantenimiento, calibración (con result y valid_until), verificación, limpieza, reparación o nota. |
POST /equipment/items/<id>/failures | Reporta una falla (detail, severity, take_out_of_service). |
POST /equipment/items/<id>/todos | Anota un pendiente en el equipo (title; opcionales detail, due_on, provider). |
POST /equipment/items/<id>/photo | Guarda como foto una imagen (url; opcional thumb_url). |
DELETE /equipment/items/<id>/photo | Quita la foto; el archivo sigue entre sus adjuntos. |
POST /equipment/todos/<id>/resolve | Marca un pendiente como resuelto. |
POST /equipment/failures/<id>/resolve | Cierra una falla (resolution) y, si no quedan otras abiertas, lo vuelve a poner en servicio. |
POST /equipment/bookings | Reserva un equipo (starts_at, ends_at; con repeat, se repite cada semana, día hábil o día). |
PATCH /equipment/bookings/<id> | Cambia el horario (starts_at, ends_at) o el motivo; si el equipo pide aprobación, vuelve a quedar pendiente. |
POST /equipment/bookings/<id>/cancel | Cancela una reserva (con scope: "following", también las siguientes de la serie). |
POST /equipment/items/<id>/usage | Registra un uso ya terminado (started_at, ended_at); con outcome: "problem", abre una falla. |
POST /equipment/providers | Agrega un proveedor de servicio técnico (name y, si querés, contacto, teléfono, email y notas). |
PATCH /equipment/providers/<id> | Cambia lo que mandes de un proveedor; archived lo archiva o reactiva y pide rol de administración. |
Las horas van como instantes ISO 8601 con zona (2026-10-24T10:00:00-03:00). Las personas
(responsable, quién lo hizo, para quién es la reserva) se indican por id, nombre o email.
Por API, reservar, registrar usos y reportar fallas también piden un token de Colaborador/a.
Insumos
| Pedido | Qué hace |
|---|---|
POST /reagents/items | Da de alta un insumo (name, unit y el resto de sus datos). |
PATCH /reagents/items/RE-0003 | Cambia datos del insumo, su punto de pedido o lo archiva (archived: true). |
POST /reagents/items/archive | Archiva hasta 200 insumos juntos (items: ids o códigos); con archived: false, los vuelve al inventario. |
POST /reagents/items/<id>/photo | Guarda como foto una imagen (url; opcional thumb_url). |
DELETE /reagents/items/<id>/photo | Quita la foto; el archivo sigue entre sus documentos. |
POST /reagents/lots | Registra un ingreso: item, quantity (el total), containers, lote, vencimiento y lugar. |
POST /reagents/lots/<lote>/consume | Registra un consumo (quantity, purpose). |
POST /reagents/lots/<lote>/discard | Descarta el lote o una parte, con su motivo (reason). |
POST /reagents/lots/<lote>/keep-expired | Conserva un lote vencido sin aviso (keep: false vuelve a avisar). Sigue vencido. |
POST /reagents/lots/<lote>/adjust | Deja el lote con la cantidad contada, con su motivo. |
POST /reagents/lots/<lote>/transfer | Lleva el lote, o una parte, a otro lugar. |
POST /reagents/movements/<id>/void | Anula un movimiento cargado por error, con su motivo. |
POST /reagents/orders | Pide un insumo. Si ya hay un pedido abierto para ese insumo, no lo duplica. |
POST /reagents/orders/<id>/ordered | Marca que el pedido se hizo al proveedor (fecha, llegada estimada, referencia). |
POST /reagents/orders/<id>/close | Cierra un pedido como recibido o cancelado. |
POST /reagents/gas-cylinders | Agrega un tubo de gas (número, proveedor, equipo al que alimenta, vencimiento). |
PATCH /reagents/gas-cylinders/<id> | Cambia un tubo (estado, equipo, proveedor, vencimiento…). El id puede ser el número del tubo. |
POST /reagents/gas-orders | Pide la carga de un tubo, o tubos de un gas. Si el tubo ya tiene un pedido abierto, no lo duplica. |
POST /reagents/gas-orders/<id>/ordered | Marca que la carga se pidió al proveedor (referencia, llegada estimada). |
POST /reagents/gas-orders/<id>/close | Cierra una carga como recibida (el tubo queda lleno) o cancelada. |
POST /reagents/suppliers | Agrega un proveedor (name y, si querés, contacto, teléfono, email, web, n.º de cliente y notas). |
PATCH /reagents/suppliers/<id> | Cambia lo que mandes de un proveedor; archived lo archiva o reactiva y pide rol de administración. |
En POST /reagents/lots y en /transfer, position («B4» o «2-4») ubica el lote en la
grilla del lugar, si tiene; es opcional. Con varios envases, el primero va ahí y los demás a
las siguientes libres.
Los lotes se indican por su id o por su código interno. Un lote vencido pide
confirm_expired: true para consumirlo, y las sustancias controladas piden reason en
cada movimiento, igual que en la web.
Monitoreo
| Pedido | Qué hace |
|---|---|
PATCH /monitoring/sensors/<id> | Cambia el nombre, el rango (min_value, max_value), las demoras o lo desconecta (archived: true). |
POST /monitoring/alarms/<id>/acknowledge | Anota qué se hizo con una alarma (note), a tu nombre. Cada alarma se registra una sola vez. |
Conectar un sensor nuevo y generar su clave se hace solo desde la web: la clave se muestra una vez y no conviene que pase por scripts ni asistentes.
Servicios
| Pedido | Qué hace |
|---|---|
POST /services/orders | Carga un pedido (client, area, received_on, items: servicio y cantidad). Con «Facturar y cobrar», el precio sale del catálogo o del que se mande, con la cotización del día si está en otra moneda. |
PATCH /services/orders/<id> | Cambia su estado (status: delivered registra la entrega) o su etapa (stage), sus datos o sus ítems (items los reemplaza; los facturados no se tocan; cada ítem acepta adjustment_pct). |
POST /services/clients | Carga un cliente, con sus áreas. |
PATCH /services/clients/<id> | Lo modifica, le suma áreas o lo archiva (archived). |
POST /services/catalog | Suma un servicio al catálogo. |
POST /services/catalog/<id>/prices | Carga un precio desde una fecha, con su tramo de volumen (min_quantity) y su mínimo por ítem (minimum). Pide «Facturar y cobrar». |
POST /services/invoices | Crea la factura de uno o más pedidos de un cliente (orders, number, issued_on, due_on, budget_account: la cuenta del presupuesto de sus cobros) y devuelve el resumen para facturar. |
PATCH /services/invoices/<id> | Cambia el número, las fechas o la cuenta del presupuesto (budget_account, sin cobros), o la anula (cancel: true, sin cobros). |
POST /services/invoices/<id>/payments | Registra un cobro (puede ser parcial; no se pasa del total). |
POST /services/split/deductions | Agrega un tramo de una deducción del reparto (name, kind, service, pct, amount en el recupero de fondos, base, position, client_kinds, budget_account, valid_from). Pide «Facturar y cobrar». |
POST /services/split/participants | Agrega un participante de la productividad de un servicio (service, person o external_name, pct, valid_from). |
POST /services/split/deductions/<id>/change | Cambio de régimen de una deducción (o de un participante, con participants en lugar de deductions): el tramo termina el día anterior a from y empieza otro con el pct nuevo. |
PATCH /services/split/deductions/<id>/account | Adónde va lo deducido: budget_account (id, nombre o código de una cuenta del presupuesto) para que entre como ingreso aparte en esa cuenta, o null para que salga del laboratorio. Vale para tramos ya aplicados. |
POST /services/quotes | Crea una cotización en borrador (client, area, items, valid_until, notes); sin precio, sale del catálogo. |
POST /services/quotes/<id>/accept | El cliente la aceptó: crea el pedido con sus servicios y precios. |
PATCH /services/settings | Cambia la configuración de Servicios (solo lo que mandás; pide un token de Coordinador/a). |
POST /services/stages | Agrega una etapa del pedido (name, status). Coordinador/a. |
PATCH /services/stages/<id> | Renombra, reordena, archiva o cambia el estado de una etapa. Coordinador/a. |
POST /services/orders/<id>/samples | Suma muestras a un pedido (codes, kind, status, item). |
PATCH /services/samples/<id> | Cambia el estado, el resultado o los datos de una muestra. |
Los montos piden los permisos de la persona dueña del token: sin «Ver montos», importes y
facturación llegan en null y las rutas solo económicas responden 403; facturar y
cobrar pide «Facturar y cobrar». La factura real se emite fuera de Vialo.
Presupuesto
| Pedido | Qué hace |
|---|---|
POST /budget/movements | Carga un gasto (queda pendiente de rendir si la cuenta se rinde, o comprometido con committed) o un ingreso (kind): account, concept, amount en la moneda de la cuenta (sin él, queda «Completar monto»), date, category, proveedor y factura. |
PATCH /budget/movements/<id> | Lo completa o corrige, lo marca como pagado (committed: false) o cambia su rendición (submission_status: submitted; approved y rejected, quien aprueba las de la cuenta). |
DELETE /budget/movements/<id> | Lo borra (solo la administración): deja de contar en el saldo y queda en el historial. Si es una transferencia, se borran las dos patas. |
POST /budget/transfers | Transfiere entre dos cuentas (from, to, amount, concept; entre monedas distintas, to_amount): no suma como gasto. |
POST /budget/suggestions/impute | Imputa un gasto sugerido a una cuenta (source, source_id, account, category, amount): queda pendiente de rendir si la cuenta se rinde. |
PATCH /budget/settings | Cambia la configuración del presupuesto (solo la administración): fiscal_start_month, requires_submission, approver, commitments, pending_after_days, ending_within_days. |
Las cuentas y quién ve cada una se manejan solo desde la web. Una cuenta restringida que la persona del token no ve no existe para la API.
Protocolos
| Pedido | Qué hace |
|---|---|
POST /protocols/documents | Crea un documento con su primer borrador (title, category, responsible, review_interval_months, body en Markdown, code opcional). Queda sin publicar. |
PATCH /protocols/documents/<id> | Cambia el título, la categoría, el responsable o cada cuánto se revisa. El código no cambia. |
POST /protocols/documents/<id>/versions | Abre un borrador nuevo con el texto de la vigente. |
PATCH /protocols/documents/<id>/draft | Escribe el borrador abierto (body, change_summary). Una versión publicada no se modifica. |
POST /protocols/documents/<id>/links | Lo vincula con un registro (type: equipment.item, equipment.type, services.catalog, reagents.item o biobank.location; target: código, nombre o id). |
DELETE /protocols/documents/<id>/links/<link_id> | Quita un vínculo. |
POST /protocols/trainings | Registra una capacitación para una o más personas (topic, trained_on, people, other_people, document, trainer, hours, notes). |
PATCH /protocols/trainings/<id> | Corrige una capacitación. |
DELETE /protocols/trainings/<id> | La borra (borrado lógico, queda en el historial). |
Aprobar y publicar una versión, asignar o confirmar la lectura, anotar una revisión y retirar
un documento no se pueden hacer con un token: la base de datos lo rechaza (error LB917)
porque son actos de la persona, hechos desde Vialo. El archivo adjunto de una versión también
se carga desde la web.
Seguridad e Higiene
| Pedido | Qué hace |
|---|---|
POST /safety/checks/<id>/records | Registra un control hecho (done_on, result: ok, observed o failed, performer_name, notes). Mueve el próximo vencimiento. |
POST /safety/waste | Registra residuo generado o un retiro (stream por id, nombre o código; kind: generated o pickup; quantity, occurred_on, manifest_number, transporter, operator, notes). |
POST /safety/incidents | Registra un incidente (title, kind, severity, occurred_at en la hora del laboratorio, description, corrective_action, corrective_due_on…). |
POST /safety/incidents/<id>/close | Cierra un incidente (note). |
POST /safety/people | Suma una persona al personal (name, position, document_id, email, phone, started_on, custom_fields). |
PATCH /safety/people/<id> | Cambia sus datos, los campos propios o si ya no trabaja en el laboratorio (archived). Pide la version. |
Los elementos, sus controles, las corrientes de residuos, la presentación del informe de controladas, la cuenta en Vialo de una persona y los campos de tipo archivo se cargan desde la web.
Plano (Lugares)
| Pedido | Qué hace |
|---|---|
PATCH /floorplan/areas/<id> | Enlaza una sala del plano a una sala de Lugares (room, por id o nombre exacto; null la desenlaza). |
Subir la imagen de un plano, dibujar las salas y poner marcas se hace desde la web.
Historial de cambios
| Pedido | Qué hace |
|---|---|
GET /history | Todo lo que se cargó, cambió o borró en el laboratorio, con quién y cuándo, de lo más nuevo a lo más viejo (module, person, action, from, to, limit hasta 100). Pide un token de Coordinador/a. |
Se pagina con un cursor: si la respuesta trae next_before, pasalo en before para traer lo
anterior. Los campos secretos no salen.
Soporte
| Pedido | Qué hace |
|---|---|
GET /support | Tus consultas al equipo de Vialo desde este laboratorio, con su estado (new, answered, closed). |
POST /support | Le escribe al equipo de Vialo (category: question, problem, idea o billing; subject; message), igual que «Escribinos» de la Ayuda. Hasta 5 por hora. |
Escribir al soporte no pide un token de Colaborador/a ni que el laboratorio pueda cargar datos: cualquier token sirve. La respuesta llega por mail a la persona dueña del token.
Recordatorios
| Pedido | Qué hace |
|---|---|
GET /reminders | Los recordatorios que ve la persona dueña del token: los que anotó y los que son para ella (status: pending, done o all; scope: all, mine o created; from, to). Nadie más del laboratorio los ve. |
GET /reminders/<id> | Un recordatorio. |
POST /reminders | Anota un recordatorio (title, due_date, due_time opcional, notes, assignees: «me», ids, nombres o mails; notify_email; notify_before en minutos; repeat: none, daily, weekly o monthly, y repeat_until). Avisa en la app cuando llega el momento y, con notify_email, por mail. |
PATCH /reminders/<id> | Lo cambia (quien lo anotó) o lo marca como hecho con done: true (también las personas asignadas). |
DELETE /reminders/<id> | Lo borra (solo quien lo anotó). |
Como el soporte, los recordatorios no piden un token de Colaborador/a: cualquier miembro anota los suyos.
Ejemplos
Probar el token
curl -H "Authorization: Bearer trz_tu_token" https://vialolab.com/api/v1/lab
Python: todas las muestras de plasma disponibles
import requests
API = "https://vialolab.com/api/v1"
HEADERS = {"Authorization": "Bearer trz_tu_token"}
muestras, pagina = [], 1
while True:
r = requests.get(
f"{API}/biobank/samples",
headers=HEADERS,
params={"type": "Plasma", "status": "available", "limit": 200, "page": pagina},
)
r.raise_for_status()
datos = r.json()
muestras += datos["data"]
if pagina * datos["limit"] >= datos["total"]:
break
pagina += 1
for m in muestras:
lugar = m["placement"]
print(m["code"], " · ".join(filter(None, [lugar["path"], lugar["position"]])) if lugar else "sin ubicar")
Python: cargar las muestras de una corrida
import csv, uuid, requests
API = "https://vialolab.com/api/v1"
HEADERS = {"Authorization": "Bearer trz_token_de_editor"}
with open("corrida.csv", newline="", encoding="utf-8") as f:
muestras = [
{
"type": "Plasma",
"donor_code": fila["donante"],
"collection_date": fila["fecha"], # AAAA-MM-DD
"quantity": float(fila["volumen"]),
"box_id": "<id de la caja>", # va al primer lugar libre
"custom_fields": {"anticoagulante": "EDTA"},
}
for fila in csv.DictReader(f)
]
r = requests.post(
f"{API}/biobank/samples",
headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
json={"samples": muestras[:100]}, # hasta 100 por pedido
)
if r.status_code != 201:
print(r.json()["error"]) # el mensaje dice qué fila y qué campo revisar
else:
for m in r.json()["data"]:
print(m["code"], m["placement"]["position"] if m["placement"] else "sin ubicar")
Corregir un dato
curl -X PATCH https://vialolab.com/api/v1/biobank/samples/PL-2026-00042 \
-H "Authorization: Bearer trz_token_de_editor" \
-H "Content-Type: application/json" \
-d '{"version": 3, "quantity": 180, "custom_fields": {"hemolisis": "Leve"}}'
Excel: una tabla que se actualiza
- En Excel, Datos → Obtener datos → De otras fuentes → Desde la web.
- Elegí Avanzado y pegá la dirección, por ejemplo
https://vialolab.com/api/v1/biobank/samples?limit=200. - En Parámetros de encabezado de solicitud HTTP, escribí
Authorizationy, al lado,Bearer trz_tu_token. - En el editor que se abre, expandí la columna
datapara tener una fila por muestra. Con Actualizar se vuelven a traer los datos.
El token queda guardado en el archivo de Excel. Usá uno de Consulta creado solo para esa planilla y no la compartas fuera del laboratorio.
Límites y errores
Cada token puede hacer 60 pedidos por minuto para consultar y 20 por minuto para
cargar o modificar (se cuentan por separado). Si se pasa, la respuesta dice cuántos
segundos esperar. El cuerpo de un pedido puede tener hasta 1 MB. Las respuestas traen los encabezados X-RateLimit-Remaining (pedidos
que quedan) y X-RateLimit-Reset (cuándo se renueva el minuto).
Cuando algo sale mal, la respuesta trae un código y un mensaje en español:
| Código | Qué pasó |
|---|---|
unauthorized (401) | Falta el token, está mal copiado, se revocó, venció o la API está apagada. |
forbidden (403) | El token no tiene el permiso necesario (por ejemplo, Consulta cargando). |
read_only (403) | El laboratorio está en solo lectura (terminó la prueba o no tiene plan): se lee y exporta, pero no se carga. |
not_found (404) | No existe en este laboratorio (o el módulo no está habilitado). |
validation_failed (400) | Algún dato está mal: el mensaje dice cuál y details el campo. |
conflict (409) | Otra persona cambió el registro (mandá la version nueva) o ya existe. |
payload_too_large (413) | El cuerpo pasa de 1 MB: mandá los datos en varios pedidos. |
rate_limited (429) | Se pasó el límite de pedidos por minuto. |
Sensores de temperatura
Los sensores de heladeras y freezers no usan un token de persona: cada sensor tiene su
propia clave (empieza con vsn_), que se genera en Vialo al conectarlo en el módulo
Monitoreo. La clave no vence y solo sirve para cargar lecturas de ese sensor; no hace
falta encender el acceso por API.
POST /api/v1/monitoring/readings
Authorization: Bearer vsn_… (o X-Sensor-Key: vsn_…)
Content-Type: application/json
{ "value": -18.4 }
Para mandar varias lecturas con su hora (por ejemplo, las que el dispositivo guardó sin
conexión): { "readings": [{ "measured_at": "2026-10-25T10:00:00Z", "value": -18.4 }, …] }.
measured_at es opcional (ISO o segundos desde 1970); sin hora se usa la de llegada. Hasta
500 lecturas por pedido y 30 pedidos por minuto por sensor. Una lectura con la misma hora
que otra ya guardada se ignora, así que reintentar es seguro. La respuesta dice cuántas
llegaron y cuántas eran nuevas:
{ "sensor_id": "…", "received": 1, "accepted": 1, "duplicates": 0 }
Las alarmas (fuera de rango más tiempo que la demora del sensor) y el aviso de «sin datos» los calcula Vialo. Hay un ejemplo para armar un sensor con un ESP32 en la guía Armar o conectar un sensor del centro de ayuda.
Para consultar las temperaturas y las alarmas, o anotar qué se hizo con una alarma, desde un script o un asistente de IA, se usa un token de persona como en el resto de la API (ver Sensores y alarmas y Monitoreo).
Asistentes de IA (MCP)
Podés conectar un asistente de IA (Claude, ChatGPT, Cursor, VS Code y otros compatibles con MCP) y pedirle cosas sobre el laboratorio en lenguaje natural. Claude.ai, la app de Claude y ChatGPT se conectan sin token: te mandan a Vialo para que autorices (ver Claude.ai, ChatGPT y la app del celular). Los demás usan un token, como la API:
- «¿Dónde están las alícuotas de plasma del donante PAC-0012?»
- «¿Cuántos lugares libres quedan en la caja de ácidos nucleicos?»
- «¿Quién movió la muestra PL-2026-00042 y cuándo?»
- «Listame las muestras de suero extraídas en marzo que siguen disponibles.»
- «¿Qué calibraciones vencen este mes y quién se ocupa de cada una?»
- «¿Está libre la centrífuga refrigerada mañana a las 10?»
- «¿Qué reactivos vencen este mes y en qué heladera están?»
- «¿Qué hay que pedir esta semana y a qué proveedor?»
- «¿Cómo están las temperaturas de los freezers? ¿Hubo alarmas esta semana?»
- «¿Qué pedidos de servicios hay para facturar y cuánto le debemos facturar al CEMIC?»
- «¿Cuánto gastamos este año de la cuenta CUT y qué rendiciones siguen pendientes?»
- «¿Cuánto le quedó al laboratorio de secuenciación este año después de la comisión y la productividad?»
Con permiso de Colaborador/a, también le podés pedir que cargue o modifique:
- «Cargá estas 12 muestras de plasma del donante PAC-0031 en la caja 4.»
- «Registrá la calibración de la balanza EQ-0007 de hoy: conforme, válida por un año.»
- «Usé 2 frascos de etanol 96 %: descontalos del lote que vence primero.»
- «Pedí 10 cajas de puntas de 200 µL al proveedor de siempre.»
- «Registrá la alarma de la heladera EQ-0003: quedó la puerta abierta, la cerramos y volvió a rango en 20 minutos.»
- «Cargá un pedido del CEMIC, área Hematología: 16 reacciones de secuenciación.»
- «Registrá el cobro de la factura C0027-00038614: entró la transferencia completa hoy.»
- «Cargá un gasto de lavadero de $18.000 en la cuenta CUT, factura B00005-0000065.»
Antes de cada cambio, el asistente te dice qué va a hacer y tu programa (Claude, Cursor…) te pide confirmación, y te avisa con quién va a quedar compartido lo que carga. Lo que haga queda en el historial a tu nombre, «vía asistente de IA». No borra muestras ni registros: solo puede borrar un movimiento del presupuesto (si sos de la coordinación), un vínculo de un protocolo o un recordatorio tuyo. Con permiso de Consulta, el asistente solo consulta: ni siquiera ve las herramientas para cargar.
El asistente ve solo un laboratorio, con el permiso que elegiste, y solo los módulos habilitados.
La dirección del servidor MCP es la de Vialo seguida de /api/mcp:
https://vialolab.com/api/mcp.
Con qué Claude se puede usar
| Dónde usás Claude | ¿Se conecta? | Cómo |
|---|---|---|
| Claude en el navegador (claude.ai) y la app del celular | Sí | Como conector, sin token. Ver abajo. |
| Claude Desktop, la app de escritorio (Windows o Mac) | Sí | Como conector (igual que claude.ai) o con un archivo de configuración y un token. |
| Claude Code, en la terminal o en la pestaña Code de la app | Sí | Con un comando y un token. Ver abajo. |
Claude.ai, ChatGPT y la app del celular
Estos asistentes no usan token: los agregás como conector y te mandan a Vialo para que elijas a qué laboratorio entran y qué pueden hacer.
- La API tiene que estar encendida en el laboratorio (ver
Encender la API). La dirección para pegar está en
Acceso por API, en «Conectar Claude.ai o ChatGPT»: es la de
Vialo seguida de
/api/mcp. - Agregá el conector:
- Claude (claude.ai, la app de escritorio o la del celular): Configuración → Conectores → Agregar conector personalizado. Nombre: «Vialo»; URL: la dirección del paso 1. En los planes de equipo o empresa, puede que lo tenga que agregar primero quien administra la cuenta de Claude. Lo que conectás en claude.ai aparece también en la app del celular.
- ChatGPT: en la configuración de conectores o apps, agregá uno nuevo con la misma dirección y autenticación OAuth. Según el plan, puede hacer falta activar el modo desarrollador.
- Tocá Conectar. Se abre Vialo (si no habías entrado, primero te pide ingresar): elegí el laboratorio, qué puede hacer (Consulta para consultar, Colaborador/a para cargar) y hasta cuándo (Acceso hasta), y tocá Permitir acceso.
- Volvés al asistente, ya conectado. Probá con «¿Qué laboratorio ves en Vialo?».
La conexión aparece en Acceso por API como «asistente conectado por OAuth», con su permiso y su vencimiento. Desde ahí la revocás cuando quieras: el asistente pierde el acceso en ese momento. Todos los asistentes se llaman igual («Claude»), así que la administración ve, al lado del nombre, de quién es cada conexión. Para pasarlo a otro laboratorio, revocá la conexión y conectalo de nuevo. Cuando vence, el asistente te pide volver a conectar.
Autorizá solo asistentes que estés conectando vos: la pantalla de Vialo dice qué asistente pide el acceso y a qué dirección vuelve.
Antes de empezar (con token)
Para Claude Desktop con archivo de configuración, Claude Code, Cursor y VS Code:
- La API tiene que estar encendida en el laboratorio (ver Encender la API).
- Creá un token solo para Claude, con un nombre que diga dónde lo usás, por ejemplo «Claude Desktop · notebook». Si cambiás de computadora o la perdés, revocás solo ese. Elegí Consulta si solo vas a consultar y Colaborador/a si querés que también cargue datos.
- Tené a mano la dirección de Vialo:
https://vialolab.com. La del servidor MCP es esa misma seguida de/api/mcp.
Claude Desktop, paso a paso
-
Instalá Node.js. Claude Desktop se conecta a Vialo a través de un programa chico (
mcp-remote) que necesita Node.js. Bajá la versión LTS e instalala con las opciones que trae. Para comprobarlo, abrí una terminal (en Windows, PowerShell o «Símbolo del sistema»; en Mac, Terminal) y escribínode -v: tiene que mostrar un número de versión. -
Abrí la configuración. En Claude Desktop, andá a Configuración → Desarrollador y tocá Editar configuración. Se abre la carpeta del archivo
claude_desktop_config.json; abrilo con un editor de texto (el Bloc de notas sirve). El archivo está en:- Windows:
%APPDATA%\Claude\claude_desktop_config.json - Mac:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
-
Pegá la configuración. Si el archivo está vacío o solo tiene
{}, reemplazalo por esto, con la dirección de tu laboratorio y tu token:{ "mcpServers": { "vialo": { "command": "npx", "args": [ "-y", "mcp-remote", "https://vialolab.com/api/mcp", "--header", "Authorization:${VIALO_TOKEN}" ], "env": { "VIALO_TOKEN": "Bearer trz_tu_token" } } } }Si el archivo ya tiene otras cosas, no las borres: agregá el bloque
"vialo": { … }dentro demcpServers(separado de los demás servidores con una coma), o creámcpServerssi no está.Dejá
Authorization:${VIALO_TOKEN}tal cual, sin espacios. El token va solo enenv, después deBearery un espacio. Así se evita un problema de Windows con los espacios en los argumentos. -
Guardá y cerrá Claude del todo. Cerrar la ventana no alcanza. En Windows, hacé clic derecho en el ícono de Claude junto al reloj y elegí Salir; en Mac, Claude → Salir (⌘Q). Después volvé a abrirlo.
-
Comprobá que conectó. En Configuración → Desarrollador tiene que aparecer vialo como running. En una conversación nueva, abrí el menú de herramientas del cuadro de texto: tiene que estar vialo, con sus herramientas.
La primera vez que Claude usa cada herramienta, te pide permiso: Permitir una vez o Permitir siempre. Para las que consultan podés elegir siempre; para las que cargan o modifican, conviene una vez, así ves cada cambio antes de que se haga.
Claude Code
En una terminal:
claude mcp add --transport http --scope user vialo https://vialolab.com/api/mcp --header "Authorization: Bearer trz_tu_token"
Con --scope user queda disponible en todas tus carpetas; sin eso, solo en la carpeta
donde corriste el comando. La pestaña Code de la app de escritorio usa esta misma
configuración.
Para ver si conectó, corré claude mcp list (tiene que decir que vialo está
conectado) o escribí /mcp dentro de Claude Code. Para sacarlo, claude mcp remove vialo.
Para dejar la configuración en un proyecto que comparte un equipo, sin escribir el token
en el archivo, usá un .mcp.json en la carpeta del proyecto. Cada persona define la
variable de entorno VIALO_TOKEN con su propio token:
{
"mcpServers": {
"vialo": {
"type": "http",
"url": "https://vialolab.com/api/mcp",
"headers": { "Authorization": "Bearer ${VIALO_TOKEN}" }
}
}
}
Probar la conexión
Empezá con una pregunta que no toca datos:
- «¿A qué laboratorio de Vialo estás conectado y qué podés hacer?»
Claude usa laboratorio_ver y responde con el nombre del laboratorio, los módulos
habilitados y si el acceso es solo de consulta o también de carga. Después probá con algo
real, como «¿Qué calibraciones vencen este mes?».
Cómo sacarle provecho
- Pedí como se lo pedirías a alguien del laboratorio. Claude busca, cruza y resume: «Armame una tabla con los equipos que tienen una falla abierta, desde cuándo y quién la reportó».
- Usá los códigos. Si nombrás
PL-2026-00042oEQ-0004, va directo a ese registro. - Leé antes de confirmar. Antes de cargar algo, Claude te dice qué va a hacer. Si falta un dato obligatorio, te lo pregunta en vez de inventarlo.
- Acotá lo que pedís. «Revisá todas las muestras» gasta muchas consultas; «las de plasma de 2026 que siguen disponibles» llega antes y con menos pedidos.
- Usá un proyecto. En Claude Desktop podés armar un Proyecto para el laboratorio y dejar en sus instrucciones lo que Claude tiene que saber siempre, por ejemplo «Si no te digo otra cosa, las muestras nuevas van a la caja 4 del freezer de −80 °C».
- Varios laboratorios. Cada token es de un solo laboratorio. Si trabajás en más de uno,
creá un token en cada uno y agregá un servidor por laboratorio, con nombres distintos
(
vialo-biobanco,vialo-genetica). - Cuando el token vence, Claude deja de conectarse. Creá uno nuevo, reemplazalo en la configuración y reiniciá Claude.
El token queda guardado en un archivo de tu computadora. No lo configures en una computadora compartida y, si dejás de usarla, revocalo desde Acceso por API.
Si algo no anda
| Qué pasa | Qué hacer |
|---|---|
| vialo no aparece en Claude Desktop | Revisá que el archivo esté bien escrito (una coma de más o de menos lo rompe) y que hayas cerrado Claude del todo antes de volver a abrirlo. |
| Aparece como failed o se desconecta | Mirá el registro: en Windows, %APPDATA%\Claude\logs\mcp-server-vialo.log; en Mac, ~/Library/Logs/Claude/mcp-server-vialo.log. |
El registro dice que no encuentra npx | Falta Node.js, o hay que reiniciar la computadora después de instalarlo. |
unauthorized (401) | El token está mal copiado, venció, se revocó o la API está apagada. En Claude Desktop, revisá que en env diga Bearer y un espacio antes del token. |
forbidden (403), o no están las herramientas para cargar | El token es de Consulta. Para cargar, creá uno de Colaborador/a. |
read_only (403) al cargar | El laboratorio está en solo lectura: terminó la prueba o no tiene plan. La administración del laboratorio tiene que elegir uno; mientras tanto se puede consultar todo. |
| Faltan las herramientas de un módulo | Ese módulo no está habilitado en el laboratorio. |
rate_limited (429) | Claude hizo muchas consultas seguidas. Esperá un minuto y acotá el pedido. |
| El conector de Claude.ai o ChatGPT no termina de conectar | Revisá que la API esté encendida en tu laboratorio y que hayas tocado Permitir acceso en Vialo. Si lo habías revocado o venció, conectalo de nuevo. |
| Responde sin consultar Vialo | Fijate que vialo esté encendido en el menú de herramientas de esa conversación y pedíselo explícitamente: «buscalo en Vialo». |
Cursor
En .cursor/mcp.json (del proyecto) o en la configuración de MCP de Cursor:
{
"mcpServers": {
"vialo": {
"url": "https://vialolab.com/api/mcp",
"headers": { "Authorization": "Bearer trz_tu_token" }
}
}
}
VS Code
En .vscode/mcp.json:
{
"servers": {
"vialo": {
"type": "http",
"url": "https://vialolab.com/api/mcp",
"headers": { "Authorization": "Bearer trz_tu_token" }
}
}
}
ChatGPT y los conectores web de Claude no usan token: ver Claude.ai, ChatGPT y la app del celular.
Qué puede hacer el asistente
Para consultar:
| Herramienta | Para qué |
|---|---|
laboratorio_ver | Qué laboratorio es, su logo, su plan (y si está en solo lectura) y qué puede hacer el acceso. |
quien_lo_ve | Antes de cargar algo, quiénes lo van a ver (según el módulo y lo restringido). |
historial_laboratorio | Lo último que se cambió en todo el laboratorio, con quién y cuándo (solo la coordinación). |
muestras_buscar | Buscar muestras por texto, tipo, estado, ubicación, si están en una caja, donante, origen, quién las cargó o fecha. |
muestra_ver | Todos los datos de una muestra, con sus alícuotas. |
muestra_historial | Quién cambió qué y cuándo. |
ubicaciones_ver | Salas, equipos, racks y cajas, con los lugares libres. |
caja_ver | La grilla de una caja: qué hay en cada posición. |
tipos_de_muestra_ver | Los tipos de muestra. |
proyectos_ver | Los proyectos del laboratorio. muestras_crear y muestra_editar aceptan proyecto. |
campos_ver | Qué significa cada campo, incluidos los del laboratorio. |
equipos_buscar | Buscar equipos por texto, tipo, estado, sala, responsable, servicio técnico, garantía o lo que necesita atención. |
equipo_ver | Un equipo con su plan de mantenimiento, sus vencimientos y sus fallas. |
equipo_registro | Lo que se le hizo a un equipo: mantenimientos, calibraciones, fallas. |
equipo_quien_lo_ve | Si un equipo es restringido y quiénes lo ven o también lo gestionan. |
ubicacion_quien_la_ve | Lo mismo para una ubicación del biobanco. |
lugar_quien_lo_ve | Lo mismo para un lugar de guardado de insumos. |
vencimientos_ver | Lo vencido y lo que está por vencer en todos los equipos. |
pendientes_ver | Los pendientes de un equipo. |
fallas_ver | Las fallas abiertas. |
reservas_ver | Las reservas de unos días, para saber si un equipo está libre o buscar por motivo, equipo, persona o estado. |
uso_ver | Quién usó los equipos y cuántas horas. |
tipos_de_equipo_ver | Los tipos de equipo. |
servicios_tecnicos_ver | Los servicios técnicos, con su contacto. |
campos_de_equipo_ver | Qué significa cada campo de un equipo. |
insumos_buscar | Buscar insumos por texto, categoría, lugar, proveedor, peligros, responsable o lo que necesita atención. |
insumo_ver | Un insumo con su stock, sus lotes y su pedido abierto. |
insumo_movimientos | Los movimientos de un insumo. |
insumos_vencimientos | Los lotes vencidos o por vencer que siguen en stock. |
insumos_para_pedir | Lo que hay que pedir, con la cantidad sugerida y el proveedor. |
pedidos_ver | Los pedidos abiertos o cerrados. |
gases_ver | Los tubos de gas, su estado, equipo y vencimiento. |
gases_pedidos_ver | Los pedidos de carga de gases. |
libro_de_movimientos_ver | El libro de movimientos del laboratorio (también el de controladas). |
lugares_de_insumos_ver | Los lugares de guardado, en árbol, con su grilla si tienen. |
lugar_grilla_ver | La grilla de un lugar de insumos: qué lote hay en cada posición y cuáles están libres. |
proveedores_de_insumos_ver | Los proveedores, con su contacto. |
categorias_de_insumos_ver | Las categorías de insumos. |
campos_de_insumo_ver | Qué significa cada campo de un insumo y de un lote. |
sensores_ver | Las temperaturas ahora: en rango, fuera de rango, en alarma o sin datos. |
sensor_ver | Un sensor, con la mínima y la máxima de un período y sus alarmas. |
sensor_lecturas | Cómo evolucionó la temperatura de un sensor en un período. |
alarmas_ver | Las alarmas de temperatura, con lo que se hizo (o las que faltan registrar). |
servicios_pedidos_buscar | Buscar pedidos de servicios por texto, cliente, estado, fechas o facturación. |
servicio_pedido_ver | Un pedido con sus ítems y, con «Ver montos», su precio y su factura. |
servicios_clientes_ver | Los clientes, con sus áreas. |
servicios_catalogo_ver | El catálogo y, con «Ver montos», sus precios. |
servicio_quien_lo_ve | Si un servicio del catálogo es restringido y quiénes lo ven. |
servicios_para_facturar | Lo que hay para facturar, por cliente. |
servicios_facturas_ver | Las facturas con lo cobrado y su estado. |
servicio_factura_ver | Una factura con sus ítems, sus cobros y el resumen para facturar. |
servicios_balance | Lo facturado, lo cobrado, lo pendiente, el reparto y el neto, con filtros y por servicio, cliente, tipo o mes. |
servicios_productividad | La productividad cobrada por persona (sin «Ver montos», la propia, con «Ver su productividad»). |
servicios_productividad_detalle | La productividad de una factura o de un pedido, por participante. |
servicios_reparto_ver | Las deducciones con sus tramos y los participantes de la productividad. |
servicios_cotizaciones_ver | Las cotizaciones abiertas (o las de un estado) con su total. |
servicio_cotizacion_ver | Una cotización con sus servicios y precios. |
servicios_configuracion_ver | La configuración de Servicios: cotización, impuestos, resumen, reparto, muestras. |
servicios_etapas_ver | Las etapas del pedido del laboratorio. |
servicio_muestras_ver | Las muestras de un pedido. |
presupuesto_cuentas_ver | Las cuentas del presupuesto que ve la persona, con su saldo. |
presupuesto_resumen_anio | Lo gastado, lo comprometido y lo ingresado en el año contable, por cuenta y mes. |
presupuesto_cuenta_balance | El balance de una cuenta en un año: mes a mes con saldo, por rubro, proveedor, servicio y rendición. |
presupuesto_movimientos_buscar | Buscar ingresos, gastos y transferencias. |
presupuesto_movimiento_ver | Un movimiento con su rendición. |
presupuesto_asignado_ver | Lo asignado contra lo gastado por cuenta y rubro. |
presupuesto_para_imputar_ver | Los gastos de Equipos e Insumos que todavía no están en el presupuesto. |
presupuesto_configuracion_ver | Cómo maneja la plata el laboratorio: año contable, rendición, comprometidos, avisos, país y moneda. |
presupuesto_rubros_sugeridos_ver | Los rubros sugeridos por financiador. |
protocolos_ver | Los documentos con su versión vigente y cuándo toca revisarlos. |
protocolo_ver | Un documento con el texto de su versión vigente (o la que pidas), sus versiones y a qué se aplica. |
protocolo_archivos | El archivo adjunto de una versión, con su enlace de descarga. |
protocolo_quien_lo_ve | Si un documento es restringido y quiénes lo ven o también lo gestionan. |
protocolos_para_leer | Tus lecturas pendientes. |
protocolos_cumplimiento | Quién confirmó cada lectura y quién falta (pide «Aprobar documentos»). |
capacitaciones_ver | El registro de capacitaciones. |
seguridad_elementos_ver | Los matafuegos, duchas, lavaojos y demás, con sus controles y vencimientos (o solo lo pendiente). |
seguridad_elemento_ver | Un elemento con sus controles y los últimos registrados. |
seguridad_peligros_ver | Los productos peligrosos por armario o heladera, sus incompatibilidades y los que no tienen hoja de seguridad. |
residuos_ver | Lo que hay en acopio por corriente y lo generado y retirado en un período. |
controladas_informe | El informe de sustancias controladas (RENPRE u otro) de un período y si se presentó. |
incidentes_ver | Los incidentes con su acción correctiva. |
personal_ver | El personal con los campos propios (o una persona). |
personal_campos_ver | Los campos del personal, incluidos los propios del laboratorio. |
plano_ver | Los planos con sus salas y lo que hay en cada una (lugares con sus tubos, equipos y elementos de seguridad). |
plano_ubicar | Dónde está un equipo, un lugar, un elemento de seguridad o un tubo: plano, sala y adentro de qué. |
soporte_mis_consultas | Tus consultas al equipo de Vialo, con su estado. |
recordatorios_ver | Tus recordatorios y pendientes: los que anotaste y los que son para vos. |
Para cargar y modificar (solo con un token de Colaborador/a):
| Herramienta | Para qué |
|---|---|
muestras_crear | Cargar muestras, en una caja o sin ubicar. |
muestra_editar | Corregir los datos de una muestra. |
muestra_mover | Guardarla en otra caja o posición, o en la caja sin posición. |
muestra_cambiar_estado | Marcarla en uso, agotada, descartada o transferida. |
muestras_cambiar_estado | Cambiar el estado de varias muestras juntas. |
alicuotas_crear | Crear alícuotas de una muestra. |
equipo_crear | Dar de alta un equipo. |
equipo_editar | Cambiar los datos o el estado de un equipo. |
equipo_registrar | Registrar un mantenimiento, calibración, verificación, limpieza, reparación o nota. |
falla_reportar | Reportar una falla y, si hace falta, sacar el equipo de servicio. |
pendiente_agregar | Anotar un pendiente en un equipo, con proveedor y fecha límite opcionales. |
pendiente_resolver | Marcar un pendiente como resuelto. |
falla_cerrar | Cerrar una falla y volver a poner el equipo en servicio. |
reserva_crear | Reservar un equipo, una vez o repetida. |
reserva_mover | Cambiar el horario (y el motivo) de una reserva. |
reserva_cancelar | Cancelar una reserva (o la serie). |
uso_registrar | Registrar un uso de un equipo. |
equipo_foto_sugerir | Buscar fotos de un equipo, con otro texto o un enlace. |
equipo_foto_elegir | Guardar como foto una de las opciones. |
equipo_foto_quitar | Quitar la foto de un equipo. |
servicio_tecnico_crear | Agregar un proveedor de servicio técnico. |
servicio_tecnico_editar | Cambiar los datos de un proveedor de servicio técnico, o archivarlo (con rol de administración). |
insumo_crear | Dar de alta un insumo. |
insumo_editar | Cambiar los datos de un insumo. |
insumo_foto_sugerir | Buscar fotos de un insumo, con otro texto o un enlace. |
insumo_foto_elegir | Guardar como foto una de las opciones. |
insumo_foto_quitar | Quitar la foto de un insumo. |
insumos_archivar | Archivar varios insumos juntos (o volverlos al inventario). |
proveedor_de_insumos_crear | Agregar un proveedor de insumos. |
proveedor_de_insumos_editar | Cambiar los datos de un proveedor de insumos, o archivarlo (con rol de administración). |
lote_ingresar | Registrar lo que llegó. |
insumo_usar | Registrar un consumo. Con el insumo solo, usa el lote que vence primero. |
lote_descartar | Descartar un lote o una parte. |
lote_conservar_vencido | Conservar un lote vencido sin aviso (o volver a avisar). |
lote_ajustar | Ajustar un lote al recuento. |
lote_trasladar | Llevar un lote a otro lugar (y a una posición de su grilla, si tiene). |
movimiento_anular | Anular un movimiento cargado por error. |
pedido_crear | Pedir un insumo. |
pedido_marcar_hecho | Marcar que el pedido se hizo al proveedor. |
pedido_cerrar | Cerrar un pedido como recibido o cancelado. |
gas_tubo_agregar | Agregar un tubo de gas. |
gas_tubo_modificar | Cambiar un tubo de gas (estado, equipo, vencimiento…). |
gas_carga_pedir | Pedir la carga de un tubo o de tubos de un gas. |
gas_pedido_marcar_hecho | Marcar que la carga se pidió al proveedor. |
gas_pedido_cerrar | Cerrar una carga como recibida o cancelada. |
alarma_registrar | Anotar qué se hizo con una alarma de temperatura (la acción correctiva). |
sensor_editar | Cambiar el nombre, el rango o las demoras de un sensor. |
servicio_pedido_cargar | Cargar un pedido de servicios con sus ítems. |
servicio_pedido_editar | Cambiar un pedido o registrar su entrega. |
servicio_cliente_cargar | Dar de alta un cliente. |
servicio_cliente_editar | Cambiar el nombre, la sigla, la identificación (CUIT o DNI…) o los mails de un cliente. |
servicio_factura_crear | Crear la factura de uno o más pedidos (y elegir su cuenta del presupuesto). |
servicio_cobro_registrar | Registrar un cobro de una factura. |
servicio_reparto_cambiar | Cambiar un porcentaje (o el monto del recupero de fondos) del reparto desde una fecha. |
servicio_deduccion_cuenta | Elegir la cuenta del presupuesto a la que va lo deducido (por ejemplo, la amortización en una subcuenta). |
servicio_cotizacion_crear | Crear una cotización en borrador. |
servicio_cotizacion_aceptar | Aceptar una cotización: crea el pedido. |
servicios_configuracion_cambiar | Cambiar la configuración de Servicios (administración). |
servicio_muestras_cargar | Sumar las muestras que llegaron con un pedido. |
servicio_muestra_editar | Cambiar el estado o el resultado de una muestra. |
presupuesto_gasto_cargar | Cargar un gasto (con o sin monto). |
presupuesto_movimiento_editar | Corregir un movimiento o marcar su rendición. |
presupuesto_movimiento_borrar | Borrar un movimiento (solo la administración). |
presupuesto_transferir | Transferir entre dos cuentas. |
presupuesto_imputar | Imputar un gasto sugerido a una cuenta. |
presupuesto_configuracion_cambiar | Cambiar la configuración del presupuesto (solo la administración). |
protocolo_crear | Crear un documento con su primer borrador (queda sin publicar). |
protocolo_editar | Cambiar el título, la categoría, el responsable o cada cuánto se revisa. |
protocolo_version_nueva | Abrir un borrador nuevo a partir de la versión vigente. |
protocolo_borrador_escribir | Escribir el texto o el resumen de cambios del borrador. |
protocolo_vincular | Vincular un documento con un equipo, tipo de equipo, servicio, insumo o ubicación. |
protocolo_desvincular | Quitar uno de esos vínculos. |
capacitacion_registrar | Registrar una capacitación. |
capacitacion_editar | Corregir una capacitación. |
seguridad_control_registrar | Registrar un control de un elemento de seguridad. |
residuo_registrar | Registrar residuo generado o un retiro. |
incidente_registrar | Registrar un incidente. |
incidente_cerrar | Cerrar un incidente. |
persona_sumar | Sumar una persona al personal. |
persona_editar | Cambiar los datos de una persona o los EPP entregados. |
plano_sala_enlazar | Enlazar una sala del plano a su sala de Lugares. |
Con cualquier acceso, también de solo lectura, el asistente anota recordatorios
(recordatorio_anotar: «recordale a Ana el viernes a las 10 que calibre la balanza»), los
cambia o los marca como hechos (recordatorio_cambiar) y borra los que anotaste
(recordatorio_borrar). Avisan igual que los de la web: en Vialo y, si se pide, por mail;
también los que se repiten («todos los lunes a las 9, cambiar el agua del baño») y los que
avisan antes («avisame un día antes»).
Con cualquier acceso, también de solo lectura, soporte_escribir le manda una consulta al
equipo de Vialo cuando se lo pedís («avisale al soporte que no puedo exportar»). Te
muestra qué va a mandar antes de hacerlo y la respuesta te llega por mail.
El asistente solo ve las herramientas de los módulos habilitados en el laboratorio.
Cada consulta del asistente cuenta para el límite de 60 pedidos por minuto del token, y cada carga o cambio, para el de 20.
Lo que le preguntás al asistente y lo que Vialo le responde pasa por el servicio de IA que uses (Anthropic, OpenAI, etc.). Antes de conectarlo, confirmá que tu institución permite compartir esos datos con ese servicio. Los códigos de donante están pseudonimizados, pero el resto de los datos de las muestras sí se envía.