X (Twitter) Search API

Find public X videos matching a keyword. Returns a cursor-paginated page with platform-native fields on each item.

Input: Search keyword. Returns: a page of results with a cursor for the next, in X's own field names. Price: 1 credit per call; failed reads are free.

GET /v1/x/search Search keyword · Cursor page

Try it with a sample keyword.

The snippets use q for the search term. Replace the sample keyword with the phrase your workflow is tracking.

Try this API live
1

Pick a sample input

Start from a valid shape, then replace the sample value with your public target.

Selected latte art Open

2

Preview the request

Use a server-side key and send parameters as query values.

GET https://api.sourcevine.io/v1/x/search
curl -G 'https://api.sourcevine.io/v1/x/search' \
  -H 'Authorization: Bearer sv_live_...' \
  --data-urlencode 'q=latte art' \
  --data-urlencode 'limit=20'
const params = new URLSearchParams({
  "q": "latte art",
  "limit": "20",
});

const res = await fetch('https://api.sourcevine.io/v1/x/search?' + params, {
  headers: { Authorization: 'Bearer sv_live_...' },
});

const body = await res.json();
console.log(body.data);
import requests

r = requests.get(
    "https://api.sourcevine.io/v1/x/search",
    params={"q": "latte art", "limit": "20"},
    headers={"Authorization": "Bearer sv_live_..."},
)

body = r.json()
print(body["data"])
Replays the recorded response. Nothing leaves your browser.
3

Read the response

Every success includes availability, a fetch timestamp and billing context.

GET /v1/x/search Not run

Hit Show sample response to see the response.

A real X (Twitter) Search API response, recorded against the public target above.

available 1 credit recorded

Shortened to fit. items 3 of 20. A live call returns all of it.

{
  "data": {
    "items": [
      {
        "url": "https://x.com/pidatow/status/2036936263522279759",
        "text": "When a customer requests latte art on AMERICANO😭 https://t.co/S7wm31HwTH",
        "likes": 14155,
        "views": 2198036,
        "cached": false,
        "quotes": 61,
        "replies": 512,
        "tweetId": "2036936263522279759",
        "retweets": 552,
        "bookmarks": 761,
        "fetchedAt": "2026-09-02T16:35:09Z",
        "authorLink": "https://x.com/pidatow",
        "publishedAt": "Wed Mar 25 22:40:24 +0000 2026",
        "authorHandle": "pidatow",
        "cacheAgeSeconds": null,
        "sourceTimestamp": null
      },
      {
        "url": "https://x.com/lambda44444/status/2094039004739961212",
        "text": "A COFFEE SHOP OWNER ASKED FOR A MENU PAGE. FABLE 5 BUILT A $29 PRODUCT FILM\n\nWhole build: 4.8M tokens. 29 dollars.\n\nA studio that shoots a hero like this quotes $6,000 to $12,000. That buys a 3D artist, a motion designer, a retoucher, 4 weeks, and a render queue you wait behind.\n\nHis site cost 7 cups of coffee. The agency wanted 3,000.\n\nEvery cafe site on the internet runs the same template. Latte art photo, opening hours, a map, a PDF menu that opens sideways on a phone.\n\nTh…",
        "likes": 1,
        "views": 125,
        "cached": false,
        "quotes": 0,
        "replies": 0,
        "tweetId": "2094039004739961212",
        "retweets": 0,
        "bookmarks": 1,
        "fetchedAt": "2026-09-02T16:35:09Z",
        "authorLink": "https://x.com/lambda44444",
        "publishedAt": "Sun Aug 30 12:26:18 +0000 2026",
        "authorHandle": "lambda44444",
        "cacheAgeSeconds": null,
        "sourceTimestamp": null
      },
      {
        "url": "https://x.com/Sarahhuniverse/status/2094892163041792001",
        "text": "Amazing Latte Art 😍\n\n© latteartseruveni https://t.co/a4LnFM8YW7",
        "likes": 25,
        "views": 5603,
        "cached": false,
        "quotes": 0,
        "replies": 0,
        "tweetId": "2094892163041792001",
        "retweets": 4,
        "bookmarks": 4,
        "fetchedAt": "2026-09-02T16:35:09Z",
        "authorLink": "https://x.com/Sarahhuniverse",
        "publishedAt": "Tue Sep 01 20:56:27 +0000 2026",
        "authorHandle": "Sarahhuniverse",
        "cacheAgeSeconds": null,
        "sourceTimestamp": null
      }
    ],
    "cached": false,
    "fetchedAt": null,
    "nextCursor": null,
    "cacheAgeSeconds": null
  },
  "success": true,
  "available": true
}

Use this API from code, no-code tools, MCP clients and agents.

We build and maintain theseFirst-party surfaces, versioned with the API.

Response fields.

Each response includes typed availability, a fetch timestamp, and only the public fields this API promises.

FieldTypeMeaning
items array A page of public X posts or videos.
nextCursor string | null Pass as cursor to request the next page.
items[].views integer | null Present only where the platform reports it.
items[].likes integer | null Per-item public like count.
items[].cached boolean Matches the page provenance on cached reads.
fetchedAt ISO datetime When Sourcevine read the public page.
sourceTimestamp ISO datetime | null The platform timestamp when it is available.
cached boolean True when this answer repeats an identical request made moments earlier.
cacheAgeSeconds integer Seconds since the reading was taken.

How a request is handled.

  1. 01 Send a keyword

    Send a search keyword. Sourcevine normalizes the query and returns a cursor page.

  2. 02 Checked

    A missing or empty keyword is refused before any fetch, and not charged.

  3. 03 Read

    The public data is read when you call. An identical request moments earlier is answered again, free.

  4. 04 Typed availability

    Deleted, private and unsupported resources return explicit statuses, so clients can stop retrying facts about the world.

  5. 05 JSON back

    X names stay intact, so your code reads fullName instead of reverse-engineering a generic schema.

    fetchedAtcreditsChargedavailable

Every response carries fetchedAt and the platform timestamp, so you know how old a reading is before you act on it. X (Twitter) Search API fits recurring search checks in dashboards, spreadsheets, workflows and agents.

What this API does not return.

  • No contact or bio fields

    Bios, email addresses, phone numbers, postal addresses and messenger handles are outside the response contract.

  • No private data

    Private accounts, restricted content and unavailable resources return typed availability instead of guessed data.

  • No comments or downloads

    List APIs return recent public post metadata and metrics. They do not return comment bodies, media files or hidden analytics.

Where teams use X (Twitter) Search API.

Creator monitoring

Pull the latest public posts from a watched account on a schedule.

Campaign capture

Build a dataset of recent brand mentions or campaign posts before reporting.

Lead enrichment

See whether a profile is active before spending human review time.

Content ops

Feed recent public videos into moderation, analytics or publishing workflows.

1 credit per call, and nothing for a failed read.

The response and X-Credits-Charged header tell you what happened, including when it is zero.

Charged1 credit

  • AnsweredThe public data came back.
  • Not found or privateThe lookup was made, and that is the answer. The response says which.
  • Empty resultThe lookup was made and found nothing to return, such as an account with no posts.

Not charged0 credits

  • Failure on our sideA timeout or a read we could not complete.
  • Unsupported URLThe wrong kind of URL: refused before any fetch.
  • Cache hitAn identical request moments earlier, answered again.

Common questions.

What does X (Twitter) Search API return?

Find public X videos matching a keyword. Returns a cursor-paginated page with platform-native fields on each item.

How is it billed?

A call costs 1 credit, including an empty result. Retrieval failures are not charged.

What happens when the resource is private or deleted?

The request returns available=false with a typed availability status. Not-found and private results are charged like any lookup; unsupported URLs and retrieval failures are not.

Does Sourcevine return contact data?

No. Bios, emails, phone numbers, postal addresses and private or restricted content are outside the public response contract.

Do I need to log in to X?

No. Your integration authenticates with a Sourcevine API key. You do not need to supply X credentials or a session.