> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gosentrix.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Sign Up

> Create a new user account and tenant

Create a new user account and automatically provision a tenant.

<RequestExample>
  ```bash theme={null}
  curl -X POST https://api.gosentrix.io/api/v1/auth/signup \
    -H "Content-Type: application/json" \
    -d '{
      "email": "user@example.com",
      "password": "SecurePassword123!",
      "tenant_name": "My Company"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "expires_in": 900,
    "user": {
      "id": "user-123",
      "email": "user@example.com",
      "email_verified": false
    },
    "tenant": {
      "id": "tenant-456",
      "name": "My Company",
      "slug": "my-company",
      "status": "pending_setup"
    }
  }
  ```
</ResponseExample>

## Request Body

<ParamField path="email" type="string" required>
  User email address (must be unique)
</ParamField>

<ParamField path="password" type="string" required>
  Password (min 12 characters, must include uppercase, lowercase, number, and special character)
</ParamField>

<ParamField path="tenant_name" type="string" required>
  Name for the new tenant organization
</ParamField>

## Response

<ResponseField name="access_token" type="string">
  JWT access token (valid for 15 minutes)
</ResponseField>

<ResponseField name="refresh_token" type="string">
  JWT refresh token (valid for 7 days)
</ResponseField>

<ResponseField name="expires_in" type="integer">
  Access token expiration time in seconds
</ResponseField>

<ResponseField name="user" type="object">
  User object with id, email, and verification status
</ResponseField>

<ResponseField name="tenant" type="object">
  Tenant object with id, name, slug, and status
</ResponseField>

## Errors

<ResponseField name="400" type="object">
  Invalid request (duplicate email, weak password, etc.)
</ResponseField>

<ResponseField name="429" type="object">
  Rate limit exceeded
</ResponseField>

## Notes

* Email verification is required before full access
* Tenant status will be `pending_setup` until onboarding is completed
* See [Verify Email](/authentication-api/verify-email) for next steps
