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

# List shoppers

> Lists shoppers across the whole banner, ordered by ID. Filter by phone number to find the shopper who gave it at checkout, and page through the results with the cursor parameters.



## OpenAPI

````yaml /api/openapi.json get /v1/shoppers
openapi: 3.0.0
info:
  title: Vori API
  description: ''
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.vori.com
    description: production
security: []
tags: []
paths:
  /v1/shoppers:
    get:
      tags:
        - Shoppers
      summary: List shoppers
      description: >-
        Lists shoppers across the whole banner, ordered by ID. Filter by phone
        number to find the shopper who gave it at checkout, and page through the
        results with the cursor parameters.
      operationId: listShoppers
      parameters:
        - name: ending_before
          required: false
          in: query
          description: Return records that precede the record with this ID, in list order.
          schema:
            type: string
        - name: enrolled_in_loyalty_program
          required: false
          in: query
          description: Whether the shopper is enrolled in the loyalty program.
          schema:
            type: boolean
        - name: limit
          required: false
          in: query
          description: Maximum number of records to return.
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: integer
        - name: phone_number
          required: false
          in: query
          schema:
            type: string
            maxLength: 255
          description: Phone number on file for the shopper. Matched exactly.
        - name: starting_after
          required: false
          in: query
          description: Return records that follow the record with this ID, in list order.
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShopperList'
        '400':
          description: ''
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ConflictingListParametersError'
                  - $ref: '#/components/schemas/InvalidListCursorError'
        '402':
          description: The required capability is not enabled for the banner.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CapabilityRequiredException'
        '403':
          description: ''
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/InsufficientPermissionsError'
                  - $ref: '#/components/schemas/NoBannerAssociationError'
      security:
        - bearer: []
components:
  schemas:
    ShopperList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Shopper'
        has_more:
          type: boolean
          description: Whether more records follow this page.
      required:
        - data
        - has_more
    ConflictingListParametersError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - conflicting_list_parameters
      required:
        - error_code
    InvalidListCursorError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - invalid_list_cursor
      required:
        - error_code
    CapabilityRequiredException:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - capability_not_enabled
      required:
        - error_code
    InsufficientPermissionsError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - insufficient_permissions
        error_details:
          $ref: '#/components/schemas/InsufficientPermissionsErrorDetails'
      required:
        - error_code
        - error_details
    NoBannerAssociationError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - no_banner_association
      required:
        - error_code
    Shopper:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the record.
        created_at:
          type: string
          description: When the record was created.
          format: date-time
        email_address:
          type: string
          nullable: true
          description: Email address on file for the shopper.
          format: email
          maxLength: 254
        email_validated:
          type: boolean
          description: Whether the shopper has confirmed their email address.
        enrolled_in_loyalty_program:
          type: boolean
          description: >-
            Whether the shopper is enrolled in the loyalty program. Shoppers
            must explicitly opt into the loyalty program, typically at the POS.
            Digital gift card recipients are also stored as shoppers, but are
            only opted into the loyalty program after giving explicit
            permission.
        first_name:
          type: string
          nullable: true
          description: Given name of the shopper.
        joined_at_store_id:
          type: string
          nullable: true
          description: ID of the store where the shopper enrolled.
          pattern: ^[0-9]+$
        last_name:
          type: string
          nullable: true
          description: Family name of the shopper.
        phone_number:
          type: string
          description: >-
            Phone number on file for the shopper, and what a loyalty member
            gives at checkout to be identified.
          format: phone
          pattern: ^\+[1-9]\d{1,14}$
        point_balance:
          type: string
          description: Loyalty points currently available to the shopper.
          example: '199.99'
          pattern: ^-?[0-9]+(\.[0-9]+)?$
        postal_code:
          type: string
          nullable: true
          description: Postal code on file for the shopper.
        subscribed_to_email:
          type: boolean
          description: Whether the shopper has opted in to marketing emails.
        subscribed_to_sms:
          type: boolean
          description: Whether the shopper has opted in to marketing text messages.
        updated_at:
          type: string
          description: When the record was last changed.
          format: date-time
      description: >-
        A person a store can recognize at checkout, whether as a loyalty member
        or as the holder of a gift card. A shopper belongs to the banner rather
        than to any one store.
      required:
        - id
        - created_at
        - email_address
        - email_validated
        - enrolled_in_loyalty_program
        - first_name
        - joined_at_store_id
        - last_name
        - phone_number
        - point_balance
        - postal_code
        - subscribed_to_email
        - subscribed_to_sms
        - updated_at
    InsufficientPermissionsErrorDetails:
      type: object
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/Action'
        resource:
          allOf:
            - $ref: '#/components/schemas/Resource'
      required:
        - action
        - resource
    Action:
      type: string
      enum:
        - '*'
        - cancel
        - check_in
        - create
        - delete
        - read
        - record_events
        - refund
        - restart
        - update
        - void
    Resource:
      type: string
      enum:
        - '*'
        - accounting_integration
        - agent_chats
        - api_clients
        - asynchronous_tasks
        - banners
        - blackhawk_transactions
        - capabilities
        - coupons
        - custom_quick_actions
        - datacap_transactions
        - departments
        - discounts
        - ditto_auth_tokens
        - edge_agents
        - electronic_shelf_labels
        - employees
        - files
        - food_modifiers
        - gift_cards
        - gl_code_mappings
        - house_accounts
        - inventory
        - inventory_sessions
        - invoices
        - item_modifiers
        - label_dimension_sets
        - label_sheet_profiles
        - label_stock_products
        - lanes
        - loyalty_bonuses
        - loyalty_campaigns
        - loyalty_rewards
        - notification_templates
        - offers
        - order_guides
        - pos_banner_configurations
        - pos_orders
        - pos_tills
        - price_tags
        - product_ranges
        - products
        - promotions
        - purchase_orders
        - receiving
        - reporting
        - revision_sessions
        - revisions
        - roles
        - shopper_tags
        - shoppers
        - store_product_inventory_counts
        - store_product_lots
        - store_product_rules
        - store_product_tag_templates
        - store_snap_incentive_program_coupons
        - store_vendor_merge_requests
        - store_vendor_product_merge_requests
        - store_vendor_products
        - store_vendors
        - stores
        - tag_printings
        - tag_template_presets
        - tag_templates
        - tax_rates
        - users
        - variable_weights
        - vendor_merge_requests
        - vendor_product_merge_requests
        - vendors
        - wallet_payments
        - wic_products
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

````

## Related topics

- [List transactions](/api-reference/transactions/list-transactions.md)
- [List lanes](/api-reference/lanes/list-lanes.md)
- [List stores](/api-reference/stores/list-stores.md)
