> ## Documentation Index
> Fetch the complete documentation index at: https://docs.finsync.ar/llms.txt
> Use this file to discover all available pages before exploring further.

# Ventanilla waiting room

> Public TV snapshot for the ventanilla waiting room. Unguessable token, no login, no amounts.

# Ventanilla waiting room

The waiting-room TV reads a **public, unauthenticated** snapshot. It is not an integrator (`x-api-key`) API.

**Prerequisite:** a superadmin must set `Company.ventanilla_enabled`. Create the screen token in the dashboard under Configuración → Módulos → Sala de espera. If the module is off, the token is revoked, or the token is unknown, the endpoint returns `404` with `code: VENTANILLA_PUBLIC_UNAVAILABLE`.

The public path never includes amounts, balances, or client identifiers beyond the privacy-masked call label.

## Snapshot

```bash theme={null}
curl --request GET \
  --url "https://finsync.ar/api/public/ventanilla/SCREEN_TOKEN"
```

A `200` body includes:

* `companyName`, optional `logoUrl`, `date` (ART calendar day), and `timezone`
* `rates` for the currencies configured on the company. Buy / sell / mid are display prices in `unit` (ARS). USD and ARS are one pair: pesos per dollar, never the internal 1/1 USD quote or the USD-per-peso factor.
* `services` cards (icon, color, title, subtitle)
* `backgroundColor`
* `currentCall` and `recentCalls` only while a box is still `llamado` (box number, privacy-masked label, ticket, status). Attended and no-show calls are omitted, and the TV hides the block when nothing is called.
* `tickerText`, `announceSound`, `announceTts`, `privacyMode`

`Cache-Control` is `no-store`. Public `/api/public/` routes are IP rate-limited.

## Live updates

`GET /api/public/ventanilla/{token}/events` is an SSE stream of `snapshot` (when the payload changes), `ping`, or `unavailable`. The TV page also polls the snapshot every 2.5s so a dropped EventSource still recovers.

The browser page is `/sala/{token}` (no login, `noindex`). Rotate or revoke the token from the dashboard to cut access.

## Operator calls

Box calling is a **dashboard** session API (`/api/dashboard/ventanilla/calls`), not this public contract. Operators need `ventanilla.view` or `operations.view`. Configuration needs `ventanilla.manage` or `employees.manage`.

The operator confirms the display name in a prompt when they click **Llamar**. The UI may suggest a name from the operation description or an external counterparty; it is never stored on `Operation`. The confirmed value lives only on `VentanillaCall.display_name` (audited). **Volver a llamar** reuses that stored name; **Editar nombre** opens the same prompt before recalling. An empty name is allowed only when the company privacy mode is `ticket`. The public screen still applies `privacyMode` (full name, first name + last initial, or ticket).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.