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"
}Get plan and usage stats GET
Returns the current plan name, billing period, plan limits, and usage counts. The response shape depends on the account's `billingSystem`: * Stripe users: per-period `usage.uploads` / `usage.profiles` counters. * Metronome (usage-based) users: `usage.connectedAccounts`, `usage.xApiCallsByOperation` (per-operation X API call counts — resolve keys via `GET /v1/billing/x-pricing`), plus a `spend` block with `currentPeriodCents`, `xSpendCents`, and `xSpendLimitCents`. The legacy `usage.xApiCalls` 3-tier aggregate is still emitted for back-compat but excludes the $0.200 URL tier and any future tiers — new clients should consume `xApiCallsByOperation` only.
Send an SMS or MMS POST
Send a text (SMS) or media (MMS) message from one of your SMS-enabled numbers. Provide `text`, `mediaUrls`, or both. Supply an `Idempotency-Key` header to make retries safe (a repeated key replays the original result instead of sending again). US numbers must have an approved carrier registration before they can deliver.