Migrate

Overview

Welcome to the new Twitter API! 

We believe developers play a critical role in serving the public conversation. The creativity of developers with our API makes Twitter better for people and businesses, and makes the world a better place. As we embark on the next phase of our API, our objective is to make our developer platform better for everyone. 

Our API gives you the ability to learn from and analyze the conversation on Twitter. We want to give you the tools you need to further uncover, build on, and share the value of this conversation with the world. 

Over the past year, we’ve partnered with developers to build the next generation of the Twitter API to better serve our diverse community of developers. Based on developer feedback we’ve re-designed the API to better serve a broader collection of needs, introduced new capabilities and provided room for developers to grow more seamlessly. This is just the beginning.

What is the new Twitter API?

In May of 2019, we announced our intent to build the next generation of the Twitter API. Since then, we have been collecting feedback and learning from the Twitter developer community. After more than a year of collaboration, we are announcing the first collection of endpoints of the new v2 Twitter API. Longer term, as we release new versions of core endpoints and features, you should expect they will replace the v1.1 endpoints as you know them today. The endpoints we have released so far are:

Endpoint

How it can be used
Tweets lookup Returns information about a Tweet or group of Tweets.
Users lookup Returns the profile information for a given user with the newly added ability to specify fields to be returned.
Recent search Returns Tweets over the last seven to nine days that match your query criteria.
Filtered stream Delivers Tweets which match your rules through a persistent HTTPS streaming connection.
Sampled stream Delivers about a 1% sample of all new public Tweets as they happen through a persistent HTTP streaming connection.
Hide replies Hides or unhides replies to Tweets that you or other authenticated users publish. 


If you currently use the v1.1 endpoints, the chart below reflects the functional replacement of a subset of the  v1.1 endpoints with their v2 successors along with the v2 request rate limits for each.

v1.1 endpoints

v2 endpoint

v2 limits

statuses/show & statuses/lookup Tweet lookup 900 requests/15 min per user
300 requests/15 min per app
users/show & users/lookup User lookup 900 requests/15 min per user
300 requests/15 min per app
search/tweets Recent search 450 requests/15 min per user
180 requests/15 min per app
statuses/filter Filtered stream
- Connect to stream
- Add/delete rules
- Retrieve rules

50 requests/15 min
450 requests/15 min
450 requests/15 min
statuses/sample Sampled stream 50 requests/15 min
1 connection
  Hide replies 50 requests/15 min


Learn more about rate limits

 

Learn about what's new and different

We’ve included some new features and functionality that will help you find more value with the Twitter API. A lot of what is new has been driven by your feedback. Some of the improvements to the API include:

  • A uniform JSON definition across endpoints
  • A smaller initial payload to manage and ingest 
  • Streamlined access to place, poll, and media objects 
  • High-confidence spam filtering 
  • Shortened URLs fully unwound
  • Entity detection and annotation
     

Before you dive in, let’s cover some of the fundamental changes we’ve made to the way you will access and consume data from the endpoints. 
 

Discover new and updated data objects

The following five data objects are available with the v2 endpoints:

Object

Description

Tweet The Tweet object has a long list of root-level fields, such as id, text, and created_at. Tweet objects are also the parent object to several child objects including user, media, poll, and place.
User The user object contains Twitter user account metadata describing the referenced user.
Media If a Tweet contains media (such as images), then the media object can be requested using the media.fields parameter and includes fields such as the media_key, type, url, preview_image_url, and more. 
Poll A poll included in a Tweet is not a primary object on any endpoint, but can be found and expanded in the Tweet object.
Place The place object consists of fields such as place_id, geo object, country_code, and more. This information can be used to identify Tweets and study Tweets by location.


Flexible fields

Each object provides a set of default fields. The fields attributed to the parent object are always available to the query. For example, the Tweet object delivers the id and text fields as its default. Additional fields can be requested by passing an object's field parameter, represented as [element].fields, along with a list of comma-separated fields from that object.

To see a list of our different data objects and their corresponding fields, check out our v2 data dictionary.
 

{
    "data": {
        "attachments": {
            "media_keys": [
                "13_1260294804770041858"
            ]
        },
        "author_id": "783214",
        "created_at": "2020-05-12T19:44:51.000Z",
        "id": "1260294888811347969",
        "public_metrics": {
            "retweet_count": 5240,
            "reply_count": 1844,
            "like_count": 17168,
            "quote_count": 3275
        },
        "source": "Sprinklr",
        "text": "Don’t miss the Tweets about your Tweet. \n\nNow on iOS, you can see Retweets with comments all in one place. https://t.co/oanjZfzC6y"
    }
}

 

New metrics available within Tweets, users, and media objects

More metrics are now accessible within Tweet, user, and media objects. These metrics are both public and private, and some metrics can be broken down into an organic or promoted context for Tweet ads. 

Learn more about the available metrics.
 

    All Tweets Ads
Object Available metrics Public metrics Private metrics
(requires OAuth 1.0a User Context auth)
Organic metrics Promoted metrics
tweets retweet_count ✔️   ✔️ ✔️
quote_count ✔️      
like_count ✔️   ✔️ ✔️
reply_count ✔️   ✔️ ✔️
impression_count   ✔️ ✔️ ✔️
url_profile_clicks   ✔️ ✔️ ✔️
url_link_clicks   ✔️ ✔️ ✔️
user follower_count ✔️      
following_count ✔️      
tweet_count ✔️      
listed_count ✔️      
media view_count   ✔️    
playback_0_count
playback_25_count
playback_50_count
playback_75_count
playback_100_count
  ✔️    
 "public_metrics": {
            "retweet_count": 5239,
            "reply_count": 1844,
            "like_count": 17168,
            "quote_count": 3275
        }


  "non_public_metrics": {
            "impression_count": 956,
            "user_profile_clicks": 34,
            "url_link_clicks": 57
   }


   "organic_metrics": {
            "impression_count": 956,
            "like_count": 1244,
            "reply_count": 300,
            "user_profile_clicks": 150
            "url_link_clicks": 57
        }


   "promoted_metrics": {
            "impression_count": 25086,
            "like_count": 9045,
            "reply_count": 637,
            "user_profile_clicks": 265,
            "url_link_clicks": 48
        }


Annotations

Tweets are analyzed and annotated based on the content of the Tweet text by both semantic labeling and internal machine learning algorithms. These annotations are now available via API in the response payload. We call these new elements “annotations” and they are delivered as two fields, context_annotations and entity. Annotations can be used to discover Tweets on topics of interest or to segment Tweets by entity categories.

Learn more about Annotations.

"context_annotations": [
      {
        "domain": {
          "id": "45",
          "name": "Brand Vertical",
          "description": "Top level entities that describe a Brands industry"
        }
      },
      {
        "domain": {
          "id": "46",
          "name": "Brand Category",
          "description": "Categories within Brand Verticals that narrow down the scope of Brands"
        },
        "entity": {
          "id": "781974596752842752",
          "name": "Services"
        }
      },
      {
        "domain": {
          "id": "47",
          "name": "Brand",
          "description": "Brands and Companies"
        },
        "entity": {
          "id": "10026364281",
          "name": "Apple"
        }
      },
      {
        "domain": {
          "id": "48",
          "name": "Product",
          "description": "Products created by Brands.  Examples: Ford Explorer, Apple iPhone."
        },
        "entity": {
          "id": "10044903039",
          "name": "Apple - iOS"
        }
      }
    ],
    "created_at": "2020-05-12T19:44:51.000Z",
    "entities": {
      "annotations": [
        {
          "start": 49,
          "end": 51,
          "probability": 0.8997,
          "type": "Product",
          "normalized_text": "iOS"
        }
      ]


Conversation field

A new filter operator, conversation_id, matches Tweets that share a common conversation ID, and is available for both recent search and filtered stream. A conversation ID is the Tweet ID of the Tweet that started the conversation. When a Tweet is part of a conversation thread, the conversation ID for that Tweet will match the parent most Tweet ID. 

Learn more about conversation ID.
 

Expansions

Additionally, we’ve introduced expansions which enable requests to expand and include additional fields on the objects referenced in API responses. Expanding an object using an expansion query parameter returns its default fields and embeds the expanded object in a single response. For example, for a Tweet, the following expansions can be requested:

  • author_id
  • in_reply_to_user_id
  • attachments.media_keys
  • attachments.poll_ids
  • geo.place_id
  • pinned_tweet_id
  • entities.mentions.username
  • referenced_tweets.id.author_id


Learn more about expansions.

{
    "data": {
        "attachments": {
            "media_keys": [
                "16_1211797899316740096"
            ]
        },
        "author_id": "2244994945",
        "id": "1212092628029698048",
        "referenced_tweets": [
            {
                "type": "replied_to",
                "id": "1212092627178287104"
            }
        ],


Get Started

In order to use v2 endpoints you will need the following things to get started. 

You can add an existing App to your new Project. While you are setting up your Project you should see an option to add any of your standalone Apps.

For additional information on how to proceed once you’ve obtained an approved Twitter developer account account check out our Getting Started guide.


Authentication

With the new Twitter API, you’ll use two different authentication patterns,  OAuth 1.0a User Context and OAuth 2.0 Bearer token, to access each endpoint. Each serves a different purpose when making requests to the endpoints. OAuth 2.0 Bearer token is required to make requests on behalf of your developer App, whereas OAuth 1.0a User Context authentication is required when making a request on behalf of others Twitter users.

Tools and Code 

To help you get started and familiarize yourself with the new endpoints and capabilities we have a few options to jump start your work:

First, we have a Twitter Postman collection that allows you to use the Postman client to make requests of and connect to the individual endpoints. This is a low friction way to test authentication and experiment with the endpoints. It’s important to note the Postman client is best for RESTful endpoints, but you can copy requests to streaming endpoints from the tool and paste them into your command line tool.

If you want to dig deeper, we’ve also provided a list of both Twitter supported and third party libraries in Ruby, Python, Node, Java, and many more. For additional context, take a look at our tools and libraries page.
 

Migrating to updated endpoints

As you start to explore the new Twitter v2 endpoints, we’ve built a series of detailed migration guides to help you compare and contrast each updated endpoints' capabilities compared to older versions:

Migrating to the new data format

As you move from v1.1 to v2.0 it is important to understand that the format the data are delivered in has changed significantly. We have added new fields, modified the sequence of fields and in some cases removed elements as well. 

The following is a series of different payloads that span across different versions and tiers to help illustrate the difference. 

  • Standard 1.1 Search (default mode)
  • Standard 1.1 Search (extended)
  • v2 Recent Search
[
{
created_at: "Wed Jun 10 19:25:24 +0000 2020",
id: 1270799243071062016,
id_str: "1270799243071062016",
text: "As we work towards building the new Twitter API, we’ve extended the deprecation timeline for several Labs v1 endpoi… https:\/\/t.co\/F1fAJC1yFn",
truncated: true,
entities: {
hashtags: [],
symbols: [],
user_mentions: [],
urls: [
{
url: "https:\/\/t.co\/F1fAJC1yFn",
expanded_url: "https:\/\/twitter.com\/i\/web\/status\/1270799243071062016",
display_url: "twitter.com\/i\/web\/status\/1…",
indices: [
117,
140
]
}
]
},
source: "<a href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\">Twitter Web App<\/a>",
in_reply_to_status_id: null,
in_reply_to_status_id_str: null,
in_reply_to_user_id: null,
in_reply_to_user_id_str: null,
in_reply_to_screen_name: null,
user: {
id: 2244994945,
id_str: "2244994945",
name: "Twitter Dev",
screen_name: "TwitterDev",
location: "127.0.0.1",
description: "The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API. \n\n#BlackLivesMatter",
url: "https:\/\/t.co\/3ZX3TNiZCY",
entities: {
url: {
urls: [
{
url: "https:\/\/t.co\/3ZX3TNiZCY",
expanded_url: "https:\/\/developer.twitter.com\/en\/community",
display_url: "developer.twitter.com\/en\/community",
indices: [
0,
23
]
}
]
},
description: {
urls: []
}
},
protected: false,
followers_count: 507689,
friends_count: 1863,
listed_count: 1549,
created_at: "Sat Dec 14 04:35:55 +0000 2013",
favourites_count: 2184,
utc_offset: null,
time_zone: null,
geo_enabled: true,
verified: true,
statuses_count: 3562,
lang: null,
contributors_enabled: false,
is_translator: false,
is_translation_enabled: false,
profile_background_color: "FFFFFF",
profile_background_image_url: "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png",
profile_background_image_url_https: "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png",
profile_background_tile: false,
profile_image_url: "http:\/\/pbs.twimg.com\/profile_images\/1267175364003901441\/tBZNFAgA_normal.jpg",
profile_image_url_https: "https:\/\/pbs.twimg.com\/profile_images\/1267175364003901441\/tBZNFAgA_normal.jpg",
profile_banner_url: "https:\/\/pbs.twimg.com\/profile_banners\/2244994945\/1590953125",
profile_link_color: "0084B4",
profile_sidebar_border_color: "FFFFFF",
profile_sidebar_fill_color: "DDEEF6",
profile_text_color: "333333",
profile_use_background_image: false,
has_extended_profile: true,
default_profile: false,
default_profile_image: false,
following: null,
follow_request_sent: null,
notifications: null,
translator_type: "regular"
},
geo: null,
coordinates: null,
place: null,
contributors: null,
is_quote_status: false,
retweet_count: 4,
favorite_count: 32,
favorited: false,
retweeted: false,
possibly_sensitive: false,
lang: "en"
}
]
{
statuses: [],
search_metadata: {
completed_in: 0.011,
max_id: 1275557191773274115,
max_id_str: "1275557191773274115",
query: "from%3Atwitterdev+-RT",
refresh_url: "?since_id=1275557191773274115&q=from%3Atwitterdev%20-RT&include_entities=1",
count: 1,
since_id: 0,
since_id_str: "0"
}
}
Format below for 'statuses':[] above, showing one Tweet
[
{
created_at: "Wed Jun 10 19:25:24 +0000 2020",
id: 1270799243071062016,
id_str: "1270799243071062016",
full_text: "As we work towards building the new Twitter API, we’ve extended the deprecation timeline for several Labs v1 endpoints. Learn more 📖 https:\/\/t.co\/rRWaJYJgKk",
truncated: false,
display_text_range: [
0,
156
],
entities: {
hashtags: [],
symbols: [],
user_mentions: [],
urls: [
{
url: "https:\/\/t.co\/rRWaJYJgKk",
expanded_url: "https:\/\/twittercommunity.com\/t\/update-on-labs-v1-endpoints\/138641",
display_url: "twittercommunity.com\/t\/update-on-la…",
indices: [
133,
156
]
}
]
},
source: "<a href=\"https:\/\/mobile.twitter.com\" rel=\"nofollow\">Twitter Web App<\/a>",
in_reply_to_status_id: null,
in_reply_to_status_id_str: null,
in_reply_to_user_id: null,
in_reply_to_user_id_str: null,
in_reply_to_screen_name: null,
user: {
id: 2244994945,
id_str: "2244994945",
name: "Twitter Dev",
screen_name: "TwitterDev",
location: "127.0.0.1",
description: "The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API. \n\n#BlackLivesMatter",
url: "https:\/\/t.co\/3ZX3TNiZCY",
entities: {
url: {
urls: [
{
url: "https:\/\/t.co\/3ZX3TNiZCY",
expanded_url: "https:\/\/developer.twitter.com\/en\/community",
display_url: "developer.twitter.com\/en\/community",
indices: [
0,
23
]
}
]
},
description: {
urls: []
}
},
protected: false,
followers_count: 507689,
friends_count: 1863,
listed_count: 1549,
created_at: "Sat Dec 14 04:35:55 +0000 2013",
favourites_count: 2184,
utc_offset: null,
time_zone: null,
geo_enabled: true,
verified: true,
statuses_count: 3562,
lang: null,
contributors_enabled: false,
is_translator: false,
is_translation_enabled: false,
profile_background_color: "FFFFFF",
profile_background_image_url: "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png",
profile_background_image_url_https: "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png",
profile_background_tile: false,
profile_image_url: "http:\/\/pbs.twimg.com\/profile_images\/1267175364003901441\/tBZNFAgA_normal.jpg",
profile_image_url_https: "https:\/\/pbs.twimg.com\/profile_images\/1267175364003901441\/tBZNFAgA_normal.jpg",
profile_banner_url: "https:\/\/pbs.twimg.com\/profile_banners\/2244994945\/1590953125",
profile_link_color: "0084B4",
profile_sidebar_border_color: "FFFFFF",
profile_sidebar_fill_color: "DDEEF6",
profile_text_color: "333333",
profile_use_background_image: false,
has_extended_profile: true,
default_profile: false,
default_profile_image: false,
following: null,
follow_request_sent: null,
notifications: null,
translator_type: "regular"
},
geo: null,
coordinates: null,
place: null,
contributors: null,
is_quote_status: false,
retweet_count: 4,
favorite_count: 32,
favorited: false,
retweeted: false,
possibly_sensitive: false,
lang: "en"
}
]
  • Standard v1.1 Filtered Stream
  • v2 Filtered Stream
{
"created_at": "Tue Jun 23 23:28:25 +0000 2020",
"id": 1275571441967095800,
"id_str": "1275571441967095808",
"text": "Testing #testingtuesday as part @not_happycamper and @happycamper favorite time of week. Cant wait to see these… https://t.co/AQ3qO5UBU8",
"display_text_range": [
0,
140
],
"source": "<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Twitter Web App</a>",
"truncated": true,
"in_reply_to_status_id": null,
"in_reply_to_status_id_str": null,
"in_reply_to_user_id": null,
"in_reply_to_user_id_str": null,
"in_reply_to_screen_name": null,
"user": {
"id": 3001969357,
"id_str": "3001969357",
"name": "Jordan Brinks",
"screen_name": "furiouscamper",
"location": "\"Somewhere shady\"",
"url": "http://spammerurl.com",
"description": "\"Hacking into furiouscamper to update things\"",
"translator_type": "regular",
"protected": false,
"verified": false,
"followers_count": 25,
"friends_count": 59,
"listed_count": 2,
"favourites_count": 91,
"statuses_count": 616,
"created_at": "Thu Jan 29 18:27:49 +0000 2015",
"utc_offset": null,
"time_zone": null,
"geo_enabled": true,
"lang": null,
"contributors_enabled": false,
"is_translator": false,
"profile_background_color": "000000",
"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
"profile_background_tile": false,
"profile_link_color": "FF691F",
"profile_sidebar_border_color": "000000",
"profile_sidebar_fill_color": "000000",
"profile_text_color": "000000",
"profile_use_background_image": false,
"profile_image_url": "http://pbs.twimg.com/profile_images/851526626785480705/cW4WTi7C_normal.jpg",
"profile_image_url_https": "https://pbs.twimg.com/profile_images/851526626785480705/cW4WTi7C_normal.jpg",
"profile_banner_url": "https://pbs.twimg.com/profile_banners/3001969357/1491854774",
"default_profile": false,
"default_profile_image": false,
"following": null,
"follow_request_sent": null,
"notifications": null
},
"geo": null,
"coordinates": null,
"place": null,
"contributors": null,
"is_quote_status": false,
"extended_tweet": {
"full_text": "Testing #testingtuesday as part @not_happycamper and @happycamper favorite time of week. Cant wait to see these in the API. Here's an image of my fave cereal and some other things like atl text and tags. Just seeing how this comes through and document https://t.co/XVLZ3uwikc https://t.co/OK8DACdL9K",
"display_text_range": [
0,
279
],
"entities": {
"hashtags": [
{
"text": "testingtuesday",
"indices": [
8,
23
]
}
],
"urls": [
{
"url": "https://t.co/XVLZ3uwikc",
"expanded_url": "https://developer.twitter.com/en",
"display_url": "developer.twitter.com/en",
"indices": [
256,
279
]
}
],
"user_mentions": [
{
"screen_name": "not_happycamper",
"name": "happy camper",
"id": 3342275174,
"id_str": "3342275174",
"indices": [
32,
48
]
},
{
"screen_name": "happycamper",
"name": "Emily Waligoske 🏕",
"id": 63046977,
"id_str": "63046977",
"indices": [
54,
66
]
}
],
"symbols": [],
"media": [
{
"id": 1275570653375033300,
"id_str": "1275570653375033346",
"indices": [
280,
303
],
"description": "Here's a picture of my favorite cereal, it's called apple jacks and they are sooooo good! What else can I say, probably more than 140 characters about this fab snack.",
"media_url": "http://pbs.twimg.com/media/EbO8wEBU8AIJlX3.jpg",
"media_url_https": "https://pbs.twimg.com/media/EbO8wEBU8AIJlX3.jpg",
"url": "https://t.co/OK8DACdL9K",
"display_url": "pic.twitter.com/OK8DACdL9K",
"expanded_url": "https://twitter.com/furiouscamper/status/1275571441967095808/photo/1",
"type": "photo",
"sizes": {
"thumb": {
"w": 150,
"h": 150,
"resize": "crop"
},
"medium": {
"w": 225,
"h": 225,
"resize": "fit"
},
"small": {
"w": 225,
"h": 225,
"resize": "fit"
},
"large": {
"w": 225,
"h": 225,
"resize": "fit"
}
}
}
]
},
"extended_entities": {
"media": [
{
"id": 1275570653375033300,
"id_str": "1275570653375033346",
"indices": [
280,
303
],
"description": "Here's a picture of my favorite cereal, it's called apple jacks and they are sooooo good! What else can I say, probably more than 140 characters about this fab snack.",
"media_url": "http://pbs.twimg.com/media/EbO8wEBU8AIJlX3.jpg",
"media_url_https": "https://pbs.twimg.com/media/EbO8wEBU8AIJlX3.jpg",
"url": "https://t.co/OK8DACdL9K",
"display_url": "pic.twitter.com/OK8DACdL9K",
"expanded_url": "https://twitter.com/furiouscamper/status/1275571441967095808/photo/1",
"type": "photo",
"sizes": {
"thumb": {
"w": 150,
"h": 150,
"resize": "crop"
},
"medium": {
"w": 225,
"h": 225,
"resize": "fit"
},
"small": {
"w": 225,
"h": 225,
"resize": "fit"
},
"large": {
"w": 225,
"h": 225,
"resize": "fit"
}
}
}
]
}
},
"quote_count": 0,
"reply_count": 0,
"retweet_count": 0,
"favorite_count": 0,
"entities": {
"hashtags": [
{
"text": "testingtuesday",
"indices": [
8,
23
]
}
],
"urls": [
{
"url": "https://t.co/AQ3qO5UBU8",
"expanded_url": "https://twitter.com/i/web/status/1275571441967095808",
"display_url": "twitter.com/i/web/status/1…",
"indices": [
116,
139
]
}
],
"user_mentions": [
{
"screen_name": "not_happycamper",
"name": "happy camper",
"id": 3342275174,
"id_str": "3342275174",
"indices": [
32,
48
]
},
{
"screen_name": "happycamper",
"name": "Emily Waligoske 🏕",
"id": 63046977,
"id_str": "63046977",
"indices": [
54,
66
]
}
],
"symbols": []
},
"favorited": false,
"retweeted": false,
"possibly_sensitive": false,
"filter_level": "low",
"lang": "en",
"timestamp_ms": "1592954905393"
}
{
"data": {
"attachments": {
"media_keys": [
"3_1275570653375033346"
]
},
"author_id": "3001969357",
"created_at": "2020-06-23T23:28:25.000Z",
"entities": {
"hashtags": [
{
"start": 8,
"end": 23,
"tag": "testingtuesday"
}
],
"mentions": [
{
"start": 32,
"end": 48,
"username": "not_happycamper"
},
{
"start": 54,
"end": 66,
"username": "happycamper"
}
],
"urls": [
{
"start": 256,
"end": 279,
"url": "https://t.co/XVLZ3uwikc",
"expanded_url": "https://developer.twitter.com/en",
"display_url": "developer.twitter.com/en",
"images": [
{
"url": "https://pbs.twimg.com/news_img/1275400988589985792/3N0MsLhJ?format=png&name=orig",
"width": 200,
"height": 200
},
{
"url": "https://pbs.twimg.com/news_img/1275400988589985792/3N0MsLhJ?format=png&name=150x150",
"width": 150,
"height": 150
}
],
"status": 200,
"title": "Developer",
"description": "Tap into what's happening. Publish and analyze Tweets, optimize ads, and create unique customer experiences.",
"unwound_url": "https://developer.twitter.com/en"
},
{
"start": 280,
"end": 303,
"url": "https://t.co/OK8DACdL9K",
"expanded_url": "https://twitter.com/furiouscamper/status/1275571441967095808/photo/1",
"display_url": "pic.twitter.com/OK8DACdL9K"
}
]
},
"id": "1275571441967095808",
"lang": "en",
"possibly_sensitive": false,
"source": "Twitter Web App",
"text": "Testing #testingtuesday as part @not_happycamper and @happycamper favorite time of week. Cant wait to see these in the API. Here's an image of my fave cereal and some other things like atl text and tags. Just seeing how this comes through and document https://t.co/XVLZ3uwikc https://t.co/OK8DACdL9K"
},
"includes": {
"users": [
{
"id": "3001969357",
"name": "Jordan Brinks",
"username": "furiouscamper"
}
]
},
"matching_rules": [
{
"id": 1275560486390558700,
"tag": "TESTRULE_0001_a"
},
{
"id": 1273341145360199700,
"tag": "TESTRULEnumba1"
}
]
}
  • Standard v1.1 Statuses Show
  • v2 Tweets
{
"created_at":"Wed Oct 10 20:19:24 +0000 2018",
"id":1050118621198921728,
"id_str":"1050118621198921728",
"text":"To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ and skin t… https://t.co/MkGjXf9aXm",
"truncated":true,
"entities":{
"hashtags":[],
"symbols":[],
"user_mentions":[],
"urls":[
{
"url":"https://t.co/MkGjXf9aXm",
"expanded_url":"https://twitter.com/i/web/status/1050118621198921728",
"display_url":"twitter.com/i/web/status/1…",
"indices":[
117,
140
]
}
]
},
"source":"<a href=http://twitter.com>Twitter Web Client</a>",
"in_reply_to_status_id":null,
"in_reply_to_status_id_str":null,
"in_reply_to_user_id":null,
"in_reply_to_user_id_str":null,
"in_reply_to_screen_name":null,
"user":{
"id":6253282,
"id_str":"6253282",
"name":"Twitter API",
"screen_name":"TwitterAPI",
"location":"San Francisco, CA",
"description":"The Real Twitter API. Tweets about API changes, service issues and our Developer Platform. Don't get an answer? It's on my website.",
"url":"https://t.co/8IkCzCDr19",
"entities":{
"url":{
"urls":[
{
"url":"https://t.co/8IkCzCDr19",
"expanded_url":"https://developer.twitter.com",
"display_url":"developer.twitter.com",
"indices":[
0,
23
]
}
]
},
"description":{
"urls":[]
}
},
"protected":false,
"followers_count":6128663,
"friends_count":12,
"listed_count":12900,
"created_at":"Wed May 23 06:01:13 +0000 2007",
"favourites_count":32,
"utc_offset":null,
"time_zone":null,
"geo_enabled":null,
"verified":true,
"statuses_count":3659,
"lang":"null",
"contributors_enabled":null,
"is_translator":null,
"is_translation_enabled":null,
"profile_background_color":"null",
"profile_background_image_url":"null",
"profile_background_image_url_https":"null",
"profile_background_tile":"nulll",
"profile_image_url":"null",
"profile_image_url_https":"https://pbs.twimg.com/profile_images/942858479592554497/BbazLO9L_normal.jpg",
"profile_banner_url":"https://pbs.twimg.com/profile_banners/6253282/1497491515",
"profile_link_color":"null",
"profile_sidebar_border_color":"null",
"profile_sidebar_fill_color":"null",
"profile_text_color":"null",
"profile_use_background_image":null,
"has_extended_profile":null,
"default_profile":false,
"default_profile_image":false,
"following":"nul",
"follow_request_sent":null,
"notifications":null,
"translator_type":"null"
},
"geo":null,
"coordinates":null,
"place":null,
"contributors":null,
"is_quote_status":false,
"retweet_count":161,
"favorite_count":296,
"favorited":false,
"retweeted":false,
"possibly_sensitive":false,
"possibly_sensitive_appealable":false,
"lang":"en"
}
{
"data":[
{
"author_id":"6253282",
"created_at":"2018-10-10T20:19:24.000Z",
"entities":{
"annotations":[
{
"start":168,
"end":174,
"probability":0.6123,
"type":"Product",
"normalized_text":"Twitter"
},
{
"start":215,
"end":221,
"probability":0.6982,
"type":"Product",
"normalized_text":"Twitter"
}
],
"urls":[
{
"start":254,
"end":277,
"url":"https://t.co/Nx1XZmRCXA",
"expanded_url":"https://twittercommunity.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607",
"display_url":"twittercommunity.com/t/new-update-t…",
"images":[
{
"url":"https://pbs.twimg.com/news_img/1238385891296440321/fQc87FKK?format=jpg&name=orig",
"width":1200,
"height":630
},
{
"url":"https://pbs.twimg.com/news_img/1238385891296440321/fQc87FKK?format=jpg&name=150x150",
"width":150,
"height":150
}
],
"status":200,
"title":"New update to the Twitter-Text library: Emoji character count",
"description":"Over the years, we have made several updates to the way that people can communicate on Twitter. One of the more notable changes made last year was to increase the number of characters per Tweet from 140 to 280 characters. Today, we continue to expand people’s ability to express themselves by announcing a change to the way that we count emojis. Due to the differences in the way written text and emojis are encoded, many emojis (including emojis where you can apply gender and skin tone) have count...",
"unwound_url":"https://twittercommunity.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607"
}
]
},
"id":"1050118621198921728",
"lang":"en",
"possibly_sensitive":false,
"public_metrics":{
"retweet_count":159,
"reply_count":35,
"like_count":305,
"quote_count":30
},
"source":"Twitter Web Client",
"text":"To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin tone modifiers 👍🏻👍🏽👍🏿. This is now reflected in Twitter-Text, our Open Source library. \n\nUsing Twitter-Text? See the forum post for detail: https://t.co/Nx1XZmRCXA"
}
]
}
  • v1.1 Standard user/show
  • v2 Users
[
{
"id":2244994945,
"id_str":"2244994945",
"name":"Twitter Dev",
"screen_name":"TwitterDev",
"location":"127.0.0.1",
"description":"The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API. \n\n#BlackLivesMatter",
"url":"https://t.co/3ZX3TNiZCY",
"entities":{
"url":{
"urls":[
{
"url":"https://t.co/3ZX3TNiZCY",
"expanded_url":"/content/developer-twitter/en/community",
"display_url":"developer.twitter.com/en/community",
"indices":[
0,
23
]
}
]
},
"description":{
"urls":[]
}
},
"protected":false,
"followers_count":507916,
"friends_count":1863,
"listed_count":1550,
"created_at":"Sat Dec 14 04:35:55 +0000 2013",
"favourites_count":2184,
"utc_offset":null,
"time_zone":null,
"geo_enabled":true,
"verified":true,
"statuses_count":3561,
"lang":null,
"status":{
"created_at":"Thu Jun 11 16:05:06 +0000 2020",
"id":1271111223220809700,
"id_str":"1271111223220809728",
"text":"Tune in tonight and watch as @jessicagarson takes us through running your favorite Python package in R. 🍿\n\nLearn ho… https://t.co/o1M8FoOfjS",
"truncated":true,
"entities":{
"hashtags":[],
"symbols":[],
"user_mentions":[
{
"screen_name":"jessicagarson",
"name":"Jessica Garson",
"id":15772978,
"id_str":"15772978",
"indices":[
29,
43
]
}
],
"urls":[
{
"url":"https://t.co/o1M8FoOfjS",
"expanded_url":"https://twitter.com/i/web/status/1271111223220809728",
"display_url":"twitter.com/i/web/status/1…",
"indices":[
117,
140
]
}
]
},
"source":"<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Twitter Web App</a>",
"in_reply_to_status_id":null,
"in_reply_to_status_id_str":null,
"in_reply_to_user_id":null,
"in_reply_to_user_id_str":null,
"in_reply_to_screen_name":null,
"geo":null,
"coordinates":null,
"place":null,
"contributors":null,
"is_quote_status":true,
"quoted_status_id":1270792842831691800,
"quoted_status_id_str":"1270792842831691777",
"retweet_count":8,
"favorite_count":37,
"favorited":false,
"retweeted":false,
"possibly_sensitive":false,
"lang":"en"
},
"contributors_enabled":false,
"is_translator":false,
"is_translation_enabled":false,
"profile_background_color":"FFFFFF",
"profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png",
"profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png",
"profile_background_tile":false,
"profile_image_url":"http://pbs.twimg.com/profile_images/1267175364003901441/tBZNFAgA_normal.jpg",
"profile_image_url_https":"https://pbs.twimg.com/profile_images/1267175364003901441/tBZNFAgA_normal.jpg",
"profile_banner_url":"https://pbs.twimg.com/profile_banners/2244994945/1590953125",
"profile_link_color":"0084B4",
"profile_sidebar_border_color":"FFFFFF",
"profile_sidebar_fill_color":"DDEEF6",
"profile_text_color":"333333",
"profile_use_background_image":false,
"has_extended_profile":true,
"default_profile":false,
"default_profile_image":false,
"following":true,
"follow_request_sent":false,
"notifications":false,
"translator_type":"regular"
}
]
{
"data": [
{
"created_at": "2013-12-14T04:35:55.000Z",
"description": "The voice of Twitter's #DevRel team, and your official source for updates, news, & events about Twitter's API.\n\nNeed help? Visit https://t.co/DVDf7qKyS9",
"id": "2244994945",
"name": "Twitter Dev",
"pinned_tweet_id": "1214281000932593667",
"username": "TwitterDev"
}
]


What’s next?

Those of you who have used the platform for some time will notice that many of the new endpoints are aligned with existing standard v1.1, premium, and enterprise endpoints. Indeed, we intend for these to replace all three versions in the future. For more details on what we’re planning, including our planned sequence of releases and migrations, take a look at our “Guide to the future of the Twitter API”

 

Stay up to date

The Twitter API will rapidly evolve from here. To see what we plan to do next, take a look at our roadmap. As things progress you may also track what we’ve been up to at a more granular level use our changelog.

 

What should we build next?

As we build out additional capabilities of the Twitter API v2.0 we want to continue to hear from you. We welcome and encourage feedback from you. 

Take a look at the ideas that have already been submitted, show your support for those that correlate with your needs and provide feedback as well!

Was this document helpful?

Thank you for the feedback. We’re really glad we could help!

Thank you for the feedback. How could we improve this document?

Thank you for the feedback. Your comments will help us improve our documents in the future.