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 (webhookSettings, notificationSettings, checkoutSettings) are initialized with defaults.
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,
      "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

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
webhookSettingsobject | nullWebhook configuration (see Webhook Settings)
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)

Error Responses

StatusErrorDescription
400Missing required field: namename not provided in request body
400Store name cannot be emptyname is an empty string or whitespace only
400Store name exceeds maximum length of 48 charactersname exceeds 48 characters after trimming
400Maximum 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.