Skip to main content
Create a new store for the authenticated merchant. The store slug is auto-generated from the name, and JSONB configuration fields (notificationSettings, checkoutSettings) are initialized with defaults. Webhooks are managed separately via add-webhook — no rows exist on a freshly created store.
POST /v1/actions/store/create-store
Authentication: API Key

Request Body

FieldTypeRequiredDescription
namestringYesStore 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,
      "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

FieldTypeDescription
idstringStore ID (Short ID format STO_xxx)
namestringStore display name
statusstringStore status (active, inactive, or suspended)
logostring | nullStore logo URL
supportEmailstring | nullSupport email address
websitestring | nullStore website URL
slugstring | nullAuto-generated URL slug
prodEnabledbooleanWhether production mode is enabled
notificationSettingsobject | nullNotification preferences (see Notification Settings)
checkoutSettingsobject | nullCheckout page theme (see Checkout Settings)
deletedAtstring | nullSoft-delete timestamp (ISO 8601), null if active
createdAtstringCreation timestamp (ISO 8601)
updatedAtstringLast update timestamp (ISO 8601)

Errors

Retry policy: Never retry 4xx — fix the request and resubmit. Retry 5xx with exponential backoff (start 5s, max 3 attempts).
Statuserrors[0].messageWhat it meansRecommended handling
400Missing merchantId in request contextAPI Key did not resolve to a merchant contextDo not retry. Check your API Key configuration.
400Missing required field: namename is absent from the bodyFix the input and resubmit.
400Store name cannot be empty or contain only whitespacename is empty after trim()Fix the input and resubmit.
400Store name cannot exceed 48 charactersname is longer than 48 charactersShorten the name and resubmit.
400Cannot create more stores. Maximum limit of 20 stores per merchant has been reached.The merchant already owns 20 storesDo not retry. Delete an existing store first, or contact support to raise the limit.
Each merchant can create up to 20 stores. The store creator is automatically assigned the owner role.