API reference

Instagram Mentions API

One endpoint that does what the Monitor Mentions page does: give it a handle, hashtags or phrases, get back the public Instagram posts that mention them, each with the search that found it.

Quick start

  1. Sign in on the dashboard and create a key. It starts mm_mon_ and is shown once.
  2. Send it as Authorization: Bearer mm_mon_… or as an x-api-key header.
  3. POST what you are watching. That is all of it.
curl -X POST https://www.monitormentions.com/api/v1/mentions/search \
  -H "Authorization: Bearer $MM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"handle": "liquiddeath", "keywords": ["murder your thirst", "deathwish"]}'
Response shape
{
  "entity":   { "handle": "liquiddeath" },
  "account":  { "handle", "name", "followers", "is_verified", ... },
  "credits":  { "charged", "remaining", "monthly" },
  "summary":  { "posts", "creators", "videos", "newest", "oldest",
                "terms": [{ "term", "posts" }] },
  "posts": [{
    "id", "url", "author", "caption", "thumbnail", "is_video",
    "taken_at", "likes", "comments",
    "found_by": { "method": "hashtag | tagged | phrase", "term" }
  }],
  "failed": [{ "method", "term" }]
}

POST /api/v1/mentions/search

Runs every search for the entity now and answers when they are back. Give a handle, at least one term, or both. Up to 5 terms per call; for more, make more calls.

Request body

FieldTypeWhat it does
handlestring, optionalAn Instagram handle, with or without the @, or a profile URL. Adds a lookup, its hashtag and its tagged tab.
keywordsstring[] or string, optionalWords and phrases. One word is searched as a hashtag; two or more as a phrase. Comma-separated strings work too.
hashtagsstring[], optionalAlways searched as a hashtag. Spaces are dropped, since a tag cannot hold one.

Each post

idInstagram's id for the post
urlLink to the post
authorHandle of the account that posted it
captionThe caption, or null
thumbnailImage URL from Instagram. These expire, so store the image if you need it later
is_videotrue for reels and videos
taken_atISO 8601 timestamp, or null
likes, commentsCounts as Instagram reported them, or null when hidden
found_by{ method, term }: the search that found it. method is hashtag, tagged or phrase

A post found by two searches is returned once, under the first one that found it. summary counts posts, accounts and posts per term, and nothing else: there is no reach or sentiment field, because we do not measure either.

What a call costs

One credit per search, and the searches are listed before you send anything:

handle3 credits: the account lookup, its hashtag, its tagged tab
each keyword or hashtag1 credit
the same search again, same UTC dayfree

A handle that does not exist costs 1 credit, the lookup, and the other searches are not run. A search that fails upstream is still counted, because we cannot tell whether it was metered first; the response lists it under failed. Every response carries x-credits-remaining.

GET /api/v1/mentions/usage

Free. Returns plan, monthly, used, remaining and resets_on. Credits reset on the 1st of each month, UTC.

Errors

Every error is JSON: {"error": "…", "status": 400}.

400Nothing to search, a bad handle, or more than 5 terms. The message says which.
401Missing, invalid or revoked key.
404The handle does not exist on Instagram. Costs one credit, the lookup.
429Not enough credits left this month for this search. Nothing is charged.
502 / 503Upstream or our ledger did not answer. Try again shortly.

Coming next

Watched entities: register a handle and its terms once, and we search on a schedule and POST new mentions to your webhook. If you want it, tell us what you would use it for.