---
title: "Verify OTP and authenticate or register"
method: POST
path: "/auth/verify-otp"
tags: ["Auth"]
---

# Verify OTP and authenticate or register

`POST /auth/verify-otp`

## Request

- Base URL: `https://api.shopseen.com/v1`
- URL: `https://api.shopseen.com/v1/auth/verify-otp`
- Auth: none declared

## Request body

- object
  - `email` string, required
  - `code` string, required
  - `refresh_protocol` 2: Opt into rotating persistent sessions
  - `invite_code` string: Optional for new registrations
  - `display_name` string: Required for new registrations

## Response `200`

Authenticated successfully

- object
  - `access_token` string
  - `refresh_token` string
  - `user` User
    - `id` string, uuid
    - `display_name` string
    - `avatar_url` string, nullable
    - `bio` string, nullable
    - `email` string
    - `push_token` string, nullable
    - `subscription_status` 'free' | 'active' | 'expired' | 'cancelled'
    - `trial_ends_at` string, date-time, nullable
    - `referral_bonus_granted_at` string, date-time, nullable
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `deleted_at` string, date-time, nullable

## Other responses

- `400`: Invalid, expired, or malformed code
- `429`: OTP attempt or request rate limit exceeded

---

[API](https://skmtc.dev/shopseen/apis/a-side-api.md) - [All operations](https://skmtc.dev/shopseen/apis/a-side-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shopseen/apis/a-side-api/revisions/f37f989e90da?raw)
