投稿が公開された瞬間も、されなかった瞬間もすぐわかる
URLを一度登録すれば、配信が確定するたびにFoPostがそのURLを呼び出します。各イベントには投稿ID、アカウント、プラットフォーム、パーマリンクまたはエラー内容が含まれるため、ポーリングなしでシステムが反応できます。
curl -X POST https://api.fopost.com/v1/webhooks \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workspaceId": "9b2f6c1e-...",
"url": "https://yourbrand.com/hooks/social",
"events": ["delivery.published", "delivery.failed", "post.published", "post.failed"]
}'確定時に発行
アカウントへの配信ごとに1イベント。ネットワークが承認または拒否した時点ですぐに送信されます。
署名付き
すべてのリクエストに署名ヘッダーが付くため、送信元を検証できます。
再試行
2xx以外のレスポンスは、イベントを破棄する前にバックオフ付きで再試行されます。
公開のライフサイクル全体をイベントでカバー
delivery.publishedは、ネットワークが1つのアカウントへの配信を受け付けたときに発行され、パーマリンクを含みます。delivery.failedは公開できないときに発行され、プラットフォームのエラー内容を含みます。post.publishedとpost.failedは、すべてのアカウントの結果が確定したあと、投稿ごとに1回発行されます。
Webhookリファレンスを読む{
"event": "delivery.published",
"data": {
"postId": "7d3e0a52-...",
"postAccountId": "a3c5e7f9-...",
"accountId": "4a71d80b-...",
"platform": "linkedin",
"externalUrl": "https://linkedin.com/feed/update/..."
},
"timestamp": "2026-09-01T09:00:07Z"
}delivery.published
パーマリンクをそのまま保存したり、CMSからリンクしたりできます。
delivery.failed
ネットワーク自身のエラーメッセージが届くので、推測せずに原因を直せます。
ワークスペースごと
Webhookは1つのワークスペースに属し、そのワークスペースの投稿だけを扱います。
処理する前にペイロードを検証
各リクエストは、Webhook作成時に返されるシークレットで署名されています。生のボディから署名を計算してヘッダーと比較し、一致しないものは拒否してください。2xxをすばやく返し、処理はそのあとに行います。
署名の検証を見るapp.post('/hooks/social', async (req, res) => {
const signature = req.header(SIGNATURE_HEADER) // header name is in the docs;
if (!verify(req.rawBody, signature, process.env.WEBHOOK_SECRET)) {
return res.status(401).end();
}
const { event, data } = req.body;
await queue.add(event, data);
res.status(200).end();
});署名ヘッダー
作成時に受け取ったシークレットで検証します。ローテーションは作り直しで行います。
タイムスタンプ付き
timestampを使えば、古いリプレイを無視し、イベントを正しい順序で処理できます。
IDによる冪等性
再試行には同じイベントIDが付くため、二重配信は簡単に除外できます。
エンドポイントの作成、一覧、削除をコードから
WebhookはシンプルなAPIオブジェクトです。環境ごとに1つ作成し、一覧で登録内容を監査し、不要になったものは削除します。開発中はステージングのURLに向け、本番への切り替えは1回の呼び出しで済みます。
開発を始める
エンドポイントの一覧
GET /v1/webhooksで、すべてのURLと購読しているイベントを確認できます。
環境ごと
ステージング用に別のURLを登録すれば、テスト投稿が本番に届くことはありません。
webhooksスコープ
エンドポイントの管理には専用のスコープが必要です。投稿専用のキーでは追加できません。