Skip to Content

X

The X auth provider enables tools and agents to call the X (Twitter) API on behalf of a user. Behind the scenes, the Arcade Engine and the X auth provider seamlessly manage X OAuth 2.0 authorization for your users.

Want to quickly get started with X services in your agent or AI app? The pre-built Arcade X toolkit is what you want!

What’s documented here

This page describes how to use and configure X auth with Arcade.

This auth provider is used by:

Configuring X auth

When using your own app credentials, make sure you configure your project to use a custom user verifier. Without this, your end-users will not be able to use your app or agent in production.

In a production environment, you will most likely want to use your own X app credentials. This way, your users will see your application’s name requesting permission.

You can use your own X credentials in both the Arcade Cloud Platform or in a self-hosted Arcade Engine instance.

Before showing how to configure your X app credentials, let’s go through the steps to create a X app.

Create an X app

  • Follow X’s guide to creating an app 
  • Enable user authentication for your new app, and set its type to “Web App, Automated App or Bot”
  • Set the redirect URL to the redirect URL generated by Arcade (see below)
  • Copy the client ID and client secret to use below

Next, add the X app to your Arcade Engine configuration. You can do this in the Arcade Dashboard, or by editing the engine.yaml file directly (for a self-hosted instance).

Configuring your own X Auth Provider in Arcade

There are two ways to configure your X app credentials in Arcade:

  1. From the Arcade Dashboard GUI
  2. By editing the engine.yaml file directly (for a self-hosted Arcade Engine)

We show both options step-by-step below.

Configure X Auth Using the Arcade Dashboard GUI

Access the Arcade Dashboard

To access the Arcade Cloud dashboard, go to api.arcade.dev/dashboard . If you are self-hosting, by default the dashboard will be available at http://localhost:9099/dashboard . Adjust the host and port number to match your environment.

  • Under the OAuth section of the Arcade Dashboard left-side menu, click Providers.
  • Click Add OAuth Provider in the top right corner.
  • Select the Included Providers tab at the top.
  • In the Provider dropdown, select X.

Enter the provider details

  • Choose a unique ID for your provider (e.g. “my-x-provider”).
  • Optionally enter a Description.
  • Enter the Client ID and Client Secret from your X app.
  • Note the Redirect URL generated by Arcade. This must be set as your X app’s redirect URL.

Create the provider

Hit the Create button and the provider will be ready to be used in the Arcade Engine.

When you use tools that require X auth using your Arcade account credentials, the Arcade Engine will automatically use this X OAuth provider. If you have multiple X providers, see using multiple auth providers of the same type for more information.

Using X auth in app code

Use the X auth provider in your own agents and AI apps to get a user token for the X API. See authorizing agents with Arcade to understand how this works.

Use client.auth.start() to get a user token for X:

from arcadepy import Arcade client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable user_id = "{arcade_user_id}" # Start the authorization process auth_response = client.auth.start( user_id=user_id, provider="x", scopes=["tweet.read", "tweet.write", "users.read"], ) if auth_response.status != "completed": print("Please complete the authorization challenge in your browser:") print(auth_response.url) # Wait for the authorization to complete auth_response = client.auth.wait_for_completion(auth_response) token = auth_response.context.token # Do something interesting with the token...

Using X auth in custom tools

You can use the pre-built Arcade X toolkit to quickly build agents and AI apps that interact with X.

If the pre-built tools in the X toolkit don’t meet your needs, you can author your own custom tools that interact with the X API.

Use the X() auth class to specify that a tool requires authorization with X. The context.authorization.token field will be automatically populated with the user’s X token:

from typing import Annotated import httpx from arcade_tdk import ToolContext, tool from arcade_tdk.auth import X @tool( requires_auth=X( scopes=["tweet.read", "tweet.write", "users.read"], ) ) async def post_tweet( context: ToolContext, tweet_text: Annotated[str, "The text content of the tweet you want to post"], ) -> Annotated[str, "Success string and the URL of the tweet"]: """Post a tweet to X (Twitter).""" url = "https://api.x.com/2/tweets" headers = { "Authorization": f"Bearer {context.authorization.token}", "Content-Type": "application/json", } payload = {"text": tweet_text} async with httpx.AsyncClient() as client: response = await client.post(url, headers=headers, json=payload) response.raise_for_status() tweet_id = response.json()["data"]["id"] return f"Tweet with id {tweet_id} posted successfully. URL: https://x.com/x/status/{tweet_id}"
Last updated on