x-twitter.create_post
ActiveTool of Vee3
Publish a post to a connected X account via the official X API (POST /2/tweets). Call x-twitter.connected_accounts first. If accounts is empty, the user must connect an X account at https://vee3.io/dashboard/connections before posting. Agents cannot complete OAuth; ask the user to connect, then call x-twitter.connected_accounts again. Pass user_id or user_name to target a specific account, not both. Omit both to use the default connected account. At least one of text, poll, media, or card_uri is required. Supports text, polls, media attachments, reply settings, paid partnership disclosure, AI-generated labels, super-follower exclusivity, nullcast posts, cards, communities, and direct-message deep links. To attach media, upload files with meta-tools.upload_file and the @vee3/upload CLI, then pass file_name values returned by meta-tools.list_uploaded_files in the media array (up to 4 files). Only files listed by list_uploaded_files can be attached. poll, media, and card_uri are mutually exclusive in the X API. Token pricing: 60 tokens base for text posts. Posts whose text includes a URL are billed 1000 tokens base instead. Attaching only media (an image or video) without a URL in the text does not trigger the URL rate. Each attached image adds 50 tokens. Each attached video adds 150 tokens plus 50 tokens per 5 MB of video size. X rate limit: 100 POST /2/tweets requests per connected user per 15 minutes. Wait and retry if posting is temporarily blocked. If X authorization fails, reconnect the account in the Vee3 dashboard. Read the error message when X rejects a post and adjust the request.
Parameters schema
{
"type": "object",
"title": "create_x_postArguments",
"properties": {
"poll": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Poll",
"default": null,
"description": "Poll object with options (2-4 strings) and duration_minutes (5-10080)."
},
"text": {
"anyOf": [
{
"type": "string",
"maxLength": 25000
},
{
"type": "null"
}
],
"title": "Text",
"default": null,
"description": "Post text content. At least one of text, poll, media, or card_uri is required."
},
"media": {
"type": "array",
"items": {
"type": "string"
},
"title": "Media",
"default": null,
"maxItems": 4,
"minItems": 1,
"description": "File names from meta-tools.list_uploaded_files to attach (up to 4). Upload with meta-tools.upload_file and @vee3/upload first, then list_uploaded_files to get the stored file_name values."
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id",
"default": null,
"description": "Numeric X user id from x-twitter.connected_accounts. Pass user_id or user_name to target a specific account, not both. Omit both to use the default account."
},
"card_uri": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Card Uri",
"default": null,
"description": "Card URI for the post. Mutually exclusive with poll and media."
},
"nullcast": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Nullcast",
"default": null,
"description": "Whether the post is promoted-only and hidden from the public timeline."
},
"user_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Name",
"default": null,
"description": "X handle from x-twitter.connected_accounts, with or without a leading @. Pass user_id or user_name to target a specific account, not both. Omit both to use the default account."
},
"community_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Community Id",
"default": null,
"description": "Community id when posting to an X community."
},
"made_with_ai": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Made With Ai",
"default": null,
"description": "Whether the post contains AI-generated media."
},
"reply_settings": {
"anyOf": [
{
"enum": [
"following",
"mentionedUsers",
"subscribers",
"verified"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Reply Settings",
"default": null,
"description": "Who can reply to the post."
},
"paid_partnership": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Paid Partnership",
"default": null,
"description": "Whether the post is a paid partnership."
},
"share_with_followers": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Share With Followers",
"default": null,
"description": "Whether to share a community post with followers too."
},
"direct_message_deep_link": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Direct Message Deep Link",
"default": null,
"description": "Deep link that moves the conversation into Direct Messages."
},
"for_super_followers_only": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "For Super Followers Only",
"default": null,
"description": "Whether the post is exclusive to super followers."
}
}
}Parent server
Vee3
https://github.com/Vee3io/Vee3
1/7 registries