Appearance
STEP 1 — ACCOUNT CREATION
1. POST /onboarding/account/create
Create a new creator account with email and password.
Request
http
POST /onboarding/account/create
Content-Type: application/jsonRequest Body
json
{
"email": "admin@example.com",
"password": "securepassword123",
"creator_name": "Comedy King",
"handle": "comedyking",
"agreed_to_terms": true
}Request Body Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| string | Yes | Valid email address | |
| password | string | Yes | Min 8 characters |
| creator_name | string | Yes | Display name |
| handle | string | Yes | Unique URL handle e.g. @comedyking |
| agreed_to_terms | boolean | Yes | Must be true |
Response 201 Created
json
{
"status": "success",
"message": "Account created successfully",
"data": {
"creator_id": "creator_001",
"email": "admin@example.com",
"creator_name": "Comedy King",
"handle": "comedyking",
"handle_url": "https://drop.tv/@comedyking",
"auth_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_expires_at": "2024-12-01T00:00:00Z",
"onboarding": {
"current_step": 2,
"total_steps": 6,
"percent_complete": 0
}
}
}Errors
json
{
"status": "error",
"code": 409,
"message": "An account with this email already exists"
}json
{
"status": "error",
"code": 409,
"message": "This handle is already taken. Please choose another."
}json
{
"status": "error",
"code": 422,
"errors": [
{ "field": "password", "message": "Password must be at least 8 characters" },
{ "field": "handle", "message": "Handle can only contain letters, numbers, and underscores" },
{ "field": "agreed_to_terms", "message": "You must agree to the Terms of Service" }
]
}2. POST /onboarding/account/google
Create or authenticate account via Google OAuth.
Request Body
json
{
"google_token": "ya29.a0AfB_byC...",
"handle": "comedyking",
"agreed_to_terms": true
}Request Body Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| google_token | string | Yes | Google OAuth access token |
| handle | string | No | Handle (required if new account) |
| agreed_to_terms | boolean | Yes | Must be true |
Response 200 OK (Existing user)
json
{
"status": "success",
"message": "Logged in with Google",
"data": {
"creator_id": "creator_001",
"email": "admin@gmail.com",
"creator_name": "Comedy King",
"handle": "comedyking",
"is_new_account": false,
"auth_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_expires_at": "2024-12-01T00:00:00Z"
}
}Response 201 Created (New user)
json
{
"status": "success",
"message": "Account created with Google",
"data": {
"creator_id": "creator_099",
"email": "admin@gmail.com",
"creator_name": "Comedy King",
"handle": "comedyking",
"handle_url": "https://drop.tv/@comedyking",
"is_new_account": true,
"auth_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_expires_at": "2024-12-01T00:00:00Z",
"onboarding": {
"current_step": 2,
"total_steps": 6,
"percent_complete": 0
}
}
}Errors
json
{
"status": "error",
"code": 401,
"message": "Invalid or expired Google token"
}3. GET /onboarding/account/check-handle
Check if a handle is available in real time.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| handle | string | Yes | Handle to check |
Request
http
GET /onboarding/account/check-handle?handle=comedykingResponse 200 OK (Available)
json
{
"status": "success",
"data": {
"handle": "comedyking",
"available": true,
"handle_url": "https://drop.tv/@comedyking",
"suggestions": []
}
}Response 200 OK (Unavailable)
json
{
"status": "success",
"data": {
"handle": "comedyking",
"available": false,
"suggestions": ["comedyking1", "comedyking_official", "thecomedyking"]
}
}4. GET /onboarding/account/check-email
Check if an email is already registered.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Yes | Email to check |
Request
http
GET /onboarding/account/check-email?email=admin@example.comResponse 200 OK (Available)
json
{
"status": "success",
"data": {
"email": "admin@example.com",
"available": true
}
}Response 200 OK (Already registered)
json
{
"status": "success",
"data": {
"email": "admin@example.com",
"available": false,
"message": "This email is already registered. Please log in."
}
}