openapi: 3.2.0 info: title: Cosmose AI Deal Hunter Registration Registration Admin Controller 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: [] tags: - name: registration-admin-controller paths: /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/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' components: schemas: Pageable: type: object properties: page: minimum: 0 type: integer format: int32 size: minimum: 1 type: integer format: int32 sort: type: array items: type: string SortObject: type: object properties: direction: type: string nullHandling: type: string ascending: type: boolean property: type: string ignoreCase: type: boolean 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 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 ApproveUsersDto: type: object properties: telephoneNumbers: uniqueItems: true 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 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 securitySchemes: bearerAuth: type: http name: bearerAuth scheme: bearer bearerFormat: JWT x-evidence: fetched: '2026-08-11' url: https://api.sg.cosmose.co/deal-hunter-registration-api/v3/api-docs http_status: 200 content_type: application/json