> ## 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.

# Create a shopper

> Create a shopper



## OpenAPI

````yaml /api/openapi.json post /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:
    post:
      tags:
        - Shoppers
      summary: Create a shopper
      description: Create a shopper
      operationId: createShopper
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateShopperRequest'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Shopper'
        '400':
          description: ''
        '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:
    CreateShopperRequest:
      type: object
      properties:
        email_address:
          type: string
          nullable: true
          description: Email address on file for the shopper.
          format: email
          maxLength: 254
        enrolled_in_loyalty_program:
          type: boolean
          default: false
          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.
        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}$
        postal_code:
          type: string
          nullable: true
          description: Postal code on file for the shopper.
      required:
        - phone_number
    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
    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
    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

- [Create Loyalty Rewards in Vori Back Office](/customer-marketing/loyalty-and-rewards/create-loyalty-rewards-in-vori-back-office.md)
- [Create and Manage Shopper Groups](/customer-marketing/loyalty-and-rewards/create-and-manage-shopper-groups.md)
- [Shopper Inbox](/customer-marketing/campaigns-and-coupons/shopper-inbox.md)
