All APIs

X (Twitter) API

Available

Get public X profiles, posts, replies, media, followers, lists, search, and more through the same API as Instagram and TikTok.

$2.50 per 1,000 requests. Your first 100 are free, no card needed.

GET /v1/twitter/profiles/{identifier}
curl "https://api.openhandle.dev/v1/twitter/profiles/@copperfield_lab_x_test" \
  -H "Authorization: Bearer $OPENHANDLE_TEST_KEY"
200 OK
{
  "platform": "twitter",
  "resource": "profile",
  "capturedAt": "2026-09-29T14:06:45Z",
  "source": "live",
  "data": {
    "id": "940000000001",
    "handle": "copperfield_lab_x_test",
    "displayName": "Copperfield Lab",
    "bio": "A fictional public Twitter profile for deterministic API testing. Press: press@example.openhandle.dev, yt: @copperfield_lab",
    "extracted": {
      "emails": [
        "press@example.openhandle.dev"
      ],
      "phones": [],
      "links": [],
      "handles": [
        {
          "platform": "youtube",
          "handle": "copperfield_lab"
        }
      ]
    },
    "url": "https://x.com/copperfield_lab_x_test",
    "externalUrl": "https://example.openhandle.dev/copperfield-lab",
    "createdAt": "2015-12-10T04:31:33Z",
    "location": {
      "text": "Synthetic Bay",
      "place": null
    },
    "avatar": {
      "type": "image",
      "url": "https://media.openhandle.dev/Awbxetxc7B1sMsaZ_Exj0W8nIc9ffNK5HxPM3XgAokn_ZYTTz0PnXlYefmRFNBCBAuIKVJs8jlWV178ndwgG0fgw-Ac858fW99HQIsd1HGW2rNlWW6j-THl5_e53Kn2oB63fEV86z_rO95cQ5aou1h4",
      "role": null,
      "width": null,
      "height": null,
      "altText": null,
      "shape": null,
      "isNft": null
    },
    "banner": {
      "type": "image",
      "url": "https://media.openhandle.dev/A9I3MuTzSuvzMfHQtxrOEIdyntiB3QtXR2WtjBJkkKGwD_uROrrqFIgrEmB72lDAzQV1xuuuiTUvmoCBvd83HE5u7CjgdrmNfXT4InzmHPzwQ_SQ3pS96YKiPX7wxQLoMNnqfXdndPvhDM_whW9Yr00",
      "role": null,
      "width": null,
      "height": null,
      "altText": null,
      "shape": null,
      "isNft": null
    },
    "isPrivate": false,
    "isSuspended": false,
    "isVerified": true,
    "hasCustomTimelines": false,
    "isLifelineInstitution": false,
    "metrics": {
      "followers": 32840,
      "following": 184,
      "posts": 912,
      "likedPosts": 482,
      "mediaPosts": 76,
      "creatorSubscriptions": null,
      "affiliates": null
    },
    "verification": {
      "legacyVerified": true,
      "type": null,
      "isBlueVerified": null
    },
    "pinnedPostIds": [
      "940100000000000001"
    ],
    "entities": {
      "bio": [
        {
          "type": "mention",
          "range": {
            "start": 63,
            "end": 69
          },
          "shortUrl": null,
          "url": null,
          "displayUrl": null,
          "text": null,
          "handle": "sample_756440_test",
          "id": null,
          "displayName": null,
          "mediaId": null
        },
        {
          "type": "mention",
          "range": {
            "start": 70,
            "end": 80
          },
          "shortUrl": null,
          "url": null,
          "displayUrl": null,
          "text": null,
          "handle": "sample_143285_test",
          "id": null,
          "displayName": null,
          "mediaId": null
        }
      ],
      "externalUrl": [
        {
          "type": "link",
          "range": {
            "start": 0,
            "end": 23
          },
          "shortUrl": "https://example.openhandle.dev/sample-89549370",
          "url": "https://example.openhandle.dev/sample-25704290",
          "displayUrl": "example.openhandle.dev",
          "text": null,
          "handle": null,
          "id": null,
          "displayName": null,
          "mediaId": null
        }
      ]
    },
    "withheld": {
      "copyright": false,
      "description": null,
      "scope": null
    },
    "subscriptions": {
      "isEligible": null
    },
    "visibility": {
      "hasHiddenLikesOnProfile": null,
      "hasHiddenSubscriptionsOnProfile": null
    },
    "professional": null,
    "labels": null
  }
}

The real answer to this request with a free Test key. Test keys read a synthetic dataset, so your first call returns the same answer. Only the capture time and the signed media links differ.

Endpoints

Everything public on X, 15 operations.

Profiles, posts, comments, and more, grouped by what they read. Each one is one call.

Profiles

6 operations
  • Get a profileGET /v1/twitter/profiles/{identifier}
  • List user postsGET /v1/twitter/profiles/{identifier}/posts
  • List user repliesGET /v1/twitter/profiles/{identifier}/replies
  • List user mediaGET /v1/twitter/profiles/{identifier}/media
  • List followersGET /v1/twitter/profiles/{identifier}/followers
  • List followingGET /v1/twitter/profiles/{identifier}/following

Posts

4 operations
  • Get a postGET /v1/twitter/posts/{identifier}
  • List post repliesGET /v1/twitter/posts/{identifier}/comments
  • List nested repliesGET /v1/twitter/posts/{identifier}/comments/{comment_id}/replies
  • List post repostersGET /v1/twitter/posts/{identifier}/reposters

Lists

1 operation
  • List list postsGET /v1/twitter/lists/{identifier}/posts

Search

4 operations
  • Search latest or top postsGET /v1/twitter/search/posts?q={query}&sort=latest
  • Search usersGET /v1/twitter/search/users?q={query}
  • Search images or videosGET /v1/twitter/search/media?q={query}&type=image
  • Search suggestionsGET /v1/twitter/search/suggestions?q={query}

Popular X data

Built for
  • Conversation monitoring
  • Audience research
  • News intelligence
  • Creator discovery
Known boundaries
  • X can change its public interfaces. Openhandle handles those changes behind the API.
  • Write actions and account login are not part of the public-data API.

FAQ

X questions.

Do I need official X API access or approval?
No. Your application uses an Openhandle API key. Openhandle handles the upstream integration behind redundant paths.
Will I need to resolve a handle to an ID first?
No. Use @username or the stable platform ID directly in any profile path, including /posts and /replies. Either form is one billed request.

Let your agent wire up X.

Copy one prompt. It has the docs, the spec, and an example request. Your agent reads it and builds against your test key.

Send your agent ahead.

Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.

For agents

100 free requests. No card needed.