Skip to main content
Update an existing store’s name, status, or configuration settings. Only fields included in the request body are updated; omitted fields remain unchanged.
POST /v1/actions/store/update-store
Authentication: API Key (owner or admin role required)
This endpoint does not manage webhook configuration. If a webhookSettings field is sent in the request body it is silently ignored and the response includes a top-level warnings array; other fields update normally and the call returns 200. Use add-webhook, update-webhook, and remove-webhook to configure webhooks, and GraphQL Store.storeWebhooks to list them.

Request Body

FieldTypeRequiredDescription
idstringYesStore ID (Short ID format STO_xxx)
namestringNoUpdated store name (1-48 characters)
statusstringNoactive, inactive, or suspended
logostring | nullNoStore logo URL (set to null to remove)
supportEmailstring | nullNoStore support email address (set to null to remove)
websitestring | nullNoStore website URL (set to null to remove)
notificationSettingsobject | nullNoNotification preferences (set to null to remove)
checkoutSettingsobject | nullNoCheckout theme configuration (set to null to remove)

Notification Settings

Two categories with different write permissions: Merchant-writable (✅ accepted via this endpoint):
FieldTypeDefaultDescription
notifyNewOrdersbooleantrueNotify merchant of new orders
notifyNewSubscriptionsbooleantrueNotify merchant of new subscriptions
notifySubscriptionCanceledbooleantrueNotify merchant when a subscriber cancels (still within access period)
notifySubscriptionEndedbooleantrueNotify merchant when a subscription ends
notifySubscriptionPastDuebooleantrueNotify merchant when a subscription enters past-due (payment failure)
notifySubscriptionRenewedbooleantrueNotify merchant when a subscription successfully renews
notifySubscriptionUncanceledbooleantrueNotify merchant when a previously canceled subscription is reactivated
notifySubscriptionUpdatedbooleantrueNotify merchant when a subscription plan changes (forward-compat)
notifyChargebackbooleantrueNotify merchant when a chargeback is filed (forward-compat)
notifyPayoutCompletedbooleantrueNotify merchant when a payout completes (forward-compat)
notifyPayoutFailedbooleantrueNotify merchant when a payout fails (forward-compat)
Platform-managed (🔒 read-only via merchant API; managed by PANCAKE platform):
FieldTypeDefaultDescription
emailOrderConfirmationbooleantrueSend email on order confirmation
emailSubscriptionConfirmationbooleantrueSend email on subscription creation
emailSubscriptionCycledbooleantrueSend email on subscription renewal
emailSubscriptionCanceledbooleantrueSend email on subscription cancellation
emailSubscriptionRevokedbooleantrueSend email on subscription revocation
emailSubscriptionPastDuebooleantrueSend email on subscription past due
emailTrialStartedbooleantrueSend email when a free trial is started
emailTrialEndingbooleantrueSend email reminder before a trial ends
If your notificationSettings payload includes any platform-managed email* field, the server silently drops it and returns a 200 response with a warnings[] entry listing the dropped keys. To toggle a consumer email, contact PANCAKE platform support.

Checkout Settings

FieldTypeDescription
defaultDarkModebooleanWhether to default to dark mode
lightobjectLight theme settings (see below)
darkobjectDark theme settings (see below)
Checkout Theme Settings (applies to both light and dark):
FieldTypeDescription
checkoutLogostring | nullLogo URL for checkout page
checkoutColorPrimarystringPrimary color (hex)
checkoutColorBackgroundstringBackground color (hex)
checkoutColorCardstringCard/panel color (hex)
checkoutColorTextstringText color (hex)
checkoutBorderRadiusstringBorder radius (CSS value)

Partial Update Semantics

Both settings objects support partial updates. Each sub-field follows these semantics:
ValueBehaviorExample
Omitted (not in JSON)Keep existing valueOnly pass notifyNewOrders; other notification flags stay unchanged
nullClear the field"checkoutLogo": null removes the checkout logo
Actual valueCreate or update"checkoutColorPrimary": "#FF6600" sets a new primary color
Setting the entire object to null (e.g., "notificationSettings": null) clears all fields in that settings group.

Example Request

import { WaffoPancake, EntityStatus } 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.update({
  id: "STO_2aUyqjCzEIiEcYMKj7TZtw",
  name: "Updated Store Name",

  notificationSettings: {
    notifyNewOrders: true,
    notifyNewSubscriptions: false,
  },
});

Success Response (200)

{
  "data": {
    "store": {
      "id": "STO_2aUyqjCzEIiEcYMKj7TZtw",
      "name": "Updated Store Name",
      "status": "active",
      "logo": null,
      "slug": "my-digital-store-a1b2c3",
      "prodEnabled": false,
      "notificationSettings": {
        "emailOrderConfirmation": true,
        "emailSubscriptionConfirmation": true,
        "emailSubscriptionCycled": true,
        "emailSubscriptionCanceled": true,
        "emailSubscriptionRevoked": true,
        "emailSubscriptionPastDue": true,
        "emailTrialStarted": true,
        "emailTrialEnding": true,
        "notifyNewOrders": true,
        "notifyNewSubscriptions": false,
        "notifySubscriptionCanceled": true,
        "notifySubscriptionEnded": true,
        "notifySubscriptionPastDue": true,
        "notifySubscriptionRenewed": true,
        "notifySubscriptionUncanceled": true,
        "notifySubscriptionUpdated": true,
        "notifyChargeback": true,
        "notifyPayoutCompleted": true,
        "notifyPayoutFailed": 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-15T11:00:00.000Z"
    }
  }
}

Response Fields

Same as Create Store response fields.

webhookSettings Compatibility Warning

If a webhookSettings field is sent in the request body, it is silently ignored and the response includes a top-level warnings array. The data.store object is unaffected.
{
  "data": { "store": { "...": "..." } },
  "warnings": [
    {
      "message": "webhookSettings is no longer accepted on update-store; the field was ignored.",
      "layer": "store",
      "aiHint": "AI assistant: 'webhookSettings' is permanently removed (BREAKING 2026-05). Do not retry with this field. SDK users: upgrade to @waffo/pancake-ts >= 0.6.0 and call client.webhooks.add / update / remove instead of client.stores.update({ webhookSettings }). Direct API users: POST /api/actions/store/add-webhook to create a webhook, /update-webhook to modify, /remove-webhook to delete. Query the webhook list via GraphQL Store.storeWebhooks field, not via this endpoint."
    }
  ]
}

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: idid is absent from the bodyFix the input and resubmit.
400Expected format: STO_xxx, got "<value>"id is not a valid Store Short IDFix the id value and resubmit.
400Store name cannot be empty or contain only whitespacename is empty after trim()Fix the name and resubmit.
400Store name cannot exceed 48 charactersname is longer than 48 charactersShorten the name and resubmit.
400Invalid status, must be active, inactive or suspendedstatus value is not one of the allowed enumsUse active, inactive, or suspended.
400Invalid logo: must be a string or nulllogo is not a string and not nullPass a string URL or null to clear.
403Not authorized to update this storeCaller’s role on this store is not owner/adminDo not retry. Use an authorized merchant.
404Store not foundStore ID does not exist for this merchantDo not retry. Verify the id.