Initiate signup (create/resume activation + email OTP)
Overview
Step 1 of self-service signup. Creates a new SignupActivation for the email (or resumes an in-progress one), optionally tagging it with a plan and referral code. It then emails a one-time verification code (OTP, category rs_signup, 5-minute expiry). Rejects an email that already has a registered User.
Prerequisites
- No authentication — this endpoint is public.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/signup
Authentication
-
No bearer token required.
-
Public — no bearer token (
auth: noauth). Route lives in the public login/signup throttle group.
Rate limit
- 10 requests/min per IP. Public route.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Required | Valid email (rfc,dns); must be unused — a taken email fails validation (422). |
term_and_condition | integer | Required | Must be 1 (terms accepted). |
plan_id | integer | Optional | Must be an existing plan; stored on the activation. |
company_industry_id | integer | Optional | Must be an existing industry. |
referral_code | string | Optional | Referral / partner code; ties the signup to a partner or account company. |
query_string | string | Optional | Raw marketing query string (e.g. UTM params) kept for attribution. |
{
"email": "[email protected]",
"term_and_condition": 1,
"plan_id": 3,
"referral_code": "REF123",
"query_string": "utm_source=google"
}How it works
- Synchronous.
200returns the activation snapshot (data.account, plusdata.business/data.feature_options/data.meta_dataonce later steps run, anddata.useronce aUserexists). 422when the email is already registered (The email has already been taken.).422when the activation is alreadyActive(You have already registered.).422on validation failure.
Response
200 OK · 200
200{
"data": {
"message": null,
"account": {
"id": 101,
"email": "[email protected]",
"email_verified_at": null,
"first_name": null,
"last_name": null,
"mobile": null,
"plan_id": 3,
"plan_group_name": null,
"referral_code": "REF123",
"referral_company_id": 5,
"referral_company_name": "Acme Partner",
"step": "account_activation",
"who_will_pay": "brand",
"hear_about_us": null,
"hear_others": null,
"hide_password": null,
"show_skip_google_connect_button": 0
},
"business": null,
"feature_options": null,
"meta_data": null
}
}422 Email already registered · 422
422{
"message": "The email has already been taken.",
"errors": {
"email": ["The email has already been taken."]
}
}422 Validation error · 422
422{
"message": "The email field is required.",
"errors": {
"email": [
"The email field is required."
],
"term_and_condition": [
"The selected term and condition is invalid."
]
}
}Errors
| Status | Meaning |
|---|---|
422 | Validation error, already registered, or already active |
500 | Unexpected server error |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/signup" \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"email": "[email protected]", "term_and_condition": 1, "plan_id": 3, "referral_code": "REF123", "query_string": "utm_source=google"}'Notes
- Sends an OTP email.
Updated 11 days ago
Did this page help you?
