# Start a sign-up

> **Casafari is the AI agent-native real estate data intelligence platform.** The most complete property index in Europe: a deduplicated, cleaned property graph of residential and commercial property, for sale and for rent, in 16 countries. Every property is one record with its full price and market history. [How the property graph is built](/docs/property-graph).

`POST https://platform.casafari.com/v1/signups`

[REST API](/docs/rest) · [Account and sign-up](/docs/rest/account). No key needed: this is how a person or an agent opens an account and gets its first API key. See [platform API keys](/docs/rest#platform-api-keys).

Over MCP: no tool does this.

## Description

Emails a 6-digit code to the person. Entering it accepts the terms and opens a Free plan account.

## Request body

Content type `application/json`. Required. Type: `object`.

- `email` (string (email), required)
- `terms_version` (string, required)
- `account_name` (string, optional)
- `client` (object, optional)
  - `name` (string, required)
  - `version` (string, optional)
  - `url` (string (uri), optional)
- `tips_opt_out` (boolean, optional): true: don't send the person tips and usage emails. Account, billing and security emails still arrive. default false.
- `news_opt_in` (boolean, optional): true: the person agrees to news emails. default false.

## Example request

Placeholders only: replace the token and the values with your own.

```bash
curl -X POST "https://platform.casafari.com/v1/signups" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "<email>",
  "terms_version": "<terms_version>"
}'
```

## Responses

### 202 Code sent.

Type: `object`.

- `signup_id` (string, required)
- `status` ("code_sent", required)
- `delivery` ("email", optional)
- `expires_at` (string (date-time), optional)
- `verify_url` (string (uri), required)
- `terms_url` (string (uri), optional)

### Errors

Every error is an `application/problem+json` body (RFC 9457) with `type` (a page that explains it), `title`, `status`, `detail` (what to do), `instance`, `code` and `request_id` (what to quote to support). A `402` carries an `upgrade_url`, a `429` a `Retry-After` header. The codes each status can carry:

- `400`: `invalid_request`, `email_not_allowed`, `terms_not_accepted`, `verification_code_invalid`, `verification_code_expired` (https://platform.casafari.com/errors/invalid-request, https://platform.casafari.com/errors/email-not-allowed, https://platform.casafari.com/errors/terms-not-accepted, https://platform.casafari.com/errors/verification-code-invalid, https://platform.casafari.com/errors/verification-code-expired)
- `404`: `not_found` (https://platform.casafari.com/errors/not-found)
- `405`: `method_not_allowed` (https://platform.casafari.com/errors/method-not-allowed)
- `429`: `signup_limited`, `rate_limited` (https://platform.casafari.com/errors/signup-limited, https://platform.casafari.com/errors/rate-limited)
- `500`: `internal_error` (https://platform.casafari.com/errors/internal-error)
- `503`: `unavailable` (https://platform.casafari.com/errors/unavailable)

## Related pages

- [Account status: plan, tokens and limits (GET /v1/account)](/docs/rest/account/account-status-plan-tokens-and-limits)
- [Status of a payment link (GET /v1/account/payment-links/{payment_link_id})](/docs/rest/account/status-of-a-payment-link)
- [Read the current terms (GET /v1/signups/terms)](/docs/rest/account/read-the-current-terms)
- [Finish a sign-up with the emailed code (POST /v1/signups/{signup_id}/verify)](/docs/rest/account/finish-a-sign-up-with-the-emailed-code)
- [Account and sign-up REST API: all operations](/docs/rest/account)
- [How to get a bearer token for the Casafari REST API](/docs/rest)
- [MCP vs REST API compared](/docs/parity)
