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

> ## Agent Instructions
> Documentazione di Gestione Sala. Il testo completo, incluso il riferimento API, è in https://docs.gestionesala.com/llms-full.txt. Per endpoint, campi e codici di errore la fonte di verità è openapi.yaml: non usare endpoint o campi non documentati.

# Restituisce il locale della chiave

> Scope: `venues:read`. Una chiave vale in un locale solo: `data` contiene sempre al più un elemento, quello del locale della chiave.



## OpenAPI

````yaml /openapi.yaml get /venues
openapi: 3.1.0
info:
  title: Gestione Sala API
  version: 1.0.0
  description: >-
    Autenticazione: Authorization: Bearer <chiave>. Errori:
    {error:{code,message,details,requestId}}, anche per un percorso che non
    esiste (404 not_found); un metodo che il percorso non ha è un 405 della
    piattaforma, senza corpo. Risorsa singola: {nomeRisorsa: {...}}; lista
    d'attesa: entry. Elenchi: {data,nextCursor}, limit fino a 50. Intervalli di
    giorni: from/to. serviceDate YYYY-MM-DD e time HH:mm nell'ora del locale;
    startsAt/endsAt/updatedAt ISO 8601 UTC; timezone IANA. Un id di percorso
    storto è 404. Limiti di frequenza: per organizzazione, sommando tutte le sue
    chiavi segrete, 100 richieste ogni 10 secondi e 20000 al giorno (giorno di
    calendario UTC). Oltre: 429 rate_limited con details.window (10s, day) e
    details.scope (organization), e la richiesta respinta non conta. Ogni
    risposta porta X-Request-Id; quelle con una chiave riconosciuta anche
    X-RateLimit-Limit/Remaining/Reset della finestra più stretta, quella con
    meno richieste rimaste (per la chiave pubblica del widget, il tetto del tuo
    indirizzo IP); il 429 anche Retry-After, i secondi finché riparte la
    finestra che l'ha fermato. Idempotency-Key: legata a chiave API, operazione
    e corpo; riusata con un altro corpo è 422 idempotency_key_reused, ancora in
    corso 409 idempotency_in_progress. Chiavi di prova (gsk_test_,
    organizzazione di prova): ogni risposta JSON porta livemode:false, nessun
    webhook, messaggio o sincronizzazione SQUADD parte. Chiave pubblica del
    widget (gspk_): solo GET /availability, /availability/slots,
    /availability/days e POST /reservations, dai siti ammessi (CORS, header
    Origin), con un limite al minuto per indirizzo IP e fuori dal limite
    dell'organizzazione; senza serviceTags né externalRef, e la prenotazione
    creata torna senza i dati dell'ospite. Altrove: 403 forbidden,
    details.reason publishable_key o origin_not_allowed.
servers:
  - url: https://app.gestionesala.com/api/v1
security: []
tags:
  - name: Meta
    description: Identità della chiave, stato del servizio e specifica OpenAPI
  - name: Locali
    description: Il locale della chiave e relativo `venueId`
  - name: Configurazione del locale
    description: Turni, chiusure, sale, tavoli, piante, regole e stato della sala
  - name: Disponibilità
    description: Disponibilità per orario, per giorno e su un intervallo di giorni
  - name: Prenotazioni
    description: Lettura, creazione, modifica e annullamento delle prenotazioni
  - name: Lista d'attesa
    description: Voci in attesa di un posto, richiamo e conversione in prenotazione
  - name: Ospiti
    description: Rubrica degli ospiti, ricerca per telefono e tag di servizio
  - name: Eventi e report
    description: Storico degli eventi, consuntivi ed export delle prenotazioni
  - name: Webhook
    description: >-
      Consegne, reinvio, evento di prova e rotazione del segreto di firma.
      Firma: X-Gestionesala-Signature = v1=HMAC-SHA256(segreto,
      "v1\n<timestamp>\n<idempotency-key>\n<corpo>"), con
      X-Gestionesala-Timestamp e X-Gestionesala-Idempotency-Key; in una
      rotazione due firme separate da virgola.
  - name: Import
    description: Import di ospiti e prenotazioni da un altro gestionale
paths:
  /venues:
    get:
      tags:
        - Locali
      summary: Restituisce il locale della chiave
      description: >-
        Scope: `venues:read`. Una chiave vale in un locale solo: `data` contiene
        sempre al più un elemento, quello del locale della chiave.
      operationId: listVenues
      parameters:
        - name: limit
          in: query
          required: false
          description: Righe per pagina
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 50
        - name: cursor
          in: query
          required: false
          description: Il nextCursor della risposta precedente
          schema:
            type: string
        - name: updatedSince
          in: query
          required: false
          description: Solo ciò che è cambiato dopo questo istante
          schema:
            type: string
            description: Istante ISO 8601 con fuso
            format: date-time
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Venue'
                  nextCursor:
                    anyOf:
                      - type: string
                      - type: 'null'
                required:
                  - data
                  - nextCursor
        '400':
          description: invalid_request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: unauthenticated, api_key_invalid, api_key_revoked
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: forbidden, insufficient_scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: rate_limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - apiKey: []
components:
  schemas:
    Venue:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        timezone:
          type: string
          description: Fuso orario IANA
          examples:
            - Europe/Rome
        noShowToleranceMinutes:
          type: integer
        updatedAt:
          type: string
          description: Istante ISO 8601 con fuso
          format: date-time
      required:
        - id
        - name
        - timezone
        - noShowToleranceMinutes
        - updatedAt
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Il codice su cui ramificare
            message:
              type: string
              description: Per chi legge i log
            details:
              type: object
              description: >-
                Cosa serve per correggere o riprovare: fields (i campi storti),
                requiredScope, reason; per no_availability anche alternatives,
                gli orari vicini nella forma di GET /availability; per
                rate_limited limit, window e scope della finestra che ha fermato
                la richiesta, e resetAt
              properties:
                fields:
                  type: array
                  items:
                    type: string
                requiredScope:
                  type: string
                reason:
                  type: string
                alternatives:
                  type: array
                  items:
                    $ref: '#/components/schemas/Proposal'
                limit:
                  type: integer
                  description: >-
                    rate_limited: il tetto della finestra che ha fermato la
                    richiesta
                window:
                  type: string
                  description: >-
                    rate_limited: 10s o day (organizzazione), minute (visitatore
                    del widget)
                  enum:
                    - 10s
                    - day
                    - minute
                scope:
                  type: string
                  description: 'rate_limited: di chi è il limite'
                  enum:
                    - organization
                    - visitor
                resetAt:
                  type: string
                  format: date-time
                  description: 'rate_limited: quando la finestra riparte'
            requestId:
              type: string
              description: Lo stesso valore dell'header X-Request-Id
          required:
            - code
            - message
            - details
      required:
        - error
    Proposal:
      type: object
      properties:
        time:
          type: string
          description: Ora locale del locale, HH:mm
          pattern: ^([01]\d|2[0-3]):[0-5]\d$
        startsAt:
          type: string
          description: Istante ISO 8601 con fuso
          format: date-time
        endsAt:
          type: string
          description: Istante ISO 8601 con fuso
          format: date-time
        turnTimeMinutes:
          type: integer
        seats:
          type: integer
        overflowsShift:
          type: boolean
      required:
        - time
        - startsAt
        - endsAt
        - turnTimeMinutes
        - seats
        - overflowsShift
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: gsk_... | gsk_test_... | gspk_...

````