Last updated: August 2026

Can I post to multiple X accounts from one API key?

Yes. One ot_ key covers every X account on your OpenTweet workspace. Call GET /api/v1/accounts for the ids, then pass x_account_id in the body of POST /api/v1/posts. Pro allows one account, Advanced three, Agency ten. Omit the field and the post goes to your primary account.

The account limit is a plan property, not a key property. Minting more keys does not let you connect more accounts.

List the accounts once, then target by id

The accounts endpoint returns everything you need to build a handle to id map. Do this once at deploy time and keep it in config: handles get renamed, ids do not.

list-accounts.sh
curl https://opentweet.io/api/v1/accounts \
  -H "Authorization: Bearer ot_your_key"

# {
#   "accounts": [
#     { "id": "6512...a1", "x_handle": "acme",       "is_primary": true  },
#     { "id": "6512...b7", "x_handle": "acme_devs",  "is_primary": false },
#     { "id": "6512...c3", "x_handle": "acme_status","is_primary": false }
#   ]
# }

Then every publish names its target. The field is optional in the API and should not be optional in your code.

post-to-one-account.sh
curl -X POST https://opentweet.io/api/v1/posts \
  -H "Authorization: Bearer ot_your_key" \
  -H "Content-Type: application/json" \
  -d '{
        "text": "Status page is back to green.",
        "x_account_id": "6512...c3",
        "publish_now": true
      }'

The failure mode worth designing against

Leave x_account_id out and the post goes to your primary account. On a single account workspace that is a convenience. On an agency workspace it means a client post lands on the wrong brand and nothing errors. Wrap the endpoint in your own function that requires the account and refuses to send without it.

How many accounts per plan

Plan
Price
Accounts
API rate limit
Pro
$11.99 / mo
1 X account
60 API requests a minute
Advanced
$29 / mo
3 X accounts
300 API requests a minute
Agency
$49 / mo
10 X accounts
600 API requests a minute

Full plan detail is on pricing, and the account switching behaviour in the app is described on multiple X accounts.

Queue a week across several accounts in one call

The posts endpoint takes a batch, and each entry carries its own target and its own time. Send an Idempotency-Key so a timeout followed by a retry does not queue the week twice.

batch.sh
curl -X POST https://opentweet.io/api/v1/posts \
  -H "Authorization: Bearer ot_your_key" \
  -H "Idempotency-Key: week-2026-09-01" \
  -H "Content-Type: application/json" \
  -d '{
        "posts": [
          { "text": "Monday product note",  "x_account_id": "6512...a1", "scheduled_date": "2026-09-01T09:00:00Z" },
          { "text": "Monday engineering note", "x_account_id": "6512...b7", "scheduled_date": "2026-09-01T14:00:00Z" },
          { "text": "Tuesday product note", "x_account_id": "6512...a1", "scheduled_date": "2026-09-02T09:00:00Z" }
        ]
      }'

Reads are scoped the same way: GET /api/v1/posts accepts an x_account_id query parameter, so a per-client dashboard is one request per account rather than a filter over everything. The endpoint reference is in the API docs.

What the same thing costs on the X API

People ask this question because the X API answer is unpleasant. One developer app can act on behalf of several users, but you carry a separate OAuth authorisation and a separate token pair per account, each with its own refresh cycle and its own way of quietly expiring. Ten accounts is ten token lifecycles, and a refresh failure looks like a posting outage for one client only.

The bill also stacks. Every write is metered to the app owner at about $0.015, or about $0.20 when the post contains a link. Ten accounts posting twice a day with links is roughly 600 link posts a month, which is around $120 in write fees before anything reads. The mechanics are in is the X API free in 2026, and the ceiling behaviour in does X API pay-per-use have a spend cap.

With one ot_ key, there is one credential, no token refresh, and no per-post fee. If you are running client accounts, the shape is described on OpenTweet for agencies.

7-day free trial. Cancel anytime.

Frequently asked questions

Can I post to multiple X accounts from one API key?

Yes with OpenTweet. One ot_ key covers every X account connected to your workspace. Call GET https://opentweet.io/api/v1/accounts to get the account ids, then pass x_account_id in the body of POST https://opentweet.io/api/v1/posts. Omit the field and the post goes to your primary account.

How many X accounts can one OpenTweet key reach?

It depends on the plan, not on the number of keys. Pro at $11.99 a month allows one connected X account, Advanced at $29 allows three, and Agency at $49 allows ten. Extra API keys do not raise the account limit, they only give you separate credentials to rotate or scope by environment.

How do I find the x_account_id for each account?

GET https://opentweet.io/api/v1/accounts returns every connected account with its id, x_handle, and an is_primary flag. Cache that mapping in your own config rather than looking it up on every post, since handles change and ids do not.

What happens if I leave x_account_id out?

The post goes to the primary account on your workspace. That is convenient for single account setups and a real hazard for multi account ones, because a missing field silently publishes to the wrong brand. Make the field required in your own wrapper so a mistake fails loudly instead of posting.

Can I schedule to different accounts in one request?

Yes. The posts endpoint accepts a batch, and each entry can carry its own x_account_id and its own scheduled_date, so one call can queue a week across several accounts. Use an Idempotency-Key so a retry after a timeout does not duplicate the batch.

How does this work with the X API directly?

Very differently. One X developer app can act for several users, but each account needs its own OAuth authorisation and its own token pair that you store and refresh, and every write bills to the app owner at about $0.015 a post or $0.20 with a link. Ten accounts means ten token lifecycles to maintain.

One key, every account you run

Up to ten connected X accounts on Agency, three on Advanced. No per-post fee and no token refresh code.

7-day free trial. Cancel anytime.