Twitter/X via ScrapeCreators
Canonical tools, triggers, auth, schemas, and mock behavior for Twitter/X via ScrapeCreators.
Run a valid x-data.get_post call through the same SDK surface used by every toolkit.
Minimal tool call
import { Eyeball } from "@eyeball/sdk";
const eyeball = new Eyeball({
apiKey: process.env.EYEBALL_API_KEY!,
baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});
const output = await eyeball.tools.run(
"x-data.get_post",
{
"postId": "example_postId"
},
{ userId: "demo_user" },
);
console.log(output);The model receives canonical output. Your application retains the execution envelope through tools.execute or the execution APIs when it needs IDs, status, versions, and latency.
Supported canonical tools
| Tool | Purpose | Execution | Effect | Version |
|---|---|---|---|---|
x-data.get_post | Retrieve one public post, video, clip, short, or media item. | sync or async | read | 1.0.0 |
x-data.get_posts | List public posts or media published by a creator profile or community. | sync or async | read | 1.0.0 |
x-data.get_profile | Retrieve a public creator or user profile and visible metrics. | sync or async | read | 1.0.0 |
x-data.get_transcript | Retrieve or derive the transcript for a supported public video or audio post. | sync or async | read | 1.0.0 |
Only the rows above are implemented. A capability tool omitted by this manifest returns not_supported; eyeball never synthesizes provider parity.
Supported canonical triggers
This manifest does not implement a canonical trigger.
Input and output schemas
x-data.get_post
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_post:1.0.0:x-data",
"type": "object",
"description": "Provider content identifier or public URL.",
"additionalProperties": false,
"properties": {
"postId": {
"type": "string",
"description": "Provider identifier of the content item.",
"minLength": 1
},
"url": {
"type": "string",
"format": "uri",
"description": "Public content URL."
}
},
"anyOf": [
{
"required": [
"postId"
],
"properties": {
"postId": {
"type": "string",
"description": "Provider identifier of the content item.",
"minLength": 1
}
}
},
{
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public content URL."
}
}
}
]
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_post:output:1.0.0:x-data",
"type": "object",
"description": "Requested public content item.",
"additionalProperties": false,
"required": [
"post"
],
"properties": {
"post": {
"type": "object",
"description": "A normalized public post, video, short, clip, or media item.",
"additionalProperties": false,
"required": [
"postId",
"platform",
"authorHandle",
"url",
"text",
"mediaType",
"createdAt",
"engagement",
"hashtags"
],
"properties": {
"postId": {
"type": "string",
"description": "Provider identifier of the content item.",
"minLength": 1
},
"platform": {
"type": "string",
"description": "Social platform represented by the result.",
"minLength": 1
},
"authorHandle": {
"type": "string",
"description": "Public handle of the content author.",
"minLength": 1
},
"url": {
"type": "string",
"format": "uri",
"description": "Public content URL."
},
"text": {
"type": "string",
"description": "Visible caption or text content."
},
"mediaType": {
"type": "string",
"enum": [
"image",
"video",
"text",
"clip"
],
"description": "Normalized public content kind."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Content publication timestamp."
},
"durationSeconds": {
"type": "number",
"minimum": 0,
"description": "Media duration in seconds when available."
},
"engagement": {
"type": "object",
"description": "Public engagement counters for one content item.",
"additionalProperties": false,
"required": [
"likes",
"comments",
"shares",
"views"
],
"properties": {
"likes": {
"type": "integer",
"minimum": 0,
"description": "Visible like count."
},
"comments": {
"type": "integer",
"minimum": 0,
"description": "Visible comment count."
},
"shares": {
"type": "integer",
"minimum": 0,
"description": "Visible share count."
},
"views": {
"type": "integer",
"minimum": 0,
"description": "Visible view count."
}
}
},
"hashtags": {
"type": "array",
"description": "Hashtags attached to the content.",
"items": {
"type": "string"
}
}
}
}
}
}x-data.get_posts
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_posts:1.0.0:x-data",
"type": "object",
"description": "Public profile and pagination selectors.",
"additionalProperties": false,
"required": [
"handle"
],
"properties": {
"handle": {
"type": "string",
"description": "Public profile or community handle.",
"minLength": 1
},
"pageSize": {
"type": "integer",
"description": "Maximum number of posts to return in one page.",
"minimum": 1,
"maximum": 100,
"default": 50
},
"pageToken": {
"type": "string",
"description": "Opaque continuation token from a previous post page.",
"minLength": 1
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_posts:output:1.0.0:x-data",
"type": "object",
"description": "One page of public content.",
"additionalProperties": false,
"required": [
"posts"
],
"properties": {
"posts": {
"type": "array",
"description": "Public content items.",
"items": {
"type": "object",
"description": "A normalized public post, video, short, clip, or media item.",
"additionalProperties": false,
"required": [
"postId",
"platform",
"authorHandle",
"url",
"text",
"mediaType",
"createdAt",
"engagement",
"hashtags"
],
"properties": {
"postId": {
"type": "string",
"description": "Provider identifier of the content item.",
"minLength": 1
},
"platform": {
"type": "string",
"description": "Social platform represented by the result.",
"minLength": 1
},
"authorHandle": {
"type": "string",
"description": "Public handle of the content author.",
"minLength": 1
},
"url": {
"type": "string",
"format": "uri",
"description": "Public content URL."
},
"text": {
"type": "string",
"description": "Visible caption or text content."
},
"mediaType": {
"type": "string",
"enum": [
"image",
"video",
"text",
"clip"
],
"description": "Normalized public content kind."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Content publication timestamp."
},
"durationSeconds": {
"type": "number",
"minimum": 0,
"description": "Media duration in seconds when available."
},
"engagement": {
"type": "object",
"description": "Public engagement counters for one content item.",
"additionalProperties": false,
"required": [
"likes",
"comments",
"shares",
"views"
],
"properties": {
"likes": {
"type": "integer",
"minimum": 0,
"description": "Visible like count."
},
"comments": {
"type": "integer",
"minimum": 0,
"description": "Visible comment count."
},
"shares": {
"type": "integer",
"minimum": 0,
"description": "Visible share count."
},
"views": {
"type": "integer",
"minimum": 0,
"description": "Visible view count."
}
}
},
"hashtags": {
"type": "array",
"description": "Hashtags attached to the content.",
"items": {
"type": "string"
}
}
}
}
},
"nextPageToken": {
"type": "string",
"description": "Opaque token to request the next page of posts; absent when the result is complete.",
"minLength": 1
}
}
}x-data.get_profile
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_profile:1.0.0:x-data",
"type": "object",
"description": "Public profile selector.",
"additionalProperties": false,
"required": [
"handle"
],
"properties": {
"handle": {
"type": "string",
"description": "Public profile handle or username.",
"minLength": 1
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_profile:output:1.0.0:x-data",
"type": "object",
"description": "Requested public profile.",
"additionalProperties": false,
"required": [
"profile"
],
"properties": {
"profile": {
"type": "object",
"description": "A normalized public creator, user, channel, or community profile.",
"additionalProperties": false,
"required": [
"profileId",
"platform",
"handle",
"displayName",
"verified",
"followers",
"following",
"totalPosts"
],
"properties": {
"profileId": {
"type": "string",
"description": "Provider identifier of the public profile.",
"minLength": 1
},
"platform": {
"type": "string",
"description": "Social platform represented by the result.",
"minLength": 1
},
"handle": {
"type": "string",
"description": "Platform handle, username, channel name, or community name.",
"minLength": 1
},
"displayName": {
"type": "string",
"description": "Public display name.",
"minLength": 1
},
"bio": {
"type": "string",
"description": "Public biography or description."
},
"verified": {
"type": "boolean",
"description": "Whether the profile is verified."
},
"followers": {
"type": "integer",
"minimum": 0,
"description": "Visible follower or subscriber count."
},
"following": {
"type": "integer",
"minimum": 0,
"description": "Visible following count."
},
"totalPosts": {
"type": "integer",
"minimum": 0,
"description": "Visible total public post count."
},
"profileUrl": {
"type": "string",
"format": "uri",
"description": "Public profile URL."
},
"avatarUrl": {
"type": "string",
"format": "uri",
"description": "Public avatar URL."
},
"channelId": {
"type": "string",
"description": "Platform channel identifier when distinct from the profile ID."
}
}
}
}
}x-data.get_transcript
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_transcript:1.0.0:x-data",
"type": "object",
"description": "Public content URL to transcribe.",
"additionalProperties": false,
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public content URL."
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:social_media_data:get_transcript:output:1.0.0:x-data",
"type": "object",
"description": "Transcript for the selected public content.",
"additionalProperties": false,
"required": [
"transcript"
],
"properties": {
"transcript": {
"type": "object",
"description": "A normalized transcript for public video or audio content.",
"additionalProperties": false,
"required": [
"transcriptId",
"platform",
"postId",
"url",
"language",
"text",
"segments"
],
"properties": {
"transcriptId": {
"type": "string",
"description": "Provider identifier of the transcript.",
"minLength": 1
},
"platform": {
"type": "string",
"description": "Social platform represented by the result.",
"minLength": 1
},
"postId": {
"type": "string",
"description": "Provider identifier of the transcribed content item.",
"minLength": 1
},
"url": {
"type": "string",
"format": "uri",
"description": "Public content URL."
},
"language": {
"type": "string",
"description": "Transcript language code.",
"minLength": 1
},
"text": {
"type": "string",
"description": "Complete transcript text.",
"minLength": 1
},
"segments": {
"type": "array",
"description": "Timestamped transcript segments.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"startSeconds",
"endSeconds",
"text"
],
"properties": {
"startSeconds": {
"type": "number",
"minimum": 0,
"description": "Segment start in seconds."
},
"endSeconds": {
"type": "number",
"minimum": 0,
"description": "Segment end in seconds."
},
"text": {
"type": "string",
"description": "Segment text.",
"minLength": 1
}
}
}
}
}
}
}
}Authentication
| Property | Value |
|---|---|
| Auth class | api_key |
| Required scopes | None |
| Optional scopes | None |
| Credential fields | apiKey |
Credentials are resolved inside the executor by CredentialProvider. They never belong in tool input, x_provider, model context, logs, or execution output.
Provider-specific extensions
This manifest declares no provider-specific schema extensions. Use only canonical fields.
Provider differences may appear only under x_provider.x-data and only when the schema above declares them.
Sync and async behavior
All tools are synchronous by nature, but callers may choose mode: "async" to queue them.
Mutations require a stable Idempotency-Key. The TypeScript SDK accepts it as idempotencyKey; it is never part of the JSON request body.
REST example
curl "$EYEBALL_EXECUTOR_URL/v1/execute" \
-H "Authorization: Bearer $EYEBALL_API_KEY" \
-H 'Content-Type: application/json' \
--data '{"tool":"x-data.get_post","userId":"demo_user","input":{"postId":"example_postId"},"mode":"sync"}'Mock support
Point EYEBALL_EXECUTOR_URL at a mock-configured executor to run through the real catalog, validation, credential seam, adapter, normalized errors, and execution records with no Twitter/X via ScrapeCreators account. Mock selection changes the executor endpoint and trusted provider base-URL configuration, never the execute request.
Limitations
- This page describes the manifest's explicit P0 subset, not every operation offered by the provider.
- Provider account policy, consent UI, quota details, and current wire compatibility still require a real-provider certification pass.
- Fields outside the canonical schemas and declared
x_providerextensions are rejected.
Versions
| Contract | Version |
|---|---|
| Runtime catalog | 1.1 |
| Manifest catalog | 1.0 |
| Manifest schema | 1.0 |
| Source | scrapecreators |
| Tier | P0 |
| Capabilities | social_media_data |
Next
Use Testing with mocks to exercise this toolkit before connecting a live provider account.