---
title: "Sign up"
method: POST
path: "/account/sign_up"
tags: ["Account"]
---

# Sign up

`POST /account/sign_up`

Create a new user account from a verified IdP intent. Optionally provisions a tenant + division (e.g. for SaaS onboarding) or accepts an invitation token. If the IdP-provided email matches an existing tenant's claimed email domain and join_policy allows, the new user joins automatically and a session is returned. Otherwise the account is created in `awaiting_verification` state.

## Request body

- SignUp
  - `feedback` string, nullable
  - `id` string, required
  - `invitation` string, nullable
  - `name` string, required
  - `source` 'google' | 'github' | 'microsoft', required
  - `tenant` string
  - `title` string, required
  - `token` string, required

## Response `201`

Account created. If `verified` and tenant resolved, includes session + ld-tenant / ld-division response headers

- NewAccount
  - `division_id` integer
  - `division_name` string
  - `linked_accounts` IdentityProvider[], nullable
  - `session` SessionInfo
    - `csrf_token` string, required
    - `email` string, required
    - `expiry` string, date-time, required
  - `tenant_id` integer
  - `tenant_name` string
  - `verified` boolean, required
  - `workspace` 'joined' | 'join_requested' | 'awaiting_invitation'

## Other responses

- `400` — Invalid input or already-existing user
- `401` — Invalid or expired intent

---

[API](https://skmtc.net/laserdata/apis/laserdata-cloud-core-api.md) · [All operations](https://skmtc.net/laserdata/apis/laserdata-cloud-core-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/laserdata/laserdata-cloud-core-api/revisions/db81a447bba9/schema)
