Cosmose AI Deal Hunter Registration API

Registration, onboarding, invitation and account-lifecycle service behind Cosmose AI's KaiKai / Deal Hunter consumer app, plus the merchant, school, newsletter and contact lead-capture forms on kaikai.ai and cosmose.ai. 24 operations across registration, waiting list, invitation issuance and usage, JWT token and refresh-token issuance, admin approval of waiting-list users, and a GDPR-style forget-me delete/restore pair. The OpenAPI is served unauthenticated from the Singapore gateway; the operations themselves apply a global bearerAuth (JWT) requirement.

OpenAPI Specification

cosmose-ai-deal-hunter-registration-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Cosmose AI Deal Hunter Registration API
  description: Public registration, onboarding, invitation and account-lifecycle API behind Cosmose AI's KaiKai / Deal Hunter
    consumer app and its merchant and school lead-capture forms. Harvested verbatim from the provider's live springdoc endpoint
    at https://api.sg.cosmose.co/deal-hunter-registration-api/v3/api-docs; the only change in this refined copy is the servers[]
    block, which upstream advertises the internal cluster service name http://deal-hunter-registration-api/deal-hunter-registration-api
    instead of the reachable public gateway. See overlays/cosmose-ai-deal-hunter-registration-api-overlay.yaml for the exact
    delta.
  version: v0
  x-harvested-from: https://api.sg.cosmose.co/deal-hunter-registration-api/v3/api-docs
  x-upstream-info:
    title: OpenAPI definition
    version: v0
servers:
- url: https://api.sg.cosmose.co/deal-hunter-registration-api
  description: Singapore production gateway (observed reachable, HTTP 200 on /v3/api-docs)
security:
- bearerAuth: []
paths:
  /v1/user-account/restore:
    put:
      tags:
      - forget-me-controller
      operationId: restoreUserAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RestoreRequest'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/registration-admin/approval:
    put:
      tags:
      - registration-admin-controller
      operationId: approveUsers
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApproveUsersDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/invitations:
    get:
      tags:
      - invitation-controller
      operationId: getInvitationUsage
      parameters:
      - name: Installation-Id
        in: header
        required: true
        schema:
          type: string
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/InvitationUsageDto'
    put:
      tags:
      - invitation-controller
      operationId: getInvitationTimestamps
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvitationUsageRequestDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/InvitationsByInstallationId'
    post:
      tags:
      - invitation-controller
      operationId: createInvitation
      parameters:
      - name: Installation-Id
        in: header
        required: true
        schema:
          type: string
      - name: Number-Prefix
        in: header
        required: false
        schema:
          type: string
          default: '+65'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvitationRequestDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/InvitationDto'
  /v2/token:
    post:
      tags:
      - token-controller
      operationId: generateTokens
      parameters:
      - name: Installation-Id
        in: header
        required: false
        schema:
          type: string
          default: ''
      - name: refresh_token
        in: query
        required: false
        schema:
          type: string
          default: ''
      - name: scope
        in: query
        required: false
        schema:
          type: string
          default: kaikai
      - name: grant_type
        in: query
        required: true
        schema:
          type: string
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TokenInfo'
  /v2/register:
    post:
      tags:
      - onboarding-controller
      operationId: register
      parameters:
      - name: Operating-System
        in: header
        required: false
        schema:
          type: string
      - name: Installation-Id
        in: header
        required: true
        schema:
          type: string
          format: uuid
      - name: App-Version
        in: header
        required: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v2/register-reviewer:
    post:
      tags:
      - onboarding-controller
      operationId: registerReviewer
      parameters:
      - name: Operating-System
        in: header
        required: false
        schema:
          type: string
      - name: Installation-Id
        in: header
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterReviewerRequest'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/RegisterConfirmResponse'
  /v2/kkn-register:
    post:
      tags:
      - kkn-onboarding-controller
      operationId: register_1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v2/kkn-confirm-registration:
    post:
      tags:
      - kkn-onboarding-controller
      operationId: confirmRegistration
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterConfirmRequest'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/RegisterConfirmResponse'
  /v2/crucible-token:
    post:
      tags:
      - crucible-token-controller
      operationId: generateTokens_1
      parameters:
      - name: Api-Key
        in: header
        required: true
        schema:
          type: string
      - name: user_id
        in: query
        required: false
        schema:
          type: string
          default: ''
      - name: refresh_token
        in: query
        required: false
        schema:
          type: string
      - name: grant_type
        in: query
        required: true
        schema:
          type: string
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TokenInfo'
  /v2/confirm-registration:
    post:
      tags:
      - onboarding-controller
      operationId: confirmRegistration_1
      parameters:
      - name: Installation-Id
        in: header
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterConfirmRequest'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/RegisterConfirmResponse'
  /v1/schools:
    post:
      tags:
      - school-controller
      operationId: saveSchool
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSchoolDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/schools/newsletter:
    post:
      tags:
      - school-controller
      operationId: subscribeToNewsletter
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscribeDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
      deprecated: true
  /v1/registration:
    post:
      tags:
      - registration-controller
      operationId: registerNewUserWithoutCode
      parameters:
      - name: Operating-System
        in: header
        required: false
        schema:
          type: string
      requestBody:
        content:
          application/vnd.cosmose.registration-without-code+json:
            schema:
              $ref: '#/components/schemas/RegisterNewUserNoCodeDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/UserRegisteredDto'
  /v1/registration/wait-list:
    post:
      tags:
      - registration-controller
      operationId: registerNewUserWithoutCodeOnTheWaitingList
      parameters:
      - name: Operating-System
        in: header
        required: false
        schema:
          type: string
      requestBody:
        content:
          application/vnd.cosmose.registration-without-code+json:
            schema:
              $ref: '#/components/schemas/RegisterNewUserNoCodeDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/UserRegisteredDto'
      deprecated: true
  /v1/registration/unsubscribe:
    post:
      tags:
      - registration-controller
      operationId: unsubscribe
      parameters:
      - name: unsubscribeDto
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/UnsubscribeDto'
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/newsletter:
    post:
      tags:
      - newsletter-controller
      operationId: subscribeToNewsletter_1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscribeDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/merchants:
    post:
      tags:
      - merchant-controller
      operationId: saveMerchantFormData
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMerchantRequestDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/learn-to-code/register:
    post:
      tags:
      - learn-to-code-controller
      operationId: register_2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserDto'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/contact-forms:
    post:
      tags:
      - contact-form-controller
      operationId: save
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactForm'
        required: true
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
  /v1/registration/confirmed:
    get:
      tags:
      - registration-controller
      operationId: getNumberOfConfirmedRegistrations
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ConfirmedUsersDto'
  /v1/registration-admin/waiting-list-users:
    get:
      tags:
      - registration-admin-controller
      operationId: getWaitingListUsers
      parameters:
      - name: phone_numbers
        in: query
        required: false
        schema:
          uniqueItems: true
          type: array
          items:
            type: string
      - name: pageable
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/Pageable'
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PageUserDto'
  /v1/user-account:
    delete:
      tags:
      - forget-me-controller
      operationId: deleteUserAccount
      parameters:
      - name: reason
        in: query
        required: false
        schema:
          type: string
      responses:
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '403':
          description: Forbidden
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ErrorDto'
        '200':
          description: OK
components:
  schemas:
    ErrorDto:
      type: object
      properties:
        errorCode:
          type: string
          enum:
          - BAD_REQUEST
          - CODE_EXCEEDED
          - CODE_NOT_FOUND
          - USER_ALREADY_REGISTERED
          - USER_NOT_FOUND
          - FORBIDDEN
          - MAX_RESETS_EXCEEDED
          - INVITATION_DAILY_LIMIT_EXCEEDED
          - EMAIL_ALREADY_TAKEN
        message:
          type: string
    RestoreRequest:
      required:
      - phoneNumber
      type: object
      properties:
        phoneNumber:
          pattern: ^\+?[\d \-]{8,17}$
          type: string
    ApproveUsersDto:
      type: object
      properties:
        telephoneNumbers:
          uniqueItems: true
          type: array
          items:
            type: string
    InvitationUsageRequestDto:
      type: object
      properties:
        installationIds:
          maxItems: 1000
          minItems: 1
          uniqueItems: true
          type: array
          items:
            type: string
    InvitationTimestampDto:
      type: object
      properties:
        createdTime:
          type: string
          format: date-time
    InvitationsByInstallationId:
      type: object
      properties:
        installationId:
          type: string
        invitations:
          type: array
          items:
            $ref: '#/components/schemas/InvitationTimestampDto'
    TokenInfo:
      type: object
      properties:
        access_token:
          type: string
        refresh_token:
          type: string
        type:
          type: string
        expires_in:
          type: integer
          format: int32
    RegisterDto:
      type: object
      properties:
        phone_number:
          pattern: ^\+?[\d \-]{8,17}$
          type: string
    RegisterReviewerRequest:
      required:
      - phone_number
      - registration_code
      type: object
      properties:
        phone_number:
          pattern: ^\+?[\d \-]{8,17}$
          type: string
        registration_code:
          type: string
    RegisterConfirmResponse:
      type: object
      properties:
        status:
          type: string
        error:
          type: string
        tokens:
          $ref: '#/components/schemas/TokenInfo'
        registration_redirect_url:
          type: string
    RegisterConfirmRequest:
      required:
      - otp_code
      type: object
      properties:
        phone_number:
          type: string
        user_id:
          type: string
        otp_code:
          pattern: ^\d{4}$
          type: string
    CreateSchoolDto:
      required:
      - city
      - coordinatorName
      - email
      - name
      - phoneNumber
      - studentsNumber
      - voivodeship
      type: object
      properties:
        name:
          type: string
        coordinatorName:
          type: string
        city:
          type: string
        voivodeship:
          type: string
        email:
          type: string
        phoneNumber:
          pattern: ^\+?[\d \-]{8,17}$
          type: string
        studentsNumber:
          type: integer
          format: int32
    SubscribeDto:
      required:
      - email
      type: object
      properties:
        email:
          type: string
        source:
          type: string
        language:
          type: string
    RegisterNewUserNoCodeDto:
      required:
      - mobileNumber
      type: object
      properties:
        mobileNumber:
          pattern: ^\+?[\d \-]{8,17}$
          type: string
        sendBestDeals:
          type: boolean
        source:
          type: string
        utmSource:
          type: string
        registrationItemId:
          type: string
        url:
          type: string
    UserRegisteredDto:
      type: object
      properties:
        registeredUserStatus:
          type: string
          enum:
          - APPROVED
          - WAITING_LIST
        newUser:
          type: boolean
    UnsubscribeDto:
      type: object
      properties:
        from:
          type: string
        body:
          type: string
    CreateMerchantRequestDto:
      required:
      - businessEmail
      - businessType
      - firstName
      - lastName
      - phoneNumber
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        phoneNumber:
          pattern: ^\+?[\d \-]{8,17}$
          type: string
        businessEmail:
          type: string
        website:
          type: string
        businessType:
          type: string
        comment:
          type: string
        sourceUrl:
          type: string
    UserDto:
      required:
      - age
      - city
      - country
      - email
      - firstName
      - language
      - lastName
      - password
      - promoCode
      type: object
      properties:
        firstName:
          type: string
        guardianName:
          type: string
        age:
          type: integer
          format: int32
        language:
          pattern: ^(en|es|pl|it|oo)$
          type: string
        country:
          type: string
        city:
          type: string
        email:
          type: string
        promoCode:
          type: string
        password:
          type: string
        source:
          type: string
        lastName:
          type: string
        preferredLanguage:
          type: string
    InvitationRequestDto:
      type: object
      properties:
        mobileNumber:
          pattern: ^\+?[\d \-]{8,17}$
          type: string
    InvitationDto:
      type: object
      properties:
        localizedMessage:
          type: string
    ContactForm:
      required:
      - countryCode
      - email
      - firstName
      - lastName
      - mobileNumber
      type: object
      properties:
        id:
          type: string
          format: uuid
        firstName:
          type: string
        lastName:
          type: string
        position:
          type: string
        companyName:
          type: string
        email:
          type: string
        countryCode:
          type: string
        mobileNumber:
          type: string
        message:
          type: string
        createdTime:
          type: string
          format: date-time
    ConfirmedUsersDto:
      type: object
      properties:
        value:
          type: integer
          format: int64
    Pageable:
      type: object
      properties:
        page:
          minimum: 0
          type: integer
          format: int32
        size:
          minimum: 1
          type: integer
          format: int32
        sort:
          type: array
          items:
            type: string
    PageUserDto:
      type: object
      properties:
        totalPages:
          type: integer
          format: int32
        totalElements:
          type: integer
          format: int64
        pageable:
          $ref: '#/components/schemas/PageableObject'
        first:
          type: boolean
        last:
          type: boolean
        size:
          type: integer
          format: int32
        content:
          type: array
          items:
            $ref: '#/components/schemas/UserDto'
        number:
          type: integer
          format: int32
        sort:
          type: array
          items:
            $ref: '#/components/schemas/SortObject'
        numberOfElements:
          type: integer
          format: int32
        empty:
          type: boolean
    PageableObject:
      type: object
      properties:
        pageNumber:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        offset:
          type: integer
          format: int64
        sort:
          type: array
          items:
            $ref: '#/components/schemas/SortObject'
        paged:
          type: boolean
        unpaged:
          type: boolean
    SortObject:
      type: object
      properties:
        direction:
          type: string
        nullHandling:
          type: string
        ascending:
          type: boolean
        property:
          type: string
        ignoreCase:
          type: boolean
    InvitationUsageDto:
      type: object
      properties:
        installationId:
          type: string
        availableInvitat

# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/cosmose-ai/refs/heads/main/openapi/cosmose-ai-deal-hunter-registration-api-openapi.yml