Skip to content

API reference

Markets

Market-wide rate indices across destinations.

3 operationsBase URL https://packetexchange.io/api/v1Postman collection

Get the marketplace summary

GET/api/v1/markets/summary

Access
Key optional. A key or token personalises the answer.
Rate limit
100 requests per second (the default)

Public counts for everyone; capacity, ASR, ACD and average price only for signed-in callers.

Response 200

  • datarequired

    object

  • routesrequired

    integer · data.routes

  • destinationsrequired

    integer · data.destinations

  • voiceRoutesrequired

    integer · data.voiceRoutes

  • smsRoutesrequired

    integer · data.smsRoutes

  • hasRoutesrequired

    boolean · data.hasRoutes

  • hasActivityDatarequired

    boolean · data.hasActivityData

  • capacity

    integer · data.capacity

  • avgAsr

    number | null · data.avgAsr

  • measuredAsr

    number | null · data.measuredAsr

  • measuredAsrSample

    integer · data.measuredAsrSample

  • avgAcd

    number | null · data.avgAcd

  • avgPrice

    number | null · data.avgPrice

    Display figure
  • topMoversrequired

    any[] · data.topMovers

  • marketStatusrequired

    string · data.marketStatus

  • asOfrequired

    string (date-time) · data.asOf

    Start of the 24h activity window

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 401UNAUTHORIZED: missing, invalid, expired or revoked credential.
  • 403FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

List destinations with live routes and their lowest rates

GET/api/v1/pricing/destinations

Access
Public. No key needed.
Rate limit
100 requests per second (the default)

Public. Every destination with at least one live, buyer-visible route, per product: slug, route count and lowest rate. Pass type for one product; without it both voice and sms lists are returned. Rebuilt at most every 10 minutes (Cache-Control: public, max-age=600). Rates are the sellers' list prices before the platform fee.

Parameters

  • type

    query · string

    One of voice, sms

Response 200

  • datarequired

    object

  • voice

    object[] · data.voice

  • slugrequired

    string · data.voice[].slug

    URL slug from the country name, e.g. "pakistan"
  • countryrequired

    string · data.voice[].country

  • countryCoderequired

    string · data.voice[].countryCode

    E.164 country calling code, digits only
  • routesrequired

    integer · data.voice[].routes

    Live routes that price at least one number type
  • lowestrequired

    string · data.voice[].lowest

    Lowest mobile, fixed or country-wide rate
  • lowestBandrequired

    string · data.voice[].lowestBand

    mobile and fixed: rate-sheet rows named for that number type. countryWide: the bare country row (or a single-price listing), which prices every number without a more specific row.One of mobile, fixed, countryWide
  • unitrequired

    string · data.voice[].unit

    Per minute (voice) or per message (SMS)One of min, msg
  • sms

    object[] · data.sms

    Same fields as PricingDestination, shown earlier on this page.
  • updatedAtrequired

    string (date-time) · data.updatedAt

    ISO-8601 timestamp (UTC)

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.

Get the live market for one destination

GET/api/v1/pricing/destinations/{slug}

Access
Public. No key needed.
Rate limit
100 requests per second (the default)

Public. Lowest rate per number type, mobile operator breakouts, caller-ID and billing-increment mix, and the five cheapest routes as anonymous facts (price, caller ID, increment, stated ASR). The ASR here is the one the seller states; measured figures per listing are on GET /routes (measured). 404 when the destination has no live route of that type. Cached like the list.

Parameters

  • slugrequired

    path · string

  • type

    query · string

    One of voice, smsDefault "voice"

Response 200

  • datarequired

    object

  • slugrequired

    string · data.slug

    URL slug from the country name, e.g. "pakistan"
  • countryrequired

    string · data.country

  • countryCoderequired

    string · data.countryCode

    E.164 country calling code, digits only
  • routesrequired

    integer · data.routes

    Live routes that price at least one number type
  • lowestrequired

    string · data.lowest

    Lowest mobile, fixed or country-wide rate
  • lowestBandrequired

    string · data.lowestBand

    mobile and fixed: rate-sheet rows named for that number type. countryWide: the bare country row (or a single-price listing), which prices every number without a more specific row.One of mobile, fixed, countryWide
  • unitrequired

    string · data.unit

    Per minute (voice) or per message (SMS)One of min, msg
  • typerequired

    string · data.type

    One of voice, sms
  • highestrequired

    string · data.highest

    Highest route "from" price in the destination
  • bandsrequired

    object[] · data.bands

    Lowest rate per number type
  • keyrequired

    string · data.bands[].key

    mobile and fixed: rate-sheet rows named for that number type. countryWide: the bare country row (or a single-price listing), which prices every number without a more specific row.One of mobile, fixed, countryWide
  • fromrequired

    string · data.bands[].from

    USD, 6-decimal string, e.g. "0.020370"
  • routesrequired

    integer · data.bands[].routes

  • operatorsrequired

    object[] · data.operators

    Mobile operators broken out on at least two routes, cheapest first, at most 12
  • namerequired

    string · data.operators[].name

  • fromrequired

    string · data.operators[].from

    USD, 6-decimal string, e.g. "0.020370"
  • routesrequired

    integer · data.operators[].routes

  • cliTypesrequired

    object[] · data.cliTypes

    Caller-ID handling the sellers state (voice only)
  • cliTyperequired

    string · data.cliTypes[].cliType

  • routesrequired

    integer · data.cliTypes[].routes

  • incrementsrequired

    object[] · data.increments

    Billing increments, e.g. "1/1" (voice only)
  • incrementrequired

    string · data.increments[].increment

  • routesrequired

    integer · data.increments[].routes

  • routesWithStatedAsrrequired

    integer · data.routesWithStatedAsr

    Routes whose seller states an ASR
  • otherBreakoutsrequired

    integer · data.otherBreakouts

    Named breakouts that are not a headline number type (toll-free, premium, cities)
  • topRoutesrequired

    object[] · data.topRoutes

    The five cheapest routes, as anonymous facts
  • rankrequired

    integer · data.topRoutes[].rank

  • fromrequired

    string · data.topRoutes[].from

    USD, 6-decimal string, e.g. "0.020370"
  • mobileFromrequired

    string | null · data.topRoutes[].mobileFrom

    USD, 6-decimal string, e.g. "0.020370"
  • cliTyperequired

    string · data.topRoutes[].cliType

  • billingIncrementrequired

    string | null · data.topRoutes[].billingIncrement

  • routeTyperequired

    string · data.topRoutes[].routeType

    Quality tier the route is listed under
  • statedAsrrequired

    string | null · data.topRoutes[].statedAsr

    Seller-stated ASR %, not measured
  • statedAcdrequired

    string | null · data.topRoutes[].statedAcd

    Seller-stated ACD in seconds, not measured
  • relatedrequired

    object[] · data.related

    Destinations in the same world numbering zoneSame fields as PricingDestination, shown earlier on this page.
  • updatedAtrequired

    string (date-time) · data.updatedAt

    ISO-8601 timestamp (UTC)

Errors

  • 400VALIDATION_ERROR, INVALID_INPUT or BAD_REQUEST. For VALIDATION_ERROR, error.details is an array of { path, message }.
  • 404NOT_FOUND: no such resource on your account.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.