---
title: "Register a New Organization"
method: POST
path: "/v2/register-temp/register"
tags: ["register-temp"]
---

# Register a New Organization

`POST /v2/register-temp/register`

## Request

- Base URL: `https://api.stuut.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stuut.ai/v2/register-temp/register`
- Auth: HTTP bearer

Completes registration from a verified registration token and logs the new user in:
returns the access/id tokens and sets the refresh token as an httponly cookie. Two
modes, by the request's organization field: a string (an existing org id) accepts that
pending invite and joins the org; an object founds a new org with the user as its first
admin. For email/password this also creates the auth0 identity. Temporary endpoint
pending the proper registration flow.

## Request body

- union
  - PasswordRegister: Complete an email/password registration (token from /verify-email).
    - `registration_token` string, required: Token from /verify-email or /exchange-code.
    - `given_name` string, required: The user's given (first) name.
    - `family_name` string, required: The user's family (last) name.
    - `organization` union, required: Either the organization to create, or — to join an existing org instead — its id (the organization_id from the token response's joinable_organization).
      - string
      - OrganizationDetails: Organization fields the user submits at registration. The name is required (the form prefills it from the suggestion); the display name defaults off the verified email's domain when omitted. (Logo is server-fetched, not user-set, so it lives on the token response's suggestion rather than here.)
        - `display_name` string, nullable: Human-facing organization name. Defaults to the email domain.
        - `name` string, required: Unique tenant identifier. 3-50 chars, alphanumeric plus dashes/underscores, starting and ending alphanumeric. The server dedupes it if already taken.
    - `password` string, required: The password supplied when registration started.
  - OAuthRegister: Complete an oauth registration (token from /exchange-code). The auth0 user already exists, so no password is needed.
    - `registration_token` string, required: Token from /verify-email or /exchange-code.
    - `given_name` string, required: The user's given (first) name.
    - `family_name` string, required: The user's family (last) name.
    - `organization` union, required: Either the organization to create, or — to join an existing org instead — its id (the organization_id from the token response's joinable_organization).
      - string
      - OrganizationDetails: Organization fields the user submits at registration. The name is required (the form prefills it from the suggestion); the display name defaults off the verified email's domain when omitted. (Logo is server-fetched, not user-set, so it lives on the token response's suggestion rather than here.)
        - `display_name` string, nullable: Human-facing organization name. Defaults to the email domain.
        - `name` string, required: Unique tenant identifier. 3-50 chars, alphanumeric plus dashes/underscores, starting and ending alphanumeric. The server dedupes it if already taken.

## Response `201`

Successful Response

- RegisterResponse: The organization and admin user created by registration, plus the new user's session tokens. The refresh token is also set as an httponly cookie.
  - `organization` Organization, required: The current organization's profile and branding.
    - `id` string, required: Unique organization identifier.
    - `name` string, required: Unique tenant slug (immutable).
    - `display_name` string, nullable, required: Human-facing organization name.
    - `logo_url` string, nullable, required: URL of the organization's logo.
    - `timezone` 'Africa/Abidjan' | 'Africa/Cairo' | 'Africa/Johannesburg' | 'Africa/Lagos' | 'Africa/Maputo' | 'Africa/Nairobi' | 'Africa/Tripoli' | 'America/Adak' | 'America/Anchorage' | 'America/Argentina/Buenos_Aires' | 'America/Argentina/Catamarca' | 'America/Argentina/Cordoba' | 'America/Argentina/Jujuy' | 'America/Argentina/Mendoza' | 'America/Chicago' | 'America/Denver' | 'America/Detroit' | 'America/Edmonton' | 'America/Halifax' | 'America/Havana' | 'America/Indiana/Indianapolis' | 'America/Indiana/Knox' | 'America/Iqaluit' | 'America/Jamaica' | 'America/Kentucky/Louisville' | 'America/Los_Angeles' | 'America/Manaus' | 'America/Mazatlan' | 'America/Mexico_City' | 'America/New_York' | 'America/Noronha' | 'America/Nuuk' | 'America/Panama' | 'America/Phoenix' | 'America/Puerto_Rico' | 'America/Regina' | 'America/Rio_Branco' | 'America/Santiago' | 'America/Sao_Paulo' | 'America/St_Johns' | 'America/Tijuana' | 'America/Toronto' | 'America/Vancouver' | 'America/Whitehorse' | 'America/Winnipeg' | 'Asia/Ashgabat' | 'Asia/Bangkok' | 'Asia/Dhaka' | 'Asia/Dubai' | 'Asia/Ho_Chi_Minh' | 'Asia/Hong_Kong' | 'Asia/Jerusalem' | 'Asia/Kathmandu' | 'Asia/Kolkata' | 'Asia/Kuching' | 'Asia/Macau' | 'Asia/Makassar' | 'Asia/Nicosia' | 'Asia/Qatar' | 'Asia/Riyadh' | 'Asia/Seoul' | 'Asia/Shanghai' | 'Asia/Singapore' | 'Asia/Taipei' | 'Asia/Tehran' | 'Asia/Thimphu' | 'Asia/Tokyo' | 'Asia/Ulaanbaatar' | 'Asia/Urumqi' | 'Asia/Yangon' | 'Atlantic/Faroe' | 'Australia/Adelaide' | 'Australia/Brisbane' | 'Australia/Broken_Hill' | 'Australia/Darwin' | 'Australia/Hobart' | 'Australia/Lord_Howe' | 'Australia/Melbourne' | 'Australia/Perth' | 'Australia/Sydney' | 'Etc/GMT' | 'Etc/UTC' | 'Europe/Athens' | 'Europe/Belgrade' | 'Europe/Berlin' | 'Europe/Brussels' | 'Europe/Chisinau' | 'Europe/Dublin' | 'Europe/Helsinki' | 'Europe/Istanbul' | 'Europe/Kyiv' | 'Europe/Lisbon' | 'Europe/London' | 'Europe/Moscow' | 'Europe/Paris' | 'Europe/Prague' | 'Europe/Rome' | 'Europe/Warsaw' | 'Europe/Zurich' | 'Indian/Maldives' | 'Pacific/Auckland' | 'Pacific/Chatham' | 'Pacific/Easter' | 'Pacific/Guadalcanal' | 'Pacific/Guam' | 'Pacific/Honolulu' | 'Pacific/Kanton' | 'Pacific/Kwajalein' | 'Pacific/Pago_Pago' | 'Pacific/Port_Moresby' | 'Pacific/Tarawa', required: IANA canonical timezone.
    - `currency` 'ADP' | 'AED' | 'AFA' | 'AFN' | 'ALK' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'AOK' | 'AON' | 'AOR' | 'ARA' | 'ARL' | 'ARM' | 'ARP' | 'ARS' | 'ATS' | 'AUD' | 'AWG' | 'AZM' | 'AZN' | 'BAD' | 'BAM' | 'BAN' | 'BBD' | 'BDT' | 'BEC' | 'BEF' | 'BEL' | 'BGL' | 'BGM' | 'BGN' | 'BGO' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BOL' | 'BOP' | 'BOV' | 'BRB' | 'BRC' | 'BRE' | 'BRL' | 'BRN' | 'BRR' | 'BRZ' | 'BSD' | 'BTN' | 'BUK' | 'BWP' | 'BYB' | 'BYN' | 'BYR' | 'BZD' | 'CAD' | 'CDF' | 'CHE' | 'CHF' | 'CHW' | 'CLE' | 'CLF' | 'CLP' | 'CNH' | 'CNX' | 'CNY' | 'COP' | 'COU' | 'CRC' | 'CSD' | 'CSK' | 'CUC' | 'CUP' | 'CVE' | 'CYP' | 'CZK' | 'DDM' | 'DEM' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'ECS' | 'ECV' | 'EEK' | 'EGP' | 'ERN' | 'ESA' | 'ESB' | 'ESP' | 'ETB' | 'EUR' | 'FIM' | 'FJD' | 'FKP' | 'FRF' | 'GBP' | 'GEK' | 'GEL' | 'GHC' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GNS' | 'GQE' | 'GRD' | 'GTQ' | 'GWE' | 'GWP' | 'GYD' | 'HKD' | 'HNL' | 'HRD' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'IEP' | 'ILP' | 'ILR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISJ' | 'ISK' | 'ITL' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRH' | 'KRO' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LTL' | 'LTT' | 'LUC' | 'LUF' | 'LUL' | 'LVL' | 'LVR' | 'LYD' | 'MAD' | 'MAF' | 'MCF' | 'MDC' | 'MDL' | 'MGA' | 'MGF' | 'MKD' | 'MKN' | 'MLF' | 'MMK' | 'MNT' | 'MOP' | 'MRO' | 'MRU' | 'MTL' | 'MTP' | 'MUR' | 'MVP' | 'MVR' | 'MWK' | 'MXN' | 'MXP' | 'MXV' | 'MYR' | 'MZE' | 'MZM' | 'MZN' | 'NAD' | 'NGN' | 'NIC' | 'NIO' | 'NLG' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEI' | 'PEN' | 'PES' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PLZ' | 'PTE' | 'PYG' | 'QAR' | 'RHD' | 'ROL' | 'RON' | 'RSD' | 'RUB' | 'RUR' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDD' | 'SDG' | 'SDP' | 'SEK' | 'SGD' | 'SHP' | 'SIT' | 'SKK' | 'SLE' | 'SLL' | 'SOS' | 'SRD' | 'SRG' | 'SSP' | 'STD' | 'STN' | 'SUR' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJR' | 'TJS' | 'TMM' | 'TMT' | 'TND' | 'TOP' | 'TPE' | 'TRL' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UAK' | 'UGS' | 'UGX' | 'USD' | 'USN' | 'USS' | 'UYI' | 'UYP' | 'UYU' | 'UYW' | 'UZS' | 'VEB' | 'VED' | 'VEF' | 'VES' | 'VND' | 'VNN' | 'VUV' | 'WST' | 'XAF' | 'XAG' | 'XAU' | 'XBA' | 'XBB' | 'XBC' | 'XBD' | 'XCD' | 'XCG' | 'XDR' | 'XEU' | 'XFO' | 'XFU' | 'XOF' | 'XPD' | 'XPF' | 'XPT' | 'XRE' | 'XSU' | 'XTS' | 'XUA' | 'XXX' | 'YDD' | 'YER' | 'YUD' | 'YUM' | 'YUN' | 'YUR' | 'ZAL' | 'ZAR' | 'ZMK' | 'ZMW' | 'ZRN' | 'ZRZ' | 'ZWD' | 'ZWL' | 'ZWR', required: The 3 character [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code.
    - `customer_support_email` string, required
    - `customer_support_number` string, phone, nullable, required: A phone number in [E.164](https://en.wikipedia.org/wiki/E.164) format
    - `needs_business_profile` boolean, required: Whether the organization still needs to submit its business profile (ARR/ERP/CRM). Always false for orgs outside self-serve onboarding.
  - `user` RegisteredUser, required: The admin user created for the new organization.
    - `id` string, required: Unique user identifier.
    - `email` string, required: The user's email address.
    - `given_name` string, required: The user's given (first) name.
    - `family_name` string, required: The user's family (last) name.
    - `role` 'admin' | 'member' | 'manager', required
  - `access_token` string, required: Bearer access token for the new session.
  - `expires_at` string, required: ISO-8601 timestamp when the access token expires.
  - `id_token` string, nullable, required: OIDC id token, if issued.

## Other responses

- `422`: Validation Error

---

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