SocialToAIStart freeConsole
POST/v1/call/x.quotes

X (Twitter) post quotes API

Only on X.

The X (Twitter) post quotes API returns a page of the X posts that quote a post, newest first or most popular first. One call costs 4 credits ($0.008 to $0.013 depending on the pack); failed calls are free. Call it over HTTP or from your AI client over MCP. Last tested 2026-10-17.

100 credits on sign-up, no card needed
4 creditsper call
Up to 20 per pageone page per call
2026-10-17last tested
1012 Bsample response, 1 item

Last updated:

Request and response

curl https://api.socialtoai.com/v1/call/x.quotes \  -H "Authorization: Bearer $SOCIALTOAI_KEY" \  -H "Content-Type: application/json" \  -d '{    "id": "2108662426606395572"  }'
import osimport requestsresponse = requests.post(    "https://api.socialtoai.com/v1/call/x.quotes",    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},    json={        "id": "2108662426606395572",    },)print(response.json())
# Connected over MCP? Ask in plain words.Use the X post quotes interface (x.quotes) with id: 2108662426606395572.# Your AI calls the call tool with:{  "id": "2108662426606395572"}
Sign in to run4 creditsOpens in the Playground with these parameters after you sign in. It never runs by itself.
200 OK1012 B4 credits
{  "op": "x.quotes",  "platform": "x",  "status": "ok",  "items": [    {      "platform": "x",      "id": "…",      "ref": "…",      "approx": [],      "type": "content",      "url": "https://example.com/…",      "format": "text",      "title": null,      "text": "…",      "published_at": "2026-10-10T13:35:48.000Z",      "author": {        "id": "…",        "username": "…",        "name": "…",        "verified": false,        "followers": 177      },      "metrics": {        "likes": 0,        "comments": 0,        "shares": null,        "collects": 0,        "views": 4,        "reposts": 0      },      "images": [],      "hashtags": [],      "is_pinned": null    }  ],  "unavailable": ["title", "metrics.shares", "is_pinned"],  "page": {    "has_more": true,    "cursor": "cur_…",    "cursor_expires_at": "2026-10-10T14:28:52.000Z"  },  "cost_credits": 4}
@…·177 followers·
likes 0comments 0shares nullcollects 0views 4reposts 0

Names and text were removed from the sample; the numbers are as recorded.

Sample data1 of the 20 items recorded

2 parameters.
1 required.

Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.

NameTypeRequiredDefaultDescription
idstringRequired—ID of the quoted post
cursorstringOptional—Pass page.cursor from the last response to get the next page.

Where to get what you send.

id

ID of the quoted post (e.g. 2108662426606395572)

No other interface of the platform returns it: take it from the web page or link as described above.

The fields of each item.
What X cannot give is marked.

FieldTypeMeaning
items[].urlstringA link that opens the item.
items[].formatstringvideo, image, text or article.
items[].titlestringalways nullThe title.
items[].textstringThe body text or caption.
items[].published_atstringWhen it was published, ISO 8601 in UTC.
items[].author.idstringThe author's account ID.
items[].author.usernamestringThe author's handle.
items[].author.namestringThe author's display name.
items[].author.verifiedbooleanWhether the author is verified.
items[].author.followersintegerThe author's follower count.
items[].metrics.likesintegerLikes.
items[].metrics.commentsintegerComments.
items[].metrics.sharesintegeralways nullShares.
items[].metrics.collectsintegerSaves.
items[].metrics.viewsintegerViews or plays.
items[].metrics.repostsintegerReposts.
items[].imagesstring[]Image addresses.
items[].hashtagsstring[]Hashtags, without the #.
items[].is_pinnedbooleanalways nullWhether the author pinned it.
nullFields X cannot give

Read null as “X did not give this”, not as zero. These are always null on this call:

  • titleThe title.
  • metrics.sharesShares.
  • is_pinnedWhether the author pinned it.

Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. Response format

What to expect.

One call returns a page of up to 20 items. When page.has_more is true, send page.cursor back as cursor for the next page; each page costs 4 credits and a cursor works for 30 minutes.
A call that runs and finds nothing is a successful call: status is "empty", items is empty, and it costs 4 credits.
On this call X cannot tell a post that does not exist from one with no data: both come back as empty, and both are charged.

1 call per second per key, 5 after a purchase; going over is not charged. Rate limits

A failed call costs 0 credits and is never retried on its own. Error codes

Once connected over MCP, these questions use it.

  1. Get a page of the X posts that quote a post, newest first or most popular first: 2108662426606395572.
    call {"op":"x.quotes","id":"2108662426606395572"}
    4 credits

Questions.
Short answers.

Everything on X
Do I need a X account or X's own API access?
No. You only need a SocialToAI key. The call returns content and account information publicly visible on X; you never sign in to X or apply for anything there.

Your AI is one URL away
from all of social media.

100 credits on sign-up, no card needed