Get X API pricing table
Returns Zernio's canonical X API pricing table. Each X action has its own billing product and its own rate, and Zernio passes X API costs through at exact rates with zero markup.
The response is identical for every authenticated user (pricing is universal), so it is safe to cache on the client for the duration of a billing period.
To compute your own per-operation spend, pair this endpoint with
GET /v1/usage-stats, which returns usage.xApiCallsByOperation
keyed by the same operation field you get here.
Authorization
bearerAuth API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.
In: header
Response Body
application/json
application/json
{ "currency": "USD", "markup": "0%", "source": "https://developer.x.com/#pricing", "lastVerified": "2026-03-26", "tiers": [ { "tier": "x_api_005", "pricePerCallUsd": 0.005, "operationCount": 13 }, { "tier": "x_api_010", "pricePerCallUsd": 0.01, "operationCount": 10 }, { "tier": "x_api_015", "pricePerCallUsd": 0.015, "operationCount": 3 }, { "tier": "x_api_200", "pricePerCallUsd": 0.2, "operationCount": 1 } ], "operations": [ { "operation": "posts_read", "eventType": "x_posts_read", "displayName": "X API: Posts Read", "pricePerCallUsd": 0.005, "pricePerCallCents": 0.5, "tier": "x_api_005", "triggeredBy": [ { "method": "getPostAnalytics", "metering": "analytics_optin" }, { "method": "getBatchPostAnalytics", "metering": "analytics_optin" }, { "method": "getAccountPosts", "metering": "analytics_optin" } ] }, { "operation": "content_create", "eventType": "x_content_create", "displayName": "X API: Content Create", "pricePerCallUsd": 0.015, "pricePerCallCents": 1.5, "tier": "x_api_015", "triggeredBy": [ { "method": "publishPost", "metering": "always" } ] }, { "operation": "content_create_with_url", "eventType": "x_content_create_with_url", "displayName": "X API: Content Create (with URL)", "pricePerCallUsd": 0.2, "pricePerCallCents": 20, "tier": "x_api_200", "triggeredBy": [ { "method": "publishPost", "metering": "always" } ] }, { "operation": "article_draft", "eventType": "x_article_draft", "displayName": "X API: Article Draft", "pricePerCallUsd": 0.01, "pricePerCallCents": 1, "tier": "x_api_010", "triggeredBy": [ { "method": "createArticleDraft", "metering": "always" } ] }, { "operation": "article_publish", "eventType": "x_article_publish", "displayName": "X API: Article Publish", "pricePerCallUsd": 0.01, "pricePerCallCents": 1, "tier": "x_api_010", "triggeredBy": [ { "method": "publishArticle", "metering": "always" } ] } ]}Usage snapshot (default) or billed-spend metering (with params)
Dual-mode endpoint, selected by query params, and fully backward compatible: **Without metering params (the default):** the plan / quota / usage snapshot: plan name, billing period, limits, usage counts, access state. Identical to `GET /v1/usage-stats`. Existing integrations keep working unchanged. **With `range`, `granularity`, `from`, or `to`:** usage METERING: billed spend (USD) by product family (`accounts`, `numbers`, `calls`, `sms`, `dlc`, `xApi`, `credits`, `other`) over the window, at `day` / `month` / `total` granularity, from the usage-based invoice breakdown (the CHARGE view, which always reconciles with what gets billed). Also served at `GET /v1/usage/daily`. Usage-based accounts only: legacy Stripe accounts get `{ "supported": false, "days": [] }`. **Attribution (metering mode):** `groupBy=profile|account` adds an `attribution` breakdown of the window's spend per profile or account, assembled from your own records and pro-rated against the invoice so `sum(groups) + unattributed` equals `totals` exactly. `profileId` / `accountId` instead project the whole payload (`days`, `totals`, `lineItems`) onto that one group; `peaks`, `callUsage` and `tax` are then `null` (team-level facts). Projected `days` spread the group's period share over each day (usage is attributed per period, not per day). Profile-scoped API keys and members only see their profiles' groups (`attribution.restricted: true`, with `totals` summing the visible groups). Credits, 10DLC fees and Verify are always unattributed. `profileId` / `accountId` on their own do not select metering mode: pair them with `range`. For per-domain consumption *volumes* use `GET /v1/usage/calls` and `GET /v1/usage/sms`. For the billing statement (balance, credits, caps, payment status) use `GET /v1/billing`.
Get FB persistent menu
Get the persistent menu configuration for a Facebook Messenger account.