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