# X / Twitter Automation

## Links

- Product page URL: https://www.agentpmt.com/marketplace/x-twitter-automation
- Product markdown URL: https://www.agentpmt.com/marketplace/x-twitter-automation?format=agent-md
- Product JSON URL: https://www.agentpmt.com/marketplace/x-twitter-automation?format=agent-json

## Overview

- Product ID: 69fd3f8f564f18a7b599859f
- Vendor: Apoth3osis
- Type: function
- Unit type: request
- Price: 500 credits
- Categories: Automation, Marketing, Social Media Management, Marketing Automation, Content Management & Publishing, News & Media Monitoring
- Generated at: 2026-05-25T22:10:40.948Z

### Page Description

X (Twitter) automation for AI agents and social media teams. Connect your X account once and run your entire publishing, engagement, and social listening workflow from a single MCP-ready API. Post tweets and replies, attach images, GIFs, and video, and search X for brand keywords, mentions, competitors, and trending topics — then draft and send on-brand replies in seconds. Like, repost, follow, and send DMs; build and curate X Lists; and read your mentions, home, and user timelines for reporting. Built for automated tweet scheduling, brand and competitor monitoring, social media customer support, influencer outreach, and end-to-end X / Twitter / X.com content workflows.

### Agent Description

Operate a connected X / Twitter account end-to-end from agents and workflows: compose, publish, search, engage, and DM. Publish top-level posts with create_post, or create_post_with_link when the text contains a URL; reply with create_reply, or create_reply_with_link when the reply text contains a URL. Attach media with upload_media (image, GIF, or video from a File Manager file or any public URL). Find conversations with search_posts (recent keyword/brand search) and read context with lookup_posts, lookup_users, lookup_follows, lookup_post_engagers, lookup_timeline (user, mentions, home), and lookup_dms. Engage with set_like, set_repost, set_follow, set_reply_hidden, send_dm, and delete_post. Manage X Lists with create_list, update_list, delete_list, set_list_membership, set_list_follow, set_list_pin, lookup_lists, and lookup_list_contents.

## Details

### Details

X (Twitter) automation for AI agents and social media teams. Connect your X account once and run your entire publishing, engagement, and social listening workflow from a single MCP-ready API. Post tweets and replies, attach images, GIFs, and video, and search X for brand keywords, mentions, competitors, and trending topics — then draft and send on-brand replies in seconds. Like, repost, follow, and send DMs; build and curate X Lists; and read your mentions, home, and user timelines for reporting. Built for automated tweet scheduling, brand and competitor monitoring, social media customer support, influencer outreach, and end-to-end X / Twitter / X.com content workflows.

### Actions

- `lookup_posts` (5 credits): Get one or more X posts by ID with curated field verbosity.
- `search_posts` (5 credits): Search recent X posts from the last 7 days.
- `create_post` (5 credits): Create a top-level X post without links. Use create_post_with_link for text containing web links. Quote-post creation is not supported.
- `create_post_with_link` (25 credits): Create a top-level X post whose text contains at least one web link. Quote-post creation is not supported.
- `create_reply` (5 credits): Reply to another X post without links. X self-serve plans may restrict replies unless the original author has summoned the authenticated account.
- `create_reply_with_link` (25 credits): Reply to another X post with text containing at least one web link. X self-serve plans may restrict replies unless the original author has summoned the authenticated account.
- `delete_post` (5 credits): Delete a post by ID.
- `set_reply_hidden` (5 credits): Hide or unhide a reply on your post.
- `set_like` (5 credits): Like or unlike a post as the authenticated user.
- `set_repost` (5 credits): Repost or undo repost as the authenticated user.
- `lookup_post_engagers` (5 credits): List users who liked or reposted a post, or list quote posts.
- `lookup_users` (5 credits): Resolve users by ID, username, or the authenticated account.
- `set_follow` (5 credits): Follow or unfollow a user as the authenticated user.
- `lookup_follows` (5 credits): List followers or followed users for a user.
- `lookup_timeline` (5 credits): Read user posts, mentions, or authenticated home timeline.
- `lookup_dms` (5 credits): Read DM events by scope: all, conversation, participant, or event_id.
- `send_dm` (5 credits): Send a DM to a participant, existing conversation, or new group.
- `upload_media` (5 credits): Upload image, GIF, or video media for posts or DMs and return a media ID.
- `create_list` (1 credits): Create a new X List for the authenticated user.
- `update_list` (1 credits): Update a List's name, description, or privacy setting.
- `delete_list` (1 credits): Delete a List owned by the authenticated user.
- `set_list_membership` (1 credits): Add or remove a user as a member of a List owned by the authenticated user.
- `set_list_follow` (1 credits): Follow or unfollow a List as the authenticated user.
- `set_list_pin` (1 credits): Pin or unpin a followed or owned List for the authenticated user.
- `lookup_lists` (1 credits): Look up one List or list owned, membership, followed, or pinned Lists.
- `lookup_list_contents` (1 credits): List members, followers, or posts for a List.

### Use Cases

Publish posts and replies to X / Twitter from agent workflows, Schedule and orchestrate Twitter content calendars, Search recent X posts for brand monitoring, competitor tracking, and trend detection, Draft and send on-brand replies to the conversations that matter, Upload images, GIFs, and video to X from File Manager files or any public URL, Run social media customer support over X DMs, Send launch announcements and follow-up DMs from automations, Like, repost, and follow as part of engagement automations, Hide spam or off-topic replies on your own posts, Build and curate X Lists for launch watch, competitor watch, and community segmentation, Read mentions, home, and user timelines for social analytics and reporting, Resolve X users by ID, username, or the authenticated account

### Workflows Using This Tool

No public workflows currently reference this product.

### Related Content

No related content is currently linked to this product.

## Integration Details

### DynamicMCP

- Setup page URL: https://www.agentpmt.com/dynamic-mcp
- Claude setup guide: https://www.agentpmt.com/dynamic-mcp?platform=claude#videos
- ChatGPT setup guide: https://www.agentpmt.com/dynamic-mcp?platform=chatgpt#videos
- Cursor setup guide: https://www.agentpmt.com/dynamic-mcp?platform=cursor#videos
- Windsurf setup guide: https://www.agentpmt.com/dynamic-mcp?platform=windsurf#videos

Use the local router for command-based MCP clients. It forwards requests to `https://api.agentpmt.com/mcp` and does not execute tools locally.

```bash
npm install -g @agentpmt/mcp-router
agentpmt-setup
```

### REST API

The live page renders cURL, Python, JavaScript, and Node.js examples. Logged-in users see those examples prefilled with their own API and budget credentials.

- Purchase endpoint: https://api.agentpmt.com/products/purchase
- Authorization format: `Bearer <base64(apiKey:budgetKey)>`

```bash
curl -X POST "https://api.agentpmt.com/products/purchase" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eW91ci1hcGkta2V5LWhlcmU6eW91ci1idWRnZXQta2V5LWhlcmU=" \
  -d '{
    "product_id": "69fd3f8f564f18a7b599859f",
    "parameters": {
      "action": "lookup_posts"
    }
  }'
```

### Autonomous Agents

Autonomous agents can access this tool through AgentAddress credit balances or direct x402 payments. Use the Autonomous Agent API reference for endpoint shapes after choosing the access pattern below.

- Autonomous Agent API reference URL: https://www.agentpmt.com/docs/api-reference/autonomous-agents
- Autonomous Agent API reference markdown URL: https://www.agentpmt.com/docs/api-reference/autonomous-agents?format=agent-md
- Credit-Based Access Using AgentAddress: https://www.agentpmt.com/docs/autonomous-agents/credit-based-tool-usage-with-agentaddress
- AgentAddress is preferred for persistent file access, stored platform state, and maximum tool use ability across repeated calls.
- Direct x402 is for independent one-off tool calls that do not require shared files or stored platform state.
- Direct x402 public payments: USDC on Base, Arbitrum, Optimism, Polygon, and Avalanche.

### Schema

#### Credentials

These runtime credentials should be provided under `parameters._credentials` when required.

- X Account (`x_oauth`, oauth_token, required)
  Connection ID: 69fd53e54df710cd6acbbd27

#### Parameters

- Schema type: actions

```json
{
  "actions": {
    "lookup_posts": {
      "description": "Get one or more X posts by ID with curated field verbosity.",
      "properties": {
        "post_id": {
          "type": "string",
          "description": "Single post ID to fetch.",
          "required": false
        },
        "post_ids": {
          "type": "array",
          "description": "Multiple post IDs to fetch.",
          "required": false,
          "items": {
            "type": "string"
          }
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      }
    },
    "search_posts": {
      "description": "Search recent X posts from the last 7 days.",
      "properties": {
        "query": {
          "type": "string",
          "description": "X recent-search query.",
          "required": true
        },
        "start_time": {
          "type": "string",
          "description": "RFC3339 start time for recent search, for example 2026-05-14T18:00:00Z.",
          "required": false
        },
        "end_time": {
          "type": "string",
          "description": "RFC3339 end time for recent search, for example 2026-05-14T19:00:00Z.",
          "required": false
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false
        },
        "pagination_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      }
    },
    "create_post": {
      "description": "Create a top-level X post without links. Use create_post_with_link for text containing web links. Quote-post creation is not supported.",
      "properties": {
        "text": {
          "type": "string",
          "description": "Link-free post text. Required unless media_ids is provided.",
          "required": false
        },
        "media_ids": {
          "type": "array",
          "description": "Media IDs to attach, max 4.",
          "required": false,
          "items": {
            "type": "string"
          }
        }
      },
      "price_per_unit": 5
    },
    "create_post_with_link": {
      "description": "Create a top-level X post whose text contains at least one web link. Quote-post creation is not supported.",
      "properties": {
        "text": {
          "type": "string",
          "description": "Post text containing at least one web link.",
          "required": true
        },
        "media_ids": {
          "type": "array",
          "description": "Media IDs to attach, max 4.",
          "required": false,
          "items": {
            "type": "string"
          }
        }
      },
      "price_per_unit": 25
    },
    "create_reply": {
      "description": "Reply to another X post without links. X self-serve plans may restrict replies unless the original author has summoned the authenticated account.",
      "properties": {
        "reply_to_post_id": {
          "type": "string",
          "description": "Post ID to reply to.",
          "required": true
        },
        "text": {
          "type": "string",
          "description": "Link-free reply text. Required unless media_ids is provided.",
          "required": false
        },
        "media_ids": {
          "type": "array",
          "description": "Media IDs to attach, max 4.",
          "required": false,
          "items": {
            "type": "string"
          }
        }
      },
      "price_per_unit": 5
    },
    "create_reply_with_link": {
      "description": "Reply to another X post with text containing at least one web link. X self-serve plans may restrict replies unless the original author has summoned the authenticated account.",
      "properties": {
        "reply_to_post_id": {
          "type": "string",
          "description": "Post ID to reply to.",
          "required": true
        },
        "text": {
          "type": "string",
          "description": "Reply text containing at least one web link.",
          "required": true
        },
        "media_ids": {
          "type": "array",
          "description": "Media IDs to attach, max 4.",
          "required": false,
          "items": {
            "type": "string"
          }
        }
      },
      "price_per_unit": 25
    },
    "delete_post": {
      "description": "Delete a post by ID.",
      "properties": {
        "post_id": {
          "type": "string",
          "description": "Post ID to delete.",
          "required": true
        }
      }
    },
    "set_reply_hidden": {
      "description": "Hide or unhide a reply on your post.",
      "properties": {
        "reply_post_id": {
          "type": "string",
          "description": "Reply post ID to hide or unhide.",
          "required": true
        },
        "hidden": {
          "type": "boolean",
          "description": "True to hide, false to unhide.",
          "required": true
        }
      }
    },
    "set_like": {
      "description": "Like or unlike a post as the authenticated user.",
      "properties": {
        "post_id": {
          "type": "string",
          "description": "Post ID to like or unlike.",
          "required": true
        },
        "liked": {
          "type": "boolean",
          "description": "True to like, false to unlike.",
          "required": true
        }
      }
    },
    "set_repost": {
      "description": "Repost or undo repost as the authenticated user.",
      "properties": {
        "post_id": {
          "type": "string",
          "description": "Post ID to repost or undo repost.",
          "required": true
        },
        "reposted": {
          "type": "boolean",
          "description": "True to repost, false to undo repost.",
          "required": true
        }
      }
    },
    "lookup_post_engagers": {
      "description": "List users who liked or reposted a post, or list quote posts.",
      "properties": {
        "post_id": {
          "type": "string",
          "description": "Post ID to inspect.",
          "required": true
        },
        "engagement_type": {
          "type": "string",
          "description": "Engagement to retrieve: likes, reposts, or quotes.",
          "required": true,
          "enum": [
            "likes",
            "reposts",
            "quotes"
          ]
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false
        },
        "pagination_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      }
    },
    "lookup_users": {
      "description": "Resolve users by ID, username, or the authenticated account.",
      "properties": {
        "lookup_by": {
          "type": "string",
          "description": "Lookup mode: ids, usernames, or me.",
          "required": true,
          "enum": [
            "ids",
            "usernames",
            "me"
          ]
        },
        "user_id": {
          "type": "string",
          "description": "Single user ID for ids mode.",
          "required": false
        },
        "user_ids": {
          "type": "array",
          "description": "Multiple user IDs for ids mode.",
          "required": false,
          "items": {
            "type": "string"
          }
        },
        "username": {
          "type": "string",
          "description": "Single username without @ for usernames mode.",
          "required": false
        },
        "usernames": {
          "type": "array",
          "description": "Multiple usernames without @ for usernames mode.",
          "required": false,
          "items": {
            "type": "string"
          }
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      }
    },
    "set_follow": {
      "description": "Follow or unfollow a user as the authenticated user.",
      "properties": {
        "user_id": {
          "type": "string",
          "description": "Target user ID to follow or unfollow.",
          "required": true
        },
        "following": {
          "type": "boolean",
          "description": "True to follow, false to unfollow.",
          "required": true
        }
      }
    },
    "lookup_follows": {
      "description": "List followers or followed users for a user.",
      "properties": {
        "user_id": {
          "type": "string",
          "description": "User ID to inspect.",
          "required": true
        },
        "relationship": {
          "type": "string",
          "description": "Relationship list to retrieve: followers or following.",
          "required": true,
          "enum": [
            "followers",
            "following"
          ]
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false
        },
        "pagination_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      }
    },
    "lookup_timeline": {
      "description": "Read user posts, mentions, or authenticated home timeline.",
      "properties": {
        "timeline_type": {
          "type": "string",
          "description": "Timeline mode: user_posts, mentions, or home.",
          "required": true,
          "enum": [
            "user_posts",
            "mentions",
            "home"
          ]
        },
        "user_id": {
          "type": "string",
          "description": "User ID required for user_posts and mentions; optional for home.",
          "required": false
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false
        },
        "pagination_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      }
    },
    "lookup_dms": {
      "description": "Read DM events by scope: all, conversation, participant, or event_id.",
      "properties": {
        "scope": {
          "type": "string",
          "description": "DM lookup scope: all, conversation, participant, or event_id.",
          "required": true,
          "enum": [
            "all",
            "conversation",
            "participant",
            "event_id"
          ]
        },
        "conversation_id": {
          "type": "string",
          "description": "Conversation ID for conversation scope.",
          "required": false
        },
        "participant_user_id": {
          "type": "string",
          "description": "Participant user ID for participant scope.",
          "required": false
        },
        "event_id": {
          "type": "string",
          "description": "DM event ID for event_id scope.",
          "required": false
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false
        },
        "pagination_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      }
    },
    "send_dm": {
      "description": "Send a DM to a participant, existing conversation, or new group.",
      "properties": {
        "target_type": {
          "type": "string",
          "description": "Target mode: participant, conversation, or new_group.",
          "required": true,
          "enum": [
            "participant",
            "conversation",
            "new_group"
          ]
        },
        "participant_user_id": {
          "type": "string",
          "description": "Participant user ID for participant mode.",
          "required": false
        },
        "conversation_id": {
          "type": "string",
          "description": "Conversation ID for conversation mode.",
          "required": false
        },
        "participant_user_ids": {
          "type": "array",
          "description": "Participant user IDs for new_group mode.",
          "required": false,
          "items": {
            "type": "string"
          }
        },
        "text": {
          "type": "string",
          "description": "DM text. Required unless media_id is provided.",
          "required": false
        },
        "media_id": {
          "type": "string",
          "description": "Optional uploaded DM media ID. One media attachment is supported.",
          "required": false
        }
      }
    },
    "upload_media": {
      "description": "Upload image, GIF, or video media for posts or DMs and return a media ID.",
      "properties": {
        "file_id": {
          "type": "string",
          "description": "AgentPMT File Manager file ID to upload.",
          "required": false
        },
        "source_url": {
          "type": "string",
          "description": "Public URL to fetch and upload.",
          "required": false
        },
        "media_type": {
          "type": "string",
          "description": "Media kind: image, gif, or video.",
          "required": true,
          "enum": [
            "image",
            "gif",
            "video"
          ]
        },
        "usage_context": {
          "type": "string",
          "description": "Where the media will be used: post or dm.",
          "required": true,
          "enum": [
            "post",
            "dm"
          ]
        }
      }
    },
    "create_list": {
      "description": "Create a new X List for the authenticated user.",
      "properties": {
        "list_name": {
          "type": "string",
          "description": "List name, 1-25 characters.",
          "required": true
        },
        "list_description": {
          "type": "string",
          "description": "Optional List description, max 100 characters.",
          "required": false
        },
        "list_private": {
          "type": "boolean",
          "description": "True to create a private List.",
          "required": false
        }
      },
      "price_per_unit": 1
    },
    "update_list": {
      "description": "Update a List's name, description, or privacy setting.",
      "properties": {
        "list_id": {
          "type": "string",
          "description": "List ID to update.",
          "required": true
        },
        "list_name": {
          "type": "string",
          "description": "New List name, 1-25 characters.",
          "required": false
        },
        "list_description": {
          "type": "string",
          "description": "New List description, max 100 characters. Use an empty string to clear.",
          "required": false
        },
        "list_private": {
          "type": "boolean",
          "description": "True for private, false for public.",
          "required": false
        }
      },
      "price_per_unit": 1
    },
    "delete_list": {
      "description": "Delete a List owned by the authenticated user.",
      "properties": {
        "list_id": {
          "type": "string",
          "description": "List ID to delete.",
          "required": true
        }
      },
      "price_per_unit": 1
    },
    "set_list_membership": {
      "description": "Add or remove a user as a member of a List owned by the authenticated user.",
      "properties": {
        "list_id": {
          "type": "string",
          "description": "List ID to modify.",
          "required": true
        },
        "user_id": {
          "type": "string",
          "description": "User ID to add or remove.",
          "required": true
        },
        "is_member": {
          "type": "boolean",
          "description": "True to add, false to remove.",
          "required": true
        }
      },
      "price_per_unit": 1
    },
    "set_list_follow": {
      "description": "Follow or unfollow a List as the authenticated user.",
      "properties": {
        "list_id": {
          "type": "string",
          "description": "List ID to follow or unfollow.",
          "required": true
        },
        "following": {
          "type": "boolean",
          "description": "True to follow, false to unfollow.",
          "required": true
        }
      },
      "price_per_unit": 1
    },
    "set_list_pin": {
      "description": "Pin or unpin a followed or owned List for the authenticated user.",
      "properties": {
        "list_id": {
          "type": "string",
          "description": "List ID to pin or unpin.",
          "required": true
        },
        "pinned": {
          "type": "boolean",
          "description": "True to pin, false to unpin.",
          "required": true
        }
      },
      "price_per_unit": 1
    },
    "lookup_lists": {
      "description": "Look up one List or list owned, membership, followed, or pinned Lists.",
      "properties": {
        "list_scope": {
          "type": "string",
          "description": "Lookup scope: id, owned, memberships, followed, or pinned.",
          "required": true,
          "enum": [
            "id",
            "owned",
            "memberships",
            "followed",
            "pinned"
          ]
        },
        "list_id": {
          "type": "string",
          "description": "Required when list_scope is id.",
          "required": false
        },
        "user_id": {
          "type": "string",
          "description": "Optional for owned, memberships, and followed scopes. Omit for pinned because pinned Lists use the authenticated user.",
          "required": false
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false
        },
        "pagination_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      },
      "price_per_unit": 1
    },
    "lookup_list_contents": {
      "description": "List members, followers, or posts for a List.",
      "properties": {
        "list_id": {
          "type": "string",
          "description": "List ID to inspect.",
          "required": true
        },
        "list_view": {
          "type": "string",
          "description": "Content view: members, followers, or posts.",
          "required": true,
          "enum": [
            "members",
            "followers",
            "posts"
          ]
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false
        },
        "pagination_token": {
          "type": "string",
          "description": "Pagination token from a previous response.",
          "required": false
        },
        "verbosity": {
          "type": "string",
          "description": "Response detail level: minimal, standard, or expanded.",
          "required": false,
          "enum": [
            "minimal",
            "standard",
            "expanded"
          ]
        }
      },
      "price_per_unit": 1
    }
  }
}
```

### Usage Instructions

# X / Twitter Automation

Operate a connected X (Twitter) account end-to-end from agents and workflows: publish posts and replies, upload media, search recent posts, read timelines and DMs, engage, and manage Lists.

## Common workflows

- On-brand reply queue: `search_posts` for your brand or topic over the last day and review the best candidates. You can only reply to a post you have already engaged with or that tags your account, so engage first (for example `set_like` or `set_repost`) or focus on posts that mention you, then `create_reply` (or `create_reply_with_link`) with on-brand drafts.
- Publish with media: `upload_media` to get `media_ids`, then `create_post` (or `create_post_with_link` when the text has a URL).
- Brand & competitor monitoring: `search_posts` on keywords plus `lookup_timeline` (`mentions`) and curated `lookup_lists`.
- Customer support over DMs: `lookup_dms` to read threads, `send_dm` to respond.

## Posting links

Use `create_post` / `create_reply` for text without a web link. When the text contains a URL (`http://`, `https://`, `www.`, or a bare domain), use `create_post_with_link` / `create_reply_with_link`.

## Actions

### `search_posts`
Required: `query` (string). Optional: `start_time`, `end_time` (RFC3339 timestamps), `max_results` (1-100, default 10), `pagination_token`, `verbosity` (`minimal|standard|expanded`, default `expanded`).
Example: `{"action":"search_posts","query":"agentpmt OR \"AI agents\" -is:retweet lang:en","start_time":"2026-05-22T13:00:00Z","end_time":"2026-05-23T13:00:00Z","max_results":25}`
For List-specific recent search, use the X search operator in `query`, for example `list:2055003862814040388`, plus `start_time` and `end_time`.

### `lookup_posts`
Required: exactly one of `post_id` (string) or `post_ids` (string[], max 100). Optional: `verbosity`.
Example: `{"action":"lookup_posts","post_ids":["123","456"],"verbosity":"standard"}`

### `create_post`
Creates a top-level post. Required: `text` or `media_ids`. Optional: `media_ids` (string[], max 4). For text that contains a web link, use `create_post_with_link`.
Example: `{"action":"create_post","text":"Shipping from AgentPMT","media_ids":["123"]}`

### `create_post_with_link`
Creates a top-level post whose text contains a web link. Required: `text` with a link. Optional: `media_ids` (string[], max 4).
Example: `{"action":"create_post_with_link","text":"Launch notes: https://example.com/agentpmt","media_ids":["123"]}`

### `create_reply`
Replies to another post. You can only reply to a post the connected account has already engaged with (liked, reposted, quoted, or previously replied to) or that tags your account (mentions or quotes you); replies to any other post are rejected. Required: `reply_to_post_id` and `text` or `media_ids`. Optional: `media_ids` (string[], max 4). For replies whose text contains a web link, use `create_reply_with_link`.
Example: `{"action":"create_reply","reply_to_post_id":"123","text":"Thanks for the mention."}`

### `create_reply_with_link`
Replies to another post with text that contains a web link. The same reply restriction applies: you can only reply to a post the connected account has already engaged with or that tags your account. Required: `reply_to_post_id` and `text` with a link. Optional: `media_ids` (string[], max 4).
Example: `{"action":"create_reply_with_link","reply_to_post_id":"123","text":"Details are here: https://example.com/agentpmt"}`

### `delete_post`
Required: `post_id`.
Example: `{"action":"delete_post","post_id":"123"}`

### `set_reply_hidden`
Required: `reply_post_id`, `hidden` (boolean).
Example: `{"action":"set_reply_hidden","reply_post_id":"123","hidden":true}`

### `set_like`
Required: `post_id`, `liked` (boolean).
Example: `{"action":"set_like","post_id":"123","liked":true}`

### `set_repost`
Required: `post_id`, `reposted` (boolean).
Example: `{"action":"set_repost","post_id":"123","reposted":true}`

### `lookup_post_engagers`
Required: `post_id`, `engagement_type` (`likes|reposts|quotes`). Optional: `max_results`, `pagination_token`, `verbosity`.
Example: `{"action":"lookup_post_engagers","post_id":"123","engagement_type":"likes","max_results":25}`

### `lookup_users`
Required: `lookup_by` (`ids|usernames|me`). For `ids`, set exactly one of `user_id` or `user_ids`. For `usernames`, set exactly one of `username` or `usernames`. Optional: `verbosity`.
Example: `{"action":"lookup_users","lookup_by":"usernames","usernames":["XDevelopers"]}`

### `set_follow`
Required: `user_id`, `following` (boolean).
Example: `{"action":"set_follow","user_id":"123","following":true}`

### `lookup_follows`
Required: `user_id`, `relationship` (`followers|following`). Optional: `max_results`, `pagination_token`, `verbosity`.
Example: `{"action":"lookup_follows","user_id":"123","relationship":"followers","max_results":50}`

### `lookup_timeline`
Required: `timeline_type` (`user_posts|mentions|home`). `user_id` is required for `user_posts` and `mentions`; optional for `home`. Optional: `max_results`, `pagination_token`, `verbosity`.
Example: `{"action":"lookup_timeline","timeline_type":"home","max_results":20}`

### `lookup_dms`
Required: `scope` (`all|conversation|participant|event_id`). Set `conversation_id`, `participant_user_id`, or `event_id` for the matching scope. Optional: `max_results`, `pagination_token`, `verbosity`.
Example: `{"action":"lookup_dms","scope":"participant","participant_user_id":"123","max_results":20}`

### `send_dm`
Required: `target_type` (`participant|conversation|new_group`) and `text` or `media_id`. Set `participant_user_id`, `conversation_id`, or `participant_user_ids` for the matching target.
Example: `{"action":"send_dm","target_type":"participant","participant_user_id":"123","text":"Here is the post: https://x.com/i/status/456"}`

### `upload_media`
Required: exactly one of `file_id` or `source_url`, plus `media_type` (`image|gif|video`) and `usage_context` (`post|dm`).
Example: `{"action":"upload_media","file_id":"file_abc","media_type":"image","usage_context":"post"}`

### `create_list`
Creates a new List for the authenticated user. Required: `list_name` (1-25 characters). Optional: `list_description` (max 100 characters), `list_private` (boolean).
Example: `{"action":"create_list","list_name":"Launch Watch","list_description":"Accounts to monitor for launch week","list_private":true}`

### `update_list`
Updates an existing List. Required: `list_id` and at least one of `list_name`, `list_description`, or `list_private`. Use `list_description:""` to clear the description and `list_private:false` to make the List public.
Example: `{"action":"update_list","list_id":"123","list_name":"Launch Signals","list_private":false}`

### `delete_list`
Deletes a List owned by the authenticated user. Required: `list_id`.
Example: `{"action":"delete_list","list_id":"123"}`

### `set_list_membership`
Adds or removes a user from a List owned by the authenticated user. Required: `list_id`, `user_id`, `is_member` (boolean).
Example: `{"action":"set_list_membership","list_id":"123","user_id":"456","is_member":true}`

### `set_list_follow`
Follows or unfollows a List as the authenticated user. Required: `list_id`, `following` (boolean).
Example: `{"action":"set_list_follow","list_id":"123","following":true}`

### `set_list_pin`
Pins or unpins a followed or owned List for the authenticated user. Required: `list_id`, `pinned` (boolean).
Example: `{"action":"set_list_pin","list_id":"123","pinned":true}`

### `lookup_lists`
Looks up one List or Lists by relationship. Required: `list_scope` (`id|owned|memberships|followed|pinned`). For `id`, set `list_id`. For `owned`, `memberships`, or `followed`, `user_id` is optional and defaults to the authenticated user. For `pinned`, omit `user_id`. Optional: `max_results`, `pagination_token`, `verbosity`.
Example: `{"action":"lookup_lists","list_scope":"owned","max_results":25,"verbosity":"standard"}`

### `lookup_list_contents`
Lists members, followers, or posts for a List. Required: `list_id`, `list_view` (`members|followers|posts`). Optional: `max_results`, `pagination_token`, `verbosity`.
Example: `{"action":"lookup_list_contents","list_id":"123","list_view":"members","max_results":50}`

## Response

All actions return `action`. List actions also return `data`, optional `includes`, optional `meta`, and `next_token`.

## Notes

- Search covers recent posts (about the last 7 days). For quote activity on a post, use `lookup_post_engagers` with `engagement_type:"quotes"`.
- **Replies are limited to posts you are already connected to.** You can only post a reply (`create_reply` / `create_reply_with_link`) to a post when the connected account has already engaged with it (liked, reposted, quoted, or previously replied to it) or has been tagged in it (the post mentions or quotes your account). Replies to posts you have not engaged with and that do not tag you are rejected. To reply to a post surfaced by `search_posts`, engage with it first (for example `set_like` or `set_repost`) or choose a post that mentions you. If a reply is still rejected for access or policy reasons, move to another permitted post rather than retrying the same one.
- List read actions need the connected token's `list.read` scope; create, update, delete, membership, follow, and pin actions need `list.write`. If a List call returns a scope-related 403, reconnect the X account to refresh scopes.

### Additional Product Content

## Run your entire X (Twitter) presence from one connected account

X / Twitter Automation gives AI agents and social teams a single, MCP-ready API to publish, engage, listen, and report on X. Connect your account once, then post, reply, monitor mentions, draft on-brand responses, and send DMs — by hand or fully automated through agent workflows.

## What you can do

### Publish

1.  Post tweets and replies to X / Twitter, with or without links.
2.  Attach images, GIFs, and video uploaded from File Manager or any public URL.
3.  Schedule and orchestrate content calendars from autonomous agents and workflows.

### Listen & monitor

1.  Search recent X posts for brand keywords, mentions, competitors, and trending topics.
2.  Read your mentions, home, and user timelines for analytics and reporting.
3.  See who liked, reposted, or quoted any post.

### Engage

1.  Draft and send on-brand replies to the conversations that matter most.
2.  Like, repost, and follow as part of automated engagement.
3.  Hide spam or off-topic replies on your own posts to keep threads clean.

### Direct messages

1.  Run social media customer support over X DMs.
2.  Send launch announcements, follow-ups, and outreach to people, existing conversations, or new group chats.

### Lists

1.  Build and curate X Lists for launch watch, competitor watch, and community segmentation.
2.  Follow, pin, and manage membership of Lists, and read their members, followers, and posts.

## Popular workflows

1.  **On-brand reply queue** — surface the best recent posts about your topic and draft replies that match your brand voice.
2.  **Launch day** — publish an announcement with a graphic and link, then monitor reactions and reply to the highest-signal ones.
3.  **Always-on brand monitoring** — track mentions and competitors, and surface conversations worth joining.
4.  **DM customer support** — read and respond to support conversations straight from your agents.

## Getting started

Connect your X account once with secure OAuth. From there, your agents can publish, search, engage, and DM on your behalf across any workflow.

### Frequently Asked Questions

#### Can it draft replies that match my brand voice?

- Page URL: https://www.agentpmt.com/faq#faq-6a122314675a75b67fa93481
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md#faq-6a122314675a75b67fa93481
- Tags: Product Specific

Yes. Search recent posts about your topic or brand, then have your agent draft on-brand replies for you to review and send — one at a time or in batches.

#### Can it post images, GIFs, and video?

- Page URL: https://www.agentpmt.com/faq#faq-6a122314675a75b67fa93480
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md#faq-6a122314675a75b67fa93480
- Tags: Product Specific

Yes. Upload media from File Manager or any public URL and attach it to posts, replies, or DMs.

#### Does it work with autonomous agents and scheduled workflows?

- Page URL: https://www.agentpmt.com/faq#faq-6a122314675a75b67fa93483
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md#faq-6a122314675a75b67fa93483
- Tags: Product Specific

Yes. Every capability is available to agents and workflows, so you can schedule content, automate engagement, and run always-on monitoring.

#### How do I connect my X account?

- Page URL: https://www.agentpmt.com/faq#faq-6a122314675a75b67fa93484
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md#faq-6a122314675a75b67fa93484
- Tags: Product Specific

Connect once through secure OAuth. After that, your agents act on your connected account across any workflow.

#### How does brand and competitor monitoring work?

- Page URL: https://www.agentpmt.com/faq#faq-6a122314675a75b67fa93482
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md#faq-6a122314675a75b67fa93482
- Tags: Product Specific

Search recent X posts by keyword, hashtag, or account, read your mentions and home timelines, and curate X Lists to watch the accounts that matter to you.

#### What can I do with X / Twitter Automation?

- Page URL: https://www.agentpmt.com/faq#faq-6a122314675a75b67fa9347f
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md#faq-6a122314675a75b67fa9347f
- Tags: Product Specific

Publish posts and replies, upload images, GIFs, and video, search recent X posts for brand and competitor mentions, read your mentions and timelines, like, repost, and follow, send DMs, and build and manage X Lists — all from agents and automated workflows on a connected X account.

### Dependencies

This product has no public dependency products.