---
title: "Sign up an end customer for a product"
method: POST
path: "/v1/customer-identity/signup"
tags: ["Customer sign-in"]
---

# Sign up an end customer for a product

`POST /v1/customer-identity/signup`

## Request

- Base URL: `https://hyperscale0.ai`
- URL: `https://hyperscale0.ai/v1/customer-identity/signup`
- Auth: none required

Creates an end customer's own login for one company: the credential, the underlying legal entity, the customer, and a pending enrollment in the named Product, then signs them in. The entity starts pending and the enrollment starts pending, exactly as customer.create leaves them. Verification is the customer's own act, never a side effect of signing up. No account is created and no money can move until the entity clears and the enrollment is activated. The email is the login handle and is unique per company, so the same person using two of a company's products is one customer with one password. The session token is a one-time secret surfaced only in this response, never in receipts or replays.

## Headers

- `X-Hyperscale-Environment` 'sandbox' | 'live'
- `Idempotency-Key` string, required

## Request body

- object
  - `productId` string, required: The Product being signed up for. The company is resolved from it, so a customer never names or chooses the company they belong to.
  - `email` string, email, required
  - `password` string, required
  - `displayName` string, required
  - `country` string: ISO 3166-1 alpha-2 country code
  - `termsAccepted` true, required: Affirmative click-wrap acceptance of the company's terms. Signup refuses without it.

## Response `201`

Success

- CustomerSignupOutput
  - `tenantId` string, required: Organization tenant ID
  - `productId` string, required: Hyperscale product ID
  - `environment` 'sandbox' | 'live', required
  - `customerId` string, required: Tenant-local customer ID
  - `entityId` string, required: Hyperscale entity ID
  - `email` string, email, required
  - `customerAccessId` string, required: Hyperscale customer access ID
  - `customerAccessStatus` 'pending' | 'active' | 'suspended' | 'closed', required: The Product enrollment this session was minted against. Signing in is allowed while enrollment is pending so the customer can complete verification; the Product's own actions stay refused until it is active.
  - `customerSessionId` string, required: Hyperscale end-customer session ID
  - `sessionToken` string: One-time session token surfaced only in the first response; receipts and replays omit it
  - `sessionExpiresAt` string, date-time, required
  - `displayName` string, required
  - `customerStatus` 'pending' | 'active' | 'disabled' | 'erased', required
  - `entityStatus` 'pending' | 'verified' | 'rejected' | 'disabled', required

## Other responses

- `default`: ErrorResponse. See x-error-codes and x-errors for codes, HTTP statuses and retry guidance.

---

[API](https://skmtc.dev/hyperscale0/apis/hyperscale-product-api.md) · [All operations](https://skmtc.dev/hyperscale0/apis/hyperscale-product-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hyperscale0/apis/hyperscale-product-api/revisions/e9e8faa044d5?raw)
