Skip to content

Webhooks/event system for third-party integrations #33

Description

@nwwatson

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNet-new functionalitytier-2-mediumFeatures that improve competitiveness

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions