Conversations and messages
Get Chat Conversation Events
Retrieves messages and key change events for a specific Chat conversation with pagination support. For 1:1 conversations, provide the recipient’s user ID; the server constructs the canonical conversation ID from the authenticated user and recipient.
GET
/
2
/
chat
/
conversations
/
{id}
/
events
Get Chat Conversation Events
curl --request GET \
--url https://api.x.com/2/chat/conversations/{id}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.x.com/2/chat/conversations/{id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.x.com/2/chat/conversations/{id}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.x.com/2/chat/conversations/{id}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.x.com/2/chat/conversations/{id}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.x.com/2/chat/conversations/{id}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.x.com/2/chat/conversations/{id}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"conversation_id": "<string>",
"conversation_token": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"encoded_event": "<string>",
"id": "<string>",
"is_trusted": true,
"message_event_signature": {},
"previous_id": "<string>",
"sender_id": "<string>"
}
],
"errors": [
{
"detail": "<string>",
"resource_type": "<string>",
"title": "<string>",
"type": "https://api.x.com/2/problems/resource-not-found",
"parameter": "<string>",
"resource_id": "<string>",
"status": 123,
"value": "<string>"
}
],
"meta": {
"conversation_key_events": [
"<string>"
],
"has_more": true,
"next_token": "<string>",
"result_count": 123
}
}{
"code": 123,
"message": "<string>"
}Authorizations
OAuth2UserTokenUserToken
The access token received from the authorization server in the OAuth 2.0 flow.
FlowAuthorization Code
- Authorization URL
- https://api.x.com/2/oauth2/authorize
- Token URL
- https://api.x.com/2/oauth2/token
Scopes3
tweet.read
View all posts you can see, including those from protected accounts.
users.read
View any account you can see, including protected accounts.
dm.read
Read all your Direct Messages.
Path Parameters
Pattern:
^([0-9]{1,19}|[0-9]{1,19}-[0-9]{1,19}|g[0-9]{1,19})$Query Parameters
Required range:
1 <= x <= 100A comma separated list of ChatMessageEvent fields to display. The fields available for a ChatMessageEvent object.
Minimum array length:
1Available options:
conversation_id, conversation_token, created_at, encoded_event, id, is_trusted, message_event_signature, previous_id, sender_id ⌘I
Get Chat Conversation Events
curl --request GET \
--url https://api.x.com/2/chat/conversations/{id}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.x.com/2/chat/conversations/{id}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.x.com/2/chat/conversations/{id}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.x.com/2/chat/conversations/{id}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.x.com/2/chat/conversations/{id}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.x.com/2/chat/conversations/{id}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.x.com/2/chat/conversations/{id}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"conversation_id": "<string>",
"conversation_token": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"encoded_event": "<string>",
"id": "<string>",
"is_trusted": true,
"message_event_signature": {},
"previous_id": "<string>",
"sender_id": "<string>"
}
],
"errors": [
{
"detail": "<string>",
"resource_type": "<string>",
"title": "<string>",
"type": "https://api.x.com/2/problems/resource-not-found",
"parameter": "<string>",
"resource_id": "<string>",
"status": 123,
"value": "<string>"
}
],
"meta": {
"conversation_key_events": [
"<string>"
],
"has_more": true,
"next_token": "<string>",
"result_count": 123
}
}{
"code": 123,
"message": "<string>"
}