Download OpenAPI specification:
Lectura de ventas, cuadraturas y movimientos de caja, documentos tributarios, carta y stock de tus sucursales.
La API pública de Mesalto deja que otro sistema (tu contabilidad, tu planilla de control, un tablero de BI o el ERP de tu grupo) lea los datos de tus sucursales sin pasar por la administración. Es de solo lectura: ninguna llave puede crear, cambiar ni borrar nada.
Todas las rutas cuelgan de https://app.mesalto.com/api/v1 y responden JSON en UTF-8.
Para consultar y administrar los locales desde un asistente (Claude, ChatGPT u otro compatible con MCP) no hace
falta una llave: Mesalto tiene un servidor MCP en https://app.mesalto.com/mcp, al que cada persona entra con su
cuenta del panel. Se conecta en la sección Asistentes del panel.
Crea una llave por cada sistema que conectes. Así puedes revocar una sin cortar las demás, y cada una deja su último uso a la vista en Integraciones.
Cada solicitud lleva la llave completa en el header Authorization:
GET /api/v1/locations HTTP/1.1
Host: app.mesalto.com
Authorization: Bearer msk_0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b90.Zp4dQ9xW2mTn8vKc5LrB1yHs7eJf3uAg6oNi0pVb2Qw
Una llave tiene la forma msk_<id>.<secreto>. Trátala como una contraseña: no la pongas en una página web, en
una app que instala otra persona ni en un repositorio. Una llave revocada o que pasó su fecha responde 401.
Cada llave lleva uno o más permisos (scopes). Un endpoint que pide un permiso que la llave no tiene responde
403 con code = forbidden_scope.
| Permiso | En la administración | Endpoints |
|---|---|---|
sales:read |
Ventas | /sales/summary, /orders, /orders/{id} |
cash:read |
Cuadraturas de caja y movimientos | /shifts, /movements |
documents:read |
Documentos tributarios | /fiscal-documents |
catalog:read |
Carta y stock | /products, /stock |
/locations responde con cualquier permiso.
Una llave llega a todas las sucursales de la organización, también a las que se abran después, o solo a las que
se marcaron al crearla. GET /locations lista las que alcanza. En los endpoints con location_id, omitirlo
equivale a todas las que alcanza la llave; una sucursal fuera de su alcance, o que no existe, responde 404.
Cada llave puede hacer 60 solicitudes por minuto (ventana fija que parte en el segundo 0 de cada minuto). Todas las respuestas autenticadas traen:
| Header | Qué dice |
|---|---|
RateLimit-Limit |
Solicitudes por minuto de la llave (60). |
RateLimit-Remaining |
Cuántas le quedan en el minuto en curso. |
RateLimit-Reset |
Segundos que faltan para que el contador vuelva a cero. |
Pasado el límite, la respuesta es 429 con Retry-After en segundos. Espera ese tiempo antes de reintentar.
Los errores siguen el formato Problem Details (RFC 9457) con Content-Type: application/problem+json.
title y detail están en español y pueden cambiar de redacción; code es estable y es el que conviene
usar en tu código.
{
"type": "https://app.mesalto.com/docs/api#section/Errores",
"title": "La llave no tiene el permiso necesario",
"status": 403,
"detail": "Esta llave no tiene el permiso cash:read.",
"code": "forbidden_scope"
}
| HTTP | code |
Cuándo |
|---|---|---|
| 400 | invalid_request |
Un parámetro falta o no es válido, o el rango de fechas pasa de 31 días. |
| 401 | unauthorized |
Falta la llave, está mal escrita, fue revocada o ya dejó de funcionar. |
| 403 | forbidden_scope |
La llave no tiene el permiso del endpoint. |
| 403 | organization_suspended |
La cuenta de Mesalto de la organización está suspendida. |
| 404 | not_found |
La sucursal o la orden no existe o la llave no llega a ella. |
| 429 | rate_limited |
La llave pasó las 60 solicitudes del minuto. |
Los listados se recorren con cursor. Pide limit filas (1 a 200, 50 por defecto) y, si la respuesta trae
next_cursor, pásalo como cursor en la siguiente solicitud con los mismos filtros. Cuando next_cursor es
null no quedan más filas. Las filas vienen ordenadas por id, que crece con el tiempo de creación, así que
el recorrido no repite ni salta filas aunque entren datos nuevos mientras lo haces.
{ "data": [ … ], "next_cursor": "0192f5b1-2d44-7c10-8a9e-5b3f6d2e8c41" }
business_date, from, to): AAAA-MM-DD, el día del turno en la hora de la
sucursal. Una venta de las 00:30 de un turno que abrió la noche anterior cuenta para el día anterior. from y
to son inclusivos y el rango admite hasta 31 días.opened_at, closed_at, issued_at…): RFC 3339 en UTC, por ejemplo
2026-09-26T16:05:12.000Z.net (neto afecto),
vat (IVA) y exempt (exento), que desglosan el total: net + vat + exempt = total.tip y tip_total, y nunca entra en total, gross_total ni en
la base del IVA.qty_milli en milésimas de unidad (1500 es una unidad y media).La versión va en la ruta (/api/v1). Dentro de v1 solo se agregan campos, parámetros opcionales y
endpoints: tu integración debe ignorar los campos que no conoce. Un cambio que rompa compatibilidad sale como
v2, con aviso previo y un tiempo de convivencia.
Las sucursales que alcanza la llave, activas o no, ordenadas por nombre. Responde con cualquier permiso.
{- "data": [
- {
- "id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "name": "Demo Centro",
- "timezone": "America/Santiago",
- "currency": "CLP",
- "active": true,
- "legal_entity": {
- "rut": "11111111-1",
- "business_name": "Mesalto Demo SpA"
}
}, - {
- "id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b02",
- "name": "Demo Norte",
- "timezone": "America/Santiago",
- "currency": "CLP",
- "active": true,
- "legal_entity": {
- "rut": "11111111-1",
- "business_name": "Mesalto Demo SpA"
}
}
]
}Ventas por sucursal y por fecha de negocio, con el total de cada sucursal y el consolidado de todas. Usa los mismos criterios que el reporte del día de la administración:
gross_total es la suma de los totales de esas órdenes (con IVA, sin propina); net, vat y exempt lo
desglosan.tip_total y by_payment_method suman los pagos cobrados de los turnos del rango.days.| from required | string <date> Example: from=2026-09-01 Primer día de negocio del rango, inclusivo. |
| to required | string <date> Example: to=2026-09-30 Último día de negocio del rango, inclusivo. Hasta 31 días contando |
| location_id | string <uuid> Solo esta sucursal. Sin él, todas las que alcanza la llave. |
{- "from": "2026-09-26",
- "to": "2026-09-26",
- "totals": {
- "orders_closed": 42,
- "gross_total": 387600,
- "net": 325714,
- "vat": 61886,
- "exempt": 0,
- "discount_total": 12400,
- "tip_total": 31200,
- "average_ticket": 9229,
- "guests": 71,
- "by_payment_method": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c01",
- "name": "Efectivo",
- "kind": "cash",
- "count": 15,
- "amount": 118300,
- "tip": 4800,
- "cash_rounding": 10
}, - {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "kind": "card_manual",
- "count": 24,
- "amount": 241500,
- "tip": 24100,
- "cash_rounding": 0
}, - {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c04",
- "name": "Transferencia",
- "kind": "transfer",
- "count": 3,
- "amount": 27800,
- "tip": 2300,
- "cash_rounding": 0
}
]
}, - "locations": [
- {
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "name": "Demo Centro",
- "totals": {
- "orders_closed": 42,
- "gross_total": 387600,
- "net": 325714,
- "vat": 61886,
- "exempt": 0,
- "discount_total": 12400,
- "tip_total": 31200,
- "average_ticket": 9229,
- "guests": 71,
- "by_payment_method": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c01",
- "name": "Efectivo",
- "kind": "cash",
- "count": 15,
- "amount": 118300,
- "tip": 4800,
- "cash_rounding": 10
}, - {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "kind": "card_manual",
- "count": 24,
- "amount": 241500,
- "tip": 24100,
- "cash_rounding": 0
}, - {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c04",
- "name": "Transferencia",
- "kind": "transfer",
- "count": 3,
- "amount": 27800,
- "tip": 2300,
- "cash_rounding": 0
}
]
}, - "days": [
- {
- "business_date": "2026-09-26",
- "orders_closed": 42,
- "gross_total": 387600,
- "net": 325714,
- "vat": 61886,
- "exempt": 0,
- "discount_total": 12400,
- "tip_total": 31200,
- "average_ticket": 9229,
- "guests": 71,
- "by_payment_method": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c01",
- "name": "Efectivo",
- "kind": "cash",
- "count": 15,
- "amount": 118300,
- "tip": 4800,
- "cash_rounding": 10
}, - {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "kind": "card_manual",
- "count": 24,
- "amount": 241500,
- "tip": 24100,
- "cash_rounding": 0
}, - {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c04",
- "name": "Transferencia",
- "kind": "transfer",
- "count": 3,
- "amount": 27800,
- "tip": 2300,
- "cash_rounding": 0
}
]
}
]
}
]
}Órdenes cuya fecha de negocio está en el rango, con todo su detalle. Trae también las abiertas y las anuladas:
filtra con status=closed para quedarte solo con las ventas. Una orden anulada con merged_into_id es una mesa
que se juntó con otra, no una anulación.
| from required | string <date> Example: from=2026-09-01 Primer día de negocio del rango, inclusivo. |
| to required | string <date> Example: to=2026-09-30 Último día de negocio del rango, inclusivo. Hasta 31 días contando |
| location_id | string <uuid> Solo esta sucursal. Sin él, todas las que alcanza la llave. |
| status | string (OrderStatus) Enum: "open" "closed" "voided" Solo las órdenes en este estado. |
| limit | integer [ 1 .. 200 ] Default: 50 Filas por página. |
| cursor | string <uuid> El |
{- "data": [
- {
- "id": "0192f5b0-1a2b-7c3d-8e4f-5a6b7c8d9e01",
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "shift_id": "0192f5a9-0a00-7d11-9c20-3e4f5a6b7c01",
- "number": 57,
- "label": null,
- "type": "dine_in",
- "channel": "waiter",
- "status": "closed",
- "business_date": "2026-09-26",
- "opened_at": "2026-09-26T16:05:12.000Z",
- "closed_at": "2026-09-26T16:48:27.000Z",
- "voided": false,
- "void_reason": null,
- "merged_into_id": null,
- "guests": 2,
- "waiter": {
- "id": "0192f5a8-9c00-7b11-8d20-1c2d3e4f5a03",
- "name": "Garzón Demo"
}, - "tables": [
- {
- "id": "0192f5a8-6d00-7b11-8c20-3d4e5f6a7b04",
- "code": "4"
}
], - "delivery": null,
- "agreement": {
- "agreement_id": "0192f5a8-6f00-7c11-8d20-4e5f6a7b8c01",
- "name": "Constructora Andes",
- "member_short_name": "María P.",
- "credit": false
}, - "totals": {
- "subtotal": 13700,
- "discount_total": 0,
- "surcharge_total": 0,
- "total": 13700,
- "paid_total": 13700,
- "tip_total": 1370,
- "net": 11513,
- "vat": 2187,
- "exempt": 0
}, - "lines": [
- {
- "id": "0192f5b0-1b00-7c3d-8e4f-5a6b7c8d9e11",
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a01",
- "name": "Cortado",
- "qty_milli": 2000,
- "unit_price": 2900,
- "subtotal": 6800,
- "discount": 0,
- "surcharge": 0,
- "total": 6800,
- "voided": false,
- "void_kind": null,
- "void_reason": null,
- "modifiers": [
- {
- "id": "0192f5b0-1b01-7c3d-8e4f-5a6b7c8d9e12",
- "modifier_id": "0192f5a8-5e00-7a11-8b20-6c7d8e9f0b01",
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a21",
- "name": "Leche de avena",
- "qty_milli": 2000,
- "unit_price": 500,
- "voided": false
}
]
}, - {
- "id": "0192f5b0-1b02-7c3d-8e4f-5a6b7c8d9e13",
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a07",
- "name": "Sándwich ave palta",
- "qty_milli": 1000,
- "unit_price": 6900,
- "subtotal": 6900,
- "discount": 0,
- "surcharge": 0,
- "total": 6900,
- "voided": false,
- "void_kind": null,
- "void_reason": null,
- "modifiers": [ ]
}
], - "discounts": [ ],
- "payments": [
- {
- "id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21",
- "status": "captured",
- "amount": 13700,
- "tip": 1370,
- "created_at": "2026-09-26T16:48:20.000Z",
- "tenders": [
- {
- "id": "0192f5b0-1c01-7c3d-8e4f-5a6b7c8d9e22",
- "method": {
- "id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "kind": "card_manual"
}, - "amount": 13700,
- "tip": 1370,
- "cash_rounding": 0,
- "received": null,
- "change_given": 0
}
]
}
], - "refunds": [
- {
- "id": "0192f5b0-1d00-7c3d-8e4f-5a6b7c8d9e31",
- "payment_id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21",
- "amount": 6900,
- "tip": 0,
- "restock": false,
- "reason": "Producto en mal estado",
- "created_at": "2026-09-26T17:02:44.000Z",
- "tenders": [
- {
- "id": "0192f5b0-1d01-7c3d-8e4f-5a6b7c8d9e32",
- "method": {
- "id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "kind": "card_manual"
}, - "amount": 6900,
- "tip": 0,
- "cash_rounding": 0
}
]
}
]
}
], - "next_cursor": null
}| id required | string <uuid> Id de la orden. |
{- "id": "0192f5b0-1a2b-7c3d-8e4f-5a6b7c8d9e01",
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "shift_id": "0192f5a9-0a00-7d11-9c20-3e4f5a6b7c01",
- "number": 57,
- "label": null,
- "type": "dine_in",
- "channel": "waiter",
- "status": "closed",
- "business_date": "2026-09-26",
- "opened_at": "2026-09-26T16:05:12.000Z",
- "closed_at": "2026-09-26T16:48:27.000Z",
- "voided": false,
- "void_reason": null,
- "merged_into_id": null,
- "guests": 2,
- "waiter": {
- "id": "0192f5a8-9c00-7b11-8d20-1c2d3e4f5a03",
- "name": "Garzón Demo"
}, - "tables": [
- {
- "id": "0192f5a8-6d00-7b11-8c20-3d4e5f6a7b04",
- "code": "4"
}
], - "delivery": null,
- "agreement": {
- "agreement_id": "0192f5a8-6f00-7c11-8d20-4e5f6a7b8c01",
- "name": "Constructora Andes",
- "member_short_name": "María P.",
- "credit": false
}, - "totals": {
- "subtotal": 13700,
- "discount_total": 0,
- "surcharge_total": 0,
- "total": 13700,
- "paid_total": 13700,
- "tip_total": 1370,
- "net": 11513,
- "vat": 2187,
- "exempt": 0
}, - "lines": [
- {
- "id": "0192f5b0-1b00-7c3d-8e4f-5a6b7c8d9e11",
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a01",
- "name": "Cortado",
- "qty_milli": 2000,
- "unit_price": 2900,
- "subtotal": 6800,
- "discount": 0,
- "surcharge": 0,
- "total": 6800,
- "voided": false,
- "void_kind": null,
- "void_reason": null,
- "modifiers": [
- {
- "id": "0192f5b0-1b01-7c3d-8e4f-5a6b7c8d9e12",
- "modifier_id": "0192f5a8-5e00-7a11-8b20-6c7d8e9f0b01",
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a21",
- "name": "Leche de avena",
- "qty_milli": 2000,
- "unit_price": 500,
- "voided": false
}
]
}, - {
- "id": "0192f5b0-1b02-7c3d-8e4f-5a6b7c8d9e13",
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a07",
- "name": "Sándwich ave palta",
- "qty_milli": 1000,
- "unit_price": 6900,
- "subtotal": 6900,
- "discount": 0,
- "surcharge": 0,
- "total": 6900,
- "voided": false,
- "void_kind": null,
- "void_reason": null,
- "modifiers": [ ]
}
], - "discounts": [ ],
- "payments": [
- {
- "id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21",
- "status": "captured",
- "amount": 13700,
- "tip": 1370,
- "created_at": "2026-09-26T16:48:20.000Z",
- "tenders": [
- {
- "id": "0192f5b0-1c01-7c3d-8e4f-5a6b7c8d9e22",
- "method": {
- "id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "kind": "card_manual"
}, - "amount": 13700,
- "tip": 1370,
- "cash_rounding": 0,
- "received": null,
- "change_given": 0
}
]
}
], - "refunds": [
- {
- "id": "0192f5b0-1d00-7c3d-8e4f-5a6b7c8d9e31",
- "payment_id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21",
- "amount": 6900,
- "tip": 0,
- "restock": false,
- "reason": "Producto en mal estado",
- "created_at": "2026-09-26T17:02:44.000Z",
- "tenders": [
- {
- "id": "0192f5b0-1d01-7c3d-8e4f-5a6b7c8d9e32",
- "method": {
- "id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "kind": "card_manual"
}, - "amount": 6900,
- "tip": 0,
- "cash_rounding": 0
}
]
}
]
}Turnos, cuadraturas de caja y movimientos (cobros, anulaciones, devoluciones y movimientos de caja). Permiso cash:read.
Turnos cuya fecha de negocio está en el rango, cada uno con sus sesiones de caja: fondo inicial, lo que debería
haber (expected), lo que se contó al cerrar (counted), la diferencia en efectivo y los ingresos, egresos y
retiros. En una caja abierta, expected es lo que debería haber en ese momento y counted es null.
| from required | string <date> Example: from=2026-09-01 Primer día de negocio del rango, inclusivo. |
| to required | string <date> Example: to=2026-09-30 Último día de negocio del rango, inclusivo. Hasta 31 días contando |
| location_id | string <uuid> Solo esta sucursal. Sin él, todas las que alcanza la llave. |
| limit | integer [ 1 .. 200 ] Default: 50 Filas por página. |
| cursor | string <uuid> El |
{- "data": [
- {
- "id": "0192f5a9-0a00-7d11-9c20-3e4f5a6b7c01",
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "business_date": "2026-09-26",
- "status": "closed",
- "opened_at": "2026-09-26T11:02:40.000Z",
- "closed_at": "2026-09-27T01:15:09.000Z",
- "cash_sessions": [
- {
- "id": "0192f5a9-0b00-7d11-9c20-3e4f5a6b7c02",
- "register": {
- "id": "0192f5a8-8b00-7a11-8c20-2d3e4f5a6b01",
- "name": "Caja 1"
}, - "status": "closed",
- "opened_at": "2026-09-26T11:05:18.000Z",
- "closed_at": "2026-09-27T01:10:44.000Z",
- "opening_float": 50000,
- "expected": {
- "cash": 113110,
- "by_method": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c01",
- "name": "Efectivo",
- "amount": 123110
}, - {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "amount": 265600
}
]
}, - "counted": {
- "cash": 113000,
- "by_method": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "name": "Tarjeta Transbank",
- "amount": 265600
}
]
}, - "difference": -110,
- "opened_by": {
- "id": "0192f5a8-9c00-7b11-8d20-1c2d3e4f5a01",
- "name": "Caja Demo"
}, - "closed_by": {
- "id": "0192f5a8-9c00-7b11-8d20-1c2d3e4f5a01",
- "name": "Caja Demo"
}, - "movements": [
- {
- "id": "0192f5a9-1c00-7e11-8f20-4a5b6c7d8e01",
- "kind": "drop",
- "amount": 60000,
- "reason": "Retiro a bóveda",
- "note": null,
- "created_at": "2026-09-26T19:30:02.000Z"
}
]
}
]
}
], - "next_cursor": null
}Lo mismo que Movimientos en la administración, de una sucursal y de los turnos cuya fecha de negocio está en el rango: un movimiento por fila, con su documento y su caja. Sirve para cuadrar las ventas con la contabilidad y los depósitos de cada forma de pago.
sale): cada pago cobrado, también el que después se anuló, con su boleta, factura o guía.void): el pago anulado, en negativo y a la hora de la anulación, con su nota de crédito. Su
id es el del pago seguido de -anulacion, así que va justo después de su venta.refund): en negativo, con su nota de crédito.pay_in), retiro (drop) y egreso (payout) de caja, en efectivo, con el motivo y la
nota en comment.No entran los pagos que no se alcanzaron a cobrar ni las aperturas y cierres de caja (están en /shifts).
Como la anulación lleva el id de su pago, una que se haga mientras recorres un turno abierto puede caer en una
página que ya pasaste. Para cuadrar, pide los días ya cerrados.
| location_id required | string <uuid> La sucursal, una de las que alcanza la llave. |
| from required | string <date> Example: from=2026-09-01 Primer día de negocio del rango, inclusivo. |
| to required | string <date> Example: to=2026-09-30 Último día de negocio del rango, inclusivo. Hasta 31 días contando |
| limit | integer [ 1 .. 200 ] Default: 50 Filas por página. |
| cursor | string Example: cursor=0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21-anulacion El |
{- "data": [
- {
- "id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21",
- "kind": "sale",
- "at": "2026-09-26T16:48:20.000Z",
- "register": "Caja 1",
- "document": {
- "id": "0192f5b0-4e00-7f11-9a20-5b6c7d8e9f01",
- "doc_type": 39,
- "folio": 18342,
- "emission_status": "issued"
}, - "comment": null,
- "staff": "Caja Demo",
- "amount": 13700,
- "tip": 1370,
- "tenders": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "method": "Tarjeta Transbank",
- "total": 15070,
- "voucher": "004512"
}
]
}, - {
- "id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21-anulacion",
- "kind": "void",
- "at": "2026-09-26T16:55:03.000Z",
- "register": "Caja 1",
- "document": {
- "id": "0192f5b0-4f00-7f11-9a20-5b6c7d8e9f02",
- "doc_type": 61,
- "folio": 912,
- "emission_status": "issued"
}, - "comment": null,
- "staff": "Administración Demo",
- "amount": -13700,
- "tip": -1370,
- "tenders": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c02",
- "method": "Tarjeta Transbank",
- "total": -15070,
- "voucher": "004512"
}
]
}, - {
- "id": "0192f5b3-1c00-7e11-8f20-4a5b6c7d8e01",
- "kind": "drop",
- "at": "2026-09-26T19:30:02.000Z",
- "register": "Caja 1",
- "document": null,
- "comment": "Retiro a bóveda · Cambio de turno",
- "staff": "Caja Demo",
- "amount": -60000,
- "tip": 0,
- "tenders": [
- {
- "method_id": "0192f5a8-7a10-7c22-8e31-4b6d2f9a1c01",
- "method": "Efectivo",
- "total": -60000,
- "voucher": null
}
]
}
], - "next_cursor": "0192f5b3-1c00-7e11-8f20-4a5b6c7d8e01"
}Boletas (39), facturas (33), guías de despacho (52) y notas de crédito (61). Permiso documents:read.
Boletas (39), facturas (33), guías de despacho (52) y notas de crédito (61) electrónicas cuya fecha de negocio
está en el rango. Una nota de crédito apunta al documento que anula con reference_id y, si es de una
devolución, a esa devolución con refund_id. Solo cuentan ante el SII los documentos con
emission_status = issued; los demás todavía se están emitiendo o no se emitieron. Si la emisión falló o el SII
rechazó el documento, error resume por qué.
| from required | string <date> Example: from=2026-09-01 Primer día de negocio del rango, inclusivo. |
| to required | string <date> Example: to=2026-09-30 Último día de negocio del rango, inclusivo. Hasta 31 días contando |
| location_id | string <uuid> Solo esta sucursal. Sin él, todas las que alcanza la llave. |
| doc_type | integer Enum: 39 33 52 61 Solo boletas ( |
| emission_status | string (EmissionStatus) Enum: "pending_send" "sending" "issued" "failed_retryable" "failed_permanent" "cancelled" Solo los documentos en este estado de emisión; por ejemplo, |
| limit | integer [ 1 .. 200 ] Default: 50 Filas por página. |
| cursor | string <uuid> El |
{- "data": [
- {
- "id": "0192f5b0-4e00-7f11-9a20-5b6c7d8e9f01",
- "doc_type": 39,
- "folio": 18342,
- "emission_date": "2026-09-26",
- "business_date": "2026-09-26",
- "total": 13700,
- "net": 11513,
- "vat": 2187,
- "exempt": 0,
- "emission_status": "issued",
- "sii_status": "accepted",
- "error": null,
- "issued_at": "2026-09-26T16:48:31.000Z",
- "reference_id": null,
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "order_id": "0192f5b0-1a2b-7c3d-8e4f-5a6b7c8d9e01",
- "payment_id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e21",
- "refund_id": null,
- "legal_entity": {
- "rut": "11111111-1",
- "business_name": "Mesalto Demo SpA"
},
}, - {
- "id": "0192f5b0-5100-7f11-9a20-5b6c7d8e9f03",
- "doc_type": 39,
- "folio": null,
- "emission_date": "2026-09-26",
- "business_date": "2026-09-26",
- "total": 4500,
- "net": 3782,
- "vat": 718,
- "exempt": 0,
- "emission_status": "failed_permanent",
- "sii_status": null,
- "error": "Defontana no vende sin stock: el artículo CAF0640 no tiene saldo en la bodega BODESSEBASTIAN.",
- "issued_at": null,
- "reference_id": null,
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "order_id": "0192f5b0-1a2b-7c3d-8e4f-5a6b7c8d9e05",
- "payment_id": "0192f5b0-1c00-7c3d-8e4f-5a6b7c8d9e25",
- "refund_id": null,
- "legal_entity": {
- "rut": "11111111-1",
- "business_name": "Mesalto Demo SpA"
}, - "pdf_url": null
}
], - "next_cursor": "0192f5b0-5100-7f11-9a20-5b6c7d8e9f03"
}Productos con su precio y disponibilidad por sucursal, y el stock de cada sucursal. Permiso catalog:read.
Toda la carta de la organización, activa o no. Cada producto trae su precio base y, por cada sucursal que
alcanza la llave (o solo la de location_id), si se vende ahí, a qué precio y si está disponible o agotado.
Con q o category_id trae solo los productos que coinciden.
| location_id | string <uuid> Solo esta sucursal. Sin él, todas las que alcanza la llave. |
| q | string <= 100 characters Example: q=cortado Busca en el nombre, el código y el código fiscal, sin distinguir mayúsculas. Hasta 100 caracteres. |
| category_id | string <uuid> Solo los productos de esta categoría (no los de sus subcategorías). |
| limit | integer [ 1 .. 200 ] Default: 50 Filas por página. |
| cursor | string <uuid> El |
{- "data": [
- {
- "id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a01",
- "code": "CAF-002",
- "name": "Cortado",
- "display_name": "Cortado de la casa",
- "description": "Espresso con un toque de leche.",
- "category": {
- "id": "0192f5a8-4c00-7a11-8b20-7d8e9f0a1b01",
- "name": "Café"
}, - "price": 2900,
- "tax": "iva",
- "fiscal_code": "CAF0054",
- "barcodes": [ ],
- "is_combo": false,
- "sold_by_weight": false,
- "active": true,
- "locations": [
- {
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "price": 2900,
- "listed": true,
- "available": true
}, - {
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b02",
- "price": 3100,
- "listed": true,
- "available": false
}
]
}, - {
- "id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a31",
- "code": "AGU-500",
- "name": "Agua mineral sin gas 500 ml",
- "display_name": "Agua sin gas",
- "description": null,
- "category": {
- "id": "0192f5a8-4c00-7a11-8b20-7d8e9f0a1b04",
- "name": "Bebidas"
}, - "price": 1500,
- "tax": "iva",
- "fiscal_code": "AGU0500",
- "barcodes": [
- "7801234567890"
], - "is_combo": false,
- "sold_by_weight": false,
- "active": true,
- "locations": [
- {
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "price": 1500,
- "listed": true,
- "available": true
}, - {
- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b02",
- "price": 1500,
- "listed": true,
- "available": true
}
]
}
], - "next_cursor": null
}Lo mismo que Stock en la administración: cuántas unidades quedan de cada producto en la bodega de Defontana de
la sucursal, según la última lectura (read_at), y el mínimo que se le puso.
untracked cuenta los que no siguen stock: sin código fiscal, sin saldo leído o combos (su stock es el de lo
que se elige en cada paso).low_stock marca lo que está por pedir: tiene mínimo y le quedan esas unidades o menos.read_at es null y products viene vacío.| location_id required | string <uuid> La sucursal, una de las que alcanza la llave. |
{- "location_id": "0192f5a8-6c1e-7b3a-9d42-1f8e3c5a7b01",
- "read_at": "2026-09-26T14:14:00.000Z",
- "untracked": 18,
- "products": [
- {
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a31",
- "code": "AGU-500",
- "name": "Agua mineral sin gas 500 ml",
- "fiscal_code": "AGU0500",
- "category_id": "0192f5a8-4c00-7a11-8b20-7d8e9f0a1b04",
- "sold_by_weight": false,
- "units": 4,
- "minimum": 6,
- "low_stock": true
}, - {
- "product_id": "0192f5a8-5d00-7a11-8b20-6c7d8e9f0a40",
- "code": "GRA-ALM",
- "name": "Almendras a granel",
- "fiscal_code": "GRA014",
- "category_id": "0192f5a8-4c00-7a11-8b20-7d8e9f0a1b05",
- "sold_by_weight": true,
- "units": 3250,
- "minimum": null,
- "low_stock": false
}
]
}