openapi: 3.0.1
info:
  title: SunLync API (V2) API Definition
  description: Open API Specificaitons for SunLync API V2
  version: 0.0.1
  contact:
    name: API Support
    email: support@sunlync.com
  termsOfService: ''
  license:
    name: ''
    url: https://sl-api.redocly.app/openapi
servers:
  - url: https://sandbox.sunlync.net:9000
    description: Sandbox server
tags:
  - name: Client
    description: Client related endpoints
  - name: Configuration
    description: SunLync configuration related endpoints
  - name: User
    description: User related endpoints
paths:
  /slapi/clients/clientdetails:
    get:
      tags:
        - Client
      operationId: getClientDetails
      summary: Get client details
      description: Returns basic demographic information for a given client number
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000046'
      responses:
        '200':
          description: Get Client Details
          content:
            applicaiton/json:
              schema:
                $ref: '#/components/schemas/clientDetails'
        '404':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/ledgerbalance:
    get:
      tags:
        - Client
      operationId: getClientLedgerBalances
      summary: Get ledger balances
      description: |
        Returns ledger balances for a given client number
        * Postive value amount owed
        * Negative value is amount of credit
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
          examples:
            example:
              value: '0000000004'
      responses:
        '200':
          description: Get Ledger Balances
          content:
            applicaiton/json:
              schema:
                $ref: '#/components/schemas/clientLedgerBalances'
        '404':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/commprefs:
    get:
      tags:
        - Client
      operationId: getClientCommPrefs
      summary: Get communication preferences
      description: Returns communication preferences for a given client number
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
          examples:
            example:
              value: '0000000004'
      responses:
        '200':
          description: Client Communication Preferences
          content:
            applicaiton/json:
              schema:
                $ref: '#/components/schemas/clientCommPrefs'
        '404':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/clientmemberships:
    get:
      tags:
        - Client
      operationId: getClientMemberships
      summary: Get client memberships
      description: Returns a list of EFT and non-eft memberships for a given client number
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000046'
      responses:
        '200':
          description: Get Client Memberships
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  memberships:
                    type: array
                    items:
                      $ref: '#/components/schemas/clientMembershipInfo'
        '404':
          description: No memberships found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/clientpackages:
    get:
      tags:
        - Client
      operationId: getClientPackages
      summary: Get client packages
      description: Returns a list of packages for a given client number
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000046'
      responses:
        '200':
          description: Get Client Packages
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  packages:
                    type: array
                    items:
                      $ref: '#/components/schemas/clientPackageInfo'
        '404':
          description: No packages found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/pointsbalance:
    get:
      tags:
        - Client
      operationId: getClientPointsBalance
      summary: Get points balance
      description: Returns points ledger balances for a given client number
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
          examples:
            example:
              value: '0000000004'
      responses:
        '200':
          description: Client Points Ledger balance
          content:
            applicaiton/json:
              schema:
                $ref: '#/components/schemas/clientPointsBalance'
        '404':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/getpointstransactions:
    get:
      tags:
        - Client
      operationId: getpointstransactions
      summary: Get client points transactions
      description: >-
        Returns a list of points transactions for a given client number and date
        range
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000046'
        - name: startDate
          in: query
          required: true
          schema:
            type: string
          examples:
            example:
              value: '2025-01-01'
        - name: endDate
          in: query
          required: true
          schema:
            type: string
          examples:
            example:
              value: '2025-11-01'
      responses:
        '200':
          description: Get Points Transactions
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  transactions:
                    type: array
                    items:
                      $ref: '#/components/schemas/pointsTransactions'
        '404':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/billinginfo:
    get:
      tags:
        - Client
      operationId: getBillingInfo
      summary: Get billing info
      description: Returns a list of client billing accounts for a given client number
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000046'
      responses:
        '200':
          description: Get Billing Info
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  accounts:
                    type: array
                    items:
                      $ref: '#/components/schemas/clientBillingInfo'
        '404':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/search:
    get:
      tags:
        - Client
      operationId: getClientSearch
      summary: Search clients
      description: Returns a list of clients
      parameters:
        - name: clientnumber
          in: query
          required: false
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000046'
        - name: firstname
          in: query
          required: false
          schema:
            type: string
          examples:
            example:
              value: John
        - name: lastname
          in: query
          required: false
          schema:
            type: string
          examples:
            example:
              value: Doe
        - name: dob
          in: query
          required: false
          schema:
            type: string
          examples:
            example:
              value: '1980-12-01'
        - name: address
          in: query
          required: false
          schema:
            type: string
          examples:
            example:
              value: 10 Test St
        - name: phone
          in: query
          required: false
          schema:
            type: string
          examples:
            example:
              value: '7165555555'
        - name: email
          in: query
          required: false
          schema:
            type: string
          examples:
            example:
              value: test@test.com
      responses:
        '200':
          description: Search Clients
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  packages:
                    type: array
                    items:
                      $ref: '#/components/schemas/clientInfo'
        '404':
          description: No client found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/transactionhistory:
    get:
      tags:
        - Client
      operationId: getClientTranHistory
      summary: Get client transaction history
      description: Returns a list trasnsactions for a given client number
      parameters:
        - name: clientnumber
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000046'
        - name: startdate
          in: query
          required: true
          schema:
            type: string
            format: date
          examples:
            example:
              value: '2025-01-01'
        - name: enddate
          in: query
          required: true
          schema:
            type: string
            format: date
          examples:
            example:
              value: '2025-01-01'
        - name: includedetail
          in: query
          required: true
          schema:
            type: integer
          examples:
            example:
              value: 1
        - name: trantypes
          in: query
          required: false
          schema:
            type: string
          examples:
            example:
              value: T,R,M,P
      responses:
        '200':
          description: Get a list of tranactions
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  transactions:
                    type: array
                    items:
                      $ref: '#/components/schemas/transactions'
        '404':
          description: No memberships found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/affiliatedpackageclients:
    get:
      tags:
        - Client
      operationId: getAffiliatedpackageclients
      summary: Get affilicated package clients
      description: >-
        Returns a list of clients sharing an affiliated package by given
        membership id
      parameters:
        - name: membershipid
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000001'
      responses:
        '200':
          description: Get affilicated package clients
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  clients:
                    type: array
                    items:
                      $ref: '#/components/schemas/affiliatedpackageclients'
        '500':
          description: Could not get affiliated package clients
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/insert:
    post:
      tags:
        - Client
      operationId: postInsertClient
      summary: Insert client
      description: |
        Inserts a client and returns client number  
        * **storecode** is the storecode of the store location 
        * **empNo** is the employee number of the employee inserting the client 
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  example: John
                lastName:
                  type: string
                  example: Doe
                middleInit:
                  type: string
                  example: D
                address1:
                  type: string
                  example: 1 Main st
                address2:
                  type: string
                  example: Suite 10
                city:
                  type: string
                  example: Buffalo
                state:
                  type: string
                  example: NY
                zip:
                  type: string
                  example: '14220'
                homePhone:
                  type: string
                  example: '7165551234'
                workPhone:
                  type: string
                  example: '7165555678'
                cellPhone:
                  type: string
                  example: '7165550987'
                email:
                  type: string
                  example: test@test.com
                dob:
                  type: string
                  format: date
                  example: '1980-12-25'
                storecode:
                  type: string
                  example: '0000000001'
                empNo:
                  type: string
                  example: '0000000001'
                gender:
                  type: string
                  example: female
                doNotSolicit:
                  type: integer
                  example: 0
                emailCommPref:
                  type: integer
                  example: 1
                cellVoiceCommPref:
                  type: integer
                  example: 1
                cellTextCommPref:
                  type: integer
                  example: 1
                homePhoneCommPref:
                  type: integer
                  example: 1
                mailCommPref:
                  type: integer
                  example: 1
                workPhoneCommPref:
                  type: integer
                  example: 1
      responses:
        '201':
          description: Inserts a client
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  clientNumber:
                    type: string
                    example: '0000000001'
                  message:
                    type: string
                    example: ''
        '400':
          description: Client already exists
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/updatedemographics:
    post:
      tags:
        - Client
      operationId: postUpdateDemographics
      summary: Update client demographics
      description: |
        Field is only updated if a value is passed 
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientnumber:
                  type: string
                  example: '0000000002'
                firstName:
                  type: string
                  example: John
                lastName:
                  type: string
                  example: Doe
                middleInit:
                  type: string
                  example: D
                address1:
                  type: string
                  example: 1 Main st
                address2:
                  type: string
                  example: Suite 10
                city:
                  type: string
                  example: Buffalo
                state:
                  type: string
                  example: NY
                zip:
                  type: string
                  example: '14220'
                homePhone:
                  type: string
                  example: '7165551234'
                workPhone:
                  type: string
                  example: '7165555678'
                cellPhone:
                  type: string
                  example: '7165550987'
                email:
                  type: string
                  example: test@test.com
                dob:
                  type: string
                  format: date
                  example: '1980-12-25'
      responses:
        '201':
          description: Inserts a client
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  clientNumber:
                    type: string
                    example: '0000000001'
                  message:
                    type: string
                    example: Client updated successfully
        '400':
          description: Could not update client
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/updatebillinginfo:
    post:
      tags:
        - Client
      operationId: postUpdateBillingInfo
      summary: Update billing info
      description: >
        Update billing info for a client

        - **membershipId** identifiies the membership the billing account is
        associated with

        - **type** must be one of the following values
          - ***CARD***  Credit card type, must include **lastFour**, **expMonth**, **expYear**. and 
          **tokenId**. **vaultToken** is recommened when using the Cayan processor but is not reqruired.

          - ***CHECKING*** Checking account type, must include **accountNo** and **routingNo**
        - **deductType** must be a value returned by **getEFTDeductTypes**
        endpoint
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                membershipId:
                  type: string
                  example: '0000000999'
                type:
                  type: string
                  example: CARD
                deductType:
                  type: string
                  example: Visa
                lastFour:
                  type: string
                  example: '0026'
                expMonth:
                  type: string
                  example: '08'
                expYear:
                  type: string
                  example: '2029'
                tokenId:
                  type: string
                  example: '123456789'
                vaultToken:
                  type: string
                  example: 1234abcd6789
                accountNo:
                  type: string
                  example: '1234567890'
                routingNo:
                  type: string
                  example: '123456789'
                nameOnAccount:
                  type: string
                  example: John Doe
                billingAddress:
                  type: string
                  example: 1 Main St
                billingCity:
                  type: string
                  example: Buffalo
                billingState:
                  type: string
                  example: NY
                billingZip:
                  type: string
                  example: '14220'
      responses:
        '200':
          description: Update billing info for a client
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
        '400':
          description: Validation error
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/insertcomment:
    post:
      tags:
        - Client
      operationId: postInsertComment
      summary: Insert client comment
      description: Inserts a client comment
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                employeeNumber:
                  type: string
                  example: '0000000001'
                comment:
                  type: string
                  example: This is a test comment
                showAtPos:
                  type: integer
                  example: 0
      responses:
        '201':
          description: Inserts a client comment
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/insertMembership:
    post:
      tags:
        - Client
      operationId: postInsertmembership
      summary: Insert client membership
      description: |
        Inserts a client membership  
        * **storecode** is the storecode of the store location 
        * **empNo** is the employee number of the employee inserting the client 
        * **drawDay** must be value returned by the **getEFTDrawDays** endpoint
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                membershipNumber:
                  type: string
                  example: '0000000001'
                storecode:
                  type: string
                  example: '0000000001'
                employeeNumber:
                  type: string
                  example: '0000000001'
                drawDay:
                  type: string
                  example: '01'
      responses:
        '201':
          description: Inserts a client membership
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
                  membershipId:
                    type: string
                    example: ''
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/insertgiftcert:
    post:
      tags:
        - Client
      operationId: postInsertGiftCert
      summary: Insert gift certificate
      description: Insert Gift Certificate
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                amount:
                  type: number
                  format: ':float'
                  example: 10
                giftCertNo:
                  type: string
                  example: '123456789'
                receiptNo:
                  type: string
                  example: '0000009878'
                employeeNumber:
                  type: string
                  example: '0000000001'
                storecode:
                  type: string
                  example: '0000000001'
                note:
                  type: string
                  example: This is a test note
      responses:
        '201':
          description: Insert Gift Certificate
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/freezemembership:
    post:
      tags:
        - Client
      operationId: freezeMembership
      summary: Freeze membership
      description: Freezes an active eft membership
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                membershipId:
                  type: string
                  example: '0000000001'
                nextDuesAmount:
                  type: number
                  format: float
                  example: 5
                freezeDate:
                  type: string
                  format: date
                  example: '2025-08-01'
                freezeMonths:
                  type: integer
                  example: 12
      responses:
        '200':
          description: Membership updated
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
                  membershipId:
                    type: string
                    example: '0000000001'
        '400':
          description: Active membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/unfreezemembership:
    post:
      tags:
        - Client
      operationId: unfreezeMembership
      summary: Unfreeze membership
      description: Unfreezes a frozen eft membership
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                membershipId:
                  type: string
                  example: '0000000001'
                incAffiliatedPackage:
                  type: integer
                  example: 1
      responses:
        '200':
          description: Membership updated
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
                  membershipId:
                    type: string
                    example: '0000000001'
        '400':
          description: Frozen membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/activatemembership:
    post:
      tags:
        - Client
      operationId: activateMembership
      summary: Activate membership
      description: Activate a membership that is on hold
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                membershipId:
                  type: string
                  example: '0000000001'
      responses:
        '200':
          description: Membership activated successfully
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
                  membershipId:
                    type: string
                    example: '0000000001'
        '400':
          description: Could not activate membership - on-hold membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/upgrademembership:
    post:
      tags:
        - Client
      operationId: upgradeMembership
      summary: Upgrade membership
      description: Upgrades an active eft membership
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                membershipId:
                  type: string
                  example: '0000000001'
                upgradeMembershipNumber:
                  type: string
                  example: '0000000001'
                nextDuesAmount:
                  type: number
                  format: float
                  example: 5
      responses:
        '200':
          description: Membership upgrades
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Membership upgrade successfully
                  membershipId:
                    type: string
                    example: '0000000001'
        '400':
          description: Active membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/downgrademembership:
    post:
      tags:
        - Client
      operationId: downgradeMembership
      summary: Downgrade membership
      description: Downgrades an active eft membership
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                membershipId:
                  type: string
                  example: '0000000001'
                downgradeMembershipNumber:
                  type: string
                  example: '0000000001'
                nextDuesAmount:
                  type: number
                  format: float
                  example: 5
      responses:
        '200':
          description: Membership downgrades
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Membership downgraded successfully
                  membershipId:
                    type: string
                    example: '0000000001'
        '400':
          description: Active membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/postaccountledgerpayment:
    post:
      tags:
        - Client
      operationId: postAccountLedgerPayment
      summary: Post account ledger payment
      description: Post account ledger payment
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                membershipId:
                  type: string
                  example: '0000000001'
                amount:
                  type: number
                  format: float
                  example: 9.99
                description:
                  type: string
                  example: Payment posted from API
                employeeNumber:
                  type: string
                  example: '0000000001'
                storecode:
                  type: string
                  example: '0000000001'
                isEFt:
                  type: number
                  example: 1
      responses:
        '200':
          description: Account ledger payment posted
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Account ledger payment posted successfully
                  balance:
                    type: number
                    format: float
                    example: -9.99
        '400':
          description: Could post ledger payment
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/insertpoints:
    post:
      tags:
        - Client
      operationId: insertPoints
      summary: Insert points
      description: Insert points
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                expDate:
                  type: string
                  format: date
                  example: '2025-12-31'
                employeeNumber:
                  type: string
                  example: '0000000001'
                storecode:
                  type: string
                  example: '0000000001'
                quantity:
                  type: integer
                  example: 10
                description:
                  type: string
                  example: Insert from API
      responses:
        '200':
          description: Points inserted successfully
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Points inserted successfully
                  balance:
                    type: number
                    format: float
                    example: -9.99
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/updateclientcommpref:
    post:
      tags:
        - Client
      operationId: updateClientCommPref
      summary: Update client communication preferences
      description: Update client communication preferences
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                doNotSolicit:
                  type: integer
                  example: 0
                email:
                  type: integer
                  example: 1
                cellText:
                  type: integer
                  example: 1
                cellVoice:
                  type: integer
                  example: 1
                homeVoice:
                  type: integer
                  example: 1
                workVoice:
                  type: integer
                  example: 1
                mail:
                  type: integer
                  example: 1
      responses:
        '201':
          description: Updated communication preferences successfully
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/insertpayment:
    post:
      tags:
        - Client
      operationId: insertPayment
      summary: Insert payment
      description: |
        Inserts a payment
        * Transaction must be saved first
        * Receipt number is returned when inserting transaction
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                paymentNumber:
                  type: string
                  example: '0000000001'
                promoNumber:
                  type: string
                  example: ''
                storecode:
                  type: string
                  example: '0000000001'
                receiptNumber:
                  type: string
                  example: '0000000001'
                employeeNumber:
                  type: string
                  example: '00000000001'
                amount:
                  type: number
                  format: float
                  example: 9.99
      responses:
        '201':
          description: Payment inserted
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Payment inserted successfully
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/inserttransaction:
    post:
      tags:
        - Client
      operationId: insertTransaction
      summary: Insert transaction
      description: |
        Inserts a transaction
        * Supported transaction types:
          * R = Retail Sale (productNumber is required)
          * P = Package Sale (packageId is required)
          * M = Membership Sale (membershipId is required)
          * 1 = Membership Fee (membershipId is required)
          * G = Gift Certificate Sale (giftCertNo is required)
        * Amount is total for line item before tax (pricePerUnit * units)
        * Receipt number is returned and can be used when inserting a payment
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                storecode:
                  type: string
                  example: '0000000001'
                employeeNumber:
                  type: string
                  example: '00000000001'
                lineItems:
                  type: array
                  items:
                    type: object
                    properties:
                      tranType:
                        type: string
                        example: R
                      description:
                        type: string
                        example: Lotion
                      pricePerUnit:
                        type: number
                        format: float
                        example: 19.99
                      units:
                        type: integer
                        example: 2
                      tax1:
                        type: number
                        format: float
                        example: 2
                      tax2:
                        type: number
                        format: float
                        example: 0
                      tax3:
                        type: number
                        format: float
                        example: 0
                      amount:
                        type: number
                        format: float
                        example: 39.98
                      membershipId:
                        type: string
                        example: ''
                      packageId:
                        type: string
                        example: ''
                      productNumber:
                        type: string
                        example: '0000000001'
                      giftCertNo:
                        type: string
                        example: ''
      responses:
        '201':
          description: Payment inserted
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Transaction inserted successfully
                  receiptNo:
                    type: string
                    example: '0000000020'
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/shareaffiliatedpackage:
    post:
      tags:
        - Client
      operationId: shareAffiliatedPackage
      summary: Shares an affiliated package
      description: Shares an affiliated package
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                membershipId:
                  type: string
                  example: '0000000001'
                sharedClientNumber:
                  type: string
                  example: '0000000002'
      responses:
        '201':
          description: Package shared successfully
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
        '400':
          description: Membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/unshareaffiliatedpackage:
    post:
      tags:
        - Client
      operationId: unshareAffiliatedPackage
      summary: Unshares an affiliated package
      description: Unshares an affiliated package
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                membershipId:
                  type: string
                  example: '0000000001'
                sharedClientNumber:
                  type: string
                  example: '0000000002'
      responses:
        '201':
          description: Package unshared successfully
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
        '400':
          description: Membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/cancelmembership:
    post:
      tags:
        - Client
      operationId: cancelMembership
      summary: Cancel membership
      description: Cancels an active eft membership
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                membershipId:
                  type: string
                  example: '0000000001'
      responses:
        '200':
          description: Membership cancelled
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Membership cancelled successfully
                  membershipId:
                    type: string
                    example: '0000000001'
                  lastDrawDate:
                    type: string
                    format: date
                    example: '2025-08-01'
                  expirationDate:
                    type: string
                    format: date
                    example: '2025-08-31'
        '400':
          description: Active membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/insertprofileanswers:
    post:
      tags:
        - Client
      operationId: insertProfileAnswers
      summary: Insert spa profile answers
      description: Inserts spa profile answers
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                answers:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 1
                      answer:
                        type: string
                        example: 'No'
                      choice_answer_1:
                        type: integer
                        example: 0
                      choice_answer_2:
                        type: integer
                        example: 0
                      choice_answer_3:
                        type: integer
                        example: 0
                      choice_answer_4:
                        type: integer
                        example: 0
                      choice_answer_5:
                        type: integer
                        example: 0
      responses:
        '201':
          description: Profile answers inserted
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Profile answers inserted successfully
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/addreferral:
    post:
      tags:
        - Client
      operationId: addreferral
      summary: Add a referral
      description: Add a referral
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                email:
                  type: string
                  example: johndoe@testemail.com
                allowMultiple:
                  type: number
                  example: 1
      responses:
        '201':
          description: Referral added successfully
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
        '400':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/clients/generatewebdocument:
    post:
      tags:
        - Client
      operationId: generatewebdocument
      summary: Generate webdoc URL
      description: Generates a webdoc URL
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientNumber:
                  type: string
                  example: '0000000001'
                storecode:
                  type: string
                  example: '0000000001'
                docType:
                  type: string
                  example: Customer
                webDocId:
                  type: number
                  example: 1
                membershipId:
                  type: string
                  example: '0000000001'
      responses:
        '201':
          description: Webdoc generated
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: ''
                  url:
                    type: string
                    example: >-
                      http://127.0.0.1:5002/show_web_doc/eftdoc.html/0/18/0000000070/?sig=67a4024c95b90d869f110ac2bbc6de34
        '400':
          description: Frozen membership not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/packages/packagelist:
    get:
      tags:
        - Configuration
      operationId: getPackageList
      summary: Get packages
      description: Returns a list of sellable packages
      responses:
        '200':
          description: Returns a list of sellable packages
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  packages:
                    type: array
                    items:
                      $ref: '#/components/schemas/packageInfo'
        '404':
          description: No packages found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/stores/storelist:
    get:
      tags:
        - Configuration
      operationId: getStoreList
      summary: Get store list
      description: Returns a list stores
      responses:
        '200':
          description: Returns a list stores
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  stores:
                    type: array
                    items:
                      $ref: '#/components/schemas/storeInfo'
        '404':
          description: No stores found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/memberships/eft:
    get:
      tags:
        - Configuration
      operationId: getEFTMembershipsList
      summary: Get eft memberships
      description: Returns a list of sellable EFT memberships
      responses:
        '200':
          description: Returns a list of sellable EFT memberships
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  memberships:
                    type: array
                    items:
                      $ref: '#/components/schemas/eftMembershipInfo'
        '404':
          description: Client not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/memberships/noneft:
    get:
      tags:
        - Configuration
      operationId: getNonEFTMembershipsList
      summary: Get non-eft memberships
      description: Returns a list of sellable NON-EFT memberships
      responses:
        '200':
          description: Returns a list of sellable NON-EFT memberships
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  memberships:
                    type: array
                    items:
                      $ref: '#/components/schemas/nonEftMembershipInfo'
        '404':
          description: No memberships found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/memberships/eftdeducttypes:
    get:
      tags:
        - Configuration
      operationId: getEFTDeductTypes
      summary: Get eft deduct types
      description: Returns a list EFT deduction types
      responses:
        '200':
          description: Returns a list stores
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  types:
                    type: array
                    items:
                      $ref: '#/components/schemas/eftDeductTypes'
        '404':
          description: No types found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/memberships/eftdrawdays:
    get:
      tags:
        - Configuration
      operationId: getEFTDrawDays
      summary: Get eft draw days
      description: Returns a list of EFT draw days
      responses:
        '200':
          description: Returns a list of eft draw days
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  types:
                    type: array
                    items:
                      $ref: '#/components/schemas/eftDrawDays'
        '404':
          description: No types found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/skintypes:
    get:
      tags:
        - Configuration
      operationId: skintypes
      summary: Get skin types
      description: Returns a list of configured skin types
      responses:
        '200':
          description: Returns a list of configured skin types
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  types:
                    type: array
                    items:
                      $ref: '#/components/schemas/skintypes'
        '500':
          description: Could Not Get Skin Types
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/webdocs:
    get:
      tags:
        - Configuration
      operationId: webdocs
      summary: Get web documents
      description: Returns a list web documents
      responses:
        '200':
          description: Returns a list web documents
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  webdocs:
                    type: array
                    items:
                      $ref: '#/components/schemas/webdoc'
        '500':
          description: Could Not Retrieve WebDoc Information
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/paymenttypes:
    get:
      tags:
        - Configuration
      operationId: getPaymentTypes
      summary: Get payment types
      description: Returns a list of payment types by given storecode
      parameters:
        - name: storecode
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000001'
      responses:
        '200':
          description: Get payment types
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  paymentTypes:
                    type: array
                    items:
                      $ref: '#/components/schemas/paymentType'
        '500':
          description: Could Not Get Payment Types
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/employees:
    get:
      tags:
        - Configuration
      operationId: getEmployees
      summary: Get employees
      description: Returns a list of active employees by given storecode
      parameters:
        - name: storecode
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000001'
      responses:
        '200':
          description: Get employees
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  employees:
                    type: array
                    items:
                      $ref: '#/components/schemas/employee'
        '500':
          description: Could Not employees
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/getproducts:
    get:
      tags:
        - Configuration
      operationId: getProducts
      summary: Get products
      description: Returns a list of products by given storecode
      parameters:
        - name: storecode
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000001'
      responses:
        '200':
          description: Get products
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  products:
                    type: array
                    items:
                      $ref: '#/components/schemas/products'
        '500':
          description: Could not get products
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/getslimcdcredentials:
    get:
      tags:
        - Configuration
      operationId: getSlimcdCredentials
      summary: Get slimcd credentials
      description: |
        Returns slimcd credentials by given storecode
        * type = POS - POS Credentials
        * type = EFT - EFT Credentials              
      parameters:
        - name: storecode
          in: query
          required: true
          schema:
            type: string
            minLength: 10
            maxLength: 10
          examples:
            example:
              value: '0000000001'
        - name: type
          in: query
          required: true
          schema:
            type: string
            minLength: 3
            maxLength: 3
          examples:
            example:
              value: POS
      responses:
        '200':
          description: Get slimcd credentials
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  products:
                    type: array
                    items:
                      $ref: '#/components/schemas/slimcdcredentials'
        '500':
          description: Could not get slimcd credentials
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/setup/profilequestions:
    get:
      tags:
        - Configuration
      operationId: profileQuestions
      summary: Get spa profile questions
      description: Returns a list of profile questions
      responses:
        '200':
          description: Returns a list of profile questions
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  questions:
                    type: array
                    items:
                      $ref: '#/components/schemas/profileQuestion'
        '500':
          description: Could Not Get Profile Questions
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/users/register:
    post:
      tags:
        - User
      operationId: postRegisterUser
      summary: Register user
      description: Registers a user and insert a client, returns client number and user
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  example: John
                lastName:
                  type: string
                  example: Doe
                middleInit:
                  type: string
                  example: D
                address1:
                  type: string
                  example: 1 Main St
                address2:
                  type: string
                  example: Suite 10
                city:
                  type: string
                  example: Buffalo
                state:
                  type: string
                  example: NY
                zip:
                  type: string
                  example: '14220'
                homePhone:
                  type: string
                  example: '7165551245'
                workPhone:
                  type: string
                  example: '7165555678'
                cellPhone:
                  type: string
                  example: '7165550987'
                email:
                  type: string
                  example: test@test.com
                dob:
                  type: string
                  format: date
                  example: '1980-12-25'
                storecode:
                  type: string
                  example: '0000000001'
                empNo:
                  type: string
                  example: '0000000001'
                gender:
                  type: string
                  example: male
                doNotSolicit:
                  type: integer
                  example: 0
                emailCommPref:
                  type: integer
                  example: 1
                cellVoiceCommPref:
                  type: integer
                  example: 1
                cellTextCommPref:
                  type: integer
                  example: 1
                homePhoneCommPref:
                  type: integer
                  example: 1
                mailCommPref:
                  type: integer
                  example: 1
                workPhoneCommPref:
                  type: integer
                  example: 1
                password:
                  type: string
                  example: Password123
      responses:
        '201':
          description: Register User
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  clientNumber:
                    type: string
                    example: '0000000001'
                  message:
                    type: string
                    example: ''
                  userId:
                    type: integer
                    example: 1
        '400':
          description: User already exists
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/users/resetpassword:
    post:
      tags:
        - User
      operationId: postResetPassword
      summary: Reset password
      description: Resets a user password
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  example: test@test.com
                password:
                  type: string
                  example: Password123
      responses:
        '200':
          description: Reset Password
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  clientNumber:
                    type: string
                    example: '0000000001'
                  message:
                    type: string
                    example: ''
                  userId:
                    type: integer
                    example: 1
        '404':
          description: Email address not found
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
  /slapi/users/login:
    post:
      tags:
        - User
      operationId: postLogin
      summary: Login
      description: Validates a login and logs that the user has logged in
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  example: test@test.com
                password:
                  type: string
                  example: Password123
      responses:
        '200':
          description: Login
          content:
            applicaiton/json:
              schema:
                type: object
                properties:
                  clientNumber:
                    type: string
                    example: '0000000001'
                  message:
                    type: string
                    example: ''
                  userId:
                    type: integer
                    example: 1
        '400':
          description: Invalid login credentials
          content:
            applicatoin/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: ''
                  message:
                    type: string
                    example: ''
      security:
        - BasicAuthCredentials: []
components:
  securitySchemes:
    BasicAuthCredentials:
      type: http
      scheme: basic
  schemas:
    clientDetails:
      type: object
      properties:
        firstName:
          type: string
          example: John
        lastName:
          type: string
          example: Doe
        middleInit:
          type: string
          example: D
        address1:
          type: string
          example: 10 Main St
        address2:
          type: string
          example: Suite 1
        city:
          type: string
          example: Buffalo
        state:
          type: string
          example: NY
        zip:
          type: string
          example: '14220'
        dob:
          type: string
          example: '1980-12-25T00:00:00.000Z'
        homePhone:
          type: string
          example: '7165551234'
        cellPhone:
          type: string
          example: '7165555678'
        workPhone:
          type: string
          example: '7165559876'
        workExt:
          type: string
          example: '123'
        gender:
          type: string
          example: male
        email:
          type: string
          example: jdoe@test.com
        lastVisit:
          type: string
          format: date-time
          example: '2025-06-26T13:39:49.849Z'
        homeStore:
          type: string
          example: Store 1
        skinType:
          type: string
          example: fair
        eyeColor:
          type: string
          example: blue
        howHear:
          type: string
          example: Marketing
    clientLedgerBalances:
      type: object
      properties:
        overallBalance:
          type: number
          format: float
          example: 4
        generalBalance:
          type: number
          format: float
          example: 2
        eftBalance:
          type: number
          format: float
          example: 2
    clientCommPrefs:
      type: object
      properties:
        allow:
          type: boolean
          example: true
        email:
          type: boolean
          example: true
        cellVoice:
          type: boolean
          example: true
        cellText:
          type: boolean
          example: true
        homePhone:
          type: boolean
          example: true
        workPhone:
          type: boolean
          example: true
        mail:
          type: boolean
          example: true
    clientMembershipInfo:
      type: object
      properties:
        description:
          type: string
          example: VIP Membership
        membershipId:
          type: string
          example: '0000000999'
        membershipNumber:
          type: string
          example: '0000000001'
        purchaseDate:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        expirationDate:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        nextDrawDate:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        nextDues:
          type: number
          format: float
          example: 19.99
        discount:
          type: number
          format: float
          example: 0
        status:
          type: string
          example: Active
        freezeDate:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        freezeEnd:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        storeLocation:
          type: string
          example: Store 1
        isEFT:
          type: boolean
          example: true
        duesTax:
          type: number
          format: float
          example: 0
        storeCode:
          type: string
          example: '0000000001'
        categoryNumber:
          type: string
          example: '0000000001'
        categoryDescription:
          type: string
          example: Memberships
        numberOfDraws:
          type: integer
          example: 8
    clientPackageInfo:
      type: object
      properties:
        description:
          type: string
          example: 10 Session Package
        packageId:
          type: string
          example: '0000000999'
        packageNumber:
          type: string
          example: '0000000001'
        purchaseDate:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        expirationDate:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        status:
          type: string
          example: Active
        units:
          type: number
          format: float
          example: 10
        unitType:
          type: string
          example: Session
        storeLocation:
          type: string
          example: Store 1
    clientPointsBalance:
      type: object
      properties:
        balance:
          type: number
          format: float
          example: 10
    clientBillingInfo:
      type: object
      properties:
        type:
          type: string
          example: CARD
        nameOnAccount:
          type: string
          example: John Doe
        deductType:
          type: string
          example: Visa
        maskedAcctNo:
          type: string
          example: xxxxxxxxxxxx0026
        expDate:
          type: string
          example: '062025'
        routingNo:
          type: string
          example: '123456789'
        creditor:
          type: string
          example: Test Bank
        billingAddress:
          type: string
          example: 1 Main St
        billingCity:
          type: string
          example: Buffalo
        billingState:
          type: string
          example: NY
        billingZip:
          type: string
          example: '14220'
        membershipId:
          type: string
          example: '0000000999'
        membershipDesc:
          type: string
          example: VIP Membership
    clientInfo:
      type: object
      properties:
        clientNumber:
          type: string
          example: '0000000001'
        firstName:
          type: string
          example: John
        lastName:
          type: string
          example: Doe
        address:
          type: string
          example: 1 Main St
        dob:
          type: string
          format: date-time
          example: '1980-06-26T00:00:00.000Z'
        lastTan:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
        homeStore:
          type: string
          example: Store 1
        accountCreated:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
    packageInfo:
      type: object
      properties:
        packageNumber:
          type: string
          example: '0000000001'
        description:
          type: string
          example: 10 Session Package
        salePrice:
          type: number
          format: float
          example: 19.99
        numUnits:
          type: number
          format: float
          example: 10
        unitType:
          type: string
          example: Session
        expirationDays:
          type: integer
          example: 100
        openEnded:
          type: boolean
          example: true
        expirationDate:
          type: string
          format: date-time
          example: '2025-06-26T00:00:00.000Z'
    storeInfo:
      type: object
      properties:
        storecode:
          type: string
          example: '0000000001'
        storeLocation:
          type: string
          example: Store 1
        salonName:
          type: string
          example: Store 1
        address1:
          type: string
          example: 1 Main St
        address2:
          type: string
          example: Suite 1
        city:
          type: string
          example: Buffalo
        state:
          type: string
          example: NY
        zip:
          type: string
          example: '14220'
        phone:
          type: string
          example: '7165551234'
        email:
          type: string
          example: test@test.com
        manager:
          type: string
          example: Jane Doe
        startTime:
          type: string
          example: 10:00 AM
        endTime:
          type: string
          example: 2:00 PM
    eftMembershipInfo:
      type: object
      properties:
        membershipNumber:
          type: string
          example: '0000000001'
        description:
          type: string
          example: VIP Membership
        eft:
          type: boolean
          example: true
        value:
          type: number
          format: float
          example: 0
        eftFreezeFee:
          type: number
          format: float
          example: 0
        eftMemberFee:
          type: number
          format: float
          example: 10
        includeFirstFee:
          type: number
          format: float
          example: 0
        monthlyDues:
          type: number
          format: float
          example: 19.99
        cancellationFee:
          type: number
          format: float
          example: 5
        unfreezeFee:
          type: number
          format: float
          example: 5
        expirationDays:
          type: integer
          example: 0
        openEnded:
          type: boolean
          example: true
        payFirstMonth:
          type: boolean
          example: true
        requiredDraws:
          type: integer
          example: 10
        freezeDues:
          type: number
          format: float
          example: 5
        freezeMonthsAllowed:
          type: integer
          example: 1
        monthlyFreezeDues:
          type: number
          format: float
          example: 5
        daysBeforeCancel:
          type: integer
          example: 30
    nonEftMembershipInfo:
      type: object
      properties:
        membershipNumber:
          type: string
          example: '0000000001'
        description:
          type: string
          example: 30 Day Membership
        eft:
          type: boolean
          example: false
        membershipFee:
          type: number
          format: float
          example: 29.99
        expirationDays:
          type: integer
          example: 30
        openEnded:
          type: boolean
          example: false
    eftDeductTypes:
      type: object
      properties:
        deductionType:
          type: string
          example: Visa
    eftDrawDays:
      type: object
      properties:
        drawday:
          type: string
          example: '01'
    skintypes:
      type: object
      properties:
        typeNumber:
          type: string
          example: '0000000001'
        description:
          type: string
          example: Medium
    paymentType:
      type: object
      properties:
        paymentNumber:
          type: string
          example: '0000000001'
        description:
          type: string
          example: Cash Payment
        class:
          type: string
          example: Cash
        storecode:
          type: string
          example: '0000000001'
    employee:
      type: object
      properties:
        employeeNumber:
          type: string
          example: '0000000001'
        firstName:
          type: string
          example: John
        lastName:
          type: string
          example: Doe
        status:
          type: string
          example: Active
    transactions:
      type: object
      properties:
        date:
          type: string
          format: date-time
          example: '2025-07-29T15:26:17.000Z'
        items:
          type: integer
          example: 1
        amount:
          type: number
          format: float
          example: 9.99
        tax:
          type: number
          format: float
          example: 0
        total:
          type: number
          format: float
          example: 0
        storeLocation:
          type: string
          example: Default Store
        employee:
          type: string
          example: John Doe
        receiptNo:
          type: string
          example: '0000000001'
        lineItems:
          type: array
          items:
            type: object
            properties:
              description:
                type: string
                example: Single Session Package
              units:
                type: integer
                example: 1
              roomNumber:
                type: integer
                example: 1
              tanTime:
                type: integer
                example: 12
              amount:
                type: number
                format: float
                example: 0
              taxAmount:
                type: number
                format: float
                example: 0
              taxAmount2:
                type: number
                format: float
                example: 0
              taxAmount3:
                type: number
                format: float
                example: 0
              tanTaxAmount:
                type: number
                format: float
                example: 0
              tranType:
                type: string
                example: T
              equipTypeDescription:
                type: string
                example: Level 1
              pricePerUnit:
                type: number
                format: float
                example: 0
        payments:
          type: array
          items:
            properties:
              description:
                type: string
                example: Cash Payment
              amount:
                type: number
                format: float
                example: 9.99
              changeGiven:
                type: number
                format: float
                example: 0
    products:
      type: object
      properties:
        productNumber:
          type: string
          example: '0000000001'
        productName:
          type: string
          example: Lotion
        upcCode:
          type: string
          example: ''
        taxable:
          type: boolean
          example: true
        useTax1:
          type: boolean
          example: true
        useTax2:
          type: boolean
          example: false
        useTax3:
          type: boolean
          example: false
        regularPrice:
          type: number
          format: float
          example: 9.99
    slimcdcredentials:
      type: object
      properties:
        domain:
          type: string
          example: trans.slimcd.com
        clientId:
          type: string
          example: '1234'
        siteId:
          type: string
          example: '12345678'
        priceId:
          type: string
          example: '12'
        password:
          type: string
          example: '123456'
        key:
          type: string
          example: abc-123-def-456
    affiliatedpackageclients:
      type: object
      properties:
        clientNumber:
          type: string
          example: '0000000001'
        firstName:
          type: string
          example: John
        lastName:
          type: string
          example: Doe
    profileQuestion:
      type: object
      properties:
        id:
          type: integer
          example: 1
        section:
          type: integer
          example: 1
        question:
          type: string
          example: Are you preparing for a special occasion?
        order:
          type: integer
          example: 1
        choise1:
          type: string
          example: ''
        choice2:
          type: string
          example: ''
        choice3:
          type: string
          example: ''
        choice4:
          type: string
          example: ''
        choice5:
          type: string
          example: ''
        responseRequired:
          type: boolean
          example: true
    pointsTransactions:
      type: object
      properties:
        id:
          type: integer
          example: 1
        tranType:
          type: string
          format: date-time
          example: '2025-07-29T15:26:17.000Z'
        description:
          type: string
          example: Manual Adjustment - Adjustments
        quantity:
          type: number
          format: float
          example: 100
        type:
          type: string
          example: Earned
        expDate:
          type: string
          format: date
          example: '2025-01-01'
        employeeNumber:
          type: string
          example: '0000000001'
        storecode:
          type: string
          example: '0000000001'
    webdoc:
      type: object
      properties:
        id:
          type: integer
          example: 1
        name:
          type: string
          example: Customer Waiver
        type:
          type: string
          example: Customer
        isNewCustomerDocument:
          type: boolean
          example: true
