Skip to content

SMS rates per destination country and network.

GET /api/v1/user/pricing · Permission: pricing.read

Terminal window
curl https://restlink23telecom.com/api/v1/user/pricing \
-H "X-API-Key: $API_KEY"

An array of pricing entries — one per network. X-Account-Currency contains the account currency when known:

200 OK (one entry shown)
[
{
"mcc": "310",
"mnc": "004",
"mccmnc": "310004",
"dialcode": "1",
"country": "United States",
"network": "Verizon Wireless",
"rate": 0.0085,
"prev_rate": 0.0080,
"rate_start_date": "2026.01.08 22:15:29",
"rate_end_date": "2100.01.01 00:00:00",
"change_type": "Increase"
}
]

Portal session calls return an envelope; API integrations always receive the array above.

{"currency": "EUR", "prices": [
{"mcc": "310", "mccmnc": "310004", "country": "United States", "network": "Verizon Wireless", "rate": 0.0085, "rate_start_date": "2026.01.08 22:15:29", "rate_end_date": "2100.01.01 00:00:00"}
]}
Field Description
mcc / mccmnc Mobile Country Code and combined identifier
mnc Mobile Network Code (omitted when empty)
dialcode International dialing prefix (omitted when empty)
country / network Human-readable names
rate Current rate in your account currency
prev_rate Previous rate, for change tracking (omitted when zero)
rate_start_date When the current rate took effect (YYYY.MM.DD HH:MM:SS)
rate_end_date Far-future sentinel (2100.01.01) while the rate is ongoing
change_type Same, Increase or Decrease (omitted when empty)

Rates are denominated in the active workspace’s account currency. API-key responses expose that ISO 4217 code in X-Account-Currency (omitted while it is unknown and readable cross-origin); balance also carries it as currency.

Status error_code When
403 FORBIDDEN An API key lacks pricing.read. Only this case carries required_permission; enable it in Portal → API Keys.
403 FORBIDDEN An Integration SMS key can call only the integration send endpoint; no required_permission is included.
403 SECTION_ACCESS_DENIED A team member (portal session or a key they created) whose role hides Balance & prices or lacks balance.read; the body carries "section": "balance_prices". Owners never receive this error.
403 API_KEY_CREATOR_INACTIVE The key’s creator is no longer active.
429 RATE_LIMIT_EXCEEDED The account’s request rate limit is exceeded (shared by API keys and portal sessions). Retry-After is 1 and X-RateLimit-Limit/X-RateLimit-Burst give the applied limit; a suspended account or team member gets Retry-After: 60 and zero limits.
429 TOO_MANY_ATTEMPTS Too many failed API-key checks from one IP; wait for Retry-After seconds. No X-RateLimit-* headers.
503 API_KEY_VALIDATION_UNAVAILABLE, AUTH_PROTECTION_UNAVAILABLE, REPLAY_PROTECTION_UNAVAILABLE (signed POST only), RATE_LIMIT_UNAVAILABLE, SECTION_ACCESS_UNAVAILABLE, WORKSPACE_ACCESS_UNAVAILABLE A check before the handler is briefly unavailable; retry. See Temporary errors.

Portal sessions can also receive CROSS_TENANT_WORKSPACE, NO_ACCESSIBLE_WORKSPACE or NO_MAIN_WORKSPACE; see Errors. A cookie-authenticated POST without a valid CSRF token gets CSRF_FAILED.

  • POST /user/pricing returns identical data (kept for frontend compatibility; the request body is ignored).
  • GET /user/pricing/:id ignores the :id value and returns {"currency": "EUR"} (or an empty string when unknown); fetch the full list and filter client-side by mccmnc.
  • Check status === false before treating the body as prices: during account setup the endpoint returns HTTP 200 with {"status": false, "error": "Account is in setup process", …}.
  • Degraded-cache behavior matches balance: an empty array [] for API keys or "prices": [] for sessions, plus X-Sms-Gateway-Status.