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 Twitter API v2 endpoints. Longer term, as we release new versions of core endpoints and features, you should expect they will replace the standard v1.1premium v1.1, and enterprise endpoints as you know them today. The endpoints we have released so far are:

Resource Endpoint group How it can be used
Tweets Tweets lookup Returns information about a Tweet or group of Tweets.
Recent search Returns Tweets over the last seven to nine days that match your query criteria.
Full-archive search Query the complete archive of public Tweets created since the first Tweet in March 2006. 
This endpoint is currently only available with the Academic Research product track
User Tweet timeline Returns the Tweets composed by, or mentioning, a specified Twitter account.
User mention timeline Returns the Tweets mentioning a specified Twitter account.
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.
Users Users lookup Returns the profile information for a given user with the newly added ability to specify fields to be returned.
Follows lookup Retrieve an account’s followers and who they are following using their user ID.
Manage follows Follow or unfollow users using user IDs.
Manage blocks Block or unblock users using user IDs


If you currently use the standard 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.

Standard 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
search/tweets Search Tweets
- Recent search
- Full-archive search
Recent search
450 requests/15 min per user
180 requests/15 min per app

Full-archive search
300 requests/15 min per app
1 request/1 sec per app
statuses/user_timeline & statuses/mentions_timeline Timelines
- User Tweet timeline
- User mention timeline
User Tweet timeline
900 requests/15 min per user
1500 requests/15 min per app

User mentions timeline
180 requests/15 min per user
450 requests/15 min per app
statuses/filter Filtered stream
- Connect to stream
- Add/delete rules
- Retrieve rules
Connect to stream
50 requests/15 min

Add/delete rules
450 requests/15 min

Retrieve rules
450 requests/15 min
statuses/sample Sampled stream 50 requests/15 min
  Hide replies 50 requests/15 min
users/show & users/lookup User lookup 900 requests/15 min per user
300 requests/15 min per app
v1.1 followers/ids, v1.1 followers/list, v1.1 friends/ids, & v1.1 friends/list Follows lookup 15 requests/15 min per user
15 requests/15 min per app
v1.1 friendships/create, v1.1 friendships/destroy Manage follows
- Follow a user
- Unfollow a user

50 requests/15 min per user
50 requests/15 min per user
v1.1 blocks/create, v1.1 blocks/destroy Manage blocks
- Block a user
- Unblock a user

50 requests/15 min per user
50 requests/15 min per user


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:

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.


Flexiblity to choose which data objects and fields you receive

When making a request to a GET endpoint, you will receive the primary data object that relates to that endpoint, which will include a set of default fields. For example, the Tweet object delivers the id and text fields as its default. 

If you would like to retrieve additional fields with your request, you will have to use the fields parameter. You can also request related objects using the expansions parameter, such as a user's pinned Tweet or a media object, and then an additional fields parameter to pull any fields from this related object. Here is a full list of expansions that you can request with the different Twitter API v2 endpoints:

  • 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 how to use fields and expansions, and check out our full list of data objects and fields in the Twitter API 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
        }
    


Tweet annotations

Annotations can be used to discover Tweets on topics of interest or to segment Tweets by entity categories. 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, and can be used to filter search and streaming results using operators by the same name. 

Learn more about Tweet 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"
        }
      ]

    


Track threaded conversations

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.


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.

If you are academic researcher, then you can apply for the Academic Research product track. If you are eligible, this will give you access to an academic project that will give you access to the full-archive search endpoint, a higher monthly Tweet cap and enhanced filtering capabilities on the filtered stream and recent search endpoints. Learn more about the Academic Research product track on our academic research hub.


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 or enterprise 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
  • v2 Full-archive 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"
}
]
    
      {
    "data": [
        {
            "id": "1346889436626259968",
            "text": "Learn how to use the user Tweet timeline and user mention timeline endpoints in the Twitter API v2 to explore Tweets and mentions 👇\n\nhttps://t.co/8ef0gXruSD"
        },
        {
            "id": "1346588685555306497",
            "text": "🔑🔑 On Tuesday, January 12th, we’re removing the ability to view existing consumer API keys from the developer portal. Be sure to save your API keys in a secure place before Tuesday to ensure your access to the #TwitterAPI is not disrupted. Learn more https://t.co/UztnVZrVwa"
        }
    ],
    "meta": {
        "newest_id": "1346889436626259968",
        "oldest_id": "1346588685555306497",
        "result_count": 2
    }
}
    
      {
    "data": [
        {
            "id": "1346889436626259968",
            "text": "Learn how to use the user Tweet timeline and user mention timeline endpoints in the Twitter API v2 to explore Tweets and mentions 👇\n\nhttps://t.co/8ef0gXruSD"
        },
        {
            "id": "1346588685555306497",
            "text": "🔑🔑 On Tuesday, January 12th, we’re removing the ability to view existing consumer API keys from the developer portal. Be sure to save your API keys in a secure place before Tuesday to ensure your access to the #TwitterAPI is not disrupted. Learn more https://t.co/UztnVZrVwa"
        }
    ],
    "meta": {
        "newest_id": "1346889436626259968",
        "oldest_id": "1346588685555306497",
        "result_count": 2
    }
}
    
  • 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 v1.1, 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 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

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.