Webhooks
Register a URL to receive trend events when a subreddit you care about surges, sees keyword spikes, or has posts climbing fast.
Each delivery is signed with a per-webhook secret, sent with a deterministic ID so you can safely deduplicate retries, and retried with exponential backoff on transient failures. Destination URLs are validated against an SSRF policy: no loopback, no link-local, no private RFC1918 addresses, no metadata services.
/v1/webhooksBusiness+Create a webhook
Registers a destination URL for trend events. Returns a `secret` ONCE in the response — store it; you'll need it to verify incoming signatures.
Request body (JSON)
| url | string (https URL, public host, no loopback) |
| event | string (trends.surge | trends.velocity | trends.rising) |
| subreddit | string (tracked subreddit name) |
| allow_nonstandard_port | boolean (default false) |
Request
curl -X POST https://api.redditintel.dev/v1/webhooks \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{"url":"https://my.app/hook","event":"trends.surge","subreddit":"python","allow_nonstandard_port":false}'Response · 201
X-RateLimit-Limit: 100000{ "data": { "id": "01KRPNGKXRWA7WX44116V3SM0P", "url": "https://example.com/webhooks/in", "event": "trends.surge", "subreddit": "python", "allow_nonstandard_port": false, "created_at": "2026-05-15T20:33:42.840667Z", "last_delivery_at": null, "last_status": null, "secret": "<redacted>" }, "meta": { "request_id": "<redacted>", "page": null } }
Error responses
POST /v1/webhooks{ "error": { "code": "WEBHOOK_DESTINATION_BLOCKED", "message": "address 127.0.0.1 is not a public IP", "request_id": "<redacted>" } }
/v1/webhooksBusiness+List your webhooks
Returns all webhooks owned by the calling customer. Secrets are never re-emitted after creation.
Request
curl -X GET https://api.redditintel.dev/v1/webhooks \
-H "Authorization: Bearer <YOUR_API_KEY>"Response · 200
X-RateLimit-Limit: 100000{ "data": [ { "id": "01KRPKNKB8WTJFZ05S80FEACVR", "url": "https://example.com/webhooks/in", "event": "trends.surge", "subreddit": "python", "allow_nonstandard_port": false, "created_at": "2026-05-15T20:01:28.936374Z", "last_delivery_at": null, "last_status": null } ],, "meta": { "request_id": "<redacted>", "page": { "limit": 100, "next_cursor": null, "prev_cursor": null } } }
/v1/webhooks/{webhook_id}Business+Get a single webhook
Fetch metadata for one of your webhooks. Returns 404 if it doesn't belong to you.
Parameters
webhook_id string·path·required | 26-char Crockford base32 ULID returned at creation. example: 01HABCDEFGHJKMNPQRSTVWXYZA |
Request
curl -X GET https://api.redditintel.dev/v1/webhooks/{webhook_id} \
-H "Authorization: Bearer <YOUR_API_KEY>"/v1/webhooks/{webhook_id}Business+Delete a webhook
Idempotent. Deleting a missing webhook is a no-op (204).
Parameters
webhook_id string·path·required | Webhook ULID. example: 01HABCDEFGHJKMNPQRSTVWXYZA |
Request
curl -X DELETE https://api.redditintel.dev/v1/webhooks/{webhook_id} \
-H "Authorization: Bearer <YOUR_API_KEY>"