curl --request GET \
--url https://api.omnixapi.com/api/v1/twitter/dm/list \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.omnixapi.com/api/v1/twitter/dm/list', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.omnixapi.com/api/v1/twitter/dm/list"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"status": true,
"data": {
"userId": "<string>",
"has_message_requests": true,
"conversation_count": 123,
"has_more": true,
"next_cursor": {
"cursor_id": "<string>",
"graph_snapshot_id": "<string>"
},
"conversations": [
{
"conversation_id": "1000000000000000001:3000000000000000003",
"type": "one_to_one",
"is_muted": true,
"has_more": true,
"last_message": {
"text": "ok",
"sender_id": "<string>",
"from_me": true,
"seq_id": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
},
"participant_count": 123,
"participants": [
{
"type": "user",
"id": "3000000000000000003",
"userName": "jane_doe",
"name": "Jane Doe",
"url": "https://x.com/jane_doe",
"profilePicture": "<string>",
"isVerified": true,
"isBlueVerified": true,
"canDm": true,
"hasPublicKey": true,
"createdAt": "2023-11-07T05:31:56Z"
}
]
}
]
},
"error": null
}{
"status": false,
"data": null,
"error": "Missing required field: text"
}List Conversations
Your DM conversations, newest first. Each conversation includes its details and participants. Provide your encryption_code (your XChat PIN — the code you set when enabling encrypted chats on X) to also include a decrypted last_message preview of the most recent message in each conversation. Use cursor_id and graph_snapshot_id from next_cursor to load more.
curl --request GET \
--url https://api.omnixapi.com/api/v1/twitter/dm/list \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.omnixapi.com/api/v1/twitter/dm/list', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.omnixapi.com/api/v1/twitter/dm/list"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"status": true,
"data": {
"userId": "<string>",
"has_message_requests": true,
"conversation_count": 123,
"has_more": true,
"next_cursor": {
"cursor_id": "<string>",
"graph_snapshot_id": "<string>"
},
"conversations": [
{
"conversation_id": "1000000000000000001:3000000000000000003",
"type": "one_to_one",
"is_muted": true,
"has_more": true,
"last_message": {
"text": "ok",
"sender_id": "<string>",
"from_me": true,
"seq_id": "<string>",
"createdAt": "2023-11-07T05:31:56Z"
},
"participant_count": 123,
"participants": [
{
"type": "user",
"id": "3000000000000000003",
"userName": "jane_doe",
"name": "Jane Doe",
"url": "https://x.com/jane_doe",
"profilePicture": "<string>",
"isVerified": true,
"isBlueVerified": true,
"canDm": true,
"hasPublicKey": true,
"createdAt": "2023-11-07T05:31:56Z"
}
]
}
]
},
"error": null
}{
"status": false,
"data": null,
"error": "Missing required field: text"
}Authorizations
Your OmniX API key, e.g. omnix_live_.... Billed per call.
Query Parameters
The X account auth_token cookie the action runs as.
Your XChat PIN. Provide it to include a preview of the most recent message in each conversation. Without it, you'll get the conversation details and participants, but no message preview.
Page size (1–100).
From a previous response next_cursor.cursor_id — paginate to the next page of conversations.
From a previous response next_cursor.graph_snapshot_id — paired with cursor_id.
Optional outbound proxy for this call (http:// or https://, optionally user:pass@host:port). The X request runs through it — useful for geo-routing or spreading calls across IPs. SOCKS proxies are not supported.