---
title: "Create a new B2B account"
method: POST
path: "/v1/b2b/signup"
tags: ["Self-serve"]
---

# Create a new B2B account

`POST /v1/b2b/signup`

## Request

- Base URL: `https://api.nashboard.ai`
- URL: `https://api.nashboard.ai/v1/b2b/signup`
- Auth: none required

Unauthenticated. Creates a tenant and returns a live + test key pair. The keys are returned ONCE in this response — store them immediately. A welcome email is also sent but is best-effort. Idempotent on retry after a mid-flow failure.

## Headers

- `X-Nashboard-Version` '2026-06-13'

## Request body

- SignupRequest
  - `company_name` string, required
  - `contact_email` string, email, required

## Response `201`

Account created. Keys returned once.

- SignupResponse
  - `tenant_id` string, uuid, required
  - `live_key` string, required: Live API key (nsh_live_…). Returned ONCE — store immediately.
  - `test_key` string, required: Sandbox test key (nsh_test_…). Returned ONCE — store immediately.
  - `scopes` string[], required: Scopes granted to both keys (free-tier defaults).

## Other responses

- `400`: Bad request (invalid JSON, invalid ID, invalid cursor, etc.)
- `401`: Missing, malformed, or invalid API key.
- `403`: Insufficient scope or scope escalation attempt.
- `404`: Resource not found.
- `409`: Conflict (e.g. email already taken).
- `413`: Request body too large.
- `415`: Unsupported media type.
- `422`: Request body failed schema validation.
- `429`: Rate limited, quota exceeded, or DP budget exhausted.
- `500`: Internal server error.
- `502`: Upstream dependency error (e.g. receipt image storage unavailable — code storage_failure).

---

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