本文へスキップ
Sursa Developers

Webhookの概要

Sursaは、重要な変更があるたびにイベントを記録します。カードが公開・検証・アーカイブされた、お知らせが読まれた、質問に回答がなかった、などです。イベントは2つの方法で受け取ることができ、両方を併用することもできます。

Webhookイベントフィード
方法Sursaが、発生したイベントを1件ずつ自社のHTTPSのアドレスに送信します。好きなときにGET /v1/webhook-eventsを読み込みます。
遅延数秒。ポーリングの頻度しだい。
必要なもの公開されたHTTPSの受信サーバー。adminロールとwebhooks:manageスコープを持つAPIキーだけ。
向いている用途変更への対応:通知、同期、ワークフローの開始。バッチジョブ、停止後の遅れの取り戻し、照合。

どちらも、同じIDを持つ同じイベントを伝えます。どのイベントも、それを購読したWebhookがあるかどうかにかかわらず、30日間フィードに保持されます。

イベント

{
  "id": "evt_0123456789abcdef0123456789abcdef",
  "type": "card.updated",
  "created_at": "2026-10-24T10:00:03Z",
  "org_id": 1,
  "api_version": "1.60.0",
  "sequence": 1042,
  "object": {"type": "card", "id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60"},
  "payload": "full",
  "data": {
    "card": {"id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60", "title": "Refund policy", "collection": "support", "version": 4},
    "actor_id": 7,
    "previous_attributes": {"title": "Refunds"}
  },
  "test": false
}
フィールド意味
idイベントのID。evt_と32文字の16進数。すべての配信試行とフィードで同じです。
type起きたこと。<object>.<past-tense verb>の形式です:card.updated、access_request.resolved。
created_at変更が起きた日時(UTC)。
api_versiondataが従うスキーマのAPIのバージョン。
objectイベントの対象となるオブジェクトの種類とID。
data詳細。形はタイプによって異なり、イベントカタログに記載されています。
data.previous_attributes*.updatedイベントで、変更されたフィールドの以前の値。
sequence、payload、testWebhookの配信だけに含まれます:そのWebhookへの配信順序での位置、ペイロードモード、テストイベントかどうか。

dataには、オブジェクトを参照できる人ならAPIで確認できる情報だけが入ります。アクセスリスト、他の人の権限、非表示のフィールドは決して含まれません。イベントの理由は、no_hits、restricted、index_failedのような短い中立的なコードです。

イベントタイプ

イベントは次の分野をカバーします。

分野例
カードcard.created、card.updated、card.published、card.archived、card.deleted、card.indexed、card.index_failed
検証card.verified、card.unverified、verification.expired、verification.requested
構造collection.created、folder.updated
共同作業comment.created、draft.publish_requested、announcement.sent、announcement.read
回答question.unanswered、question.feedback_created、access_request.created
メンバーとアクセスuser.created、user.deactivated、group.member_added、api_key.expiring
ソースとインポートsource.sync_completed、import.sync_completed、import.document_failed
ジョブjob.completed、job.failed、export.ready
Webhookwebhook.endpoint_disabled、webhook.ping

各イベントのスキーマと例を含む完全な一覧は、APIリファレンスのイベントカタログにあります。GET /v1/webhooks/catalogは、インストール環境で利用できるタイプを返します。

新しいイベントタイプは随時追加され、既存のイベントにはフィールドが加わります。イベントタイプの名前が変わったり、削除されたりすることはありません。受信サーバーは、知らないタイプとフィールドをスキップする必要があります。

受信の対象

Webhookがイベントを受信するのは、イベントのオブジェクトがそのWebhookから参照できる場合だけです。参照できるかどうかはAPIキーと同じく、ロール、データプロファイル、コレクションで決まります。supportコレクションに限定したWebhookが、financeのカードについてのイベントを受信することはありません。ユーザー、キー、ソース、インポート、ジョブ、エクスポート、料金と請求、アプリケーション、Webhook自体についてのイベントは、adminロールのWebhookにだけ送られます。

その範囲の中で、各Webhookは受信するイベントを選びます。

  • タイプで選ぶ(マスクを使用):card.*はすべてのカードのイベント、*はすべてのイベント。
  • カードのイベントでは、コレクションとタグで選ぶ。

Webhookのペイロードモードは、full(dataを含むイベント。デフォルト)またはthin(dataを含まないイベント。受信サーバーは自分のキーを使ってAPIでオブジェクトを読み込み、常にその現在の状態を確認します)です。

配信の概要

  • イベントをJSONで送るHTTPSのPOSTです。Webhookのシークレットで2つの形式の署名が付きます:Standard Webhooks(webhook-signature)と、以前のX-KB-Signatureです。
  • 10秒以内の2xxの応答はすべて成功です。
  • 失敗した配信は、間隔を広げながら3日近く再試行されます。429または503のレスポンスのRetry-Afterは尊重されます。410はWebhookを無効にし、10回連続の失敗は再開されるまでWebhookを一時停止します。
  • 1つのWebhookへの配信は、厳密に順序どおりに送られます。応答の遅いWebhookが、他のWebhookへの配信を遅らせることはありません。
  • 同じイベントが複数回届くことがあります。重複はwebhook-idで取り除いてください。

Webhookを受信するでは、Node.js、Python、Goでの署名の検証を含め、受信サーバーの完全な例を順に説明しています。

Webhookの管理

作業エンドポイント
Webhookを作成してシークレットを取得するPOST /v1/webhooks
受信先URL、イベント、状態を変更するPATCH /v1/webhooks/{webhook_id}
テストイベントを送信するPOST /v1/webhooks/{webhook_id}/test
シークレットをローテーションするPOST /v1/webhooks/{webhook_id}/rotate-secret
一時停止中のWebhookを再開するPOST /v1/webhooks/{webhook_id}/resume
配信と応答を確認するGET /v1/webhooks/{webhook_id}/deliveries
配信をもう一度送信するPOST /v1/webhooks/{webhook_id}/deliveries/{delivery_id}/redeliver

Webhookの管理には、adminロールとwebhooks:manageスコープを持つキー、または管理画面での管理者の操作が必要です。組織には最大20個のWebhookを登録できます。Webhookは組織のプランに含まれる機能です。プランに含まれていない場合、これらのエンドポイントはコードwebhooks.feature_disabledとともに403を返します。