REST API

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.

POST/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)

urlstring (https URL, public host, no loopback)
eventstring (trends.surge | trends.velocity | trends.rising)
subredditstring (tracked subreddit name)
allow_nonstandard_portboolean (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

400POST /v1/webhooks
{
  "error": {
    "code": "WEBHOOK_DESTINATION_BLOCKED",
    "message": "address 127.0.0.1 is not a public IP",
    "request_id": "<redacted>"
  }
}
GET/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
    }
  }
}
GET/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>"
DELETE/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>"