Webhook
イベント
利用可能なすべてのWebhookイベントタイプとペイロード構造。
イベントエンベロープ
すべてのイベントは同じトップレベル構造を使用します:
json
{
"event": "user.created",
"data": { ... },
"timestamp": "2026-01-15T10:30:00.000Z"
}ユーザーイベント
user.created新しいユーザーが初めてサインアップするか、APIで作成されたときに発火します。
event.data
json
{
"event": "user.created",
"data": {
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe",
"emailVerified": false,
"isBanned": false,
"avatarUrl": null,
"publicMetadata": null,
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-15T10:30:00.000Z"
}
},
"timestamp": "2026-01-15T10:30:00.000Z"
}user.updatedユーザープロファイルまたはメタデータが更新されたときに発火します。
event.data
json
{
"event": "user.updated",
"data": {
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe (Updated)",
"emailVerified": true,
"isBanned": false,
"avatarUrl": "https:0
10: { 11: "pro" },
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-16T09:00:00.000Z"
}
},
"timestamp": "2026-01-16T09:00:00.000Z"
}user.deletedユーザーアカウントが完全に削除されたときに発火します。dataフィールドには削除前のユーザースナップショットが含まれます。
event.data
json
{
"event": "user.deleted",
"data": {
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe",
"createdAt": "2026-01-15T10:30:00.000Z"
}
},
"timestamp": "2026-01-20T11:00:00.000Z"
}user.signinユーザーがメール/パスワードまたはOAuthで正常にサインインしたときに発火します。
event.data
json
{
"event": "user.signin",
"data": {
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe",
"emailVerified": true,
"isBanned": false
}
},
"timestamp": "2026-01-15T10:30:00.000Z"
}user.signoutユーザーが明示的にサインアウトしたときに発火します。
event.data
json
{
"event": "user.signout",
"data": {
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe",
"emailVerified": true,
"isBanned": false
}
},
"timestamp": "2026-01-15T12:00:00.000Z"
}user.banned管理者がユーザーをBANしたときに発火します。すべてのアクティブセッションが失効します。
event.data
json
{
"event": "user.banned",
"data": {
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe",
"isBanned": true
}
},
"timestamp": "2026-01-15T10:30:00.000Z"
}user.unbannedユーザーのBANが解除されたときに発火します。
event.data
json
{
"event": "user.unbanned",
"data": {
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe",
"isBanned": false
}
},
"timestamp": "2026-01-16T10:00:00.000Z"
}セッションイベント
session.created新しいセッションが作成されたときに発火します — サインインまたはトークン更新時。
event.data
json
{
"event": "session.created",
"data": {
"session": {
"id": "sess_abc123",
"userId": "usr_abc123",
"ipAddress": "203.0.113.1",
"userAgent": "Mozilla/5.0...",
"createdAt": "2026-01-15T10:30:00.000Z"
},
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe"
}
},
"timestamp": "2026-01-15T10:30:00.000Z"
}session.revokedセッションが取り消されたときに発火します — サインアウトまたは管理者強制取り消し時。
event.data
json
{
"event": "session.revoked",
"data": {
"session": {
"id": "sess_abc123",
"userId": "usr_abc123",
"ipAddress": "203.0.113.1",
"userAgent": "Mozilla/5.0...",
"createdAt": "2026-01-15T10:30:00.000Z"
},
"user": {
"id": "usr_abc123",
"email": "user@example.com",
"displayName": "John Doe"
}
},
"timestamp": "2026-01-15T11:00:00.000Z"
}アクション→イベントマッピング
以下の表はSDKアクションとダッシュボード操作がどのイベントをトリガーするかを示します。
| アクション | 発火するイベント |
|---|---|
| SDK: signup() | user.created + session.created |
| SDK: signin() | user.signin + session.created |
| SDK: signout() | user.signout + session.revoked |
| SDK: OAuthログイン(新規ユーザー) | user.created + session.created |
| SDK: OAuthログイン(既存ユーザー) | user.signin + session.created |
| SDK: refreshTokens() | session.revoked + session.created |
| ダッシュボード: ユーザーをBAN | user.banned |
| ダッシュボード: ユーザーのBANを解除 | user.unbanned |
| ダッシュボード: ユーザー削除 | user.deleted |
| ダッシュボード: メタデータ更新 | user.updated |
| Backend API: ユーザー作成 | user.created |
| Backend API: ユーザー更新 | user.updated |
| Backend API: ユーザー削除 | user.deleted |
| Backend API: ユーザーBAN | user.banned |
| Backend API: ユーザーBAN解除 | user.unbanned |
| SDK: revokeSession() | session.revoked |
ハンドラーの例
最も一般的なユーザー同期ケースを処理するミニマルなイベントハンドラー:
routes/webhooks.ts
const { event, data } = JSON.parse(req.body.toString());
switch (event) {
case "user.created":
await db.users.create({ authonId: data.user.id, email: data.user.email });
break;
case "user.updated":
await db.users.update({ authonId: data.user.id }, { name: data.user.displayName });
break;
case "user.deleted":
await db.users.delete({ authonId: data.user.id });
break;
case "user.banned":
await db.users.update({ authonId: data.user.id }, { suspended: true });
break;
case "user.unbanned":
await db.users.update({ authonId: data.user.id }, { suspended: false });
break;
case "session.created":
console.log(`${data.user.email} signed in from ${data.session.ipAddress}`);
break;
}