Tutorials / Getting started guide

Getting started with R and v2 of the Twitter API

Relevant Endpoints


This tutorial will walk through what you need to get started with the programming language R and the Twitter API v2. Using R to connect to the user lookup endpoint, I’ll show how to work with JSON returned from the Twitter API. User lookup is a GET method and returns information about a user or group of users, specified by a user ID or a username.

If you aren’t familiar, R is one of the most popular languages for common Data Science tasks like time-series analysis, modeling, visualization, and other data analysis, and is often used in conjunction with the Twitter API. With the user lookup endpoint, you can use the user object to determine a correlation between the number of followers a person has and the sentiment score of their bio. The user object may also be used to map a group of accounts based on the location publicly listed in their profiles.

The new Twitter API is built on a modern, more sustainable foundation and has an improved developer experience. The first endpoints are now available with Early Access and the Academic Research product track to enable you to listen to and analyze the public conversation. We’ll soon be releasing more endpoints, features, and access levels to enable even more developer use cases.

Getting started with the Twitter API

Before you can use the Twitter API v2, you will need an approved developer account.

Once you have an approved developer account, you will need to first create a Project. Projects allow you to organize your work based on how you intend to use the Twitter API, so you can effectively manage your access to the API, and monitor your usage.

Each Project contains an App, with which you can generate the credentials required to use the Twitter API. You can learn more about how to get started with the Twitter API, in the getting started section of our documentation.

Getting your R environment set up

First, you need to download R which you can do on the cran website.

After, to set up an environment to work with R, you can use R studio, the R extension pack for Visual Studio Code, or a Jupyter notebook if you come from the Python world.

Setting up your environment variable

For the code examples, I’m going to be showing today, you will want to create an environment variable for your bearer token. The Bearer Token is what allows you to authenticate to the Twitter API and start making requests. First, replace “your-bearer-token” with your own bearer token, which can be obtained from the keys and tokens section of your App in the developer portal. You’ll need to run this line of code in the console before you start writing a script.

      Sys.setenv(BEARER_TOKEN = "your-bearer-token")


Making your request

You can use the package httr to make HTTP requests to the Twitter API. If you haven’t already installed this, please install the package in your console. You will also need to install jsonlite to work with our JSON object and dplyr for data manipulation.


You can now begin writing your R script to connect to the API. At the top of the file, call the packages httrjsonlite, and dplyr.


The first step in your code sample is to get set up to authenticate to the Twitter API. Grab the Bearer Token you pulled from your App, and pass that into your headers for authentication. In the below example, replace $BEARER_TOKEN with your token. 


      bearer_token <- Sys.getenv("$BEARER_TOKEN")
headers <- c(`Authorization` = sprintf('Bearer %s', bearer_token))

Once you got your authentication set up, define the parameters of your request. By default, you will get back the id, name, and username of each user you get back. You can make adjustments to this payload by adding additional fields and expansions. For this example, you will want the profile bio of the user which is requested using user.fields=description, and an expansion that contains the pinned Tweet of the user.

      params <- list(`user.fields` = 'description',
               `expansion` = 'pinned_tweet_id')

Now you are ready to format your URL with the Twitter handle, also known as account, you are looking to get more information about. Use the readline method to allow this sample to be reusable. After you type the handle you want to look at, format your URL to contain the handle you define by replacing $USERNAME with the desired Twitter handle. 

      handle <- readline('$USERNAME')
url_handle <-
  sprintf('https://api.twitter.com/2/users/by?usernames=%s', handle)

At this point, use the httr package to make a GET request to the URL you just created, pass in our authentication credential via the header, and pass in the parameters you defined. You can save the response as a text object in the variable obj and print this out to view the result of the request you made.

      response <-
  httr::GET(url = url_handle,
            httr::add_headers(.headers = headers),
            query = params)
obj <- httr::content(response, as = "text")

Working with our JSON payload

One of my favorite ways to work with a JSON is to use a data frame, which allows you to easily access complex nested data. To do this, use the fromJSON method of the jsonlite package to flatten your file to allow the fields to be in the same object. Then, pass that object into a data frame. Now you are ready to view this data frame.

      json_data <- fromJSON(obj, flatten = TRUE) %>% as.data.frame

You can access the fields of the data from the data frame and pass them into a string that has the handle, the username, and bio.

      final <-
    "Handle: %s\nBio: %s\nPinned Tweet: %s",

Use cat instead of print to view the object with newlines between each field you are pulling.


If you had multiple handles you made requests for, you could easily use a loop to access each data frame element.


Hopefully, this tutorial can be a starting place to work with R and the Twitter API. As a next step, you may want to look at our R samples for recent search, Tweet lookup and user lookup in our v2 sample code. Be sure to let us know on the forums if you run into any troubles along the way or Tweet us at @TwitterDev if this tutorial inspires you to create anything.

Ready to build your solution?

Apply for developer access to get started