Users
Auth

Create a new consumer account (passwordless)

Passwordless signup. Accepts email (required) + optional name / phone plus the signup-form fields (education_level_id, future_education_id, gig_work_interest) and a REQUIRED terms_of_service consent. No password is collected: the account is created without one, the caller is logged in immediately (session cookie set on the response), and a magic-link "set your password" token is issued. Email delivery of that link is pending SES; until then the token is logged and — outside production only — returned as set_password_token so the flow is testable. Email + phone resolve to shared identity-artifact rows; phone is E.164-normalized. Terms consent is recorded (append-only) against the active terms_of_service document with the request IP hash + user agent. An optional trusted_form_url (TrustedForm consent certificate captured on the signup page) is stored as a consent_certificate row and linked to that consent event.

post/api/v1/users/auth/register

Request

  • Base URL: https://api.juju.com
  • URL: https://api.juju.com/api/v1/users/auth/register
  • Auth: none declared

Request body

emailstring email required
first_namestring nullable
last_namestring nullable
phonestring nullable

Any format; server normalizes to E.164.

education_level_idinteger nullable

FK to juju.education_level (options via GET /lookups).

future_education_idinteger nullable

FK to juju.future_education (options via GET /lookups).

gig_work_interestboolean nullable
trusted_form_urlstring uri nullable

TrustedForm consent-certificate URL captured on the signup page. Stored against the user (juju.consent_certificate) as proof of TCPA consent and linked to the terms consent event.

terms_consentedboolean required

Must be true — the user accepted the Terms of Service.

Example request

{
  "email": "jed@example.com"
}

Response

Account created and logged in. Session cookie set on the response.

metaobject required

Pagination and context metadata. Always present, empty object ({}) when no metadata applies to the response.

errorsstring[] required

Empty array on success. On failure, human-readable error strings suitable for surfacing to end users.

Example response

{
  "data": {
    "user_id": 1234,
    "email": "jed@example.com",
    "logged_in": true
  },
  "errors": []
}

Changes

No recorded changes to this operation across all 1 revision of this API.