openapi: 3.2.0 info: title: Cosmose AI Deal Hunter Registration Onboarding 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: onboarding-controller paths: /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/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' components: schemas: 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 RegisterDto: type: object properties: phone_number: pattern: ^\+?[\d \-]{8,17}$ type: string 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 RegisterConfirmRequest: required: - otp_code type: object properties: phone_number: type: string user_id: type: string otp_code: pattern: ^\d{4}$ type: string TokenInfo: type: object properties: access_token: type: string refresh_token: type: string type: type: string expires_in: type: integer format: int32 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