Overview
Pricing and Wallet
What connected accounts cost, when a payment method is needed, and how the wallet pays for X actions.
You pay for two things. Each connected account past the first 2 is billed by the day, on every platform. Actions on X are paid from a prepaid wallet, because X charges for every API call. Nothing else is billed. Posts, media, webhooks, analytics on other platforms and API requests are included.
| What | How it is billed | Paid with |
|---|---|---|
| Connected accounts | By the day, past the 2 free accounts | Your payment method |
| X actions | Per action, at X's list prices | Your wallet balance |
Free Accounts
Every workspace gets 2 connected accounts for free, on any platforms. You need no payment method for them, and they stay free when you add more accounts.
Account Pricing
Each account past the free 2 is billed in tiers. The price is per account for 30 days, and each tier only prices the accounts that fall in it.
| Connected accounts | Price per account per 30 days |
|---|---|
| 1 to 2 | Free |
| 3 to 10 | $5 |
| 11 to 100 | $3 |
| 101 and more | $1 |
For example, 12 connected accounts cost 8 × $5 plus 2 × $3, which is $46 for 30 days. 150 accounts cost $40 plus $270 plus $50, which is $360.
| Rule | Detail |
|---|---|
| Billed by the day | Each day costs a 30th of the monthly price, for the most accounts connected that UTC day |
| Disconnected accounts | They stop counting from the next UTC day |
| Reconnects | A reconnect never adds a billed account |
| Invoices | Under Settings → Billing in the dashboard |
| Deleting the workspace | The usage so far is charged first. If that charge fails, the workspace stays |
Only the workspace owner can see invoices and change the payment method.
Charges
Your card is charged during a billing period as the usage grows, and once more when it ends.
| Charge | When |
|---|---|
| First charge | The usage of the billing period reaches $10 |
| Each later charge | The new usage reaches twice the previous charge, up to $5,120 |
| Final charge | The 30-day period ends. It covers whatever is left |
Payment Method
You need a payment method before you connect your 3rd account. Add it in the dashboard under Settings → Billing. Without one, a connect past the 2 free accounts goes like this.
| Case | Result |
|---|---|
| Starting a connect | 402 USAGE_BILLING_REQUIRED, before the user signs in |
| More accounts than free slots | The free slots fill. The redirect has skipped, the number left out |
| No account fits | The redirect has error=USAGE_BILLING_REQUIRED |
| Billing fails | The account is not added. 402 USAGE_BILLING_FAILED, or the same error on the redirect |
Starting a connect means POST /v1/connect-sessions, or POST /v1/accounts for Bluesky. When billing fails after the sign-in, you may receive account.connected followed by account.disconnected. See Redirect Errors for the browser part of a connect.
Billing Blocks
A workspace is blocked when it has 3 or more accounts and no payment method, or when an invoice stays unpaid after every payment attempt. While a payment is still being collected, everything keeps working. Fix both under Settings → Billing.
| Code | When | What to do |
|---|---|---|
PAYMENT_METHOD_REQUIRED | 3 or more accounts and no payment method | Add a payment method |
PAYMENT_PAST_DUE | An invoice is unpaid after every payment attempt | Update the payment method and pay the invoice |
While the workspace is blocked, this is what you observe.
| Area | During the block | After billing is fixed |
|---|---|---|
| API requests | Every API-key request returns 402, reads included | Requests work again |
| MCP server | Every request returns 402, so no tool runs | Tools work again |
| Scheduled posts | They stay scheduled and do not publish | Posts that came due publish |
| Analytics | Metrics stop updating | Metrics update again |
| Dashboard | You can sign in, see accounts, posts and logs, and fix billing | Everything works again |
X Wallet
X charges for every API call, so actions on X accounts are paid from your prepaid Onepostly wallet. Other platforms never use the wallet.
X Prices
The wallet pays X's list prices. When X changes its prices, the wallet follows. These are the current prices.
| Action | Price |
|---|---|
| Publish a post, reply or quote | $0.015 |
| Publish one with a URL in its text | $0.20 |
| Like, repost or bookmark | $0.015 |
| Unlike, undo a repost or remove a bookmark | $0.01 |
| Delete a post or reply | $0.01 per post |
| Read post analytics | $0.005 per post, at most once per UTC day |
| List replies or reposters | $0.005 per page |
When You Are Charged
Every X action is checked against the balance when you send the request, and charged when it runs.
| Case | What happens |
|---|---|
| The balance is too low | 402 INSUFFICIENT_WALLET. Nothing is created or changed |
| A create with several X accounts | It is priced for all of them together |
| A scheduled post | Checked when you create it, charged at its scheduled time |
| Too low at the scheduled time | The post ends failed with INSUFFICIENT_WALLET |
| An edit of an X post's text or thread | Checked again when you send it |
| A thread | Charged per post. Deleting it is charged per post too |
| X does not complete the action | The amount goes back to the wallet |
| A thread fails partway | The posts that went live stay charged |
| Post analytics | Read when you ask, at most once per post and UTC day. Only that read is charged |
| A repeated like, repost or bookmark | Charged every time |
| Listing recent posts or syncing | Free |
After INSUFFICIENT_WALLET, top up and send the request again.
Check the Balance
GET /v1/wallet returns the balance in US dollars. Any API key can call it, including a read_only key.
import { Configuration, WalletApi } from "@onepostly/sdk";
const walletApi = new WalletApi(
new Configuration({ accessToken: process.env.ONEPOSTLY_API_KEY })
);
const response = await walletApi.getWalletBalance();
console.log(response);{
"balance": "12.345",
"currency": "usd"
}balance is a decimal string with three decimal places, such as "0.015" for 1.5 cents. The MCP server has the same call as the wallet_get tool.
Top Up
The workspace owner tops up in the dashboard under Settings → Wallet, with a card. Every member of the workspace can see the balance and the top-up history there.
Errors
| Code | HTTP | Cause | Fix |
|---|---|---|---|
PAYMENT_METHOD_REQUIRED | 402 | The workspace has 3 or more accounts and no payment method | Add a payment method |
PAYMENT_PAST_DUE | 402 | An invoice is unpaid after every payment attempt | Update the payment method and pay |
USAGE_BILLING_REQUIRED | 402 | A connect past the 2 free accounts, with no payment method | Add a payment method, then connect again |
USAGE_BILLING_FAILED | 402 | Billing for the new account failed, so it was not added | Check the payment method, then connect again |
INSUFFICIENT_WALLET | 402 | The wallet cannot pay for an X action | Top up, then retry |
A scheduled X post the wallet cannot cover fails with INSUFFICIENT_WALLET. See Errors.