# Credits and billing

SocialToAI is paid with prepaid credits, in whole numbers. Most calls cost 2 credits (range 1–24), a call that fails costs nothing, and every answer states what was charged and what is left. Credits never expire and there is no subscription.

- Page: https://socialtoai.com/docs/credits-and-billing/
- Last updated: 2026-10-17

## Buying credits

Sign-up includes 100 free credits, no card. After that you buy credits in US dollars, by card or Alipay, in any whole amount from $10 to $2,000. A larger single purchase buys more credits per dollar. Purchases are not refunded.

| One purchase of | Credits per dollar | One credit costs |
| --- | --- | --- |
| $10 – $49 | 300 | $0.0033 |
| $50 – $199 | 400 | $0.0025 |
| $200 – $2,000 | 500 | $0.002 |

[Pricing](https://socialtoai.com/pricing.md) has the credits of every call and a calculator.

## What is charged

A call is charged by how it ends. `status` in the answer says which of these it was:

| status | Charged | What it means |
| --- | --- | --- |
| `ok` | Yes | The call worked and `items` holds the results. |
| `empty` | Yes | The call worked and found nothing. A search that ran and matched nothing is charged as usual. |
| `error` | No | The call failed. `error` says why and `fix` says what to do. |
| `not_supported` | No | The platform does not offer this action. |
| `timeout` | No | The result is not known. We do not retry on our own. |
| `skipped` | No | This part was not run. |

No row of the [error table](https://socialtoai.com/docs/api/errors.md) is charged either.

## billing in every answer

Every answer to a call made with a key carries `billing`. On a failure the cost is 0.

| Field | Type | What it is |
| --- | --- | --- |
| `billing.cost_credits` | integer | What the whole request cost. |
| `billing.balance_credits` | integer | Your balance after this call. |
| `billing.today_spend_credits` | integer | Credits spent today, in UTC. |
| `billing.daily_limit_credits` | integer \| null | Your daily limit; null when none is set. |
| `billing.daily_remaining_credits` | integer \| null | What is left of the daily limit; null when none is set. |
| `billing.display` | string | One sentence an AI can repeat to you. |

## Limits you set

- **Per call**: send `max_cost_credits` with a request. If the call would cost more, it is refused for free with `max_cost_exceeded` and the quote. There is no default.
- **Per day, for the account**: a new account has a daily limit of 100,000 credits. You can change it or switch it off in the console.
- **Per day, for one key**: optional. A key without its own limit is bound by the account's.
- A day is a UTC day. Over a limit the answer is `daily_limit_reached`, with `reason` saying whose limit it was and `resets_at` when it starts again.

## Rate limits

The tier is whether the account has bought credits. Over a limit the answer is `rate_limited` with a `Retry-After` header, and nothing is charged.

| Tier | Calls per second, per key | Calls running at once, per account |
| --- | --- | --- |
| Before the first purchase | 1 | 2 |
| After the first purchase | 5 | 10 |

## Retries without paying twice

`Idempotency-Key`: 1 to 255 visible ASCII characters. The same key with the same parameters returns the first result again and is not charged twice.

After a `timeout` we do not know whether the call ran, so we never retry it on our own and do not charge it. Send a new request if you still need the data.
