mentio-dev · Schema

Mention

CompanySocial ListeningAI IntegrationSDKsReal-time Monitoring

Properties

Name Type Description
id string Mention id (mm_...): one post matched to one of your keywords. A post matching two keywords has two ids.
status string open: nobody handled it yet. ignored: hidden from the feed and channels by you. done: handled.
relevant boolean The classifier scored it at or above the delivery threshold (40).
delivered boolean Reached at least one of your channels.
priority number Attention score, one decimal, computed at read time: relevance halved, author reach on a follower ladder (unknown reach counts 8), the strongest intent (buy intent 20 down to praise 5), minus 2 per da
keyword object The keyword this post matched, the group it is in, and how it matched.
post object
parentMentionId stringnull For a comment whose parent post or comment is itself one of your mentions: that mention's id (mm_...). Null otherwise.
author objectnull Who posted it; null when the platform gave no author at all.
review objectnull An app store review's facts; null for every other post. Its sentiment comes from the stars (4 and 5 positive, 3 neutral, 1 and 2 negative) and it always counts as relevant, since you chose the app.
classification objectnull The classifier verdict, as corrected by your feedback; null while the post is still queued for classification.
triage object
duplicateOf stringnull Set on a cross-post: the id of the mention this one copies (the same author posting the same text again for the same keyword within three days, like one announcement pasted into five subreddits). A co
duplicates array The cross-posts filed under this mention, oldest first: where else its author posted it. Empty when there are none, and on a copy.
stats object Computed counts.
createdAt string When the match was recorded; the default feed order.
View JSON Schema on GitHub

JSON Schema

mentio-dev-mention-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/mentio-dev/json-schema/mentio-dev-mention-schema.json",
  "title": "Mention",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/mentio-dev-api-openapi.json#/components/schemas/Mention",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Mention id (mm_...): one post matched to one of your keywords. A post matching two keywords has two ids."
    },
    "status": {
      "type": "string",
      "enum": [
        "open",
        "ignored",
        "done"
      ],
      "description": "open: nobody handled it yet. ignored: hidden from the feed and channels by you. done: handled."
    },
    "relevant": {
      "type": "boolean",
      "description": "The classifier scored it at or above the delivery threshold (40)."
    },
    "delivered": {
      "type": "boolean",
      "description": "Reached at least one of your channels."
    },
    "priority": {
      "type": "number",
      "description": "Attention score, one decimal, computed at read time: relevance halved, author reach on a follower ladder (unknown reach counts 8), the strongest intent (buy intent 20 down to praise 5), minus 2 per day of age floored at 20."
    },
    "keyword": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Keyword id (kw_...)."
        },
        "term": {
          "type": "string",
          "description": "The tracked term."
        },
        "group": {
          "$ref": "#/$defs/GroupRef"
        },
        "matchedAs": {
          "type": "string",
          "enum": [
            "phrase",
            "close_words"
          ],
          "description": "phrase: the post holds the term as written. close_words: it holds the term's words close together, in another order or form (kept and billed only because the classifier scored it relevant)."
        },
        "matchedIn": {
          "type": "string",
          "enum": [
            "text",
            "speech"
          ],
          "description": "text: the term is in the post itself (its text, caption, hashtags or review). speech: it is only in what is said in the video (TikTok), whose transcript follows the 🎙 mark in post.text."
        }
      },
      "required": [
        "id",
        "term",
        "group",
        "matchedAs",
        "matchedIn"
      ],
      "description": "The keyword this post matched, the group it is in, and how it matched."
    },
    "post": {
      "type": "object",
      "properties": {
        "platform": {
          "type": "string",
          "enum": [
            "bluesky",
            "hackernews",
            "github",
            "stackoverflow",
            "devto",
            "reddit",
            "x",
            "youtube",
            "news",
            "linkedin",
            "tiktok",
            "instagram",
            "appstore",
            "googleplay",
            "trustpilot",
            "googlemaps",
            "rss"
          ],
          "description": "Platform: bluesky, hackernews, github, stackoverflow, devto, reddit, x, youtube, news, linkedin, tiktok, instagram, appstore (App Store reviews), googleplay (Google Play reviews), trustpilot (Trustpilot reviews), googlemaps (Google reviews of a place), rss (RSS and Atom feeds a keyword reads)."
        },
        "kind": {
          "type": "string",
          "enum": [
            "post",
            "comment",
            "repository"
          ],
          "description": "post: a top-level post. comment: an item that answers a post or another comment (a Reddit or Hacker News comment, an X or Bluesky reply, a Stack Overflow answer, a YouTube comment). repository: an event about a GitHub repository naming the keyword (see post.repository)."
        },
        "url": {
          "type": "string",
          "description": "Permalink of the post."
        },
        "text": {
          "type": "string",
          "description": "Title and body, truncated to 8 KB at ingest."
        },
        "title": {
          "type": [
            "string",
            "null"
          ],
          "description": "The post's own title where the platform has one: a Hacker News story, a Reddit thread, a GitHub issue or pull request, a Stack Overflow question, a DEV article, a YouTube video, a news article, a titled review. Null for platforms without titles (X, Bluesky, LinkedIn) and for posts ingested before October 2026."
        },
        "imageUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "A preview image of the post, when the platform sent one with it: a YouTube thumbnail, a DEV cover, a news article's sharing image, a Bluesky link card or image. Null otherwise."
        },
        "subreddit": {
          "type": [
            "string",
            "null"
          ],
          "description": "The subreddit a Reddit post was written in, without the r/ (SaaS). Null on every other platform."
        },
        "flair": {
          "type": [
            "string",
            "null"
          ],
          "description": "A Reddit post's flair, when its subreddit uses them (Question, Show and Tell). Null otherwise."
        },
        "repository": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "name": {
              "type": "string",
              "description": "The repository, owner/name."
            },
            "event": {
              "type": "string",
              "enum": [
                "new",
                "traction",
                "stars",
                "growth",
                "top"
              ],
              "description": "What happened. new: it was created. traction: under 30 days old, it reached 10 stars. stars: it passed a star milestone. growth: it gained stars fast in a week. top: one of the most starred repositories naming the keyword, brought by a new keyword's look-back."
            },
            "stars": {
              "type": "integer",
              "description": "Its stars when the event was found."
            },
            "weeklyStars": {
              "type": [
                "integer",
                "null"
              ],
              "description": "Stars gained in the 7 days before the event; null when that week is not known yet."
            }
          },
          "required": [
            "name",
            "event",
            "stars",
            "weeklyStars"
          ],
          "description": "A GitHub repository event's facts, on a mention whose kind is repository; null on every other mention. The sentence is post.title."
        },
        "links": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Links the post carries, in the order written, at most 20. Empty for a post with none, and for posts ingested before September 2026."
        },
        "publishedAt": {
          "type": "string",
          "description": "When the post was published."
        },
        "engagement": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "likes": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0
            },
            "reposts": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0
            },
            "replies": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0
            },
            "quotes": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0
            },
            "views": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0
            },
            "bookmarks": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0
            }
          },
          "required": [
            "likes",
            "reposts",
            "replies",
            "quotes",
            "views",
            "bookmarks"
          ],
          "description": "Engagement counts as the platform reported them when the post was ingested, usually minutes after it was written; a count the platform does not have is null. Null as a whole for platforms that report none and for posts ingested before September 2026. X carries all six."
        },
        "replyTo": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "author": {
              "type": [
                "string",
                "null"
              ],
              "description": "Parent post author as the platform names them."
            },
            "url": {
              "type": [
                "string",
                "null"
              ],
              "description": "Parent post URL."
            },
            "text": {
              "type": [
                "string",
                "null"
              ],
              "description": "Parent post text, when the platform gave it."
            }
          },
          "required": [
            "author",
            "url",
            "text"
          ],
          "description": "The post or comment this one answers; null for top-level posts."
        }
      },
      "required": [
        "platform",
        "kind",
        "url",
        "text",
        "title",
        "imageUrl",
        "subreddit",
        "flair",
        "repository",
        "links",
        "publishedAt",
        "engagement",
        "replyTo"
      ]
    },
    "parentMentionId": {
      "type": [
        "string",
        "null"
      ],
      "description": "For a comment whose parent post or comment is itself one of your mentions: that mention's id (mm_...). Null otherwise."
    },
    "author": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Person id (aut_...) for GET /v1/people/{id}; null when the account is not in the audience yet."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Display name as the platform reports it."
        },
        "handle": {
          "type": [
            "string",
            "null"
          ],
          "description": "Platform handle derived from the profile URL, formatted as the platform shows it (@name, u/name); null where the platform has none."
        },
        "url": {
          "type": [
            "string",
            "null"
          ],
          "description": "Profile URL."
        },
        "avatarUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Profile picture; null where the platform has none."
        },
        "followers": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Follower count as of their newest post; null where the platform has none."
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Your tags on this person: the workspace's, then those the mention's own keyword group gave them (set with groupId on /v1/people), each once."
        }
      },
      "required": [
        "id",
        "name",
        "handle",
        "url",
        "avatarUrl",
        "followers",
        "tags"
      ],
      "description": "Who posted it; null when the platform gave no author at all."
    },
    "review": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "rating": {
          "type": "integer",
          "minimum": 1,
          "maximum": 5,
          "description": "Stars the reviewer gave."
        },
        "ratingMax": {
          "type": "integer",
          "description": "The top of the scale: 5 on both stores."
        },
        "title": {
          "type": [
            "string",
            "null"
          ],
          "description": "The review's headline; null where the store has none (Google Play)."
        },
        "version": {
          "type": [
            "string",
            "null"
          ],
          "description": "The app version the reviewer ran, when the store says."
        },
        "country": {
          "type": [
            "string",
            "null"
          ],
          "description": "The storefront it was read in (App Store, Google Play) or the reviewer's country (Trustpilot), a lowercase two-letter code; null where the platform gives none."
        },
        "verified": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "The platform marks the review as verified (Trustpilot); null where the platform has no such mark."
        },
        "response": {
          "type": [
            "string",
            "null"
          ],
          "description": "The developer's reply as it stood when the review was collected; null for none."
        },
        "responseAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "When the developer replied."
        },
        "app": {
          "type": "object",
          "properties": {
            "platform": {
              "type": "string",
              "enum": [
                "appstore",
                "googleplay",
                "trustpilot",
                "googlemaps"
              ],
              "description": "appstore (Apple App Store), googleplay (Google Play), trustpilot (a company's Trustpilot page) or googlemaps (a place's Google reviews)."
            },
            "id": {
              "type": "string",
              "description": "The store's app id."
            },
            "url": {
              "type": "string",
              "description": "The app's store listing."
            }
          },
          "required": [
            "platform",
            "id",
            "url"
          ],
          "description": "The app reviewed."
        }
      },
      "required": [
        "rating",
        "ratingMax",
        "title",
        "version",
        "country",
        "verified",
        "response",
        "responseAt",
        "app"
      ],
      "description": "An app store review's facts; null for every other post. Its sentiment comes from the stars (4 and 5 positive, 3 neutral, 1 and 2 negative) and it always counts as relevant, since you chose the app."
    },
    "classification": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "relevance": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0,
          "maximum": 100,
          "description": "0 to 100; null only when classification failed."
        },
        "sentiment": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "positive",
            "neutral",
            "negative"
          ],
          "description": "Classifier sentiment."
        },
        "intents": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Intent and topic tags: buy_intent, question, complaint, praise, comparison, churn_intent (leaving or replacing the keyword), bug_report, pricing, hiring, event, promotional, testimonial (a customer vouching for it from their own use), industry_insight (analysis or data about the field), launch (a product or feature launch announcement), feedback (a suggestion or request about it)."
        },
        "automated": {
          "type": "boolean",
          "description": "The post reads as machine-made: a bot or app account, a scheduled or templated post, an obvious AI-written summary. A label only: automated mentions stay in the feed, are delivered as usual and are billed like any other match. false while unjudged."
        },
        "language": {
          "type": [
            "string",
            "null"
          ],
          "description": "The language the post is written in, as an ISO 639-1 code (en, es, de); null when unknown, not one of the 20 the classifier names, or classified before languages were recorded."
        },
        "country": {
          "type": [
            "string",
            "null"
          ],
          "description": "Where the author is, as a lowercase ISO 3166-1 alpha-2 code (us, in, de): the classifier's reading of the author's profile location and the post. A best guess, not a fact the platform gave; null when nothing tells, when it is not one of the 60 the classifier names, or when classified before countries were recorded."
        },
        "organization": {
          "type": "boolean",
          "description": "The author is a company, brand or organization account rather than a person: a LinkedIn company page, a GitHub organization, an account that speaks for a business. A label only, like automated. false while unjudged."
        },
        "confidence": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0,
          "maximum": 1,
          "description": "How sure the classifier is of its relevance verdict, 0 to 1. null when the verdict came without one: the fallback model judged, or the row was scored before confidence was recorded."
        },
        "uncertain": {
          "type": "boolean",
          "description": "The verdict deserves a human look: confidence under 0.4, or the model that wrote the note disagreed with the verdict. A flag for reviewers; it never hides a mention."
        },
        "note": {
          "type": [
            "string",
            "null"
          ],
          "description": "One sentence from the classifier explaining the score."
        },
        "failed": {
          "type": "boolean",
          "description": "true when the model could not score this post; it stays in the feed and is not billed."
        },
        "feedback": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "relevant": {
              "type": [
                "boolean",
                "null"
              ],
              "description": "Your verdict on relevance, or null when you only corrected the sentiment."
            },
            "sentiment": {
              "type": [
                "string",
                "null"
              ],
              "enum": [
                "positive",
                "neutral",
                "negative"
              ],
              "description": "Your corrected sentiment, or null when you only judged relevance."
            },
            "at": {
              "type": "string",
              "description": "When the last verdict was given."
            },
            "original": {
              "type": "object",
              "properties": {
                "relevance": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 0,
                  "maximum": 100,
                  "description": "What the classifier scored before your verdict; null if it had not scored it."
                },
                "sentiment": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "enum": [
                    "positive",
                    "neutral",
                    "negative"
                  ],
                  "description": "The sentiment the classifier gave before your correction."
                }
              },
              "required": [
                "relevance",
                "sentiment"
              ],
              "description": "The classifier values your feedback replaced."
            }
          },
          "required": [
            "relevant",
            "sentiment",
            "at",
            "original"
          ],
          "description": "A person's correction of the verdict, or null. A relevance verdict sets `relevance` to 100 or 0 and `relevant` with it; a corrected sentiment replaces `sentiment`. Every list, filter, digest and report reads the corrected values."
        }
      },
      "required": [
        "relevance",
        "sentiment",
        "intents",
        "automated",
        "language",
        "country",
        "organization",
        "confidence",
        "uncertain",
        "note",
        "failed",
        "feedback"
      ],
      "description": "The classifier verdict, as corrected by your feedback; null while the post is still queued for classification."
    },
    "triage": {
      "type": "object",
      "properties": {
        "assignee": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "name": {
              "type": [
                "string",
                "null"
              ]
            },
            "email": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "id",
            "name",
            "email"
          ],
          "description": "Workspace member this mention is assigned to; null when unassigned."
        },
        "snoozedUntil": {
          "type": [
            "string",
            "null"
          ],
          "description": "Until when the mention stays out of the feed; null when not snoozed."
        },
        "note": {
          "type": [
            "string",
            "null"
          ],
          "description": "Internal note; null when none."
        }
      },
      "required": [
        "assignee",
        "snoozedUntil",
        "note"
      ]
    },
    "duplicateOf": {
      "type": [
        "string",
        "null"
      ],
      "description": "Set on a cross-post: the id of the mention this one copies (the same author posting the same text again for the same keyword within three days, like one announcement pasted into five subreddits). A copy is billed like any mention but is listed only under its original and never alerted on its own. null for an original."
    },
    "duplicates": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The copy's mention id (mm_...)."
          },
          "platform": {
            "type": "string",
            "enum": [
              "bluesky",
              "hackernews",
              "github",
              "stackoverflow",
              "devto",
              "reddit",
              "x",
              "youtube",
              "news",
              "linkedin",
              "tiktok",
              "instagram",
              "appstore",
              "googleplay",
              "trustpilot",
              "googlemaps",
              "rss"
            ],
            "description": "Platform: bluesky, hackernews, github, stackoverflow, devto, reddit, x, youtube, news, linkedin, tiktok, instagram, appstore (App Store reviews), googleplay (Google Play reviews), trustpilot (Trustpilot reviews), googlemaps (Google reviews of a place), rss (RSS and Atom feeds a keyword reads)."
          },
          "url": {
            "type": "string",
            "description": "Link to the copy."
          },
          "publishedAt": {
            "type": "string",
            "description": "When the copy was published."
          }
        },
        "required": [
          "id",
          "platform",
          "url",
          "publishedAt"
        ]
      },
      "description": "The cross-posts filed under this mention, oldest first: where else its author posted it. Empty when there are none, and on a copy."
    },
    "stats": {
      "type": "object",
      "properties": {
        "comments": {
          "type": "integer",
          "minimum": 0,
          "description": "Comments of this post delivered to you (GET /v1/mentions/{id}/comments); 0 until its thread is read, and for keywords without comments."
        }
      },
      "required": [
        "comments"
      ],
      "description": "Computed counts."
    },
    "createdAt": {
      "type": "string",
      "description": "When the match was recorded; the default feed order."
    }
  },
  "required": [
    "id",
    "status",
    "relevant",
    "delivered",
    "priority",
    "keyword",
    "post",
    "parentMentionId",
    "author",
    "review",
    "classification",
    "triage",
    "duplicateOf",
    "duplicates",
    "stats",
    "createdAt"
  ],
  "$defs": {
    "GroupRef": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Group id (grp_...)."
        },
        "name": {
          "type": "string",
          "description": "The group's name."
        },
        "externalId": {
          "type": [
            "string",
            "null"
          ],
          "description": "Your own id for the group, or null."
        },
        "isDefault": {
          "type": "boolean",
          "description": "The workspace's default group, where a keyword lands when no group is named."
        }
      },
      "required": [
        "id",
        "name",
        "externalId",
        "isDefault"
      ],
      "description": "The group the keyword belongs to."
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/mentio-dev-mention"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.