Get X/Twitter API pricing table
Returns Zernio's canonical X/Twitter API pricing table. Each X action has its own Metronome 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 — that endpoint returns usage.xApiCallsByOperation
keyed by the same operation field you get here.
API key authentication - use your Zernio API key as a Bearer token
In: header
Response Body
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.usage.getXApiPricing();console.log(data);{
"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": 8
},
{
"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"
}
]
}
]
}{
"error": "Unauthorized"
}Usage snapshot (default) or billed-spend metering (with params) GET
Dual-mode endpoint, selected by query params — 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 Metronome's invoice breakdown (the CHARGE view — always reconciles with what gets billed). Also served at `GET /v1/usage/daily`. Usage-based accounts only — legacy Stripe accounts get `{ "supported": false, "days": [] }`. 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
Get the persistent menu configuration for a Facebook Messenger account.