Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.waffo.ai/llms.txt

Use this file to discover all available pages before exploring further.

Pancake supports multiple webhook endpoints per store across five channels: standard HTTPS (RSA-signed envelope), Feishu, Discord, Telegram, and Slack. Each endpoint is an independent record in store.store_webhooks with its own URL, subscribed event list, and test/prod environment binding.

Channels

ChannelPayload formatSignatureNotes
httpJSON envelope { id, eventType, eventId, storeId, mode, data }RSA-SHA256 (X-Waffo-Signature header)Default channel; preserves the existing webhook contract.
feishuFeishu interactive cardNone — URL tokenChinese title text, UTC+8 timestamp
discordDiscord embedNone — URL tokenEnglish text, client-local timestamp
telegramsendMessage payload (text HTML, chat_id)None — bot token in URLEnglish text, UTC; chat_id stored in secret
slackAttachments payloadNone — incoming-webhook URL tokenEnglish text, UTC

URL host

Any HTTPS URL is accepted regardless of channel. The merchant is responsible for matching the URL to the channel’s expected platform — if a Discord URL is configured under channel: "slack", the dispatcher will encode the payload in Slack’s attachments format and send it to the Discord endpoint, which will respond with an error and the failure is recorded in webhook_deliveries.

Multiple webhooks per URL

The same URL can be configured under multiple webhooks within a store — webhooks fan out, so different event subscriptions, channels, or testMode flags can share a URL. Each webhook delivers independently, which means consumers receiving identical payloads on a shared URL must dedupe by (eventType, eventId).

Limits

Each store may have at most 20 webhooks across all channels. Exceeding the limit returns 400.

Listing webhooks

There is no list-webhooks endpoint — querying the configured webhook list goes through GraphQL Store.storeWebhooks (filtered automatically by environment via test_mode):
query GetStoreWebhooks($storeId: String!) {
  store(id: $storeId) {
    storeWebhooks {
      id
      channel
      url
      events
      testMode
      secret
      createdAt
    }
  }
}

Endpoints

Add Webhook

Configure a new webhook endpoint for a store.

Update Webhook

Change a webhook’s URL, events, or secret.

Remove Webhook

Hard-delete a webhook (history retained).