# X API pricing

> What X API calls cost, passed through at X's prices with no markup, and the endpoint that reports this month's total.

Canonical: <https://www.tryadeli.com/docs/pricing/x>

X bills its API per call. Every X account connects through Adeli's one X app,
so Adeli pays X for each call and passes the cost on to you **at X's published
prices, with no markup**. Adeli records each call against your account as it
happens, and the endpoint below reports the running total.

The other providers do not bill per call, so this page covers X only.

> **Warning: X needs a card on file**
>
> X needs a card on file, even within your [free accounts](https://www.tryadeli.com/docs/billing#first-3-accounts-free).
> Until you add one, connecting an X account returns `402 x_billing_required`,
> and so does every call that would cost money. Add a card on the dashboard's
> Accounts or Billing page.

## How you're charged

X usage is charged on the same invoices as your connected accounts, as an
"X API usage" line, and it counts toward the same
[charge thresholds](https://www.tryadeli.com/docs/billing#when-your-card-is-charged): $6 of X usage and
$4 of accounts reach the first $10 charge together. Invoices round the line to
the cent. Usage from before you added a card is never charged.

The dashboard's Billing page shows this month's X usage to a tenth of a cent,
straight from our records. It reaches the upcoming invoice within a few minutes.

## What costs money

Adeli records a call only when X accepts it, so a request X rejects is free.

| Name              | Type     | Required | Description                                                                                                                             |
| ----------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `post.create`     | `$0.015` |          | Publishing a post, or each post in a thread.                                                                                            |
| `post.create_url` | `$0.200` |          | Publishing a post whose text contains a link, including a bare domain such as example.com.                                              |
| `post.delete`     | `$0.005` |          | Deleting a post.                                                                                                                        |
| `post.read_owned` | `$0.001` |          | Each post returned when you list an X account's posts. Listing posts includes X only when you ask for `platform=x` or an X `accountId`. |
| `user.read_owned` | `$0.001` |          | Reading the account's profile, which happens once when it connects.                                                                     |
| `media.upload`    | `$0.000` |          | Uploading an image or video. X does not list a price; it is recorded so totals can be checked against X's own.                          |

If the same resource is read twice in one UTC day, X charges once, and so does
Adeli.
Prices are those on X's pricing page on the date in `ratesAsOf`.

## `GET /api/v1/usage/x` — Get X usage

Returns your organization's X usage for the current UTC calendar month, across every profile
and account. Costs are integers in millionths of a dollar, so they add up
exactly: `230000` is $0.23.

```bash
curl --fail-with-body "$ADELI_URL/api/v1/usage/x" \
  -H "Authorization: Bearer $ADELI_API_KEY"
```

```json
{
  "from": "2026-10-01T00:00:00.000Z",
  "to": "2026-11-01T00:00:00.000Z",
  "ratesAsOf": "2026-10-06",
  "totalCostMicros": 230000,
  "operations": [
    { "operation": "post.create", "resourceType": "post", "resourceCount": 2, "costMicros": 30000 },
    { "operation": "post.create_url", "resourceType": "post", "resourceCount": 1, "costMicros": 200000 }
  ]
}
```

**Errors** — `401 unauthorized`, `502 database_error`.
