Skip to Content
Webhooks

Webhook payload reference

IntentLoom sends an HTTPS POST request when a new Reddit lead meets your notification threshold. The request body is UTF-8 JSON and describes either a Reddit post lead or a Reddit comment lead.

To start receiving events, add an HTTPS endpoint under Notifications → Webhook in the IntentLoom dashboard. Notification settings apply across all projects in your account. Events are sent in real time; leads created before you configure the webhook are not sent retroactively.

lead.created envelope

Every real event uses the same top-level envelope.

FieldTypeDescription
idUUID stringUnique event ID.
typestringEvent type. Currently always lead.created.
versionstringPayload schema version. Currently v1.
occurred_atstringUTC timestamp in ISO 8601 format.
projectobjectProject associated with the lead.
leadobjectImmutable snapshot of the lead at event creation time.

Project fields

FieldTypeDescription
project.idUUID stringIntentLoom project ID.
project.namestringProject name at event creation time.

Common lead fields

FieldTypeDescription
lead.idUUID stringID of the post lead or comment lead.
lead.kindstringreddit_post_lead or reddit_comment_lead.
lead.relevance_scorenumberRelevance score that met your notification threshold.
lead.source_typestringlead for keyword-driven discovery or competitor for competitor monitoring.
lead.match_reasonstringExplanation recorded when IntentLoom qualified the lead. It can be empty.
lead.triggerobjectKeyword and competitor context that triggered discovery.
lead.postobjectReddit post data. Its fields depend on lead.kind.
lead.commentobjectReddit comment data. Present only when lead.kind is reddit_comment_lead.

Trigger fields

FieldTypeDescription
lead.trigger.keywordstring or nullMatched project keyword, when available.
lead.trigger.competitorstring or nullCompetitor website associated with the match, when applicable.
Note

Treat trigger fields as optional context. Older or indirectly matched leads can contain null for either value.

Reddit post lead

For reddit_post_lead, the post object contains the post title, content excerpt, author, subreddit, and Reddit URL.

Post fields

FieldTypeDescription
lead.post.titlestringReddit post title.
lead.post.body_excerptstringFirst 1,000 characters of the post body. It can be empty.
lead.post.subredditstringSubreddit name as supplied by Reddit, for example r/startups.
lead.post.authorstringReddit author name.
lead.post.source_urlstringAbsolute URL for the Reddit post.

Example

{ "id": "92e2d460-45b8-4bc7-a0d3-384faf4095d4", "type": "lead.created", "version": "v1", "occurred_at": "2026-07-27T08:15:30.123456Z", "project": { "id": "10cdf591-16c6-4054-a8f7-d9a6123eb371", "name": "Acme Scheduler" }, "lead": { "id": "e11097bf-f65f-42ee-bb23-c62a24d8040d", "kind": "reddit_post_lead", "relevance_score": 85.0, "source_type": "lead", "match_reason": "The author is actively looking for a scheduling tool for a small team.", "trigger": { "keyword": "scheduling tool", "competitor": null }, "post": { "title": "Looking for a scheduling tool", "body_excerpt": "Can anyone recommend a scheduling tool for a small team?", "subreddit": "r/startups", "author": "alice", "source_url": "https://www.reddit.com/r/startups/comments/abc123/looking_for_a_scheduling_tool/" } } }

Reddit comment lead

For reddit_comment_lead, the post object identifies the parent Reddit thread and a separate comment object contains the matched comment.

Parent post fields

FieldTypeDescription
lead.post.titlestringTitle of the parent Reddit post.
lead.post.subredditstringSubreddit name as supplied by Reddit.
lead.post.source_urlstringReddit URL stored for the matched comment thread. In V1, this is the same URL as lead.comment.source_url.

Comment fields

FieldTypeDescription
lead.comment.body_excerptstringFirst 1,000 characters of the matched comment. It can be empty.
lead.comment.authorstringReddit comment author name.
lead.comment.source_urlstringAbsolute URL for the Reddit comment.

Example

{ "id": "d78457a4-e282-4e1c-bc93-531583453c56", "type": "lead.created", "version": "v1", "occurred_at": "2026-07-27T09:42:11.478901Z", "project": { "id": "10cdf591-16c6-4054-a8f7-d9a6123eb371", "name": "Acme Analytics" }, "lead": { "id": "97c0387e-5900-43a0-8c20-486c19f66498", "kind": "reddit_comment_lead", "relevance_score": 91.0, "source_type": "competitor", "match_reason": "The commenter is comparing analytics products within the project's target budget.", "trigger": { "keyword": "product analytics", "competitor": "https://competitor.example.com" }, "post": { "title": "Best analytics platform for a small SaaS?", "subreddit": "r/SaaS", "source_url": "https://www.reddit.com/r/SaaS/comments/xyz789/best_analytics_platform/c1_example/" }, "comment": { "body_excerpt": "We need product analytics under $100 per month and are comparing a few options.", "author": "bob", "source_url": "https://www.reddit.com/r/SaaS/comments/xyz789/best_analytics_platform/c1_example/" } } }

Idempotency

Note

Use the body id as your idempotency key. Store it after processing the event so retry deliveries remain safe to handle.

The header and body IDs identify the event, not an individual delivery attempt.

Important

Send a 2xx response after the event has been accepted for processing.

Response and retry behavior

Your endpoint should respond within 10 seconds.

Response or failureIntentLoom behavior
Any 2xx responseMarks the delivery successful.
408, 425, 429, any 5xx, timeout, or network failureRetries the delivery.
Any 3xx responseMarks the delivery failed. Redirects are not followed.
Most other 4xx responsesMarks the delivery failed without an automatic retry.

A retryable delivery is attempted at most five times. The delays after the first four failed attempts are approximately 1 minute, 5 minutes, 30 minutes, and 2 hours. After 10 consecutive deliveries reach a final failed state, IntentLoom pauses the webhook destination. You can inspect delivery history, retry eligible failures, and resume a paused destination from the dashboard.

Version handling

Use the version field to choose the parser for an event. For v1:

  • accept fields you recognize and ignore unknown fields;
  • branch on lead.kind before reading kind-specific fields;
  • do not assume nullable trigger values are present; and
  • preserve the event ID when passing the event to downstream systems.
Last updated on