SquidX logo

Mentions

Every reply, quote and mention of the connected X account, with the reply SquidX or you already sent when there is one. A key with mentions:write can also reply and archive.

List mentions

GETsquidx.io/api/v1/mentions
Requiresmentions:read

Mentions of the connected account, newest first, with parent (the post each one answers) and quoted. meta.syncedAt says when SquidX last read the mentions from X.

List mentions parameters
NameInTypeDescription
kindquerystringreply, quote or mention.
statusquerystringnew or archived.
unansweredquerybooleantrue keeps only mentions with no reply yet.
minFollowersqueryintegerOnly authors with at least this many followers.
verifiedquerybooleantrue keeps only verified authors.
limitqueryintegerRows per page, 1 to 200. Default 50.
offsetqueryintegerRows to skip. Default 0. The response meta carries the total.
Request
curl "https://squidx.io/api/v1/mentions?unanswered=true&limit=10" \
  -H "Authorization: Bearer sqx_your_key"
Response · 200
{
  "data": [
    {
      "id": "e5f6a7b8-c9d0-4e1f-a2b3-c4d5e6f7a8b9",
      "postId": "1969900098765432109",
      "url": "https://x.com/janedoe/status/1969900098765432109",
      "kind": "reply",
      "text": "@aschapmann does this work with threads?",
      "postedAt": "2026-09-23T08:12:00.000Z",
      "status": "new",
      "author": {
        "username": "janedoe",
        "name": "Jane Doe",
        "avatarUrl": "https://pbs.twimg.com/profile_images/.../photo.jpg",
        "followers": 2310,
        "verified": false
      },
      "metrics": {
        "likes": 3,
        "replies": 1,
        "reposts": 0,
        "impressions": 410
      },
      "parent": {
        "id": "1969800012345678000",
        "url": "https://x.com/aschapmann/status/1969800012345678000",
        "text": "I just shipped thread scheduling in SquidX.",
        "author": "aschapmann",
        "postedAt": "2026-09-22T15:00:00.000Z",
        "mediaCount": 1
      },
      "quoted": null,
      "mediaCount": 0,
      "links": [],
      "reply": null
    }
  ],
  "meta": {
    "total": 8,
    "limit": 10,
    "offset": 0,
    "syncedAt": "2026-09-23T08:30:00.000Z"
  }
}

Reply to a mention

POSTsquidx.io/api/v1/mentions/:id/reply
Requiresmentions:write

Reply on X from the connected account, 280 characters max, text only. This is live: it cannot be undone from SquidX.

Reply to a mention parameters
NameInTypeDescription
textrequiredbodystringThe reply, 280 characters max.
Request
curl -X POST https://squidx.io/api/v1/mentions/e5f6a7b8-c9d0-4e1f-a2b3-c4d5e6f7a8b9/reply \
  -H "Authorization: Bearer sqx_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "text": "Yes, a thread is a list of segments. Docs: squidx.io/docs" }'
Response · 201
{
  "data": {
    "id": "e5f6a7b8-c9d0-4e1f-a2b3-c4d5e6f7a8b9",
    "reply": {
      "at": "2026-09-23T08:40:00.000Z",
      "postId": "1969910011223344556",
      "text": "Yes, a thread is a list of segments. Docs: squidx.io/docs",
      "via": "squidx"
    }
  }
}
  • Never retry a failed call blindly. Read the mention with GET /mentions first: its reply field says whether the reply went out.
  • A mention that has a reply answers 409 already_replied. Replies count against a daily cap of 50 per workspace (429 daily_limit). An old X connection without write access answers 400 needs_reconnect.

Archive a mention

PATCHsquidx.io/api/v1/mentions/:id
Requiresmentions:write

Move a mention to the archive, or back to the inbox.

Archive a mention parameters
NameInTypeDescription
statusrequiredbodystringarchived or new.
Request
curl -X PATCH https://squidx.io/api/v1/mentions/e5f6a7b8-c9d0-4e1f-a2b3-c4d5e6f7a8b9 \
  -H "Authorization: Bearer sqx_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "status": "archived" }'
Response · 200
{
  "data": {
    "id": "e5f6a7b8-c9d0-4e1f-a2b3-c4d5e6f7a8b9",
    "status": "archived"
  }
}