---
title: "Mention events"
description: "What an instant rule sends for every matching mention."
canonical: https://docs.mentio.dev/webhooks/mention-events
markdown: https://docs.mentio.dev/webhooks/mention-events.mdx
---

# Mention events

What an instant rule sends for every matching mention.

An `instant` rule sends one request per mention that passes its filter, right after the classifier scored it. `data` is the mention exactly as `GET /v1/mentions/{id}` returns it, so everything in the [Mentions reference](/api/mentions/get-mention) applies to the payload.

```json
{
  "id": "dlv_9c1e...",
  "event": "mention.buy_intent",
  "createdAt": "2026-09-03T08:15:04.201Z",
  "alert": { "id": "feed_2b7d...", "name": "Buying signals" },
  "data": {
    "id": "mm_7f3a...",
    "status": "open",
    "relevant": true,
    "delivered": false,
    "priority": 74.2,
    "keyword": { "id": "kw_60d9...", "term": "your product name" },
    "post": {
      "platform": "reddit",
      "url": "https://www.reddit.com/r/devops/comments/...",
      "text": "We're evaluating your product name vs the incumbent for our team, anyone switched recently?",
      "publishedAt": "2026-09-03T08:12:44.000Z",
      "replyTo": null
    },
    "author": {
      "id": "aut_1c2d...",
      "name": "ops_lead",
      "handle": "u/ops_lead",
      "url": "https://www.reddit.com/user/ops_lead",
      "avatarUrl": null,
      "followers": 1240,
      "tags": ["prospect"]
    },
    "classification": {
      "relevance": 91,
      "sentiment": "neutral",
      "intents": ["buy_intent", "question"],
      "automated": false,
      "language": "en",
      "note": "Team lead comparing the product against an incumbent before switching.",
      "failed": false,
      "feedback": null
    },
    "triage": { "assignee": null, "snoozedUntil": null, "note": null },
    "createdAt": "2026-09-03T08:15:02.113Z"
  }
}
```

## What to expect

* **Only relevant mentions are delivered.** `data.relevant` is always `true` and `data.classification` is never `null` in a mention event; noise below the threshold stays in the feed but never reaches a channel.
* **`data.delivered` describes the moment the payload was built**, before this request was sent, so it is usually `false` in the payload itself.
* **`data.id` is the mention id** (`mm_...`). Use it to `PATCH /v1/mentions/{id}` from your own tooling: set `status` to `done` once handled, or `assigneeId` to route it.
* **One post, several keywords, several events.** A post matching two of your keywords arrives once per keyword, each with its own `data.id` and `data.keyword`.

## Branching on the payload

Everything the rule filtered on is in the body, so one endpoint can serve every rule:

| Route on                  | Field                                                                                           |
| ------------------------- | ----------------------------------------------------------------------------------------------- |
| The rule                  | `event`, `alert.id`                                                                             |
| The keyword               | `data.keyword.term`, `data.keyword.id`                                                          |
| The platform              | `data.post.platform`                                                                            |
| Sentiment, intents, score | `data.classification.sentiment`, `data.classification.intents`, `data.classification.relevance` |
| Who wrote it              | `data.author.followers`, `data.author.tags`                                                     |
| Attention                 | `data.priority`, the same score that sorts the feed by priority                                 |

Retries and signature verification are covered in [Webhooks](/webhooks).
