{"skill":{"slug":"wip-x","displayName":"Wip X","summary":"X Platform API. Read posts, search tweets, post, upload media.","description":"---\nname: wip-x\nversion: 1.0.1\ndescription: X Platform API. Read posts, search tweets, post, upload media.\nhomepage: https://github.com/wipcomputer/wip-x\nmetadata:\n  category: social,api\n  api_base: https://api.x.com/2\n  capabilities:\n    - api\n    - fetch-posts\n    - search-tweets\n    - bookmarks\n    - post-tweets\n    - upload-media\n  dependencies:\n    - \"@xdevplatform/xdk\"\n  interface: REST\nopenclaw:\n  emoji: \"🐦\"\n  install:\n    env:\n      - X_BEARER_TOKEN\n      - X_API_KEY\n      - X_API_SECRET\n      - X_ACCESS_TOKEN\n      - X_ACCESS_TOKEN_SECRET\nauthor:\n  name: Parker Todd Brooks\n---\n\n# wip-x\n\nX Platform API. Sensor (read) + Actuator (write). All X Platform functions in one tool.\n\n## When to Use This Skill\n\n### Sensor: Read\n\n**Use fetch_post for:**\n- Getting the full content of a specific tweet by URL or ID\n- Reading replies, quotes, engagement metrics\n- Extracting tweet data for processing\n\n**Use search_recent for:**\n- Finding tweets matching a query (last 7 days)\n- Searching by hashtags, mentions, or keywords\n- Getting raw tweet data (not AI-summarized... use wip-grok search_x for that)\n\n**Use get_bookmarks for:**\n- Reading the user's bookmarked tweets\n- Reviewing saved content\n\n**Use get_user for:**\n- Looking up a user's profile, bio, follower count\n- Checking if an account exists\n\n### Actuator: Write\n\n**Use post_tweet for:**\n- Posting new tweets\n- Replying to existing tweets\n- Quote-tweeting with commentary\n- Posting with images or video (upload first)\n\n**Use upload_media for:**\n- Uploading images (PNG, JPG, GIF, WebP)\n- Uploading video (MP4)\n- Getting media IDs for use in post_tweet\n\n**Use delete_tweet for:**\n- Removing a previously posted tweet\n\n**Use bookmark_post for:**\n- Saving a tweet for later\n\n### Do NOT Use For\n\n- AI-powered search summarization (use wip-grok search_web or search_x instead)\n- Image generation (use wip-grok generate_image)\n- Video generation (use wip-grok generate_video)\n- Trending topic analysis (use wip-grok search_x for AI-summarized trends)\n\n## API Reference\n\n### fetch_post(options)\n\n```javascript\nconst result = await fetch_post({ id_or_url: 'https://x.com/user/status/123' });\n// result: { data, includes, errors }\n```\n\nOptions: id_or_url (required). Accepts tweet ID or full URL.\n\n### search_recent(options)\n\n```javascript\nconst result = await search_recent({ query: 'AI agents', max_results: 20 });\n// result: { data, includes, meta, errors }\n```\n\nOptions: query (required), max_results (10-100), start_time, end_time, sort_order\n\n### get_bookmarks(options)\n\n```javascript\nconst result = await get_bookmarks({ max_results: 20 });\n```\n\nOptions: max_results, pagination_token. Requires OAuth.\n\n### get_user(options)\n\n```javascript\nconst result = await get_user({ username_or_id: 'parkertoddbrooks' });\n```\n\nOptions: username_or_id (required). Accepts username (with or without @) or numeric ID.\n\n### post_tweet(options)\n\n```javascript\nconst result = await post_tweet({ text: 'Hello world', reply_to: '123', media_ids: ['456'] });\n// result: { data: { id, text }, errors }\n```\n\nOptions: text (required), reply_to, media_ids, quote_tweet_id. Requires OAuth.\n\n### upload_media(options)\n\n```javascript\nconst result = await upload_media({ file_path: './photo.jpg' });\n// result: { data: { id }, errors }\n```\n\nOptions: file_path (required), media_type (auto-detected), media_data (base64 alternative)\n\n### delete_tweet(options)\n\n```javascript\nconst result = await delete_tweet({ id: '123456' });\n```\n\nOptions: id (required). Requires OAuth.\n\n## Troubleshooting\n\n### \"X Platform API credentials not found\"\nSet X_BEARER_TOKEN for read-only, or all four OAuth tokens for read+write.\n1Password: vault \"Agent Secrets\", item \"X Platform API\".\n\n### \"Could not resolve authenticated user ID\"\nBookmarks and write operations need OAuth 1.0a (all four tokens), not just bearer token.\n\n### 403 Forbidden on post/delete\nYour app needs \"Read and Write\" permissions in the X Developer Portal. Check at https://developer.x.com/en/portal/dashboard\n\n### Rate limits\nX API v2 has per-endpoint rate limits. The SDK handles rate limit headers automatically. If you hit limits, back off and retry.\n\n## API Documentation\n\n- X API v2: https://docs.x.com/x-api\n- XDK SDK: https://github.com/xdevplatform/xdk\n- Authentication: https://docs.x.com/resources/authentication\n","tags":{"latest":"1.0.1"},"stats":{"comments":0,"downloads":1004,"installsAllTime":37,"installsCurrent":0,"stars":0,"versions":1},"createdAt":1771700243074,"updatedAt":1778992166322},"latestVersion":{"version":"1.0.1","createdAt":1771700243074,"changelog":"Release.","license":null},"metadata":null,"owner":{"handle":"parkertoddbrooks","userId":"s17620xzyc7kfan8m36at57m6n83h8he","displayName":"Parker Todd Brooks","image":"https://avatars.githubusercontent.com/u/585456?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1779948057541}}