---
title: "Create a user account"
method: POST
path: "/signup"
tags: ["Authentication"]
---

# Create a user account

`POST /signup`

## Request

- Base URL: `https://api.indexone.io`
- URL: `https://api.indexone.io/signup`
- Auth: API key in header `x-api-key`

Registers a new Cognito user and creates the backing user record. If the email address has a pending team invite the user joins that team; otherwise a new team is created and the user becomes its admin. A confirmation code is emailed — call `POST /signup/confirm` next.

Optional profile fields (`firstname`, `lastname`, `company`, `use_case`, `industry`, `position`, `country`, `company_type`) are stored on the user record and forwarded to the CRM.

The same route doubles as the marketing contact form: posting `{"hubspot_only": true, ...}` creates only a CRM contact and no user.

## Request body

- object
  - `username` string, email, required: Email address. Lower-cased server-side.
  - `password` string, required: Must satisfy the Cognito password policy.
  - `firstname` string
  - `lastname` string
  - `company` string
  - `hubspot_only` boolean: Create only a CRM contact, no user account.

## Response `200`

Account created. The body is the new user's Cognito `sub`, JSON-encoded as a bare string.

- string

## Other responses

- `400`: `User already exists, please login or reset password instead.` when the email is taken, otherwise `Unknown error.` — Cognito policy violations (weak password, invalid email) are collapsed into that generic message.
- `403`: Missing or invalid `x-api-key`.
- `429`: API key usage-plan rate limit exceeded.

---

[API](https://skmtc.dev/indexone/apis/index-one-rest-api.md) · [All operations](https://skmtc.dev/indexone/apis/index-one-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/indexone/apis/index-one-rest-api/revisions/df5a92216a9c?raw)
