Build a Pokemon restock bot for X
restocks, pre-orders, price drops
Your watcher spots the restock. One POST to OpenTweet tweets it with the product photo and your link, in seconds. No X developer account, no $0.20 fee on every link post.
Card required, cancel any time.
The short answer
To run a Pokemon restock alert account on X: check the products you track every one to five minutes, store the last stock status, and when a product flips to in stock send the name, price, link and photo to POST https://opentweet.io/api/v1/posts with publish_now: true. OpenTweet attaches the photo and posts it to your X account. Restock accounts link nearly every post, so pick a plan by link posts a day: Advanced includes 10, Agency 20.
Why restock accounts are busy in 2026
2026 is the Pokemon 30th anniversary year, and the special products sold out fast. One collector guide reported that the 30th Celebration ex Box stayed in stock for about four minutes at launch, with restock waves following through the autumn. New sets, holiday gift boxes and Black Friday land on top of that. Collectors follow the accounts that tell them first.
Several OpenTweet customers run exactly this: one US account posting Walmart and Pokemon Center restocks, one French account covering Cdiscount and Amazon.fr, and one posting US and UK drops. Each sends its alerts through the API, with the product photo and an affiliate link.
Six post types for a restock account
Restocks bring the followers. The scheduled posts keep them reading on days with no drops.
Restocks
Event-drivenA sold-out product flips back to in stock. The post followers turn notifications on for. Speed is everything.
Pre-order windows
BothA retailer opens pre-orders for a new set or a special collection. Post the moment it opens, and a reminder before known windows.
Price drops
Event-drivenA box falls back to MSRP, or below. Tell followers the old price and the new one, so the deal is obvious.
Release calendar
ScheduledSet launches, prerelease weekends and Japanese releases. Write them once and schedule them for the right morning.
In-store reports
ManualStore drops that never show online. Post them from your phone through the Telegram bot or the app.
Daily recap
ScheduledWhat restocked today and what is still live. One thread in the evening for followers who missed the alerts.
Tweet the restock in one call
Posting is the easy part. What you watch and how often lives in your script.
The curl call
# The watcher saw a restock. Tweet it now, with the photo.
curl -X POST https://opentweet.io/api/v1/posts \
-H "Authorization: Bearer ot_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "🚨 RESTOCK: Elite Trainer Box is back at Pokemon Center, $59.99\n➡️ https://your.link/etb",
"media_urls": ["https://your-cdn.example.com/products/etb.jpg"],
"publish_now": true
}'A restock watcher in Python
Run it every one to five minutes with cron. It remembers the last status per product, so an alert fires once per restock, not on every check.
import json, pathlib, requests
KEY = "ot_your_key"
STATE = pathlib.Path("stock.json") # last known status per product
seen = json.loads(STATE.read_text()) if STATE.exists() else {}
def check_stock():
# Your source: a retailer API, an affiliate product feed,
# or a page whose terms let you poll it. Return a list of
# {"id", "name", "store", "price", "url", "image", "in_stock"}.
...
for p in check_stock():
was = seen.get(p["id"], False)
if p["in_stock"] and not was: # flipped to in stock
requests.post(
"https://opentweet.io/api/v1/posts",
headers={"Authorization": f"Bearer {KEY}"},
json={
"text": f"🚨 RESTOCK at {p['store']}: {p['name']}, ${p['price']}\n➡️ {p['url']}",
"media_urls": [p["image"]],
"publish_now": True,
},
)
seen[p["id"]] = p["in_stock"]
STATE.write_text(json.dumps(seen))The photo sells it
Pass the product image in media_urls. OpenTweet uploads it to X. Images are not link posts.
One account per country
Add x_account_id to send US, UK or French drops to the right account from one watcher.
Known dates, scheduled
Pre-order windows and release days go in ahead of time with scheduled_date.
A pre-order reminder
{
"text": "Pre-orders for the new set open at Pokemon Center in 1 hour. Set an alarm ⏰",
"scheduled_date": "2026-11-05T16:00:00Z",
"x_account_id": "acct_us"
}Every field is in the API reference. Prefer no code for the alerts? Point Make, Zapier or n8n at the same endpoint.
Which plan fits your restock account
Flat monthly price. The number that decides it is link posts a day, because almost every alert carries a link.
| Account type | Typical volume | Plan |
|---|---|---|
| Release calendar and news, store named, no links | 5-15 posts a day | Pro, $19.99/mo, 20 posts a day |
| Restock alerts with a link, one country | Up to 10 link posts a day | Advanced, $29/mo, 3 X accounts |
| Several countries or a busy US account | Up to 20 link posts a day | Agency, $49/mo, 300 posts a day |
| Release day spikes | Above your daily link allowance | Any plan plus link credits |
The same 20 link posts a day on the X API would bill $0.20 each, about $120 a month. See pricing and the X API cost calculator.
Watch only what you are allowed to watch. Prefer retailer and affiliate product APIs. If you check pages, follow the site's terms and keep the rate gentle. Getting your watcher blocked on release day is the worst outcome.
Post each restock once. Keep state, so a product that flickers in and out of stock does not fire ten alerts. Duplicate posts are what X limits.
Label it and disclose links. Turn on the Automated label in your X settings and mark affiliate links (#ad or "affiliate link"). No auto-replies under big accounts. More in X automation rules.
Frequently asked questions
How do I make a Pokemon restock bot for X?
Split it in two. A watcher checks the products you track (a retailer API, an affiliate product feed, or a page you are allowed to poll) and remembers the last stock status. When a product flips from out of stock to in stock, it sends one POST to https://opentweet.io/api/v1/posts with the product name, price, link and photo, and publish_now set to true. OpenTweet posts it to your X account. You never create an X developer app.
How fast does a restock tweet go out?
With publish_now the post is sent to X straight away, usually within a few seconds of your call. In practice the speed of a restock account is decided by how often your watcher checks, not by the posting step. Popular Pokemon TCG products can sell out in minutes, so most accounts check their hottest products every one to five minutes.
Can the alert include the product photo?
Yes. Put the image URL in media_urls. OpenTweet downloads it and attaches it to the post, the same way you would upload it by hand. A photo does not count as a link post. Only a URL in the text does.
Do restock tweets with affiliate links cost more?
On the X API, every post that contains a URL bills at $0.20, against $0.015 for a plain post. On OpenTweet, link posts are part of the flat plan: 1 a day on Pro, 10 a day on Advanced ($29/month) and 20 a day on Agency ($49/month), with link credits for busy drop days. Restock accounts link almost every post, so Advanced is the usual starting plan.
Can I run separate restock accounts for the US, UK and France?
Yes. Connect each X account once and pass x_account_id on every call to pick where the alert goes. Advanced includes 3 X accounts and Agency 10. Several OpenTweet customers run one account per country, because stock, prices and retailers differ by region.
Can I schedule pre-order and release reminders?
Yes. Known dates, such as a set release, a Pokemon Center pre-order window or a prerelease weekend, go in with scheduled_date in UTC. Event-driven restocks use publish_now. The same account can mix both.
Will X suspend a restock bot?
Restock alerts on your own timeline are a normal use of automation. What gets accounts limited is the behaviour around them: auto-replying under big accounts, mass mentions, posting the same alert many times, and links to sellers who do not deliver. Turn on the Automated label in your X account settings, post each restock once, and disclose affiliate links.
Tracking something other than cards? The alert bot guide covers any restock or price watcher, and the affiliate deals bot covers deal accounts. Posting from a release feed instead? See the GitHub trending bot.
Everything you can build on X with OpenTweet
Post to X from your code, a watcher, or an AI agent. Start anywhere in the cluster.
OpenTweet vs the X API
Post, schedule, and automate X without a developer account or the $200/mo minimum.
X DM outreach, human-approved
Find and qualify leads, AI-draft DMs, approve each one, and drip-send from your own account via API or MCP.
Post to X without an API
The clean, account-safe way to post to X from your code or an AI agent.
Twitter MCP Server
Give Claude, Cursor, and OpenClaw the ability to post to X. 44 tools included.
Developer docs
Quickstart, API keys, MCP setup, and the REST reference for posting to X from code or an agent.
Cross-posting reference
One call posts to X, Bluesky and LinkedIn. The platforms field, per-network results, and why a network gets skipped.
Social media API for AI agents
Three ways an agent can post to X, Bluesky and LinkedIn, and the trade-offs of each.
LinkedIn MCP server
Post and schedule to a LinkedIn profile from Claude or Cursor through the official LinkedIn API.
XMCP vs OpenTweet
X's official MCP server bills per API call and cannot schedule. Compare it with the flat-fee hosted MCP.
MCP for AI agents
Connect your AI client to X in under two minutes, no X developer account.
Developer API and keys
REST endpoints, one bearer key, and usage tracking. Build on OpenTweet.
OpenTweet for AI agents
The posting layer for autonomous agents and automations that live on X.
Build an AI Twitter persona
Give your AI agent its own X account. Setup, cadence, and the rules that keep it safe.
Best MCP servers for social media
The 2026 ranked list. How the hosted OpenTweet MCP compares with the official X MCP and others.
Cheapest way to post to X via code
Flat fee vs pay-per-use. Why the $0.20 per-link fee flips the math past ~145 link posts a month.
X API pricing 2026
Every pay-per-use X API endpoint price from docs.x.com in one searchable table.
Bluesky posting API
Post and schedule to Bluesky with one REST call and OAuth, and cross-post to X and LinkedIn in the same request.
Automate LinkedIn posts
Post to LinkedIn from an AI agent, n8n or a script through the official Posts API, with one REST or MCP call.
Be the account that tweets the restock first
Connect X, create a key, and your watcher's next restock goes out with the photo and your link.