---
title: "Sign up a new company"
method: POST
path: "/v3/public/auth/signup"
tags: ["Public API"]
---

# Sign up a new company

`POST /v3/public/auth/signup`

## Request

- Base URL: `https://api.rhinoartisan.com`
- URL: `https://api.rhinoartisan.com/v3/public/auth/signup`
- Auth: API key in header `apikey`
- TypeScript: <https://skmtc.dev/rhinoartisan/apis/rhinoartisan-api/docs/v3/public/auth/signup/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates the account of a new company and emails it a link (and a code) to confirm the address and sign in; its organization is created on the first sign-in and waits for approval. Requires a Cloudflare Turnstile token solved for the `signup` action. An address that already has an invitation or an account gets its usual access link instead; the response is the same in every case. Personal email domains (gmail, hotmail, yahoo…) are refused where the deployment requires a company address. Rate limited per email (3 / 15 min) and per IP (10 / hour).

## Request body

- object
  - `email` string, email, required
  - `full_name` string, required
  - `organization` string, required
  - `lang` string: LCID of the language the person signs up in (1033, 1034…)
  - `turnstile_token` string, required: The cf-turnstile-response of the widget

## Response `200`

Request accepted

## Other responses

- `400`: INVALID_EMAIL, NAME_REQUIRED, ORGANIZATION_REQUIRED or COMPANY_EMAIL_REQUIRED
- `403`: CAPTCHA_FAILED
- `429`: Too many requests

## Changes

- **2026-10-02** `82c79770c36b`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rhinoartisan/apis/rhinoartisan-api/changes/v3/public/auth/signup/post.md)

---

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