# Create your Tarsana account {#top}

**Change** · `POST /v1/signups` · MCP tool `signup`

Starts a signup for a new tenant, with a tenant ID you choose. Sign up with Google or LinkedIn, and you get an address to visit to confirm who you are (`identity_check.authorization_url`); sign up with your email address, and we send you a link (`sent_to`). If the tenant ID is taken or not allowed, you are told now, before any link is sent. Nothing is created until you finish with `complete-signup`, and you do not need to sign in.

You do not need to sign in.

## Parameters

| Name | In | Required | Description |
|---|---|---|---|
| `identity_provider` | body | yes | How you prove who you are: with Google, with LinkedIn, or with your email address. One of `google`, `linkedin`, `email` |
| `tenant` | body | yes | The tenant ID you want: lower-case letters, digits, dots, dashes and underscores, up to 64 characters. You cannot change it later, and it should not be your email address |
| `email` | body | no | Your email address, if you sign up by email. It becomes your login name |

## Returns

A JSON object with these keys: `signup`, `identity_provider`, `tenant`, `identity_check`, `sent_to`, `delivery`, `expires_at`, `guarantee`, `caller_authenticated`.

## Example request

```sh
curl -X POST https://api.tarsana.io/v1/signups \
  -H "Content-Type: application/json" \
  --data '{"identity_provider": "email", "tenant": "acme", "email": "you@example.com"}'
```

## Example response

```json
{
  "signup": "c7e7d896876644cf",
  "identity_provider": "email",
  "tenant": "acme",
  "identity_check": {
    "authorization_url": null
  },
  "sent_to": "you@example.com",
  "delivery": {
    "transport": "smtp",
    "state": "accepted"
  },
  "expires_at": "2026-10-05T02:30:39Z",
  "guarantee": "namespaces are separated, callers are not authenticated",
  "caller_authenticated": false
}
```

## Errors

| Code | HTTP | What it means |
|---|---|---|
| [`invalid_parameter`](/api/errors#invalid_parameter) | 400 | A value in your request does not have the expected format, for example a submission ID that is not a spec hash. Check the value against the field's description and try again. |
| [`tenant_refused`](/api/errors#tenant_refused) | 400 | This tenant ID is not allowed, or is not in the expected format. Use a different ID made of lower-case letters, digits, dots, dashes and underscores. |
| [`tenant_taken`](/api/errors#tenant_taken) | 409 | This tenant ID is already taken. Choose a different ID. |
| [`signup_refused`](/api/errors#signup_refused) | 400 | Your signup could not be completed: the link was already used or has expired, your identity was not confirmed, your email domain is not accepted, or this identity already has a login. The response says which; start a new signup, or sign in with your existing login. |
| [`signup_not_configured`](/api/errors#signup_not_configured) | 503 | This way of signing up is not available on this Tarsana deployment. Choose another way to sign up, or contact Tarsana support. |
| [`signup_rate_limited`](/api/errors#signup_rate_limited) | 429 | Too many signups were started from your address, or a link was sent to this email address too recently. Wait for the time given in the response, then try again. |
| [`signup_delivery_failed`](/api/errors#signup_delivery_failed) | 502 | Your signup link could not be sent, so nothing was created. Start the signup again, or sign up with Google or LinkedIn instead. |
| [`rate_limited`](/api/errors#rate_limited) | 429 | You sent too many requests in a short time. Wait for the number of seconds in `retry_after_seconds`, then try again. |
| [`surface_fault`](/api/errors#surface_fault) | 500 | Something went wrong on our side. Try again later, and contact Tarsana support if it keeps happening. |
