← Back to Blog
By / /Updated / 13 min read

MindThread API Quickstart in 5 Minutes

The MindThread API lets one key list accounts, generate posts, schedule and publish: sign up and connect a Threads account, create an API key in Settings, then call the accounts, generate and publish endpoints in that order. Publishing right away needs the account owner's approval.

The steps follow the API as of 2026-10-05. The full spec is the OpenAPI document and llms.txt; human docs are on the developers page.

What do you need before you start?

A MindThread account with Threads connected, and an API key.

  1. Sign up for MindThread and connect at least one Threads account
  2. Create a key in Settings → API keys. Live keys look like mt_live_... and are shown once, so copy it right away
  3. Want to try first? Create a mt_test_... test key. Writes are simulated, responses carry test_mode: true and persisted: false, and no real account is touched

Which actions need the owner's approval?

Anything that changes the account or publishes right away needs the owner's approval.

Every key sets allow, ask or deny for each of ten permissions; see data.key.scopes in GET /me. Per the developer docs, new live keys start on the standard preset: reading, generating and drafts, scheduling 30 minutes or more ahead, and webhooks are allowed; publishing now or less than 30 minutes ahead, sending or enabling cloud replies, browser commands, connecting accounts and loosening account rules need the owner's approval.

Per the developer docs, an action that needs approval returns HTTP 403 approval_required with a human_url. Hand the link to the account owner, who signs in and confirms at https://mindthread.tw/approve/{id}; the server then runs the request. Your code should not open the link itself or resend the request; poll GET /approvals/{id} instead.

How do you list your accounts?

curl https://mindthread.tw/api/v1/accounts \
  -H "Authorization: Bearer mt_live_YOUR_KEY"

Each account's id is the account_id you pass later; the handle is in threads_username (with the @).

How do you generate a post?

import requests

API_KEY = "mt_live_YOUR_KEY"
BASE = "https://mindthread.tw/api/v1"
H = {"Authorization": f"Bearer {API_KEY}"}

r = requests.post(f"{BASE}/content/generate", headers=H, json={
    "account_id": "YOUR_ACCOUNT_ID",
    "topic": "Staying productive while working remotely",
    "formula": "auto",
    "count": 1,
})
post = r.json()["data"]["contents"][0]
print(post["text"], post["formula_used"], post["char_count"])

Generating only returns text; nothing is published. With account_id, the account's persona is applied, and it wins over the formula where they conflict. If the account has content_rules, the output is checked against them.

How do you schedule it?

r = requests.post(f"{BASE}/content/publish", headers=H, json={
    "account_id": "YOUR_ACCOUNT_ID",
    "text": post["text"],
    "publish_at": "2026-10-10T09:00:00+08:00",
})
print(r.json()["data"]["post"])

Put the time in publish_at. Per the developer docs, the field takes ISO 8601 with an offset; a time 30 minutes or more ahead needs no approval, and the post goes out within 5 minutes of that time. The old schedule_at and scheduled_at still work but are deprecated. Cancel with DELETE /schedules/{id}.

How do you publish right away?

Swap publish_at for "publish_now": true. Per the developer docs, a time less than 30 minutes away also counts as publishing now; a standard key first gets approval_required, and the post goes out once the owner confirms.

POST /content/generate-and-schedule never waits for approval: to publish now, generate with /content/generate, then publish with /content/publish.

What other endpoints are useful?

Plan and remaining quota, scheduled posts, cancelling, insights, and a kill switch for the key:

requests.get(f"{BASE}/me", headers=H)                          # plan, key permissions, remaining quota
requests.get(f"{BASE}/schedules", headers=H)                   # scheduled posts
requests.delete(f"{BASE}/schedules/{schedule_id}", headers=H)  # cancel a schedule
requests.get(f"{BASE}/analytics/insights", headers=H,          # insights (account_id required)
             params={"account_id": "YOUR_ACCOUNT_ID", "period": "30d"})
requests.post(f"{BASE}/keys/current/disable", headers=H)       # kill switch for this key (cannot be undone)

Formula list: GET /formulas.

How many calls can you make per day?

It depends on the plan; the table shows calls per live key per day.

How many calls can you make per day?
PlanCalls per live key per day
Free50
Connect500
Pro1,000
Business5,000

Per the pricing page and the developer docs, there is also a limit of 120 calls per minute per key, and the daily count resets at midnight Asia/Taipei. Every response carries X-RateLimit-* headers; on a 429, wait for Retry-After instead of retrying in a loop.

Can you use it without code?

Yes, by connecting an AI assistant over MCP.

AI assistants such as Claude or ChatGPT can connect over MCP: POST https://mindthread.tw/api/mcp with the same key. tools/list returns the current tools, and they mirror the API.

FAQ

Will a test key really publish?
No. Writes with an mt_test_ key are always simulated and never touch a real account.

Why does publishing now return approval_required?
Publishing now is an action that needs the account owner's approval. Hand the human_url from the response to the owner, then poll for the result instead of resending the request.

Can I cancel a scheduled post?
Yes. Use DELETE /schedules/{id} to cancel a schedule that has not gone out yet.

What to read next

Sources

Ready to automate your Threads?

14-day free trial, no credit card required

Start for Free →