---
title: "Export mentions as JSON"
method: GET
path: "/v1/mentions/export.json"
tags: ["Mentions"]
---

# Export mentions as JSON

`GET /v1/mentions/export.json`

## Request

- Base URL: `https://api.rumoro.dev`
- URL: `https://api.rumoro.dev/v1/mentions/export.json`
- Auth: HTTP bearer

Returns in one response the mentions GET /v1/mentions lists for the same filters, latest match first, which is the order they reached your feed. Each row is the full Mention object from the list, text included. At most 10,000 mentions are returned, and `truncated` tells you when some were cut. It shares the CSV export's limit of 6 exports a minute per workspace, in either format, and a 429 includes Retry-After.

## Query parameters

- `keywordId` string: Only this keyword's matches.
- `platform` 'bluesky' | 'hackernews' | 'github' | 'stackoverflow' | 'devto' | 'reddit' | 'x' | 'youtube' | 'news' | 'linkedin' | 'tiktok' | 'instagram' | 'appstore' | 'googleplay' | 'trustpilot' | 'googlemaps': Only this platform's posts.
- `status` 'open' | 'ignored' | 'done': Keeps mentions with this status only. Leave it out for all statuses.
- `relevant` boolean: true keeps mentions the classifier scored relevant. false keeps the others, including unscored ones.
- `sentiment` 'positive' | 'neutral' | 'negative': Keeps mentions with this sentiment only.
- `intent` string: Returns only mentions with this tag. One of bug_report, buy_intent, churn_intent, comparison, complaint, event, feedback, hiring, industry_insight, launch, praise, pricing, promotional, question and testimonial.
- `automated` boolean: true keeps mentions that look machine-made, such as bot accounts, scheduled or template posts and AI-written text. false keeps the others, including mentions scored before this flag existed. Leave it out for all.
- `personId` string: Keeps mentions by this person (an id from /v1/people), including merged accounts. Turns on includeMuted.
- `includeMuted` boolean: true also returns mentions by muted people, which are hidden by default.
- `assigneeId` string: Member user id. Returns only mentions assigned to them.
- `snoozed` boolean: true shows only snoozed mentions, which are otherwise hidden until they wake.
- `excludeAuthors` string[], nullable: Leaves out these authors, given as display names, handles or profile links. Repeat the parameter or send one value with commas.
- `minRelevance` integer, nullable: Keeps mentions with this relevance score or higher. Unscored mentions are left out.
- `minConfidence` number, nullable: Minimum classifier confidence, 0 to 1. Mentions with no confidence are dropped.
- `minFollowers` integer, nullable: Sends only posts by authors with this many followers or more. Unknown counts are left out.
- `maxFollowers` integer, nullable: Keeps posts by authors with this many followers or fewer. Unknown counts are left out.
- `isReply` boolean: true keeps replies and comments, meaning posts that answer another post. false keeps posts that are not replies. Leave it out for both.
- `kind` 'post' | 'comment' | 'repository': Only posts (post) or only comments (comment: replies, comments and answers). repository (GitHub repository events) is accepted and matches nothing, since Rumoro does not collect them. Omitted: all.
- `alertId` string: Adds an alert rule's filter (an id from GET /v1/alerts) to the other filters. You get the mentions the rule would send, useful for a preview or an export in feed form. An unknown id returns 404.
- `viewId` string: Adds a saved view's filter (an id from GET /v1/views) to the other filters, with every condition joined by AND. You get exactly what the view shows. An unknown id returns 404.
- `keywordKinds` string[]: Keeps matches of keywords of these kinds only (brand, competitor, topic). Repeat the parameter or separate values with commas.
- `tags` string[], nullable: Keeps authors your workspace gave one of these tags, matched exactly and by case. Repeat the parameter or separate values with commas.
- `linkHosts` string[], nullable: Keeps posts that link to one of these hosts or its subdomains, so slack.com also matches api.slack.com. Repeat the parameter or separate values with commas.
- `platforms` string[]: Keeps posts from these platforms only.
- `notPlatforms` string[]: Platforms to exclude.
- `keywordIds` string[], nullable: Keeps matches of these keywords only.
- `groupIds` string[], nullable: Keeps matches of keywords in these groups only (grp_...). Repeat the parameter or separate values with commas.
- `notGroupIds` string[], nullable: Hides matches from keywords that belong to these groups.
- `notKeywordIds` string[], nullable: Keyword ids to exclude.
- `sentiments` string[]: Keeps mentions with these sentiments only.
- `notSentiments` string[]: Leaves out these sentiments. Mentions not scored yet are kept.
- `intents` string[], nullable: Keeps mentions tagged with one of these intents or topics.
- `notIntents` string[], nullable: Intent or topic tags to exclude.
- `notLinkHosts` string[], nullable: Leaves out posts that link to these hosts or their subdomains.
- `notTags` string[], nullable: Leaves out authors your workspace gave one of these tags.
- `languages` string[]: Sends only posts in these languages, as ISO 639-1 codes such as en, es or de. Posts with an unknown language are left out.
- `notLanguages` string[]: Leaves out posts in these languages. Posts with an unknown language are kept.
- `ratings` integer[]: Keeps reviews with one of these star ratings, from 1 to 5. Use ratings=1,2 for the unhappy ones. Posts that are not reviews are left out.
- `notRatings` integer[]: Star ratings (1 to 5) to hide, such as notRatings=5. Other posts are unaffected.
- `minLikes` integer, nullable: Keeps posts with this many likes (upvotes, reactions) or more, counted when the post was collected. Posts without a like count are left out.
- `minReposts` integer, nullable: Keeps posts with this many reposts (shares, retweets) or more, counted when the post was collected. Posts without a repost count are left out.
- `minReplies` integer, nullable: Keeps posts with this many replies (comments) or more, counted when the post was collected. Posts without a reply count are left out.
- `minQuotes` integer, nullable: Keeps posts with this many quotes or more, counted when the post was collected. Posts without a quote count are left out.
- `minViews` integer, nullable: Keeps posts with this many views (plays) or more, counted when the post was collected. Posts without a view count are left out.
- `minBookmarks` integer, nullable: Keeps posts with this many bookmarks (saves) or more, counted when the post was collected. Posts without a bookmark count are left out.
- `anyOf` string: Groups of conditions joined by OR, as URL-encoded JSON. For example [{"platforms":["github"],"intents":["bug_report"]},{"sentiments":["negative"]}] means "bug reports on GitHub, or anything negative". A group uses the fields of a view filter, where a list matches any value, a not list matches none, and all conditions are joined by AND. A mention passes when one group matches, and the other filters here still apply. Send 1 to 10 groups, none empty and none nested.
- `q` string: Searches post text and author names.
- `since` string, date-time: Keeps posts published at this time or later, as ISO 8601 or epoch ms.
- `until` string, date-time: Keeps posts published at this time or earlier, as ISO 8601 or epoch ms.

## Response `200`

All mentions the filter selects, 10,000 at most

- object
  - `data` Mention[], required: Up to 10,000 mentions, newest match first.
    - `id` string, required: The mention's id (mm_...). A mention is one post matched to one keyword, so a post that matches two keywords has two ids.
    - `status` 'open' | 'ignored' | 'done', required: open means no one has handled it. ignored means you hid it from the feed and channels. done means it was handled.
    - `relevant` boolean, required: True when the classifier's relevance score is 40 or more, the delivery threshold.
    - `delivered` boolean, required: true once any channel of yours received it.
    - `priority` number, required: How much the mention deserves attention, with one decimal, worked out when you read it. It adds half the relevance, points for the author's followers (8 when unknown) and points for the strongest intent (from 20 for buy intent down to 5 for praise). It then takes off 2 points per day of age, at most 20.
    - `keyword` object, required: The keyword the post matched, with its group.
      - `id` string, required: The keyword's id (kw_...).
      - `term` string, required: The term being tracked.
      - `group` GroupRef, required: The keyword's group.
        - `id` string, required: The group's id (grp_...).
        - `name` string, required: Name of the group.
        - `externalId` string, nullable, required: An id from your own system, or null.
        - `isDefault` boolean, required: True for the workspace's default group. New keywords go there when you don't name a group.
    - `post` object, required
      - `platform` 'bluesky' | 'hackernews' | 'github' | 'stackoverflow' | 'devto' | 'reddit' | 'x' | 'youtube' | 'news' | 'linkedin' | 'tiktok' | 'instagram' | 'appstore' | 'googleplay' | 'trustpilot' | 'googlemaps' | 'rss', required: The platform. Review platforms are appstore, googleplay, trustpilot and googlemaps (a place's Google reviews).
      - `kind` 'post' | 'comment', required: post: a top-level post. comment: anything that answers a post or another comment (a Hacker News comment, an X or Bluesky reply, a Stack Overflow answer, a comment read from a thread).
      - `url` string, required: A stable link to the post.
      - `text` string, required: The title and body, cut to 8 KB when the post is collected.
      - `title` string, nullable, required: The post's title on platforms that have titles, such as Hacker News stories, Reddit threads, GitHub issues and pull requests, Stack Overflow questions, DEV articles, YouTube videos, news articles and reviews with a title. Null on platforms without titles (X, Bluesky, LinkedIn) and for posts collected before October 2026.
      - `imageUrl` string, nullable, required: Preview image sent by the platform, or null. Examples are YouTube thumbnails, DEV covers, news sharing images and Bluesky images or link cards.
      - `links` string[], required: Up to 20 links found in the post, in the order they appear. Empty when there are none and for posts collected before September 2026.
      - `publishedAt` string, required: When the post went live on the platform.
      - `engagement` object, nullable, required: Engagement numbers as the platform gave them when the post was collected, often a few minutes after it was written. A number the platform lacks is null. The whole object is null on platforms that report none and for posts collected before September 2026. X reports all six.
        - `likes` integer, nullable, required
        - `reposts` integer, nullable, required
        - `replies` integer, nullable, required
        - `quotes` integer, nullable, required
        - `views` integer, nullable, required
        - `bookmarks` integer, nullable, required
      - `replyTo` object, nullable, required: The post being replied to, on X and Bluesky. Null when the post is not a reply.
        - `author` string, nullable, required: Who wrote the parent post, as named on the platform.
        - `url` string, nullable, required: Link to the parent post.
        - `text` string, nullable, required: Text of the parent post, if the platform provided it.
    - `parentMentionId` string, nullable, required: For a comment whose parent post or comment is itself one of your mentions: that mention's id (mm_...). Null otherwise.
    - `author` object, nullable, required: The author of the post. Null when the platform gave no author.
      - `id` string, nullable, required: aut_... id for GET /v1/people/{id}, or null while the account isn't in your audience yet.
      - `name` string, nullable, required: The name shown on the platform.
      - `handle` string, nullable, required: The handle taken from the profile link, written the platform's way (@name, u/name). Null on platforms without handles.
      - `url` string, nullable, required: Link to the profile.
      - `avatarUrl` string, nullable, required: Avatar URL, or null if the platform has none.
      - `followers` integer, nullable, required: Followers at the time of their latest post. Null if the platform has no follower count.
      - `tags` string[], required: Tags your workspace gave this person.
    - `review` object, nullable, required: Details of an app store review. Null for any other post. The stars set the sentiment, with 4 and 5 positive, 3 neutral, and 1 and 2 negative. A review always counts as relevant, because you picked the app.
      - `rating` integer, required: The reviewer's star rating.
      - `ratingMax` integer, required: The highest possible rating, which is 5 on both stores.
      - `title` string, nullable, required: The review's title. Null where reviews have none, as on Google Play.
      - `version` string, nullable, required: The app version the reviewer used, if the store reports it.
      - `country` string, nullable, required: A lowercase two-letter code. On the App Store and Google Play it is the storefront the review was read in. On Trustpilot it is the reviewer's country. Null when the platform gives none.
      - `verified` boolean, nullable, required: True when Trustpilot marks the review as verified. Null on platforms without that mark.
      - `response` string, nullable, required: The developer's reply at the time the review was collected. Null when there was none.
      - `responseAt` string, nullable, required: Time of the developer's reply.
      - `app` object, required: The app the review is about.
        - `platform` 'appstore' | 'googleplay' | 'trustpilot' | 'googlemaps', required: Where the reviews come from. appstore is the Apple App Store, googleplay is Google Play, trustpilot is a company's Trustpilot page and googlemaps is the Google reviews of a place.
        - `id` string, required: The app's id in the store.
        - `url` string, required: Link to the app in the store.
    - `classification` object, nullable, required: The classifier's result with your feedback applied. Null while the post waits to be classified.
      - `relevance` integer, nullable, required: Score out of 100, or null if classification failed.
      - `sentiment` 'positive' | 'neutral' | 'negative', nullable, required: The sentiment the classifier assigned.
      - `intents` string[], required: Tags for intent and topic. The values are buy_intent, question, complaint, praise, comparison, churn_intent (moving away from the keyword), bug_report, pricing, hiring, event, promotional, testimonial (a user recommending it from experience), industry_insight (analysis or numbers about the market), launch (a new product or feature announced) and feedback (an idea or request for it).
      - `automated` boolean, required: A label for posts that look machine-made. Examples are bot or app accounts, scheduled or template posts and obvious AI summaries. Such mentions are kept, delivered and billed as usual. false until judged.
      - `language` string, nullable, required: ISO 639-1 code (en, es, de) of the post's language. Null if unknown or scored before languages were stored.
      - `confidence` number, nullable, required: The classifier's confidence in its relevance score, from 0 to 1. Null when the fallback model scored the post, or when it was scored before confidence was stored.
      - `uncertain` boolean, required: True when a person should check the score, because confidence is below 0.4 or the model that wrote the note disagreed with it. It is a hint for reviewers and never hides a mention.
      - `note` string, nullable, required: A sentence from the classifier on why it gave this score.
      - `failed` boolean, required: Set when the model failed to score the post. Such posts remain in the feed and cost nothing.
      - `feedback` object, nullable, required: Feedback from your team, or null. Judging relevance sets `relevance` to 100 or 0 and updates `relevant` to match. A new sentiment replaces `sentiment`. Lists, filters, digests and reports all use the corrected values.
        - `relevant` boolean, nullable, required: Whether you judged it relevant. Null if you only changed the sentiment.
        - `sentiment` 'positive' | 'neutral' | 'negative', nullable, required: The sentiment you set. Null if you only judged relevance.
        - `at` string, required: When the latest feedback was given.
        - `original` object, required: The classifier's values that your feedback overrode.
          - `relevance` integer, nullable, required: The classifier's score before your feedback. Null if it had not scored the post.
          - `sentiment` 'positive' | 'neutral' | 'negative', nullable, required: The classifier's sentiment before you changed it.
    - `triage` object, required
      - `assignee` object, nullable, required: The member handling this mention. Null if nobody is assigned.
        - `id` string, required
        - `name` string, nullable, required
        - `email` string, nullable, required
      - `snoozedUntil` string, nullable, required: The mention is hidden from the feed until this time. Null when it is not snoozed.
      - `note` string, nullable, required: A note for your team, or null.
    - `stats` object, required: Computed counts.
      - `comments` integer, required: Comments of this post you received (GET /v1/mentions/{id}/comments); 0 until its thread is read, and for keywords without comments.
    - `createdAt` string, required: When the match was stored. The feed is sorted by this by default.
  - `truncated` boolean, required: More mentions matched than the export can hold. Use since and until to split it.

## Other responses

- `400`: A query parameter is not valid
- `401`: The API key is missing or not valid
- `429`: Over 6 exports in this minute. Wait the Retry-After seconds and try again

---

[API](https://skmtc.dev/rumoro/apis/rumoro-api.md) · [All operations](https://skmtc.dev/rumoro/apis/rumoro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rumoro/apis/rumoro-api/revisions/9ef63ea894d1?raw)
