メインコンテンツへスキップ
ストアに Webhook エンドポイントを追加します。各ストアでは、すべてのチャネルにわたって最大 20 個の Webhook を持つことができます。
POST /v1/actions/store/add-webhook
認証: API Key(owner または admin ロールが必要)

リクエストボディ

フィールド必須説明
storeIdstringYesStore ID(Short ID フォーマット STO_xxx
channelstringYeshttpfeishudiscordtelegramslack のいずれか
urlstringYesWebhook 送信先 URL(HTTPS。マーチャントは URL が選択したチャネルと一致することを保証)
eventsstring[]Yes購読するイベントタイプ — 例:["order.completed", "refund.succeeded"]。空配列の場合、この Webhook にはイベントが配信されません。
testModebooleanYestrue = テストトランザクションで発火、false = 本番で発火
secretstring | nullNoチャネル固有の認証情報(例:Telegram の chat_id)。不透明なテキストとして保存されます。

リクエスト例

import { WaffoPancake } from "@waffo/pancake-ts";

const client = new WaffoPancake({
  merchantId: process.env.WAFFO_MERCHANT_ID!,
  privateKey: process.env.WAFFO_PRIVATE_KEY!,
});

// Standard HTTPS webhook (RSA-signed envelope)
const { webhook } = await client.webhooks.add({
  storeId: "STO_2aUyqjCzEIiEcYMKj7TZtw",
  channel: "http",
  url: "https://example.com/webhooks/pancake",
  events: ["order.completed", "refund.succeeded"],
  testMode: false,
});

成功レスポンス (200)

{
  "data": {
    "webhook": {
      "id": "11111111-2222-3333-4444-555555555555",
      "storeId": "uuid-of-store",
      "channel": "http",
      "url": "https://example.com/webhooks/pancake",
      "events": ["order.completed", "refund.succeeded"],
      "testMode": false,
      "secret": null,
      "createdAt": "2026-05-07T00:00:00.000Z",
      "updatedAt": "2026-05-07T00:00:00.000Z"
    }
  }
}
返される webhook.id は UUID であり、Short ID ではありません — Webhook ID は IdPrefix のスコープに含まれません。update-webhook および remove-webhook にはそのまま渡してください。

レスポンスフィールド

フィールド説明
idstringWebhook UUID
storeIdstring所属ストアの UUID
channelstringWebhook チャネル(httpfeishudiscordtelegram、または slack
urlstring送信先 Webhook URL
eventsstring[]購読するイベントタイプ
testModebooleantrue はテストトランザクションで発火、false は本番で発火
secretstring | nullチャネル固有の認証情報(不透明テキスト)、未設定の場合は null
createdAtstring作成タイムスタンプ(ISO 8601)
updatedAtstring最終更新タイムスタンプ(ISO 8601)

エラー

リトライポリシー:4xx は一切リトライしない — リクエストを修正してから再送信。5xx は指数バックオフでリトライ(5s 開始、最大 3 回)。
ステータスerrors[0].message意味推奨処理
400Missing required field: storeIdstoreId が指定されていないリクエストボディを修正して再送信
400Expected format: STO_xxx, got "..."storeId Short ID のデコード失敗storeId のフォーマットを修正して再送信
400testMode must be a booleantestMode が boolean ではないboolean 値を渡して再送信
400Invalid channel: must be one of http, feishu, discord, telegram, slackchannel が許可リストにない許可された channel を使用
400Invalid URL formaturl が有効な URL ではないURL を修正して再送信
400events must be a string arrayevents が文字列配列ではない文字列配列を渡して再送信
400secret must be a string or nullsecret が string または null ではないstring または null を渡して再送信
400Webhook limit reached (max 20 per store)ストアの Webhook 数が 20 に達している既存の Webhook を先に削除
401Missing merchantId in request contextAPI Key 認証で merchant が解決されなかったAPI Key ヘッダーと署名を確認
403Not authorized to manage webhooks for this storeマーチャントがストアの owner または admin ではないマーチャントのストアでの役割を確認
500Internal server errorサーバ側の予期しない障害指数バックオフでリトライ(5s 開始、最大 3 回)