Manage
Create DM message by conversation ID
Sends a new direct message to a specific conversation by its ID.
POST
/
2
/
dm_conversations
/
{dm_conversation_id}
/
messages
Create DM message by conversation ID
curl --request POST \
--url https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"text": "<string>",
"attachments": [
{
"media_id": "1146654567674912769"
}
]
}
'import requests
url = "https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages"
payload = {
"text": "<string>",
"attachments": [{ "media_id": "1146654567674912769" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({text: '<string>', attachments: [{media_id: '1146654567674912769'}]})
};
fetch('https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages', 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/dm_conversations/{dm_conversation_id}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => '<string>',
'attachments' => [
[
'media_id' => '1146654567674912769'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages"
payload := strings.NewReader("{\n \"text\": \"<string>\",\n \"attachments\": [\n {\n \"media_id\": \"1146654567674912769\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\",\n \"attachments\": [\n {\n \"media_id\": \"1146654567674912769\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\",\n \"attachments\": [\n {\n \"media_id\": \"1146654567674912769\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"dm_conversation_id": "123123123-456456456",
"dm_event_id": "1146654567674912769"
},
"errors": [
{
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"status": 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
dm.write
Send and manage your Direct Messages.
tweet.read
View all Posts you can see, including those from protected accounts.
users.read
View any account you can see, including protected accounts.
Path Parameters
The DM Conversation ID.
Body
application/json
Response
The request has succeeded.
Show child attributes
Show child attributes
Minimum array length:
1An HTTP Problem Details object, as defined in IETF RFC 7807 (https://tools.ietf.org/html/rfc7807).
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
- Option 13
- Option 14
- Option 15
- Option 16
- Option 17
- Option 18
Show child attributes
Show child attributes
⌘I
Create DM message by conversation ID
curl --request POST \
--url https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"text": "<string>",
"attachments": [
{
"media_id": "1146654567674912769"
}
]
}
'import requests
url = "https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages"
payload = {
"text": "<string>",
"attachments": [{ "media_id": "1146654567674912769" }]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({text: '<string>', attachments: [{media_id: '1146654567674912769'}]})
};
fetch('https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages', 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/dm_conversations/{dm_conversation_id}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'text' => '<string>',
'attachments' => [
[
'media_id' => '1146654567674912769'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages"
payload := strings.NewReader("{\n \"text\": \"<string>\",\n \"attachments\": [\n {\n \"media_id\": \"1146654567674912769\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\",\n \"attachments\": [\n {\n \"media_id\": \"1146654567674912769\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.x.com/2/dm_conversations/{dm_conversation_id}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\",\n \"attachments\": [\n {\n \"media_id\": \"1146654567674912769\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"dm_conversation_id": "123123123-456456456",
"dm_event_id": "1146654567674912769"
},
"errors": [
{
"title": "<string>",
"type": "<string>",
"detail": "<string>",
"status": 123
}
]
}{
"code": 123,
"message": "<string>"
}