Register Customer
Create a new customer account with email, password, and optional profile information.
Endpoint
POST /api/shop/customersRequest Headers
| Header | Required | Description |
|---|---|---|
Content-Type | Yes | application/json |
X-STOREFRONT-KEY | Yes | Your storefront API key |
Request Body
{
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"password": "Password123!",
"confirmPassword": "Password123!",
"phone": "1234567890",
"gender": "Male",
"dateOfBirth": "1990-01-15",
"subscribedToNewsLetter": true
}| Field | Type | Required | Description |
|---|---|---|---|
firstName | string | Yes | Customer first name |
lastName | string | Yes | Customer last name |
email | string | Yes | Unique email address |
password | string | Yes | Password (min 8 chars, mixed case, numbers, special) |
confirmPassword | string | Yes | Password confirmation (must match) |
phone | string | No | Phone number |
gender | string | No | Customer gender (Male/Female) |
dateOfBirth | string | No | Date of birth (YYYY-MM-DD) |
subscribedToNewsLetter | boolean | No | Newsletter subscription (default: false) |
status, isVerified and isSuspended are optional and the value sent for them is not used. The server decides the account's state the way the web storefront sign-up does: status is 1 and isSuspended is 0, and isVerified follows the store's email verification setting under Configuration → Customers → Settings → Email — 1 while it is switched off, 0 while it is switched on and the address has not been confirmed. An account with isVerified of 0 cannot sign in until the customer follows the link in the verification email.
The account's channel and customer group are not part of the request body. The server assigns them automatically — the channel from the request's storefront, and the store's default customer group — exactly as the web storefront sign-up does. They come back in the response as channelId and customerGroupId.
Response Fields (201 Created)
| Field | Type | Description |
|---|---|---|
id | integer | Customer ID |
firstName | string | Customer first name |
lastName | string | Customer last name |
email | string | Customer email |
phone | string | Customer phone |
gender | string | Customer gender |
dateOfBirth | string | Customer date of birth |
apiToken | string | Legacy field, kept for backward compatibility. Not an auth Bearer — authenticate with token instead |
token | string | The authentication credential — send as Authorization: Bearer <token> |
status | integer | Account status — 1 active, 0 inactive. An inactive account cannot sign in |
subscribedToNewsLetter | boolean | Newsletter subscription status |
isVerified | integer | Email verification state — 1 verified, 0 awaiting confirmation. An unverified account cannot sign in |
isSuspended | integer | Suspension state — 0 not suspended, 1 suspended by an administrator |
name | string | Full customer name |
customerGroupId | integer | Customer group the account is placed in. Assigned automatically by the server (the store's default customer group) — not sent by the client. |
channelId | integer | Channel the account is registered under. Assigned automatically from the request's storefront channel — not sent by the client. |
rememberToken | mixed | Remember token |
Password Requirements
Passwords must contain:
- Minimum 8 characters
- At least one uppercase letter (A-Z)
- At least one lowercase letter (a-z)
- At least one number (0-9)
- At least one special character (!@#$%^&*)
Related Resources
- Customer Login — authenticate and receive a customer token
- Update Profile — patch name, email, phone, and other profile fields
- Get Profile — read the authenticated customer's account details

