本文へスキップ
開発者

コミュニティ Webhook

Mateflow は、コミュニティで何かが起きると、指定された URL に HTTP POST を送信します。このページでは、受信側に届く内容、検証の方法、失敗時の動作、そして全イベントの全フィールドを説明します。

クイックスタート

各配信は JSON 本文を持つ POST です。1 つのイベントを複数の Webhook が購読している場合、それぞれに個別のコピーが届きます。

  1. コミュニティの管理画面で 設定 → インテグレーション → Webhook を開き、Webhook を作成します。URL を入力し、イベントを選び、シークレットを生成して、有効にしてください。
  2. 各リクエストは次の順序で処理します。
    1. 生のリクエスト本文を読み取り、署名を検証する。
    2. test が true なら、200 を返して処理を終える。
    3. event_id で重複排除する。
    4. 処理は自前のキューに積み、10 秒以内に 2xx を返す。
  3. Webhook をテストをクリックしてテストリクエストを送信し、配信ログを開いてリクエストとレスポンスを確認します。

プランとセットアップ

Webhook はプランの機能であり、管理できるのはコミュニティの管理者のみです。

プランコミュニティあたりの Webhook 数
Free利用不可
Starter利用不可
Growth5
Business20
Enterprise無制限
  • Webhook のないプランにダウングレードしても Webhook の設定は保持されますが、配信もログ記録も行われません。アップグレードすると配信が再開されます。
  • Webhook は管理コンソールで作成・管理します。Community Open API には Webhook 用のエンドポイントはありません。

設定

項目要件
URL管理画面のフォームが受け付けるのは https:// の URL のみで、最大 1,024 文字です。
到達できないアドレスループバック、プライベート、リンクローカルの範囲に解決されるアドレスへのリクエストは、接続時にブロックされ、ネットワークエラーとして扱われます。ローカル開発では、公開トンネルを使用してください。
名前最大 100 文字です。
イベント下記のカタログから 1 つ以上。以前にイベント一覧が空のまま保存された Webhook は、すべてのイベントを受信します。
シークレット任意で、最大 128 文字です。保存後は置き換えることはできますが、読み出すことはできません。シークレットがない場合、リクエストは署名されないため、設定することを強くおすすめします。シークレット自体がリクエストに含まれることはありません。

配信フォーマット

すべての配信は POST で、リクエストごとのタイムアウトは 10 秒です。

ヘッダー

ヘッダー値備考
Content-Typeapplication/json常に JSON です。
User-AgentMateflow-Webhook/1.0送信元が Mateflow であることを示します。
X-Mateflow-TimestampUnix 秒このリクエストを送信した時刻です。署名の一部になります。
X-Mateflow-Signaturesha256= に続く 16 進ダイジェストWebhook にシークレットがある場合のみ付与されます。

カスタム Webhook には X-Mateflow-Delivery-Id ヘッダーはありません。delivery_id は本文から読み取ってください。

本文

フィールド型説明
eventstringイベントコードです。
event_idstringイベントの一意の識別子です。これで重複排除してください。自動リトライや手動再送をまたいでも、またそのイベントを購読しているすべての Webhook 間でも同じ値のままです。不透明な文字列として扱ってください。
occurred_atRFC 3339イベントが起きた時刻で、秒単位です。リトライをまたいでも変わりません。
delivery_idstring(10 進数)この配信を識別します。自動リトライのたびに変わります。手動再送では元の値が保たれます。
timestampRFC 3339本文が生成された時刻です。手動再送では元の値が保たれるため、鮮度の判断にはヘッダーを使ってください。
webhook_idhashidこの配信を受け取る Webhook です。
site_idhashidコミュニティです。
dataobjectイベントのデータです。イベントカタログで説明しています。

まれに ID の生成に失敗した場合、event_id と occurred_at が欠けることがあります。その場合も受け入れ、重複の判別には event と data 内のビジネス ID を組み合わせてフォールバックしてください。

JSON
{
  "event": "payment.received",
  "event_id": "86116692152877061",
  "occurred_at": "2026-11-03T00:00:00Z",
  "delivery_id": "86116692152877060",
  "timestamp": "2026-11-03T00:00:01Z",
  "webhook_id": "qP3aXm71Bd",
  "site_id": "Z5Kf08mFv8r",
  "data": {
    "member_id": "b7Lq2WxR9e",
    "username": "sample_member",
    "email": "sample.member@example.com",
    "invoice_id": "in_1Abc",
    "subscription_id": "sub_1Abc",
    "amount_cents": 2900,
    "currency": "usd",
    "period_start": "2026-11-03T00:00:00Z",
    "period_end": "2026-12-03T00:00:00Z"
  }
}

署名を検証する

Webhook にシークレットがある場合、すべてのリクエストは、タイムスタンプヘッダーと生の本文に対する HMAC-SHA256 で署名されます。

署名
X-Mateflow-Signature = "sha256=" + hex(
  HMAC-SHA256(secret, X-Mateflow-Timestamp + "." + raw_request_body)
)
  • 生のバイト列を使ってください。本文では HTML で特殊な文字がエスケープされることがあるため、JSON をパースして再びシリアライズするとバイト列が変わり、署名が一致しません。
  • タイムスタンプは本文ではなくヘッダーから取ってください。手動再送で更新されるのは、ヘッダーのタイムスタンプと署名だけです。
  • タイムスタンプの検査はリトライの妨げになりません。自動リトライも手動再送も、そのつど署名し直されるため、5 分のウィンドウで十分です。
Node.js
const crypto = require('crypto');

// rawBody must be the untouched bytes, e.g. from express.raw({ type: 'application/json' }).
function verifyMateflowSignature(rawBody, headers, secret, toleranceSeconds = 300) {
  const timestamp = headers['x-mateflow-timestamp'];
  const received = headers['x-mateflow-signature'] || '';
  if (!timestamp || Math.abs(Date.now() / 1000 - Number(timestamp)) > toleranceSeconds) {
    return false;
  }
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(`${timestamp}.`)
    .update(rawBody)
    .digest('hex');
  const a = Buffer.from(received);
  const b = Buffer.from(expected);
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Python
import hashlib
import hmac
import time


def verify_mateflow_signature(raw_body: bytes, headers, secret: str, tolerance_seconds: int = 300) -> bool:
    timestamp = headers.get("X-Mateflow-Timestamp", "")
    received = headers.get("X-Mateflow-Signature", "")
    if not timestamp.isdigit() or abs(time.time() - int(timestamp)) > tolerance_seconds:
        return False
    signed = timestamp.encode() + b"." + raw_body
    expected = "sha256=" + hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
    return hmac.compare_digest(received.encode(), expected.encode())

テストベクター

署名の計算が正しいかどうかの確認に、これらの値を使ってください。タイムスタンプは期限切れなので、テスト中は時間ウィンドウを緩めてください。

テストベクター
secret                 my_signing_secret
X-Mateflow-Timestamp   1793664000
raw body (UTF-8)       {"event":"member.joined","data":{"username":"张三"}}
X-Mateflow-Signature   sha256=3f4c83828ce0086150c9bd48c1654899357b7c05265c1d1b6c172225ee04b4b4

シークレットのローテーション

新しいシークレットは保存した時点で有効になり、キューに入っているリトライもそれで署名されます。Mateflow が両方で署名する期間はないため、切り替え中は受信側で古いシークレットと新しいシークレットの両方を受け付けるようにしてください。

レスポンスとリトライ

配信が成功か失敗かは、ステータスコードだけで決まります。レスポンス本文は解析されません。

受信側の応答結果リトライ
2xx成功なし
5xx、408、429失敗あり
タイムアウト、接続失敗、ブロックされたアドレス失敗。ステータス 0 としてログに記録あり
上記以外の 4xx失敗なし
  • リトライのスケジュール:失敗後、Mateflow は 1 分、10 分、1 時間、6 時間の順に待ちます。最初の試行を含めると、約 7 時間で最大 5 回の試行になります。
  • 配信を断念するとき:リトライを使い切った場合、またはリトライ対象外のステータスだった場合、コミュニティのオーナーと管理者にメールが届きます。Webhook ごとに 24 時間あたり最大 1 通です。
  • 途中で止まる場合:Webhook が削除または無効にされた場合、あるいはプランに Webhook が含まれなくなった場合、以降の試行は送信もログ記録もされません。
  • リダイレクト:配信はリダイレクトに従いますが、301、302、303 では POST が本文のない GET に変わります。最終的な URL を入力してください。http から https へのリダイレクトには頼らないでください。

手動再送

配信ログの再送信は、配信を Webhook の現在の URL にもう一度送ります。

  • 本文は、event_id、delivery_id、timestamp を含めて同一です。タイムスタンプヘッダーと署名は新しくなります。
  • 試行は 1 回のみで、失敗してもリトライされません。結果はログに新しい行として表示されます。
  • 再送できるのはカスタム Webhook の配信のみで、その Webhook が存在し、有効になっている必要があります。

配信ログ

ログは 30 日間保持されます。各レスポンス本文は、先頭の 4 KB のみが保存されます。

信頼性

受信側が前提にしてよいこと、してはいけないことです。

  • At-least-once です。同じイベントが複数回届くことがあります。event_id で重複排除してください。
  • 金銭が絡む処理には、2 つ目のチェックを加えてください。Mateflow は同一の支払いや、同一のサブスクリプションの開始・終了を既に重複排除していますが、そのチェックが利用できないときは、破棄せずに送信します。その場合、2 つのイベントは異なる event_id を持ちます。invoice_id、subscription_id、order_id もあわせて確認してください。
  • 順序は保証されません。配信は並列に実行されリトライもされるため、メンバーの access_group_removed と access_group_added が逆の順序で届くことがあります。どちらが先だったかを判断するには、秒単位で正確な occurred_at を使ってください。
  • まれに欠落することがあります。イベントはデータがコミットされた後にキューへ積まれるため、その 2 つのステップの間でプロセスが終了すると、イベントが失われます。
  • 状態を同期するなら照合してください。イベントは何かが変わったことを知らせる合図として扱い、現在の状態は Open API(たとえば members.read スコープでの /member/get)から読み取り、定期的に全件の比較を行ってください。Open API はメールアドレスを返さないため、メールアドレスはイベントから取得してください。

イベントカタログ

購読できるイベントは 17 個です。

全フィールド共通のルール

  • Mateflow の ID は hashid 文字列で、API が使うものと同じ値です。値が 0 の場合はエンコードされず、数値の 0 として現れます。
  • member_id と user_id は同じ人物を指します。member.joined、投稿イベント、コメントイベントは user_id を使い、それ以外はすべて member_id を使います。
  • Stripe の ID はそのまま渡されます。invoice_id、subscription_id、charge_id、payment_intent_id が該当します。
  • 時刻は UTC の RFC 3339 です。
  • 金額は、その通貨の最小単位の整数です(USD ならセント)。currency は小文字の通貨コードです。
  • 該当しない任意フィールドは省略されます。null や空文字列にはなりません。
  • フィールドと列挙値は追加されるだけで、変更されることはありません。受信側は、新しいものが増えても動作するようにしてください。

全イベント

イベント意味ユーザー名とメールアドレス
member.joined新しいメンバーが参加したはい
member.leftメンバーがコミュニティを退会したはい
member.role_changedメンバーのロールが変更されたいいえ
member.suspendedメンバーが停止またはBANされたいいえ
member.reinstated停止またはBANが解除されたいいえ
member.access_group_addedメンバーがアクセスグループを持つようになったはい
member.access_group_removedメンバーがアクセスグループを持たなくなったはい
post.created投稿が公開されたいいえ
post.deleted投稿が削除されたいいえ
comment.createdコメントが公開されたいいえ
comment.deletedコメントが削除されたいいえ
payment.receivedサブスクリプションの請求書または単発購入に対する支払いを受け取ったはい
subscription.renewedサブスクリプションが正常に更新されたはい
payment.failed請求書の支払いに失敗したはい
subscription.createdStripe でサブスクリプションが作成されたはい
subscription.canceledサブスクリプションが終了したはい
refund.issued返金が行われたはい

メンバー

member.joined

新しいメンバーが参加しました。

フィールド型常に存在説明
user_idhashidはいメンバー ID。
usernamestringはいユーザー名。
emailstringはいメールアドレス。

送信される場合

  • サインアップが成功した場合。ソーシャルログイン、初回の SSO ログイン、招待経由のサインアップを含みます。
  • 有料のサインアップが完了した場合。
  • 参加リクエストが承認された場合。
  • 同じメールアドレスで再登録され、アカウントが復元された場合。イベントは再度送信されます。

送信されない場合

  • CSV ファイルからメンバーをインポートした場合。
  • 参加リクエストを審査するコミュニティで、メンバーがまだ承認待ちの場合。

member.left

メンバーがコミュニティを退会しました。

フィールド型常に存在説明
member_idhashidはいmember.joined のメンバーの user_id と同じ値です。
usernamestringはい退会前のユーザー名。退会によって個人情報が消去される場合でも含まれます。
emailstringはい退会前のメールアドレス。同じ条件で含まれます。
sourcestringはい退会の経緯。下の表を参照してください。
removed_byhashidいいえ操作した管理者。removed と anonymized の場合のみ。
reasonstringいいえremoved で、管理者が理由を入力した場合のみ。
source意味同じメールアドレスで再登録した場合
removed管理者がメンバーを削除した同じ ID が復元され、member.joined が再び送信される
account_deletedメンバーが自分のアカウントを削除した。即時削除、または 30 日間の猶予期間が終了した時点即時削除: 上記と同じ。猶予期間の終了後: 新しい ID
anonymized管理者が GDPR に基づいてメンバーを匿名化した新しい ID
inactivity非アクティブなアカウントのクリーンアップ。夜間のバッチで実行される新しい ID

送信されない場合

  • アカウントが無効化された場合。
  • メンバーがアカウントの削除を申請し、猶予期間中の場合。期間が終了した時点で送信され、キャンセルされた場合は一切送信されません。
  • メンバーが BAN または停止された場合。この場合は member.suspended が送信されます。
  • 参加していなかった場合。たとえば、却下された、または保留中の参加リクエストです。
  • サブスクリプションが終了した場合。
  • コミュニティが削除された場合。
  • メンバーが特定の 1 つのスペースから退出した場合。
  • 退会によって解除されたアクセスグループは、member.access_group_removed として個別には送信されません。member.left は、そのメンバーがどのアクセスグループも持たなくなったことを意味するものとして扱ってください。

member.role_changed

メンバーのロールが変更されました。

フィールド型常に存在説明
member_idhashidはいメンバー ID。
previous_rolestringはいmember、moderator、admin のいずれかで、常に小文字です。
rolestringはい同じ値です。
changed_byhashidはい変更を行った人。

送信されない場合

  • ロールが実際には変わっていない場合。
  • Billing Admin またはカスタムロールだけが変更された場合。

member.suspended

メンバーが停止または BAN されました。どちらもこのイベントを使い、ban_type で区別します。

フィールド型常に存在説明
member_idhashidはいメンバー ID。
suspended_byhashidはい操作した管理者。
reasonstringはい管理者の内部メモ。空文字列の場合があります。メンバーには表示しないでください。
ban_typestringはいsuspend または ban。
duration_daysnumberいいえsuspend の場合のみ。
suspended_untilRFC 3339いいえsuspend の場合のみ。
viastringいいえ報告の対応中に行われた場合は moderation。メンバー管理から行われた場合は省略されます。

送信される場合

  • メンバー管理から、または報告の対応中に、メンバーが停止または BAN された場合。1 人ずつでも一括でも同様です。

送信されない場合

  • メンバーが警告を受けただけの場合。

member.reinstated

停止または BAN が解除されました。

フィールド型常に存在説明
member_idhashidはいメンバー ID。
reinstated_byhashidいいえ操作した管理者。via が expired の場合は省略されます。
fromstringはい解除されたもの: suspend または ban。
viastringいいえmoderation(モデレーションで解除)、appeal(異議申し立てが承認された)、expired(停止期間が終了した)のいずれか。メンバー管理から解除された場合は省略されます。

送信されない場合

  • 停止期間は終了したが、メンバーに別の有効な BAN があり、制限が続いている場合。
  • 停止期間が終了したときは、期限切れが 5 分ごとにチェックされるため、イベントは通常数分以内に送信されます。occurred_at は期限切れが検出された時刻です。

member.access_group_added, member.access_group_removed

メンバーがアクセスグループを持つようになった、または持たなくなりました。各イベントは 1 人のメンバーと 1 つのアクセスグループを対象とするため、サブスクリプションを Silver から Gold に移すと、removed が 1 件と added が 1 件送信されます。

フィールド型常に存在説明
member_idhashidはいメンバー ID。
usernamestringはいユーザー名。
emailstringはいメールアドレス。
access_group_idhashidはいOpen API の access_groups[].id と同じ値です。
access_group_namestringはいその時点でのグループ名。削除されたグループの場合は、削除前の名前です。
sourcestringはい下の表を参照してください。
changed_byhashidいいえmanual と invitation の場合のみ。
sourceイベント意味changed_by
manualadded, removed管理者がコンソールで付与または削除したその管理者
subscriptionadded, removedサブスクリプションが開始、終了、またはティアが変更されたなし
invitationaddedメンバーが招待を承諾した招待した人
defaultaddedメンバーがデフォルトグループに入ったなし
group_deletedremovedアクセスグループが削除されたなし

送信されない場合

  • メンバーのグループの組み合わせが実際には変わっていない場合。
  • サインアップ時に、メンバーが自動的にデフォルトグループに入る場合。
  • 変更が、まだ承認待ちのメンバーに影響する場合。
  • アカウントが削除されたことでグループが解除された場合。
  • アクセスグループの削除やデフォルトグループの設定は一括変更です。イベントはメンバーごとに送信され、操作から数秒から数分遅れて届きますが、occurred_at は操作を行った時刻のままです。これらの event_id は形式が異なるため、不透明な値として扱う必要があります。

コンテンツ

4 つのイベントすべてで、post_id はコンテンツ自体の ID、user_id は操作した人ではなく作成者です。コンテンツがスペースに属していない場合、space_id は省略されます。プライベートスペース内のコンテンツも送信されるため、受信側で必要なら space_id でフィルタリングしてください。

post.created

投稿またはブログ記事が公開されました。

フィールド型常に存在説明
post_idhashidはい投稿 ID。
user_idhashidはい作成者。
space_idhashidいいえそれが属するスペース。
titlestringはいタイトル。空文字列の場合があります。
bodystringはいMarkdown のソースで、最大 500 文字です。単語や句読点の位置で途中で切れることがあり、省略記号は付きません。ブログ記事の場合は抜粋です。

送信される場合

  • 投稿またはブログ記事が公開状態になった場合。直接公開された場合、審査キューから承認された場合、予約時刻に達した場合が含まれます。

送信されない場合

  • コメントが公開された場合。この場合は comment.created が送信されます。
  • ブログ記事が送信するのは初回の公開時のみですが、非公開にしてから再度予約された記事は、再び送信する場合があります。post_id に対して冪等になるように処理を実装してください。

post.deleted

投稿またはブログ記事が削除されました。

フィールド型常に存在説明
post_idhashidはい投稿 ID。
user_idhashidはい作成者。
space_idhashidいいえそれが属するスペース。

送信される場合

  • 作成者が削除した場合、管理者が削除した場合(1 件でも一括でも)、報告の対応中に削除された場合、または BAN によってメンバーのコンテンツが消去された場合。メンバーのコンテンツを消去すると、イベントがまとめて発生することがあります。

送信されない場合

  • ブログ記事が非公開にされて下書きに戻った場合。これは削除ではありません。
  • 公開されたことのない予約投稿を削除した場合もこのイベントが送信されるため、これを受信したからといって、以前に post.created を受信しているとは限りません。
  • コンテンツの復元には、専用のイベントはありません。

comment.created

コメントが公開されました。

フィールド型常に存在説明
post_idhashidはいコメント自体の ID。
parent_idhashidはい返信先の投稿またはコメント。
user_idhashidはい作成者。
space_idhashidいいえそれが属するスペース。
bodystringはいpost.created の body と同じルールです。

comment.deleted

コメントが削除されました。post.deleted と同じ条件で送信されます。

フィールド型常に存在説明
post_idhashidはいコメント自体の ID。
parent_idhashidはい返信先の投稿またはコメント。
user_idhashidはい作成者。
space_idhashidいいえそれが属するスペース。

支払いとサブスクリプション

これらのイベントは、Stripe のサブスクリプション、スペースの単発購入、返金を対象とします。メンバーがすでに存在しない場合を除き、username と email を含みます。

アプリ内課金と、ギフトまたは引き換えコードで付与されたサブスクリプションは、payment.* や subscription.* を送信しません。プランがアクセスグループに紐づいている場合は、source を subscription に設定した member.access_group_added を送信し、アクセスが終了したときには member.access_group_removed を送信します。これらを使って権限の変化を追跡できます。

有料のサインアップではアカウントより先に支払いが発生するため、最初の支払いに関するイベントはアカウントが作成された後に送信されます。送信されるのは member.joined、subscription.created、そして最初の請求書が支払われた場合は payment.received です。これらはどの順序でも届く可能性があります。

payment.received

支払いを受け取りました。ペイロードの形は 2 種類あり、invoice_id の有無で区別できます。

フィールド型サブスクリプションの請求書単発購入説明
member_idhashidはいはいメンバー ID。
usernamestring通常は存在通常は存在メンバーがすでに存在しない場合は省略されます。
emailstring通常は存在通常は存在メンバーがすでに存在しない場合は省略されます。
amount_centsnumberはいはい支払われた金額。トライアル開始時の金額ゼロの請求書では 0 です。
currencystringはいはい通貨。
invoice_idstringはいいいえStripe の請求書 ID。
subscription_idstringはいいいえStripe のサブスクリプション ID。
period_startRFC 3339はいいいえこの支払いで購入された期間の開始。
period_endRFC 3339はいいいえこの支払いで購入された期間の終了。アクセスの有効期限として使えます。
order_idhashidいいえはい注文 ID。
space_idhashidいいえはい購入されたスペース。
payment_intent_idstringいいえはいStripe の PaymentIntent ID。
  • このイベントには plan_id はありません。
  • 単発購入では、アクセスが付与された後に、注文ごとに 1 回送信されます。

subscription.renewed

サブスクリプションが正常に更新されました。フィールドは、payment.received のサブスクリプション請求書の形と同じです。

  • 更新では両方のイベントが送信され、event_id は異なります。両方を購読している場合は、売上を二重に記録しないでください。

payment.failed

請求書の支払いに失敗しました。Stripe が課金を再試行するたびを含め、失敗のたびに送信されます。

フィールド型常に存在説明
member_idhashidはいメンバー ID。
usernamestringいいえメンバーがすでに存在しない場合は省略されます。
emailstringいいえメンバーがすでに存在しない場合は省略されます。
invoice_idstringはいStripe の請求書 ID。
subscription_idstringはいStripe のサブスクリプション ID。
amount_due_centsnumberはい請求額。
currencystringはい通貨。
attempt_countnumberはいその請求書に対する何回目の試行か。

subscription.created

Stripe でサブスクリプションが作成されました。これは支払い済みという意味ではありません。支払いの確認には payment.received を使ってください。

フィールド型常に存在説明
member_idhashidはいメンバー ID。
usernamestringいいえメンバーがすでに存在しない場合は省略されます。
emailstringいいえメンバーがすでに存在しない場合は省略されます。
subscription_idstringはいStripe のサブスクリプション ID。
plan_idhashidはいメンバー向けサブスクリプションプランの ID。
statusstringはいよくある値: active、trialing、incomplete(最初の請求書が未決済)。
price_centsnumberはいプランの単価。割引前の金額です。
currencystringはい通貨。
billing_periodstringはいmonthly または annual。
period_startRFC 3339はい現在の期間の開始。
period_endRFC 3339はい現在の期間の終了。

subscription.canceled

サブスクリプションが実際に終了しました。メンバーが期間末でのキャンセルを予約しただけでは送信されず、期間が終わった時点で送信されます。

フィールド型常に存在説明
member_idhashidはいメンバー ID。
usernamestringいいえメンバーがすでに存在しない場合は省略されます。
emailstringいいえメンバーがすでに存在しない場合は省略されます。
subscription_idstringはいStripe のサブスクリプション ID。
plan_idhashidはいメンバー向けサブスクリプションプランの ID。
previous_statusstringはい終了前のステータス。たとえば active、trialing、past_due など。
cancelled_atRFC 3339はい終了した時刻。
  • 一度も支払われないまま期限切れになったサブスクリプションもこのイベントを送信し、その previous_status は incomplete です。そのメンバーはアクセスを持っていなかったため、解約(チャーン)には数えないでください。
  • 綴りには揺れがあります。イベントは canceled、フィールドは cancelled_at、サブスクリプションのステータス値は cancelled です。

refund.issued

返金が行われました。サブスクリプションの請求書の返金と単発購入の返金は、このイベントを共有し、フィールドが異なります。invoice_id の有無で区別できます。

フィールド型サブスクリプションの請求書単発購入説明
member_idhashidはいはいメンバー ID。
usernamestring通常は存在通常は存在メンバーがすでに存在しない場合は省略されます。
emailstring通常は存在通常は存在メンバーがすでに存在しない場合は省略されます。
amount_refunded_centsnumberはいはいこれまでに返金された合計であり、今回の返金額ではありません。
currencystringはいはい通貨。
refund_statusstringrefunded または partially_refundedrefunded返金後のステータス。
is_partialbooleanはい常に false部分返金かどうか。
previous_statusstringたとえば paid や partially_refundedcompleted返金前のステータス。
invoice_idstringはいいいえStripe の請求書 ID。
charge_idstringはい。空文字列の場合がありますStripe で開始された返金の場合のみStripe の請求(charge)ID。
order_idhashidいいえはい注文 ID。
space_idhashidいいえはい購入されたスペース。
payment_intent_idstringいいえはいStripe の PaymentIntent ID。
  • Stripe で行われた単発購入の部分返金ではイベントは送信されず、注文とアクセスはそのまま変わりません。

テスト配信

管理コンソールの Webhook をテストは、リクエストを 1 件すぐに送信し、結果を配信ログに書き込みます。無効の Webhook もテストでき、リトライはされません。署名を含め、フォーマットは実際の配信と同じですが、次の点が異なります。

項目テスト配信実際の配信
testtrue存在しない
event購読中のイベントにかかわらず、常に member.joined購読したイベント
dataサンプルデータ実際のデータ
event_id、occurred_at存在しない存在する

まず test を確認し、true なら 200 を返してください。そうしないと、member.joined のテストによって、あなたのシステムに実際にメンバーが作成されてしまうことがあります。

その他のチャネル

配信ログには、次のソースも表示されます。これらはカスタム Webhook と同じイベントを、異なるフォーマットで使用します。

チャネル本文署名その他の違い
Zapier同じ data。エンベロープには真偽値の test が追加され、webhook_id はありません。接続時に署名シークレットを設定した場合のみ。アルゴリズムは同じです。X-Mateflow-Delivery-Id ヘッダーが追加されます。
Slack、Discord読み取り用のテキストのみ。Slack では text、Discord では content として含まれます。Zapier と同じです。X-Mateflow-Delivery-Id ヘッダーが追加されます。構造化されたフィールドはありません。
オートメーションルール: Webhook を送信ルールに記述したテンプレート。ルールにシークレットがある場合のみ。アルゴリズムは同じです。このエンベロープは使用しません。送信するタイミングはルールが決めます。
Open API でコミュニティを呼び出す

構築を始める

コミュニティの管理コンソールで Webhook を作成し、テスト配信を送信して、ログで確認します。

14日間無料トライアル · 終了後は100人までのFreeプラン · クレジットカード不要