curl --request POST \
--url https://api.omnixapi.com/api/v1/twitter/dm/send_media \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"auth_token": "YOUR_X_AUTH_TOKEN",
"encryption_code": "YOUR_XCHAT_PIN",
"conversation_id": "1000000000000000001:2000000000000000002",
"image_url": "<string>",
"image_base64": "<string>",
"text": "<string>",
"type": 1,
"filename": "<string>",
"width": 123,
"height": 123,
"proxy": "http://user:pass@host:8080"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
auth_token: 'YOUR_X_AUTH_TOKEN',
encryption_code: 'YOUR_XCHAT_PIN',
conversation_id: '1000000000000000001:2000000000000000002',
image_url: '<string>',
image_base64: '<string>',
text: '<string>',
type: 1,
filename: '<string>',
width: 123,
height: 123,
proxy: 'http://user:pass@host:8080'
})
};
fetch('https://api.omnixapi.com/api/v1/twitter/dm/send_media', 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/send_media"
payload = {
"auth_token": "YOUR_X_AUTH_TOKEN",
"encryption_code": "YOUR_XCHAT_PIN",
"conversation_id": "1000000000000000001:2000000000000000002",
"image_url": "<string>",
"image_base64": "<string>",
"text": "<string>",
"type": 1,
"filename": "<string>",
"width": 123,
"height": 123,
"proxy": "http://user:pass@host:8080"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"status": true,
"data": {
"ok": true,
"message_id": "<string>",
"conversation_id": "<string>",
"media_hash_key": "<string>",
"filename": "<string>",
"type": 123,
"size": 123,
"text": "<string>"
},
"error": null
}{
"status": false,
"data": null,
"error": "Missing required field: text"
}{
"status": false,
"data": null,
"error": "You can only delete your own tweets"
}Send Media
Send an end-to-end encrypted media attachment (image / gif / video / file) into an established XChat conversation. Provide the file as image_url or image_base64. Requires your encryption_code (your XChat PIN — the code you set when enabling encrypted chats on X).
curl --request POST \
--url https://api.omnixapi.com/api/v1/twitter/dm/send_media \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"auth_token": "YOUR_X_AUTH_TOKEN",
"encryption_code": "YOUR_XCHAT_PIN",
"conversation_id": "1000000000000000001:2000000000000000002",
"image_url": "<string>",
"image_base64": "<string>",
"text": "<string>",
"type": 1,
"filename": "<string>",
"width": 123,
"height": 123,
"proxy": "http://user:pass@host:8080"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
auth_token: 'YOUR_X_AUTH_TOKEN',
encryption_code: 'YOUR_XCHAT_PIN',
conversation_id: '1000000000000000001:2000000000000000002',
image_url: '<string>',
image_base64: '<string>',
text: '<string>',
type: 1,
filename: '<string>',
width: 123,
height: 123,
proxy: 'http://user:pass@host:8080'
})
};
fetch('https://api.omnixapi.com/api/v1/twitter/dm/send_media', 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/send_media"
payload = {
"auth_token": "YOUR_X_AUTH_TOKEN",
"encryption_code": "YOUR_XCHAT_PIN",
"conversation_id": "1000000000000000001:2000000000000000002",
"image_url": "<string>",
"image_base64": "<string>",
"text": "<string>",
"type": 1,
"filename": "<string>",
"width": 123,
"height": 123,
"proxy": "http://user:pass@host:8080"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"status": true,
"data": {
"ok": true,
"message_id": "<string>",
"conversation_id": "<string>",
"media_hash_key": "<string>",
"filename": "<string>",
"type": 123,
"size": 123,
"text": "<string>"
},
"error": null
}{
"status": false,
"data": null,
"error": "Missing required field: text"
}{
"status": false,
"data": null,
"error": "You can only delete your own tweets"
}Authorizations
Your OmniX API key, e.g. omnix_live_.... Billed per call.
Body
The X account auth_token cookie the action runs as.
"YOUR_X_AUTH_TOKEN"
Your XChat encryption code — the PIN you set when enabling encrypted chats on X. Used to recover your key so messages can be decrypted and outgoing events signed.
"YOUR_XCHAT_PIN"
"1000000000000000001:2000000000000000002"
A URL to fetch the media from. Provide this or image_base64.
Base64 of the file (with or without a data: prefix). Provide this or image_url.
Optional caption.
1=image (default), 2=gif, 3=video, 4=audio, 5=file, 6=svg.
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.
"http://user:pass@host:8080"