Summary
Prose has an MCP server for AI-driven integrations but no webhooks for traditional third-party integrations (Zapier, IFTTT, custom services). Webhooks are the standard mechanism for event-driven integrations.
Who Has This
- Ghost — Webhooks for post, member, and site events
- WordPress — Webhooks via plugins and REST API
- Buttondown — Webhooks for subscriber and email events
Why This Matters
Webhooks enable integrations without polling: auto-post to social media on publish, sync subscribers to a CRM, trigger CI/CD on content changes, send notifications to Slack/Discord, etc. They're the backbone of modern service integration.
Recommended Implementation
Model
Create a Webhook model:
url (string) — Target URL
events (json/array) — Subscribed event types
secret (string, encrypted) — HMAC signing secret
active (boolean)
last_triggered_at, last_response_code
Events
post.published, post.updated, post.deleted
post.scheduled, post.unpublished
subscriber.created, subscriber.deleted
comment.created, comment.approved
Delivery
- Background job (
DeliverWebhookJob) via Solid Queue
- HMAC-SHA256 signature in
X-Prose-Signature header
- Retry with exponential backoff (3 attempts)
- Disable webhook after N consecutive failures
Admin UI
/admin/settings/webhooks — Manage webhook endpoints
- Test button to send a ping event
- Delivery log with response codes
Payload Format
{
"event": "post.published",
"timestamp": "2026-02-22T12:00:00Z",
"data": { /* serialized resource */ }
}
Key Files to Create
app/models/webhook.rb
app/services/webhooks/dispatcher.rb — Event dispatch
app/jobs/deliver_webhook_job.rb
app/controllers/admin/webhooks_controller.rb
- ActiveSupport::Notifications or ActiveRecord callbacks for event emission
Summary
Prose has an MCP server for AI-driven integrations but no webhooks for traditional third-party integrations (Zapier, IFTTT, custom services). Webhooks are the standard mechanism for event-driven integrations.
Who Has This
Why This Matters
Webhooks enable integrations without polling: auto-post to social media on publish, sync subscribers to a CRM, trigger CI/CD on content changes, send notifications to Slack/Discord, etc. They're the backbone of modern service integration.
Recommended Implementation
Model
Create a
Webhookmodel:url(string) — Target URLevents(json/array) — Subscribed event typessecret(string, encrypted) — HMAC signing secretactive(boolean)last_triggered_at,last_response_codeEvents
post.published,post.updated,post.deletedpost.scheduled,post.unpublishedsubscriber.created,subscriber.deletedcomment.created,comment.approvedDelivery
DeliverWebhookJob) via Solid QueueX-Prose-SignatureheaderAdmin UI
/admin/settings/webhooks— Manage webhook endpointsPayload Format
{ "event": "post.published", "timestamp": "2026-02-22T12:00:00Z", "data": { /* serialized resource */ } }Key Files to Create
app/models/webhook.rbapp/services/webhooks/dispatcher.rb— Event dispatchapp/jobs/deliver_webhook_job.rbapp/controllers/admin/webhooks_controller.rb