---
title: "Verify Otp"
method: POST
path: "/auth/verify-otp"
tags: ["auth"]
---

# Verify Otp

`POST /auth/verify-otp`

Verify OTP and complete authentication.

Auth-only: does NOT create users. User creation happens at /auth/register.
Determines is_new_user via read-only Users service lookup (best-effort).

## Request body

- VerifyOtpRequest — Verify OTP code.
  - `email` string, email, nullable
  - `phone_number` string, nullable
  - `otp_code` string, required

## Response `200`

Successful Response

- VerifyOtpResponse — Response after OTP verification.
  - `success` boolean, required
  - `user_id` string, uuid, nullable
  - `access_token` string, nullable
  - `refresh_token` string, nullable
  - `is_new_user` boolean
  - `account_state` 'pending_email' | 'complete', nullable
  - `next_step` 'email' | 'app', nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/helloaxel/apis/client-api-gateway.md) · [All operations](https://skmtc.dev/helloaxel/apis/client-api-gateway/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/helloaxel/client-api-gateway/revisions/7ffb16b1c40d/schema)
