---
title: "Explain why a mention scored the way it did"
method: POST
path: "/mentions/{id}/explain"
tags: ["Mentions"]
---

# Explain why a mention scored the way it did

`POST /mentions/{id}/explain`

## Request

- Base URL: `https://ai.redreplier.com/ai-app/api/v1`
- URL: `https://ai.redreplier.com/ai-app/api/v1/mentions/{id}/explain`
- Auth: HTTP bearer

Fills in `relevanceReason`, `tags` and `aiReplySuggestion` when they are missing, which runs AI scoring. A mention that already has a reason and a reply comes back as it is, with no new AI call, and so does one whose website has no description or whose scoring fails. An id that matches no mention in this workspace answers 201 with an empty body, not 404.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Workspace-Id` string

## Response `201`

The mention with its scoring rationale, or an empty body when no mention in this workspace has this id

- NullableMention
  - `id` string, uuid, required
  - `websiteId` string, uuid, required
  - `source` 'REDDIT_POST' | 'REDDIT_COMMENT' | 'TWITTER' | 'BLUESKY' | 'HACKERNEWS' | 'FACEBOOK' | 'FACEBOOK_GROUP', required
  - `keyword` string, nullable: The monitored keyword this conversation matched.
  - `title` string, nullable
  - `contentText` string, nullable
  - `url` string, uri, nullable: Link to the conversation. Null when the platform gives no public link, as with some Facebook and Bluesky posts.
  - `author` string, nullable
  - `subreddit` string, nullable: The subreddit on Reddit and the group id on Facebook. Null on other platforms.
  - `status` 'NEW' | 'REJECTED' | 'APPROVED', required
  - `relevanceScore` number, nullable: Higher means more likely to be worth a reply.
  - `relevanceReason` string, nullable: Why the scorer landed on that number.
  - `aiReplySuggestion` string, nullable: Draft reply for a human to review before posting.
  - `tags` string[]
  - `publishedAt` string, date-time, nullable
  - `ingestedAt` string, date-time, nullable
  - `reviewedAt` string, date-time, nullable
  - `createdAt` string, date-time, nullable
  - `updatedAt` string, date-time, nullable

## Other responses

- `401`: Missing, invalid, expired or revoked API key or access token. `code: token_issuer_lost_access` means the member who created the API key was deactivated or lost access to the workspace: ask a workspace admin for a new key
- `403`: The credentials are valid but cannot be used here. `code: permission_denied`: the workspace role behind the API key or OAuth sign-in lacks `redreplier.write`; `role`, `keyRole` and `issuerRole` say which role fell short. `code: subscription_required`: the organization plan does not include API access. `code: workspace_access_denied`: `X-Workspace-Id` names a workspace the caller cannot reach, or an API key was sent to a workspace other than its own
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/redreplier/apis/redreplier-public-api.md) · [All operations](https://skmtc.dev/redreplier/apis/redreplier-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/redreplier/apis/redreplier-public-api/revisions/4388cca3045e?raw)
