Webhookの登録方法
Webhook
登録
エンドポイント
イベント購読
テスト送信
Webhookを受け取るには、開発者アプリに受信URLと購読するイベントを登録します。登録は開発者ポータルの画面からもAPIからもできます。この記事では両方の手順と、テスト送信、購読イベントの変更、一時停止と削除の方法を説明します。
前提
- 開発者ポータルに登録済みのアプリ。デベロッパーAPIはスタータープラン以上で使えます
- インターネットから届く
https://の受信URL。localhostやプライベートIPアドレスは登録できません - 画面から登録する場合:アプリを持つビジネスアカウントのオーナーであること
- APIで登録する場合:ビジネスアカウントに紐づいたアクセストークン(ビジネスアカウント向けの承認フローで取得したもの)。Webhook APIは特定のスコープを要求しません
画面とAPIでできること
| 操作 | 開発者ポータルの画面 | API |
|---|---|---|
| 登録 | できる(シークレットは自動生成) | できる(シークレットを指定するか自動生成) |
| どのビジネスアカウントのイベントを受け取るか | アプリを持つビジネスアカウント | トークンが紐づくビジネスアカウント |
| 一覧・状態の確認 | できる(有効/無効、最終送信日時) | できる |
| 一時停止・再開 | できる | できる |
| 購読イベントの変更 | できない | できる |
| テスト送信 | できない | できる |
| 配信ログ | できない | できる(直近50件) |
| 削除 | できる | できる |
受信URLはあとから変更できません。変えるときは新しいWebhookを登録し、古いものを削除します。
画面から登録する
- 開発者ポータルのアプリ一覧(
/ja-JP/organizations/{organizationId}/developer/apps)で対象のアプリを開きます - 「Webhooks」の欄の「追加」を押します
- URLを入力し、受け取りたいイベントにチェックを入れて「登録する」を押します
- 画面の上部に署名用のシークレットが表示されます。この1回しか表示されないので、ここでコピーして受信サーバーに設定します
画面にはイベントの候補がすべて並びますが、実際に送信されるのは receipt.created、order.created、order.updated です(後述)。
APIで登録する
curl -X POST https://receiptroller.io/api/v1/webhooks \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/rr-webhook",
"eventTypes": ["receipt.created"],
"secret": "{webhook_secret}"
}'
| フィールド | 必須 | 内容 |
|---|---|---|
url | 必須 | https:// で始まる絶対URL。localhost・127.0.0.1・プライベートIPアドレスは不可 |
eventTypes | 必須 | 購読するイベント名の配列(1つ以上)。event_types ではなく eventTypes です |
secret | 任意 | 署名用のシークレット(16〜64文字)。省略すると32文字の英数字が生成されます |
成功するとステータス 201 で次のレスポンスが返ります。secret はこのレスポンスにしか含まれず、あとから取得するAPIはありません。
{
"id": "wh_xxxxxxxxxxxxxxxx",
"clientId": "{client_id}",
"organizationId": "{organizationId}",
"url": "https://example.com/rr-webhook",
"eventTypes": ["receipt.created"],
"active": true,
"createdAt": "2026-10-26T03:00:00.0000000Z",
"lastDeliveredAt": null,
"secret": "{webhook_secret}"
}
登録時のエラー
| ステータス | メッセージ | 原因 |
|---|---|---|
| 401 | (本文なし) | トークンがない、期限切れ、または無効 |
| 400 | organization_id not found in token. | トークンがビジネスアカウントに紐づいていない |
| 400 | url is required. | url が空 |
| 400 | url must be a valid HTTPS address. | https:// の絶対URLでない |
| 400 | url must not point to localhost or private IP ranges. | ローカルやプライベートIPのURL |
| 400 | event_types must contain at least one event. | イベントが空。フィールド名を event_types と書いた場合もこのエラーになります |
| 400 | Unknown event types: ... | 存在しないイベント名。メッセージに選べる名前の一覧が続きます |
| 400 | secret must be 16 to 64 characters, or omitted to have one generated. | secret の長さが範囲外 |
購読するイベントを選ぶ
| イベント | 送信 |
|---|---|
receipt.created | 新しい売上が初めて保存されたとき |
order.created | 受注が作成されたとき |
order.updated | 受注の編集・状態の変更のとき |
receipt.updated、receipt.deleted、coupon.redeemed、coupon.expired、customer.visited | 登録はできますが、現在は送信されません |
各イベントの中身はWebhookの概要を参照してください。
テスト送信
curl -X POST https://receiptroller.io/api/v1/webhooks/test/{webhook_id} \
-H "Authorization: Bearer {access_token}"
受信URLに test.ping イベントが1回送られ、その結果が返ります。
{
"webhookId": "wh_xxxxxxxxxxxxxxxx",
"httpStatus": 200,
"success": true,
"deliveredAt": "2026-10-26T03:01:00.0000000Z"
}
- 受信URLに届くボディの
dataは{ "message": "This is a test ping from Receipt Roller." }です。本番のイベントと同じシークレットで署名されます - APIの応答は、Webhookが存在すれば常に
200です。届いたかどうかはsuccess(受信側が2xxを返したか)とhttpStatusで判断します。httpStatusが0なら接続そのものに失敗しています - テスト送信は購読イベントや有効/無効の状態に関係なく送られ、再送されず、配信ログにも残りません
404は、IDが違うか、別のアプリのWebhookです
変更・一時停止・削除
購読イベントの変更と、一時停止・再開は PATCH で行います。送ったフィールドだけが変わり、eventTypes は一覧ごと置き換わります。
curl -X PATCH https://receiptroller.io/api/v1/webhooks/{webhook_id} \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{ "eventTypes": ["receipt.created", "order.created"], "active": true }'
"active": falseで一時停止、"active": trueで再開します。画面の一時停止・再開ボタンも同じ操作です- 停止中に起きたイベントは保留されず、再開してもあとから届きません
- 4回続けて配信に失敗したWebhookは自動で
active: falseになります。受信側を直したら同じ方法で再開します - 削除は
DELETE /api/v1/webhooks/{webhook_id}(成功すると204)です。削除すると元に戻せません - 登録済みWebhookの一覧は
GET /api/v1/webhooks、1件の取得はGET /api/v1/webhooks/{webhook_id}です。どちらにもsecretは含まれません
複数のWebhookを使う
- 1つのアプリに複数のWebhookを登録できます。同じイベントを購読しているWebhookにはすべて送られ、どのWebhookにも同じ
X-RR-Deliveryが付きます - 複数のビジネスアカウントのイベントを受け取るときは、それぞれのビジネスアカウントのトークンで登録します
- 一覧・取得・変更・削除・テスト送信は、アプリが登録したすべてのWebhookが対象です(どのビジネスアカウントのトークンで呼んでも同じ一覧が返ります)
登録後の確認
- 受信URLが
https://で外部から届く - シークレットを安全な場所に保管し、受信サーバーに設定した
- 受信サーバーで署名を検証している(署名検証とセキュリティ)
- テスト送信で
success: trueが返る X-RR-Deliveryで重複を除いている- 10秒以内に
2xxを返せる
関連ガイド
公開日: 2026-04-27
更新日: 2026-10-26
カテゴリ
タグ
API (26)
OAuth (21)
Android (13)
iOS (12)
Webhook (9)
api (6)
oauth (5)
クイックスタート (5)
トラブル (5)
Node.js (4)
関連記事
-
SNS Webhookバイパス(LINEなど外部SNSのWebhook転送)レシートローラーがLINE等のSNSプラットフォームから受け取ったWebhookを、店舗側の同意のもとで開発者アプリへ転送する「SNS Webhookバイパス」機能の仕組み、設定方法、署名の取り扱い、注意点を解説します。
-
Webhookが届かないWebhookが届かないときに、テスト送信と配信ログで原因を切り分け、無効化・購読イベント・接続・署名検証を順に確認する手順です。
-
監視と失敗時の対応Webhookの有効状態・最終送信日時・配信ログの見方と、自動で無効になったことに気づいて復旧し、抜けた期間をAPIで補う方法を説明します。
-
開発者向けヘルプ目次レシートローラー開発者向けヘルプ目次です。開発者申請、アプリケーション登録、OAuth認証とスコープ、実装ガイド(ウォレットアプリ・店舗向けWebhook・Survey API)、データ領域別ガイド、運用とセキュリティ、コミュニティ、トラブルシューティングまでをまとめています。
-
再送・順序・冪等性の設計Webhookの成功条件と再送の規則(1分・10分・1時間、最大4回)、順序と取りこぼし、X-RR-Deliveryで重複を除く受信側の作り方を説明します。