Documentación

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

  1. 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.
  2. 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.
  3. 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ónQué devuelve
/labEl laboratorio, su logo, su plan (subscription, con can_write) y qué puede hacer el token. Sirve para probar que anda.
/audience?module=budgetAntes 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/samplesMuestras, con filtros (ver abajo). Hasta 200 por página.
/biobank/samples/PL-2026-00042Una muestra por su código (o su id), con su ubicación y sus alícuotas.
/biobank/samples/<id>/historyEl historial de cambios de una muestra.
/biobank/samples/<id>/attachmentsLos adjuntos, con un enlace de descarga que vence a los 5 minutos.
/biobank/locationsSalas, 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-typesLos tipos de muestra.
/biobank/projectsLos proyectos del laboratorio. Las muestras traen su project; al cargar o editar se manda project (id o nombre; null la saca del proyecto).
/biobank/fieldsLos campos de la muestra, incluidos los personalizados del laboratorio.
/equipment/itemsEquipos, con filtros (ver abajo). Hasta 200 por página.
/equipment/items/EQ-0004Un equipo por su código (o su id), con su plan de mantenimiento y sus fallas abiertas.
/equipment/items/<id>/eventsEl registro del equipo: mantenimientos, calibraciones, fallas, reparaciones.
/equipment/items/<id>/historyEl historial de cambios de los datos del equipo.
/equipment/items/<id>/accessSi 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>/accessLo 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>/accessLo 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>/attachmentsManuales y certificados, con un enlace de descarga que vence a los 5 minutos.
/equipment/dueLo vencido y lo que está por vencer de todos los equipos (status, until).
/equipment/items/<id>/todosLos pendientes de un equipo, con fecha límite y proveedor.
/equipment/items/<id>/photo/suggestionsFotos posibles del equipo; con q, otro texto o un enlace. Pide Colaborador/a.
/equipment/failuresLas fallas abiertas de todos los equipos.
/equipment/bookingsReservas de un rango de días (from, to, equipment; q busca por motivo, equipo o persona; status, también las canceladas o rechazadas).
/equipment/usageRegistro de uso de un rango de días (from, to, equipment).
/equipment/typesLos tipos de equipo.
/equipment/providersLos proveedores de servicio técnico, con su contacto.
/equipment/fieldsLos campos del equipo, incluidos los personalizados del laboratorio.
/reagents/itemsInsumos (reactivos, kits, plásticos, descartables), con su stock y filtros (ver abajo).
/reagents/items/RE-0003Un insumo por su código (o su id), con su stock, sus lotes y si tiene un pedido abierto.
/reagents/items/<id>/movementsIngresos, consumos, descartes, ajustes y traslados de un insumo.
/reagents/items/<id>/historyEl historial de cambios de los datos del insumo.
/reagents/items/<id>/attachmentsFichas de seguridad y certificados, con un enlace de descarga que vence a los 5 minutos.
/reagents/items/<id>/photo/suggestionsFotos posibles del insumo; con q, otro texto o un enlace. Pide Colaborador/a.
/reagents/lotsLotes vencidos o por vencer que siguen en stock (status, until, q).
/reagents/movementsEl libro de movimientos del laboratorio (item, kind, from, to, controlled).
/reagents/to-orderLo que llegó al punto de pedido y todavía no se pidió, con la cantidad sugerida.
/reagents/ordersPedidos abiertos (o cerrados, con open=false).
/reagents/gas-cylindersTubos de gas: estado, proveedor, equipo al que alimentan, vencimiento y pedido de carga en curso (gas, status).
/reagents/gas-ordersPedidos de carga de gases, abiertos (o cerrados, con open=false).
/reagents/placesLugares de guardado, en árbol (path: «Sala › Heladera › Estante 1»), con su grilla si tienen (grid).
/reagents/places/<id>/gridLa grilla de un lugar: cada posición, ocupada (con su lote) o libre.
/reagents/categoriesLas categorías de insumos.
/reagents/suppliersLos proveedores, con su contacto.
/reagents/fieldsLos campos del insumo y del lote, incluidos los personalizados del laboratorio.
/monitoring/sensorsLos 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>/readingsLas lecturas de un período, resumidas por tramos para graficar (points).
/monitoring/sensors/<id>/historyQuién lo conectó, le cambió el rango o lo desconectó.
/monitoring/alarmsLas alarmas, con la acción correctiva registrada (pending, sensor, from, to).
/services/catalog/<id>/accessSi el servicio es restringido y quiénes lo ven. Se elige desde el catálogo, no con un token.
/services/catalogEl catálogo de servicios (sin los restringidos que la persona no ve) y, con «Ver montos», sus precios por lista con su historial.
/services/clientsLos 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/ordersLos 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>/historyQuién cargó o modificó el pedido.
/services/to-invoiceLo que hay para facturar, por cliente (pide «Ver montos»).
/services/invoicesLas 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/balanceLo 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/productivityLa 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>/productivityLa productividad de lo cobrado de una factura, por participante, servicio y porcentaje (pide «Ver montos»).
/services/orders/<id>/productivityLa parte de un pedido en la productividad de los cobros de sus facturas (pide «Ver montos»).
/services/splitLa cadena de deducciones con sus tramos y los participantes de la productividad (pide «Ver montos»).
/services/quotesLas 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/settingsLa 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/stagesLas etapas del pedido del laboratorio, cada una sobre un estado (vacío: no usa etapas).
/services/orders/<id>/samplesLas muestras de un pedido, con su estado y su resultado.
/budget/accountsLas 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/movementsIngresos, 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>/historyQuién lo cargó, lo rindió o lo aprobó.
/budget/summaryEl año contable por cuenta y por mes: gastado, comprometido, ingresado y transferencias (year: el año en que empieza).
/budget/accounts/<id>/balanceEl 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/settingsLa configuración del presupuesto: año contable, rendición, quién aprueba, comprometidos, avisos, país y moneda.
/budget/category-templatesLos rubros sugeridos por financiador.
/budget/categoriesLos rubros del gasto.
/budget/allocationsLo 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/suggestionsLos registros de Equipos y lotes de Insumos con costo que todavía no están en el presupuesto («Para imputar»).
/protocols/documentsLos 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>/historyQuién creó el documento y le cambió el título, la categoría o el responsable.
/protocols/documents/<id>/accessSi el documento es restringido y quiénes lo ven o también lo gestionan.
/protocols/documents/<id>/attachmentsEl archivo adjunto de una versión, con un enlace de descarga que vence a los 5 minutos.
/protocols/readingLas lecturas que te asignaron y no confirmaste (confirmed=true: también las confirmadas).
/protocols/compliancePor documento vigente, quién confirmó la lectura y quién falta. Pide el permiso «Aprobar documentos».
/protocols/trainingsEl registro de capacitaciones (document, person, from, to). Quien solo consulta ve las suyas.
/safety/elementsLos 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/hazardsLos productos peligrosos de Insumos con stock, por mueble, con las incompatibilidades por pictograma y los que no tienen hoja de seguridad.
/safety/wasteLas 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/controlledEl informe de sustancias controladas de un período (from, to; por defecto, el último cerrado), con su vencimiento y si se presentó.
/floorplan/plansLos 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/locateDó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/incidentsLos incidentes con su acción correctiva (open).
/safety/peopleEl 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/fieldsLos 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.

FiltroEjemploQué hace
qq=PAC-0012Busca en el código, el donante, las notas y los campos de texto.
typetype=Plasma,SueroTipos de muestra, por nombre o id.
statusstatus=available,in_useEstados: available, in_use, depleted, discarded, transferred.
locationlocation=<id del freezer>Lo que está en esa ubicación, incluido lo que hay adentro.
donordonor=PAC-00Parte del código de paciente o donante.
collected_from, collected_tocollected_from=2026-01-01Fecha de extracción, desde y hasta (AAAA-MM-DD).
created_from, created_tocreated_to=2026-06-30Fecha de carga, desde y hasta.
created_bycreated_by=meQuién las cargó: me (la persona del token), id, nombre o email.
placementplacement=unlocatedlocated: solo las ubicadas en una caja; unlocated: solo las que todavía no tienen lugar.
originorigin=aliquotprimary: solo muestras originales; aliquot: solo alícuotas y derivadas.
sortsort=-collection_dateOrden. Con - adelante, de mayor a menor.
page, limitpage=2&limit=200Página y resultados por página.

Filtros de equipos

FiltroEjemploQué hace
qq=EppendorfBusca en el código, el nombre, la marca, el modelo y los números de serie e inventario.
typetype=CentrífugaTipos de equipo, por nombre o id.
statusstatus=out_of_serviceEstados: in_service, out_of_service, retired.
roomroom=Sala 2Salas.
responsibleresponsible=meResponsables: me (la persona del token), id, nombre o email.
providerprovider=BiotecServicio técnico, por nombre o id.
warrantywarranty=activeactive: solo los que están en garantía; expired: solo los de garantía vencida.
biobankbiobank=linkedlinked: vinculados con un lugar del Biobanco; unlinked: sin vincular. Pide el Biobanco habilitado.
attentionattention=overduedue (vencido o por vencer), overdue (vencido) u open_failure (con una falla abierta).
sortsort=next_dueOrden. Con - adelante, de mayor a menor.
page, limitpage=2&limit=200Página y resultados por página.

Filtros de insumos

FiltroEjemploQué hace
qq=etanolBusca 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.
categorycategory=PlásticosCategorías, por nombre o id.
placeplace=Heladera 2Lugares, por nombre, camino o id, incluido lo que tienen adentro.
suppliersupplier=BiodynamicsProveedor habitual, por nombre o id.
storagestorage=fridgeConservación: room_temp, fridge, freezer_20, freezer_80, ln2, other.
hazardshazards=GHS02,GHS06Con cualquiera de estos pictogramas de peligro (GHS01 a GHS09).
responsibleresponsible=meResponsables: me (la persona del token), id, nombre o email.
attentionattention=reorderany, reorder (en el punto de pedido), due (lotes vencidos o por vencer), expired u out (sin stock).
controlledcontrolled=yesyes: solo las sustancias controladas; no: sin ellas.
archivedarchived=includeinclude suma los archivados; only, solo ellos.
sortsort=next_expiryOrden. Con - adelante, de mayor a menor.
page, limitpage=2&limit=200Pá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; null borra un valor.
  • Versión. Para editar (PATCH) hay que mandar la version que devolvió la API al leer el registro. Si otra persona lo cambió mientras tanto, la respuesta es 409 y no se pisa nada: volvé a leerlo y decidí.
  • Reintentos sin duplicar. En los POST podés mandar el encabezado Idempotency-Key con 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 encabezado Idempotent-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

PedidoQué hace
POST /biobank/samplesCarga hasta 100 muestras en samples. Se crean todas o ninguna.
PATCH /biobank/samples/PL-2026-00042Cambia tipo, donante, fecha, cantidad, unidad, notas o campos personalizados.
POST /biobank/samples/<id>/moveLa guarda en una caja (box_id, position como «B4») o la deja sin ubicar (box_id: null).
POST /biobank/samples/<id>/statusCambia el estado. Agotada, descartada y transferida liberan su lugar.
POST /biobank/samples/statusCambia el estado de hasta 200 muestras juntas (samples: ids o códigos, status).
POST /biobank/samples/<id>/aliquotsCrea 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

PedidoQué hace
POST /equipment/itemsDa de alta un equipo (name, type y el resto de sus datos).
PATCH /equipment/items/EQ-0004Cambia datos del equipo, su estado, responsable o servicio técnico.
POST /equipment/items/<id>/eventsRegistra un mantenimiento, calibración (con result y valid_until), verificación, limpieza, reparación o nota.
POST /equipment/items/<id>/failuresReporta una falla (detail, severity, take_out_of_service).
POST /equipment/items/<id>/todosAnota un pendiente en el equipo (title; opcionales detail, due_on, provider).
POST /equipment/items/<id>/photoGuarda como foto una imagen (url; opcional thumb_url).
DELETE /equipment/items/<id>/photoQuita la foto; el archivo sigue entre sus adjuntos.
POST /equipment/todos/<id>/resolveMarca un pendiente como resuelto.
POST /equipment/failures/<id>/resolveCierra una falla (resolution) y, si no quedan otras abiertas, lo vuelve a poner en servicio.
POST /equipment/bookingsReserva 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>/cancelCancela una reserva (con scope: "following", también las siguientes de la serie).
POST /equipment/items/<id>/usageRegistra un uso ya terminado (started_at, ended_at); con outcome: "problem", abre una falla.
POST /equipment/providersAgrega 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

PedidoQué hace
POST /reagents/itemsDa de alta un insumo (name, unit y el resto de sus datos).
PATCH /reagents/items/RE-0003Cambia datos del insumo, su punto de pedido o lo archiva (archived: true).
POST /reagents/items/archiveArchiva hasta 200 insumos juntos (items: ids o códigos); con archived: false, los vuelve al inventario.
POST /reagents/items/<id>/photoGuarda como foto una imagen (url; opcional thumb_url).
DELETE /reagents/items/<id>/photoQuita la foto; el archivo sigue entre sus documentos.
POST /reagents/lotsRegistra un ingreso: item, quantity (el total), containers, lote, vencimiento y lugar.
POST /reagents/lots/<lote>/consumeRegistra un consumo (quantity, purpose).
POST /reagents/lots/<lote>/discardDescarta el lote o una parte, con su motivo (reason).
POST /reagents/lots/<lote>/keep-expiredConserva un lote vencido sin aviso (keep: false vuelve a avisar). Sigue vencido.
POST /reagents/lots/<lote>/adjustDeja el lote con la cantidad contada, con su motivo.
POST /reagents/lots/<lote>/transferLleva el lote, o una parte, a otro lugar.
POST /reagents/movements/<id>/voidAnula un movimiento cargado por error, con su motivo.
POST /reagents/ordersPide un insumo. Si ya hay un pedido abierto para ese insumo, no lo duplica.
POST /reagents/orders/<id>/orderedMarca que el pedido se hizo al proveedor (fecha, llegada estimada, referencia).
POST /reagents/orders/<id>/closeCierra un pedido como recibido o cancelado.
POST /reagents/gas-cylindersAgrega 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-ordersPide 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>/orderedMarca que la carga se pidió al proveedor (referencia, llegada estimada).
POST /reagents/gas-orders/<id>/closeCierra una carga como recibida (el tubo queda lleno) o cancelada.
POST /reagents/suppliersAgrega 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

PedidoQué 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>/acknowledgeAnota 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

PedidoQué hace
POST /services/ordersCarga 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/clientsCarga un cliente, con sus áreas.
PATCH /services/clients/<id>Lo modifica, le suma áreas o lo archiva (archived).
POST /services/catalogSuma un servicio al catálogo.
POST /services/catalog/<id>/pricesCarga 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/invoicesCrea 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>/paymentsRegistra un cobro (puede ser parcial; no se pasa del total).
POST /services/split/deductionsAgrega 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/participantsAgrega un participante de la productividad de un servicio (service, person o external_name, pct, valid_from).
POST /services/split/deductions/<id>/changeCambio 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>/accountAdó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/quotesCrea una cotización en borrador (client, area, items, valid_until, notes); sin precio, sale del catálogo.
POST /services/quotes/<id>/acceptEl cliente la aceptó: crea el pedido con sus servicios y precios.
PATCH /services/settingsCambia la configuración de Servicios (solo lo que mandás; pide un token de Coordinador/a).
POST /services/stagesAgrega 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>/samplesSuma 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

PedidoQué hace
POST /budget/movementsCarga 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/transfersTransfiere entre dos cuentas (from, to, amount, concept; entre monedas distintas, to_amount): no suma como gasto.
POST /budget/suggestions/imputeImputa un gasto sugerido a una cuenta (source, source_id, account, category, amount): queda pendiente de rendir si la cuenta se rinde.
PATCH /budget/settingsCambia 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

PedidoQué hace
POST /protocols/documentsCrea 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>/versionsAbre un borrador nuevo con el texto de la vigente.
PATCH /protocols/documents/<id>/draftEscribe el borrador abierto (body, change_summary). Una versión publicada no se modifica.
POST /protocols/documents/<id>/linksLo 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/trainingsRegistra 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

PedidoQué hace
POST /safety/checks/<id>/recordsRegistra un control hecho (done_on, result: ok, observed o failed, performer_name, notes). Mueve el próximo vencimiento.
POST /safety/wasteRegistra 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/incidentsRegistra un incidente (title, kind, severity, occurred_at en la hora del laboratorio, description, corrective_action, corrective_due_on…).
POST /safety/incidents/<id>/closeCierra un incidente (note).
POST /safety/peopleSuma 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)

PedidoQué 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

PedidoQué hace
GET /historyTodo 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

PedidoQué hace
GET /supportTus consultas al equipo de Vialo desde este laboratorio, con su estado (new, answered, closed).
POST /supportLe 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

PedidoQué hace
GET /remindersLos 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 /remindersAnota 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

  1. En Excel, Datos → Obtener datos → De otras fuentes → Desde la web.
  2. Elegí Avanzado y pegá la dirección, por ejemplo https://vialolab.com/api/v1/biobank/samples?limit=200.
  3. En Parámetros de encabezado de solicitud HTTP, escribí Authorization y, al lado, Bearer trz_tu_token.
  4. En el editor que se abre, expandí la columna data para 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ódigoQué 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 celularSí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 appSí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.

  1. 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.
  2. 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.
  3. 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.
  4. 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:

  1. La API tiene que estar encendida en el laboratorio (ver Encender la API).
  2. 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.
  3. 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

  1. 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.

  2. 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
  3. 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 de mcpServers (separado de los demás servidores con una coma), o creá mcpServers si no está.

    Dejá Authorization:${VIALO_TOKEN} tal cual, sin espacios. El token va solo en env, después de Bearer y un espacio. Así se evita un problema de Windows con los espacios en los argumentos.

  4. 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.

  5. 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-00042 o EQ-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é pasaQué hacer
vialo no aparece en Claude DesktopRevisá 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 desconectaMirá 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 npxFalta 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 cargarEl token es de Consulta. Para cargar, creá uno de Colaborador/a.
read_only (403) al cargarEl 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óduloEse 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 conectarRevisá 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 VialoFijate 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:

HerramientaPara qué
laboratorio_verQué laboratorio es, su logo, su plan (y si está en solo lectura) y qué puede hacer el acceso.
quien_lo_veAntes de cargar algo, quiénes lo van a ver (según el módulo y lo restringido).
historial_laboratorioLo último que se cambió en todo el laboratorio, con quién y cuándo (solo la coordinación).
muestras_buscarBuscar muestras por texto, tipo, estado, ubicación, si están en una caja, donante, origen, quién las cargó o fecha.
muestra_verTodos los datos de una muestra, con sus alícuotas.
muestra_historialQuién cambió qué y cuándo.
ubicaciones_verSalas, equipos, racks y cajas, con los lugares libres.
caja_verLa grilla de una caja: qué hay en cada posición.
tipos_de_muestra_verLos tipos de muestra.
proyectos_verLos proyectos del laboratorio. muestras_crear y muestra_editar aceptan proyecto.
campos_verQué significa cada campo, incluidos los del laboratorio.
equipos_buscarBuscar equipos por texto, tipo, estado, sala, responsable, servicio técnico, garantía o lo que necesita atención.
equipo_verUn equipo con su plan de mantenimiento, sus vencimientos y sus fallas.
equipo_registroLo que se le hizo a un equipo: mantenimientos, calibraciones, fallas.
equipo_quien_lo_veSi un equipo es restringido y quiénes lo ven o también lo gestionan.
ubicacion_quien_la_veLo mismo para una ubicación del biobanco.
lugar_quien_lo_veLo mismo para un lugar de guardado de insumos.
vencimientos_verLo vencido y lo que está por vencer en todos los equipos.
pendientes_verLos pendientes de un equipo.
fallas_verLas fallas abiertas.
reservas_verLas reservas de unos días, para saber si un equipo está libre o buscar por motivo, equipo, persona o estado.
uso_verQuién usó los equipos y cuántas horas.
tipos_de_equipo_verLos tipos de equipo.
servicios_tecnicos_verLos servicios técnicos, con su contacto.
campos_de_equipo_verQué significa cada campo de un equipo.
insumos_buscarBuscar insumos por texto, categoría, lugar, proveedor, peligros, responsable o lo que necesita atención.
insumo_verUn insumo con su stock, sus lotes y su pedido abierto.
insumo_movimientosLos movimientos de un insumo.
insumos_vencimientosLos lotes vencidos o por vencer que siguen en stock.
insumos_para_pedirLo que hay que pedir, con la cantidad sugerida y el proveedor.
pedidos_verLos pedidos abiertos o cerrados.
gases_verLos tubos de gas, su estado, equipo y vencimiento.
gases_pedidos_verLos pedidos de carga de gases.
libro_de_movimientos_verEl libro de movimientos del laboratorio (también el de controladas).
lugares_de_insumos_verLos lugares de guardado, en árbol, con su grilla si tienen.
lugar_grilla_verLa grilla de un lugar de insumos: qué lote hay en cada posición y cuáles están libres.
proveedores_de_insumos_verLos proveedores, con su contacto.
categorias_de_insumos_verLas categorías de insumos.
campos_de_insumo_verQué significa cada campo de un insumo y de un lote.
sensores_verLas temperaturas ahora: en rango, fuera de rango, en alarma o sin datos.
sensor_verUn sensor, con la mínima y la máxima de un período y sus alarmas.
sensor_lecturasCómo evolucionó la temperatura de un sensor en un período.
alarmas_verLas alarmas de temperatura, con lo que se hizo (o las que faltan registrar).
servicios_pedidos_buscarBuscar pedidos de servicios por texto, cliente, estado, fechas o facturación.
servicio_pedido_verUn pedido con sus ítems y, con «Ver montos», su precio y su factura.
servicios_clientes_verLos clientes, con sus áreas.
servicios_catalogo_verEl catálogo y, con «Ver montos», sus precios.
servicio_quien_lo_veSi un servicio del catálogo es restringido y quiénes lo ven.
servicios_para_facturarLo que hay para facturar, por cliente.
servicios_facturas_verLas facturas con lo cobrado y su estado.
servicio_factura_verUna factura con sus ítems, sus cobros y el resumen para facturar.
servicios_balanceLo facturado, lo cobrado, lo pendiente, el reparto y el neto, con filtros y por servicio, cliente, tipo o mes.
servicios_productividadLa productividad cobrada por persona (sin «Ver montos», la propia, con «Ver su productividad»).
servicios_productividad_detalleLa productividad de una factura o de un pedido, por participante.
servicios_reparto_verLas deducciones con sus tramos y los participantes de la productividad.
servicios_cotizaciones_verLas cotizaciones abiertas (o las de un estado) con su total.
servicio_cotizacion_verUna cotización con sus servicios y precios.
servicios_configuracion_verLa configuración de Servicios: cotización, impuestos, resumen, reparto, muestras.
servicios_etapas_verLas etapas del pedido del laboratorio.
servicio_muestras_verLas muestras de un pedido.
presupuesto_cuentas_verLas cuentas del presupuesto que ve la persona, con su saldo.
presupuesto_resumen_anioLo gastado, lo comprometido y lo ingresado en el año contable, por cuenta y mes.
presupuesto_cuenta_balanceEl balance de una cuenta en un año: mes a mes con saldo, por rubro, proveedor, servicio y rendición.
presupuesto_movimientos_buscarBuscar ingresos, gastos y transferencias.
presupuesto_movimiento_verUn movimiento con su rendición.
presupuesto_asignado_verLo asignado contra lo gastado por cuenta y rubro.
presupuesto_para_imputar_verLos gastos de Equipos e Insumos que todavía no están en el presupuesto.
presupuesto_configuracion_verCómo maneja la plata el laboratorio: año contable, rendición, comprometidos, avisos, país y moneda.
presupuesto_rubros_sugeridos_verLos rubros sugeridos por financiador.
protocolos_verLos documentos con su versión vigente y cuándo toca revisarlos.
protocolo_verUn documento con el texto de su versión vigente (o la que pidas), sus versiones y a qué se aplica.
protocolo_archivosEl archivo adjunto de una versión, con su enlace de descarga.
protocolo_quien_lo_veSi un documento es restringido y quiénes lo ven o también lo gestionan.
protocolos_para_leerTus lecturas pendientes.
protocolos_cumplimientoQuién confirmó cada lectura y quién falta (pide «Aprobar documentos»).
capacitaciones_verEl registro de capacitaciones.
seguridad_elementos_verLos matafuegos, duchas, lavaojos y demás, con sus controles y vencimientos (o solo lo pendiente).
seguridad_elemento_verUn elemento con sus controles y los últimos registrados.
seguridad_peligros_verLos productos peligrosos por armario o heladera, sus incompatibilidades y los que no tienen hoja de seguridad.
residuos_verLo que hay en acopio por corriente y lo generado y retirado en un período.
controladas_informeEl informe de sustancias controladas (RENPRE u otro) de un período y si se presentó.
incidentes_verLos incidentes con su acción correctiva.
personal_verEl personal con los campos propios (o una persona).
personal_campos_verLos campos del personal, incluidos los propios del laboratorio.
plano_verLos planos con sus salas y lo que hay en cada una (lugares con sus tubos, equipos y elementos de seguridad).
plano_ubicarDónde está un equipo, un lugar, un elemento de seguridad o un tubo: plano, sala y adentro de qué.
soporte_mis_consultasTus consultas al equipo de Vialo, con su estado.
recordatorios_verTus recordatorios y pendientes: los que anotaste y los que son para vos.

Para cargar y modificar (solo con un token de Colaborador/a):

HerramientaPara qué
muestras_crearCargar muestras, en una caja o sin ubicar.
muestra_editarCorregir los datos de una muestra.
muestra_moverGuardarla en otra caja o posición, o en la caja sin posición.
muestra_cambiar_estadoMarcarla en uso, agotada, descartada o transferida.
muestras_cambiar_estadoCambiar el estado de varias muestras juntas.
alicuotas_crearCrear alícuotas de una muestra.
equipo_crearDar de alta un equipo.
equipo_editarCambiar los datos o el estado de un equipo.
equipo_registrarRegistrar un mantenimiento, calibración, verificación, limpieza, reparación o nota.
falla_reportarReportar una falla y, si hace falta, sacar el equipo de servicio.
pendiente_agregarAnotar un pendiente en un equipo, con proveedor y fecha límite opcionales.
pendiente_resolverMarcar un pendiente como resuelto.
falla_cerrarCerrar una falla y volver a poner el equipo en servicio.
reserva_crearReservar un equipo, una vez o repetida.
reserva_moverCambiar el horario (y el motivo) de una reserva.
reserva_cancelarCancelar una reserva (o la serie).
uso_registrarRegistrar un uso de un equipo.
equipo_foto_sugerirBuscar fotos de un equipo, con otro texto o un enlace.
equipo_foto_elegirGuardar como foto una de las opciones.
equipo_foto_quitarQuitar la foto de un equipo.
servicio_tecnico_crearAgregar un proveedor de servicio técnico.
servicio_tecnico_editarCambiar los datos de un proveedor de servicio técnico, o archivarlo (con rol de administración).
insumo_crearDar de alta un insumo.
insumo_editarCambiar los datos de un insumo.
insumo_foto_sugerirBuscar fotos de un insumo, con otro texto o un enlace.
insumo_foto_elegirGuardar como foto una de las opciones.
insumo_foto_quitarQuitar la foto de un insumo.
insumos_archivarArchivar varios insumos juntos (o volverlos al inventario).
proveedor_de_insumos_crearAgregar un proveedor de insumos.
proveedor_de_insumos_editarCambiar los datos de un proveedor de insumos, o archivarlo (con rol de administración).
lote_ingresarRegistrar lo que llegó.
insumo_usarRegistrar un consumo. Con el insumo solo, usa el lote que vence primero.
lote_descartarDescartar un lote o una parte.
lote_conservar_vencidoConservar un lote vencido sin aviso (o volver a avisar).
lote_ajustarAjustar un lote al recuento.
lote_trasladarLlevar un lote a otro lugar (y a una posición de su grilla, si tiene).
movimiento_anularAnular un movimiento cargado por error.
pedido_crearPedir un insumo.
pedido_marcar_hechoMarcar que el pedido se hizo al proveedor.
pedido_cerrarCerrar un pedido como recibido o cancelado.
gas_tubo_agregarAgregar un tubo de gas.
gas_tubo_modificarCambiar un tubo de gas (estado, equipo, vencimiento…).
gas_carga_pedirPedir la carga de un tubo o de tubos de un gas.
gas_pedido_marcar_hechoMarcar que la carga se pidió al proveedor.
gas_pedido_cerrarCerrar una carga como recibida o cancelada.
alarma_registrarAnotar qué se hizo con una alarma de temperatura (la acción correctiva).
sensor_editarCambiar el nombre, el rango o las demoras de un sensor.
servicio_pedido_cargarCargar un pedido de servicios con sus ítems.
servicio_pedido_editarCambiar un pedido o registrar su entrega.
servicio_cliente_cargarDar de alta un cliente.
servicio_cliente_editarCambiar el nombre, la sigla, la identificación (CUIT o DNI…) o los mails de un cliente.
servicio_factura_crearCrear la factura de uno o más pedidos (y elegir su cuenta del presupuesto).
servicio_cobro_registrarRegistrar un cobro de una factura.
servicio_reparto_cambiarCambiar un porcentaje (o el monto del recupero de fondos) del reparto desde una fecha.
servicio_deduccion_cuentaElegir la cuenta del presupuesto a la que va lo deducido (por ejemplo, la amortización en una subcuenta).
servicio_cotizacion_crearCrear una cotización en borrador.
servicio_cotizacion_aceptarAceptar una cotización: crea el pedido.
servicios_configuracion_cambiarCambiar la configuración de Servicios (administración).
servicio_muestras_cargarSumar las muestras que llegaron con un pedido.
servicio_muestra_editarCambiar el estado o el resultado de una muestra.
presupuesto_gasto_cargarCargar un gasto (con o sin monto).
presupuesto_movimiento_editarCorregir un movimiento o marcar su rendición.
presupuesto_movimiento_borrarBorrar un movimiento (solo la administración).
presupuesto_transferirTransferir entre dos cuentas.
presupuesto_imputarImputar un gasto sugerido a una cuenta.
presupuesto_configuracion_cambiarCambiar la configuración del presupuesto (solo la administración).
protocolo_crearCrear un documento con su primer borrador (queda sin publicar).
protocolo_editarCambiar el título, la categoría, el responsable o cada cuánto se revisa.
protocolo_version_nuevaAbrir un borrador nuevo a partir de la versión vigente.
protocolo_borrador_escribirEscribir el texto o el resumen de cambios del borrador.
protocolo_vincularVincular un documento con un equipo, tipo de equipo, servicio, insumo o ubicación.
protocolo_desvincularQuitar uno de esos vínculos.
capacitacion_registrarRegistrar una capacitación.
capacitacion_editarCorregir una capacitación.
seguridad_control_registrarRegistrar un control de un elemento de seguridad.
residuo_registrarRegistrar residuo generado o un retiro.
incidente_registrarRegistrar un incidente.
incidente_cerrarCerrar un incidente.
persona_sumarSumar una persona al personal.
persona_editarCambiar los datos de una persona o los EPP entregados.
plano_sala_enlazarEnlazar 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.