Skip to content
Twexapi
English
Esc
↑↓navigate↵open⌘Jpreview
On this page

TypeScript SDK

Use the TwexAPI TypeScript SDK for tweet search, follower exports, and Node.js public reads.

Use the TypeScript SDK when you want typed request parameters, response models, retries, and autocomplete for TwexAPI REST workflows in Node.js, Bun, or server-side TypeScript.

twexapi-dev/x-api-scraper-typescriptTypeScript SDK for TwexAPI public social data and approved account workflows. Independent third-party service.00
TypeScript task SDK call Save
Search tweets client.search.advanced nextCursor
Read profile client.users.getAbout screenName
List followers client.users.followers.list cursor

Install

npm install @twexapi-dev/x-api-scraper

Source: twexapi-dev/x-api-scraper-typescript

Authenticate

export X_API_SCRAPER_KEY="YOUR_API_KEY"
import { XApiScraper } from "@twexapi-dev/x-api-scraper";

const client = new XApiScraper({
  bearerAuth: process.env.X_API_SCRAPER_KEY,
});

Basic example

Search tweets and look up a profile:

import { XApiScraper } from "@twexapi-dev/x-api-scraper";

const client = new XApiScraper({
  bearerAuth: process.env.X_API_SCRAPER_KEY,
});

const result = await client.search.advanced({
  searchTerms: ["from:elonmusk"],
  sortBy: "Latest",
  nextCursor: "",
});

const about = await client.users.getAbout({ screenName: "elonmusk" });

const followers = await client.users.followers.list({
  screenName: "elonmusk",
});

Workflow: search tweets to JSON Lines

Paginate advanced search and write durable handoff rows:

import { XApiScraper } from "@twexapi-dev/x-api-scraper";

const client = new XApiScraper({
  bearerAuth: process.env.X_API_SCRAPER_KEY,
});

const query = "from:elonmusk AI";
let cursor = "";
let pageIndex = 0;

while (true) {
  const page = await client.search.advanced({
    searchTerms: [query],
    sortBy: "Latest",
    nextCursor: cursor,
  });

  for (const tweet of page.tweets ?? []) {
    const row = {
      source: "twexapi.typescript.search",
      query,
      tweet_id: tweet.id,
      text: tweet.text,
      page_index: pageIndex,
      next_cursor: page.nextCursor ?? null,
    };
    process.stdout.write(`${JSON.stringify(row)}\n`);
  }

  if (!page.hasNextPage || !page.nextCursor) {
    break;
  }

  cursor = page.nextCursor;
  pageIndex += 1;
}

Store tweet_id, next_cursor, and page_index so a worker can resume from the last saved cursor.

Error handling

import { XApiScraper } from "@twexapi-dev/x-api-scraper";
import * as errors from "@twexapi-dev/x-api-scraper/models/errors";

try {
  await client.search.advanced({
    searchTerms: ["from:elonmusk"],
    sortBy: "Latest",
    nextCursor: "",
  });
} catch (error) {
  if (error instanceof errors.XAPIScraperError) {
    console.error(error.statusCode, error.body);
  } else {
    throw error;
  }
}

The client retries connection errors with exponential backoff by default. Override per request with a retries option.

Pi coding agent package

Install bundled TwexAPI Skills from npm:

pi install npm:@twexapi-dev/x-api-scraper

References

Was this page helpful?