Create Account

POST /v1/user/accounts

Creates a new account. You become its owner, with full permissions, and are added as a member automatically. This is how you set up a separate workspace — for example, a distinct account per client or environment — alongside the default account created when you registered.

The new account starts on the free plan, whatever plan the account you're calling from is on; it moves to a paid plan only when you subscribe from it. It does not become active on its own; your token stays scoped to whatever account it was already on. Set switch to true to receive a token scoped to the new account in the same response (see below), or call /user/switch-account afterwards.

You can own up to 10 accounts besides your default account (the one created when you registered).

The optional entity_type and company fields set the account's company profile, the same profile the dashboard's Create account wizard records. They are validated before the account is created. The profile isn't part of this response: read it with GET /v1/account/profile in the new account.

Request body

name string Req
Display name for the new account. Trimmed of surrounding whitespace; must be non-empty and at most 255 characters.
switch bool
Optional. When true, the response also includes a new token scoped to the newly created account, so you can start working in it immediately. Defaults to false.
entity_type string
Optional. individual (a personal account) or company. Required when you send company or onboarding. For individual, any company details are dropped.
company object
Optional. The company's details, for entity_type company: legal_name (required, at most 255 characters, the same characters as name), website (an http:// or https:// address, at most 255 characters), size (1, 2-10, 11-50, 51-200, 201-1000 or 1000+), industry (software, saas, ecommerce, media, finance, healthcare, education, government, agency, gaming, telecom, manufacturing, nonprofit or other) and country (a two-letter ISO 3166-1 code). Only legal_name is required.
onboarding bool
Optional. When true, the account starts the dashboard's setup wizard at its Plan step: until the setup is finished, the dashboard opens the wizard on every page of the account. Finish it in the dashboard, or with PUT /v1/account/onboarding {"completed": true} in the account. The API itself never blocks the account. Defaults to false.

Response (201 Created)

account object
The created account — same shape as /account (uuid, name, owner_user_uuid, plan, is_default, timestamps).
token string
Only present when switch was true. A new token scoped to the new account; use it for subsequent requests to operate inside it.
active_account_uuid string (uuid)
Only present when switch was true. The uuid of the new account, matching the scope of the returned token.

Deprecated: until the sunset this response also carries the legacy integer id and *_id fields. Don't use them; read uuid and the *_uuid fields.

Errors

400 Bad Request
Body could not be parsed or contained unknown fields, or a field failed validation: name empty, longer than 255 characters or with characters outside letters, numbers, spaces and . ' - _ ( ) ! ? : , + &, or an entity_type / company value outside the rules above. A field error answers {"error": "…", "field": "…"}, where field names it (name, entity_type, company.legal_name, company.website, company.size, company.industry or company.country). No account is created.
401 Unauthorized
Missing or invalid auth.
403 Forbidden
You already own the maximum number of accounts, or you own an account that is suspended (code account_suspended: "You can't create a new account while an account you own is suspended.").
Request
curl -X POST "https://api.ngris.com/v1/user/accounts" \ -H "X-API-KEY: <your_api_key>" \ -H "Content-Type: application/json" \ -d '{"name": "Client Project", "switch": false}'
Request — company account
curl -X POST "https://api.ngris.com/v1/user/accounts" \ -H "X-API-KEY: <your_api_key>" \ -H "Content-Type: application/json" \ -d '{"name": "Acme", "entity_type": "company", "company": {"legal_name": "Acme Ltd", "website": "https://acme.example", "size": "11-50", "industry": "saas", "country": "GB"}}'
Python
from ngris import Ngris client = Ngris(api_key="<your_api_key>") result = client._post_raw("/user/accounts", {"name": "Client Project"}) print(result["account"]["uuid"])
Response — 201 Created
{ "account": { "uuid": "019a6e8e-a31d-751c-96b0-440186b7f3a8", "name": "Client Project", "owner_user_uuid": "019a52c2-ca1e-78ba-ab5c-50362cc29134", "plan": "free", "is_default": false, "is_owner": false, "created_at": "2026-05-30T12:00:00Z", "updated_at": "2026-05-30T12:00:00Z" } }
Was this helpful?
On this page
Create Account
Was this helpful?