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

# Create Loyalty Program

> Create a new loyalty program.

### Args:
- `data`: Payload to create the program.
- `user`: The user creating the program, derived from the current session.

### Returns:
- JSON response with the created program details or an error message.



## OpenAPI

````yaml https://api.loyalty.dog/openapi.json post /v2/programs
openapi: 3.1.0
info:
  title: LoyaltyDog
  description: >-

    Welcome to the LoyaltyDog API! This API provides access to our loyalty
    program features, allowing you to integrate with various platforms and
    manage your loyalty data.


    Want to query LoyaltyDog via an AI assistant (Claude, Cursor, Windsurf)? See
    the [MCP Integration guide](https://loyaltydog.ai/playground#mcp).
        
  termsOfService: https://loyalty.dog/loyalty-program-terms-service
  contact:
    name: LoyaltyDog Support
    url: https://loyalty.dog/contact-us
    email: support@loyalty.dog
  version: 1.0.1
servers:
  - url: https://api.loyalty.dog
    description: Production
security:
  - bearerAuth: []
paths:
  /v2/programs:
    post:
      tags:
        - Loyalty
      summary: Create Loyalty Program
      description: >-
        Create a new loyalty program.


        ### Args:

        - `data`: Payload to create the program.

        - `user`: The user creating the program, derived from the current
        session.


        ### Returns:

        - JSON response with the created program details or an error message.
      operationId: create_loyalty_program_v2_programs_post
      parameters:
        - name: authorization
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Authorization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProgramPayload'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    CreateProgramPayload:
      properties:
        passTypeIdentifier:
          type: string
          pattern: ^pass\..*
          title: Passtypeidentifier
        schema:
          $ref: '#/components/schemas/ProgramSchemaType'
          default: tieredMembership
        programType:
          $ref: '#/components/schemas/ProgramType'
          default: loyalty
        name:
          type: string
          title: Name
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
        country:
          anyOf:
            - type: string
            - type: 'null'
          title: Country
        company:
          anyOf:
            - type: string
            - type: 'null'
          title: Company
        address:
          anyOf:
            - type: string
            - type: 'null'
          title: Address
        website:
          anyOf:
            - type: string
              maxLength: 2083
              minLength: 1
              format: uri
            - type: 'null'
          title: Website
        email:
          anyOf:
            - type: string
              format: email
            - type: string
            - type: 'null'
          title: Email
        phone:
          anyOf:
            - type: string
            - type: 'null'
          title: Phone
        terms:
          anyOf:
            - type: string
            - type: 'null'
          title: Terms
        pointsAddEmail:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pointsaddemail
        pointsAddPhone:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pointsaddphone
        pointsInstallPass:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pointsinstallpass
        pointsScanPass:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pointsscanpass
        dynamicScanPoints:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Dynamicscanpoints
        pointsReferral:
          anyOf:
            - type: integer
            - type: 'null'
          title: Pointsreferral
        referralRequiredPoints:
          anyOf:
            - type: integer
            - type: 'null'
          title: Referralrequiredpoints
        scannerType:
          anyOf:
            - $ref: '#/components/schemas/PassScannerType'
            - type: 'null'
          default: None
        customPointsChangeMessage:
          anyOf:
            - type: string
            - type: 'null'
          title: Custompointschangemessage
        disableCustomPointsChangeMessage:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Disablecustompointschangemessage
        customPointName:
          anyOf:
            - type: string
            - type: 'null'
          title: Custompointname
        customPointsName:
          anyOf:
            - type: string
            - type: 'null'
          title: Custompointsname
        customFields:
          items:
            $ref: '#/components/schemas/TemplatePlaceholder'
          type: array
          title: Customfields
          default: []
        requiredFields:
          items:
            type: string
          type: array
          title: Requiredfields
          default: []
        retention_period_days:
          type: integer
          maximum: 365
          minimum: 0
          title: Retention Period Days
          description: Days to retain deleted data (0-365)
          default: 30
      type: object
      required:
        - passTypeIdentifier
        - name
      title: CreateProgramPayload
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ProgramSchemaType:
      type: string
      enum:
        - stampCard
        - tieredMembership
        - specialOffers
        - custom
      title: ProgramSchemaType
    ProgramType:
      type: string
      enum:
        - loyalty
        - giftcard
      title: ProgramType
    PassScannerType:
      type: string
      enum:
        - Browser
        - PassVerifier
        - CodeReadr
        - None
      title: PassScannerType
    TemplatePlaceholder:
      properties:
        name:
          type: string
          title: Name
        type:
          $ref: '#/components/schemas/TemplatePlaceholderType'
          default: text
        displayName:
          anyOf:
            - type: string
            - type: 'null'
          title: Displayname
        defaultValue:
          anyOf:
            - type: string
            - type: 'null'
          title: Defaultvalue
        points:
          anyOf:
            - type: integer
            - type: 'null'
          title: Points
        options:
          anyOf:
            - type: string
            - type: 'null'
          title: Options
        required:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Required
      type: object
      required:
        - name
      title: TemplatePlaceholder
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    TemplatePlaceholderType:
      type: string
      enum:
        - text
        - email
        - number
        - date
        - selection
        - json
      title: TemplatePlaceholderType
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT access token obtained from POST /v2/token.

````