> ## Documentation Index
> Fetch the complete documentation index at: https://api-doc.xmenu.it/llms.txt
> Use this file to discover all available pages before exploring further.

# Elenco clienti

> Restituisce un elenco paginato di clienti registrati o con ordini esistenti in xMenu.



## OpenAPI

````yaml openapi-it.json GET /customerstats/customers
openapi: 3.1.0
info:
  title: xMenu API
  description: API Pubblica xMenu - Endpoint REST e notifiche webhook
  version: 1.0.0
servers:
  - url: https://app.xmenu.it/api
    description: xMenu API Production
security: []
paths:
  /customerstats/customers:
    get:
      tags:
        - Anagrafica Clienti
      summary: Elenco clienti
      description: >-
        Restituisce un elenco paginato di clienti registrati o con ordini
        esistenti in xMenu.
      operationId: getCustomers
      parameters:
        - name: restuid
          in: query
          required: true
          schema:
            type: string
          description: Identificativo univoco del ristorante
        - name: page
          in: query
          required: true
          schema:
            type: integer
            minimum: 1
          description: Numero di pagina da recuperare
        - name: pagesize
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 100
          description: 'Numero di risultati per pagina (max: 100)'
        - name: added_from
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Filtra clienti aggiunti da questa data (formato YYYY-MM-dd)
        - name: added_to
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Filtra clienti aggiunti fino a questa data (formato YYYY-MM-dd)
        - name: signedup
          in: query
          required: false
          schema:
            type: string
            enum:
              - '0'
              - '1'
          description: |-
            Filtra per stato di registrazione
            - `0` = clienti non registrati
            - `1` = clienti registrati
        - name: first_order_from
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Filtra clienti con primo ordine da questa data (formato YYYY-MM-dd)
        - name: first_order_to
          in: query
          required: false
          schema:
            type: string
            format: date
          description: >-
            Filtra clienti con primo ordine fino a questa data (formato
            YYYY-MM-dd)
        - name: devices_unregistered_from
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Filtra clienti con più recente disinstallazione app da questa data
        - name: devices_unregistered_to
          in: query
          required: false
          schema:
            type: string
            format: date
          description: >-
            Filtra clienti con più recente disinstallazione app fino a questa
            data
        - name: signup_deleted_from
          in: query
          required: false
          schema:
            type: string
            format: date
          description: >-
            Filtra clienti con account eliminato da questa data (formato
            YYYY-MM-dd)
        - name: signup_deleted_to
          in: query
          required: false
          schema:
            type: string
            format: date
          description: >-
            Filtra clienti con account eliminato fino a questa data (formato
            YYYY-MM-dd)
      responses:
        '200':
          description: Risposta elenco clienti
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      security:
        - apiKey: []
        - clientId: []
          clientSecret: []
        - oauth2: []
components:
  schemas:
    CustomerListResponse:
      type: object
      required:
        - success
      properties:
        success:
          type: boolean
          description: |-
            Stato dell'operazione:
            - `false` = Errore
            - `true` = Successo
        error:
          type: string
          description: >-
            Codice errore se l'operazione è fallita.


            Vedi [Codici di errore](/docs/it/overview/error-codes) per i codici
            di errore generali che possono verificarsi.
        message:
          type: string
          description: Descrizione testuale dell'errore se l'operazione è fallita
        page:
          type: integer
          description: Numero pagina corrente
        pagesize:
          type: integer
          description: Numero massimo di elementi per pagina
        total_count:
          type: integer
          description: Numero totale di risultati
        more:
          type: boolean
          description: |-
            Se ci sono ulteriori risultati:
            - `false` = Nessun altro risultato
            - `true` = Altri risultati disponibili
        customers:
          type: array
          items:
            $ref: '#/components/schemas/Customer'
          description: Array di oggetti cliente
    Customer:
      type: object
      properties:
        email:
          type: string
          description: Indirizzo email
        uid:
          type: string
          description: Identificativo univoco cliente
        first_name:
          type: string
          description: Nome
        last_name:
          type: string
          description: Cognome
        phone:
          type: string
          description: Numero di telefono
        address:
          type: string
          description: Indirizzo
        number:
          type: string
          description: Numero civico
        city:
          type: string
          description: Città
        province:
          type: string
          description: Provincia
        zip:
          type: string
          description: CAP
        country:
          type: string
          description: Paese
        invoice_data:
          type: object
          description: >-
            Dati di fatturazione del cliente. Presente quando il cliente ha
            richiesto la fattura.
          properties:
            name:
              type: string
              description: Ragione sociale o intestatario della fattura
            address:
              type: string
              description: Indirizzo di fatturazione
            city:
              type: string
              description: Città di fatturazione
            province:
              type: string
              description: Provincia di fatturazione
            zip:
              type: string
              description: CAP di fatturazione
            country:
              type: string
              description: Paese di fatturazione (codice ISO 3166-1 alpha-2)
            vat_code:
              type: string
              description: Partita IVA
            tax_code:
              type: string
              description: Codice fiscale
            sdi_codice:
              type: string
              description: Codice destinatario SDI (fatturazione elettronica)
            sdi_pec:
              type: string
              description: Indirizzo PEC per la fatturazione elettronica
        orders_count:
          type: integer
          description: Conteggio ordini online totali
        pickup_orders_count:
          type: integer
          description: Conteggio ordini ritiro
        delivery_orders_count:
          type: integer
          description: Conteggio ordini consegna a domicilio
        offline_orders_count:
          type: integer
          description: Conteggio acquisti in locale totali
        first_order:
          type: string
          description: Data primo ordine (null = nessun ordine effettuato)
          nullable: true
        last_order:
          type: string
          description: Data ultimo ordine (null = nessun ordine effettuato)
          nullable: true
        last_offline_order:
          type: string
          description: Data ultimo acquisto in locale (null = nessun acquisto effettuato)
          nullable: true
        orders_total:
          type: number
          description: Totale speso in ordini online
        added:
          type: string
          description: Data inserimento in anagrafica clienti
        accept_marketing:
          type: boolean
          description: |-
            Stato del consenso marketing:
            - `false` = Consenso non fornito
            - `true` = Consenso fornito
        mobile_app:
          type: boolean
          description: Utilizza o ha utilizzato l'app mobile
        signedup:
          type: boolean
          description: |-
            Stato registrazione:
            - `false` = Cliente non registrato
            - `true` = Cliente registrato
        signup_uid:
          type: string
          description: >-
            UID account cliente registrato o codice carta fedeltà (se cliente
            registrato)
        birthday:
          type: string
          format: date
          description: Data di nascita (solo per clienti registrati; null se non impostata)
          nullable: true
        loyalty_points:
          type: integer
          description: >-
            Saldo punti fedeltà (presente solo per clienti registrati quando la
            raccolta punti è attiva)
        devices_unregistered:
          type: string
          description: Data rilevazione disinstallazione app più recente
        code:
          type: string
          description: Codice cliente (se presente)
        subrestaurant_code:
          type: string
          description: Codice locale (se presente)
        subrestaurant_uid:
          type: string
          description: UID locale (se presente)
        signup_deleted:
          type: string
          description: Data eliminazione account (se presente)
  responses:
    Unauthorized:
      description: Autenticazione fallita.
      content:
        application/json:
          schema:
            oneOf:
              - type: object
                description: >-
                  Formato errore standard (quando si usa autenticazione API Key
                  o Client ID/Secret)
                required:
                  - success
                  - error
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Sempre false per gli errori
                  error:
                    type: string
                    enum:
                      - RESTAURANT_NOT_FOUND
                      - INVALID_KEY
                      - INVALID_AUTH
                    description: Codice errore
                  message:
                    type: string
                    description: Descrizione errore leggibile
              - type: object
                description: >-
                  Formato errore OAuth (quando si usa l'autenticazione Bearer
                  token)
                required:
                  - error
                properties:
                  error:
                    type: string
                    enum:
                      - invalid_token
                      - invalid_request
                    description: Codice errore OAuth (RFC 6749)
                  error_description:
                    type: string
                    description: Descrizione errore leggibile
          examples:
            standard:
              summary: Formato errore standard (API Key / Client ID+Secret)
              value:
                success: false
                error: INVALID_KEY
                message: La chiave API fornita non è valida
            oauth:
              summary: Formato errore OAuth (Bearer token)
              value:
                error: invalid_token
                error_description: Access token non valido o scaduto
    Forbidden:
      description: Autorizzazione fallita - permessi insufficienti o accesso negato.
      content:
        application/json:
          schema:
            oneOf:
              - type: object
                description: >-
                  Formato errore standard (quando si usa autenticazione API Key
                  o Client ID/Secret)
                required:
                  - success
                  - error
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Sempre false per gli errori
                  error:
                    type: string
                    enum:
                      - API_DISABLED
                      - INSUFFICIENT_SCOPE
                      - UNAUTHORIZED
                    description: Codice errore
                  message:
                    type: string
                    description: Descrizione errore leggibile
              - type: object
                description: >-
                  Formato errore OAuth (quando si usa l'autenticazione Bearer
                  token)
                required:
                  - error
                properties:
                  error:
                    type: string
                    enum:
                      - insufficient_scope
                      - invalid_request
                    description: Codice errore OAuth (RFC 6749)
                  error_description:
                    type: string
                    description: Descrizione errore leggibile
          examples:
            standard:
              summary: Formato errore standard (API Key / Client ID+Secret)
              value:
                success: false
                error: API_DISABLED
                message: L'accesso API non è abilitato per il ristorante
            oauth:
              summary: Formato errore OAuth (Bearer token)
              value:
                error: insufficient_scope
                error_description: 'Permessi mancanti richiesti: write:orders'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-Api-Key
      description: >-
        Chiave API del ristorante. Può essere ottenuta da Strumenti > Accesso
        API nella dashboard xMenu.
    clientId:
      type: apiKey
      in: header
      name: X-Client-Id
      description: >-
        Client ID per l'autenticazione API Client (deve essere usato insieme al
        Client Secret)
    clientSecret:
      type: apiKey
      in: header
      name: X-Client-Secret
      description: >-
        Client Secret per l'autenticazione API Client (deve essere usato insieme
        al Client ID)
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://app.xmenu.it/oauth/token
          scopes: {}
      description: >-
        Autenticazione OAuth 2.0 utilizzando il flusso client credentials. Il
        token di accesso deve essere incluso nell'header Authorization come
        Bearer token.

````