Skip to content

API reference

Route messages

Buyer and seller conversations about a route.

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

List your route conversations

GET/api/v1/route-messages/threads

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

The other party is shown by a label, never by account.

Response 200

  • datarequired

    object[]

  • routeIdrequired

    string (uuid) · data[].routeId

  • buyerIdrequired

    string (uuid) · data[].buyerId

  • rolerequired

    string · data[].role

    One of buyer, seller
  • routeNamerequired

    string · data[].routeName

    The listing name as a buyer reads it: generated by the platform, never the seller's text, and ending in the listing reference (e.g. "Niger Mobile · Ref 7K2Q", "A-Z Voice · Premium · Full CLI · Ref 3MX9"). Your own listings keep the name you gave them.
  • otherPartyrequired

    string · data[].otherParty

  • unreadrequired

    integer · data[].unread

  • totalrequired

    integer · data[].total

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.

Get one route conversation

GET/api/v1/route-messages/{routeId}/{buyerId}

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Parameters

  • routeIdrequired

    path · string

  • buyerIdrequired

    path · string

Response 200

  • datarequired

    object

  • routeIdrequired

    string (uuid) · data.routeId

  • buyerIdrequired

    string (uuid) · data.buyerId

  • rolerequired

    string · data.role

    One of buyer, seller
  • routeNamerequired

    string · data.routeName

    The listing name as a buyer reads it: generated by the platform, never the seller's text, and ending in the listing reference (e.g. "Niger Mobile · Ref 7K2Q", "A-Z Voice · Premium · Full CLI · Ref 3MX9"). Your own listings keep the name you gave them.
  • otherPartyrequired

    string · data.otherParty

  • messagesrequired

    object[] · data.messages

  • idrequired

    string (uuid) · data.messages[].id

  • routeIdrequired

    string (uuid) · data.messages[].routeId

  • buyerIdrequired

    string (uuid) · data.messages[].buyerId

  • minerequired

    boolean · data.messages[].mine

  • bodyrequired

    string · data.messages[].body

  • readAtrequired

    string (date-time) | null · data.messages[].readAt

    ISO-8601 timestamp (UTC)
  • createdAtrequired

    string (date-time) · data.messages[].createdAt

    ISO-8601 timestamp (UTC)

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.
  • 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.

Send a message about a route

POST/api/v1/route-messages

Access
API key. Full-access keys only; not reachable by scoped keys.
Rate limit
100 requests per second (the default)

Contact details (emails, phone numbers, links, handles) are refused. Sellers must pass buyerId to start a thread.

Request body (application/json)

  • routeIdrequired

    string (uuid)

  • bodyrequired

    string

    max 4000 chars
  • buyerId

    string (uuid)

Response 201

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • routeIdrequired

    string (uuid) · data.routeId

  • buyerIdrequired

    string (uuid) · data.buyerId

  • minerequired

    boolean · data.mine

  • bodyrequired

    string · data.body

  • readAtrequired

    string (date-time) | null · data.readAt

    ISO-8601 timestamp (UTC)
  • createdAtrequired

    string (date-time) · data.createdAt

    ISO-8601 timestamp (UTC)
  • senderIdrequired

    string (uuid) · data.senderId

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.
  • 409CONFLICT (or a code-specific 409): the change clashes with existing state.
  • 429RATE_LIMITED: slow down and retry after the Retry-After seconds.
  • 500INTERNAL_ERROR: unexpected failure. Quote X-Request-Id to support.