Create a new store for the authenticated merchant. The store slug is auto-generated from the name, and JSONB configuration fields (webhookSettings, notificationSettings, checkoutSettings) are initialized with defaults.
POST /v1/actions/store/create-store
Authentication: API Key
Request Body
| Field | Type | Required | Description |
|---|
name | string | Yes | Store name (1-48 characters, auto-trimmed) |
Example Request
import { WaffoPancake } from "@waffo/pancake-ts";
const client = new WaffoPancake({
merchantId: process.env.WAFFO_MERCHANT_ID!,
privateKey: process.env.WAFFO_PRIVATE_KEY!,
});
const { store } = await client.stores.create({ name: "My Digital Store" });
console.log(store.id); // => "STO_2aUyqjCzEIiEcYMKj7TZtw"
console.log(store.slug); // => "my-digital-store-a1b2c3"
Success Response (200)
{
"data": {
"store": {
"id": "STO_2aUyqjCzEIiEcYMKj7TZtw",
"name": "My Digital Store",
"status": "active",
"logo": null,
"supportEmail": null,
"website": null,
"slug": "my-digital-store-a1b2c3",
"prodEnabled": false,
"webhookSettings": {
"testWebhookUrl": null,
"prodWebhookUrl": null,
"testEvents": [],
"prodEvents": []
},
"notificationSettings": {
"emailOrderConfirmation": true,
"emailSubscriptionConfirmation": true,
"emailSubscriptionCycled": true,
"emailSubscriptionCanceled": true,
"emailSubscriptionRevoked": true,
"emailSubscriptionPastDue": true,
"notifyNewOrders": true,
"notifyNewSubscriptions": true
},
"checkoutSettings": {
"defaultDarkMode": false,
"light": {
"checkoutLogo": null,
"checkoutColorPrimary": "#000000",
"checkoutColorBackground": "#FFFFFF",
"checkoutColorCard": "#F5F5F5",
"checkoutColorText": "#1A1A1A",
"checkoutBorderRadius": "8px"
},
"dark": {
"checkoutLogo": null,
"checkoutColorPrimary": "#FFFFFF",
"checkoutColorBackground": "#1A1A1A",
"checkoutColorCard": "#2A2A2A",
"checkoutColorText": "#F5F5F5",
"checkoutBorderRadius": "8px"
}
},
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-15T10:30:00.000Z"
}
}
}
Response Fields
| Field | Type | Description |
|---|
id | string | Store ID (Short ID format STO_xxx) |
name | string | Store display name |
status | string | Store status (active, inactive, or suspended) |
logo | string | null | Store logo URL |
supportEmail | string | null | Support email address |
website | string | null | Store website URL |
slug | string | null | Auto-generated URL slug |
prodEnabled | boolean | Whether production mode is enabled |
webhookSettings | object | null | Webhook configuration (see Webhook Settings) |
notificationSettings | object | null | Notification preferences (see Notification Settings) |
checkoutSettings | object | null | Checkout page theme (see Checkout Settings) |
deletedAt | string | null | Soft-delete timestamp (ISO 8601), null if active |
createdAt | string | Creation timestamp (ISO 8601) |
updatedAt | string | Last update timestamp (ISO 8601) |
Error Responses
| Status | Error | Description |
|---|
| 400 | Missing required field: name | name not provided in request body |
| 400 | Store name cannot be empty | name is an empty string or whitespace only |
| 400 | Store name exceeds maximum length of 48 characters | name exceeds 48 characters after trimming |
| 400 | Maximum store limit reached (20) | Merchant already has 20 stores |
Each merchant can create up to 20 stores. The store creator is automatically assigned the owner role.