Skip to content

API reference

Rate sheets

Upload and manage per-prefix rate decks on routes you sell.

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

List rate-sheet imports for a route

GET/api/v1/routes/{id}/rate-sheets

Access
API key. Scoped keys need routes:read.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • routeIdrequired

    string (uuid) · data[].routeId

  • filenamerequired

    string · data[].filename

  • fileTyperequired

    string · data[].fileType

  • statusrequired

    string · data[].status

  • rowCountrequired

    integer | null · data[].rowCount

  • columnMapping

    any · data[].columnMapping

  • previewRows

    any · data[].previewRows

  • warnings

    any · data[].warnings

  • currencyrequired

    string | null · data[].currency

  • fxRaterequired

    string | null · data[].fxRate

  • errorMessagerequired

    string | null · data[].errorMessage

  • createdAtrequired

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

    ISO-8601 timestamp (UTC)
  • appliedAtrequired

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

    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.

Upload a rate sheet to a route

POST/api/v1/routes/{id}/rate-sheets

Access
API key. Scoped keys need routes:write.
Rate limit
10 requests per minute

Multipart upload (field file, CSV or Excel). Creates an import to preview, diff and apply; nothing is priced until you apply it.

Parameters

  • idrequired

    path · string

Request body (multipart/form-data)

  • filerequired

    string

    CSV or Excel rate sheet (binary)

Response 201

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • routeIdrequired

    string (uuid) · data.routeId

  • filenamerequired

    string · data.filename

  • fileTyperequired

    string · data.fileType

  • statusrequired

    string · data.status

  • rowCountrequired

    integer | null · data.rowCount

  • columnMapping

    any · data.columnMapping

  • previewRows

    any · data.previewRows

  • warnings

    any · data.warnings

  • currencyrequired

    string | null · data.currency

  • fxRaterequired

    string | null · data.fxRate

  • errorMessagerequired

    string | null · data.errorMessage

  • createdAtrequired

    string (date-time) · data.createdAt

    ISO-8601 timestamp (UTC)
  • appliedAtrequired

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

    ISO-8601 timestamp (UTC)
  • rawSample

    any · data.rawSample

  • summary

    any · data.summary

  • confidence

    any · data.confidence

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

Upload and apply a rate sheet in one step

POST/api/v1/routes/{id}/rate-sheets/quick

Access
API key. Scoped keys need routes:write.
Rate limit
10 requests per minute

Applies straight away when the sheet reads unambiguously; otherwise returns outcome: "review" with the reasons.

Parameters

  • idrequired

    path · string

Request body (multipart/form-data)

  • filerequired

    string

    CSV or Excel rate sheet (binary)

Response 200

  • datarequired

    object

  • outcomerequired

    string · data.outcome

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

Get a rate-sheet import

GET/api/v1/routes/{id}/rate-sheets/{importId}

Access
API key. Scoped keys need routes:read.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • importIdrequired

    path · string

Response 200

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • routeIdrequired

    string (uuid) · data.routeId

  • filenamerequired

    string · data.filename

  • fileTyperequired

    string · data.fileType

  • statusrequired

    string · data.status

  • rowCountrequired

    integer | null · data.rowCount

  • columnMapping

    any · data.columnMapping

  • previewRows

    any · data.previewRows

  • warnings

    any · data.warnings

  • currencyrequired

    string | null · data.currency

  • fxRaterequired

    string | null · data.fxRate

  • errorMessagerequired

    string | null · data.errorMessage

  • createdAtrequired

    string (date-time) · data.createdAt

    ISO-8601 timestamp (UTC)
  • appliedAtrequired

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

    ISO-8601 timestamp (UTC)
  • rawSample

    any · data.rawSample

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.

Preview a rate-sheet import

POST/api/v1/routes/{id}/rate-sheets/{importId}/preview

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • importIdrequired

    path · string

Request body (application/json)

  • fxRate

    number

    Multiply source rates by this to convert to USDmin 0
  • mapping

    any

    Column mapping override
  • overrides

    object

  • defaultIncrement

    string | null

  • increaseEffectiveAt

    string | string (date-time) | null

    When the sheet's increases take effect: "now", an ISO instant, or omitted for the default notice period (diff and apply only)

Response 200

  • datarequired

    object

    Parsed rows as they would be priced

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

Compare a rate-sheet import with the live deck

POST/api/v1/routes/{id}/rate-sheets/{importId}/diff

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • importIdrequired

    path · string

Request body (application/json)

  • fxRate

    number

    Multiply source rates by this to convert to USDmin 0
  • mapping

    any

    Column mapping override
  • overrides

    object

  • defaultIncrement

    string | null

  • increaseEffectiveAt

    string | string (date-time) | null

    When the sheet's increases take effect: "now", an ISO instant, or omitted for the default notice period (diff and apply only)

Response 200

  • datarequired

    object

    Added, changed and removed rows

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

Apply a rate-sheet import

POST/api/v1/routes/{id}/rate-sheets/{importId}/apply

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Rate increases put list-rate buyers on hold until they accept the new rate.

Parameters

  • idrequired

    path · string

  • importIdrequired

    path · string

Request body (application/json)

  • fxRate

    number

    Multiply source rates by this to convert to USDmin 0
  • mapping

    any

    Column mapping override
  • overrides

    object

  • defaultIncrement

    string | null

  • increaseEffectiveAt

    string | string (date-time) | null

    When the sheet's increases take effect: "now", an ISO instant, or omitted for the default notice period (diff and apply only)

Response 200

  • datarequired

    object

  • appliedrequired

    integer · data.applied

  • addedrequired

    integer · data.added

  • changedrequired

    integer · data.changed

  • removedrequired

    integer · data.removed

  • droppedBlockedrequired

    integer · data.droppedBlocked

  • diff

    any · data.diff

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

Roll a route back to an earlier rate-sheet import

POST/api/v1/routes/{id}/rate-sheets/{importId}/rollback

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • importIdrequired

    path · string

Response 200

  • datarequired

    object

  • appliedrequired

    integer · data.applied

  • addedrequired

    integer · data.added

  • changedrequired

    integer · data.changed

  • removedrequired

    integer · data.removed

  • droppedBlockedrequired

    integer · data.droppedBlocked

  • diff

    any · data.diff

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

Reapply a rate-sheet import with new settings

POST/api/v1/routes/{id}/rate-sheets/{importId}/reapply

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • importIdrequired

    path · string

Request body (application/json)

  • fxRate

    number

    Multiply source rates by this to convert to USDmin 0
  • mapping

    any

    Column mapping override
  • overrides

    object

  • defaultIncrement

    string | null

  • increaseEffectiveAt

    string | string (date-time) | null

    When the sheet's increases take effect: "now", an ISO instant, or omitted for the default notice period (diff and apply only)

Response 200

  • datarequired

    object

  • appliedrequired

    integer · data.applied

  • addedrequired

    integer · data.added

  • changedrequired

    integer · data.changed

  • removedrequired

    integer · data.removed

  • droppedBlockedrequired

    integer · data.droppedBlocked

  • diff

    any · data.diff

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

Publish an A-Z deck as per-country listings

POST/api/v1/routes/{id}/publish-by-country

Access
API key. Scoped keys need routes:write.
Rate limit
6 requests per minute

Parameters

  • idrequired

    path · string

Request body (application/json)

  • perCarrier

    boolean

Response 200

  • datarequired

    object

    The listings created

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

Collapse per-country listings back into one deck

POST/api/v1/routes/{id}/collapse-bundle

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

Response 200

  • datarequired

    object

  • removedrequired

    integer · data.removed

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

List the per-country listings of a deck

GET/api/v1/routes/{id}/children

Access
API key. Scoped keys need routes:read.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

Response 200

  • datarequired

    object[]

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.

List per-destination rates on a route

GET/api/v1/routes/{id}/rates

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

Public for public routes. Buyers see cleaned destination names and no upstream operator labels.

Parameters

  • idrequired

    path · string

  • search

    query · string

  • limit

    query · integer

  • offset

    query · integer

Response 200

  • ratesrequired

    object[]

  • idrequired

    string (uuid) · rates[].id

  • routeIdrequired

    string (uuid) · rates[].routeId

  • destinationNamerequired

    string · rates[].destinationName

  • operatorrequired

    string | null · rates[].operator

  • prefixrequired

    string · rates[].prefix

  • ratePerUnitrequired

    money · rates[].ratePerUnit

    USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • billingIncrementrequired

    string | null · rates[].billingIncrement

  • minDurationrequired

    integer | null · rates[].minDuration

  • effectiveDaterequired

    string (date-time) | null · rates[].effectiveDate

    ISO-8601 timestamp (UTC)
  • statusrequired

    string · rates[].status

  • mccMnc

    string | null · rates[].mccMnc

    SMS sheets priced by network code: the network the row price came from ("214" = whole country)
  • operatorRates

    object[] | null · rates[].operatorRates

    SMS sheets priced by network: the price per destination network (charged per network when networkPriced is true). A message is charged its network's rate (networks not listed pay the All Operators rate when there is one); ratePerUnit is the price for other or unknown networks. The network is determined from the number's range (ported numbers may be priced at the network the range belongs to)
  • mccMncrequired

    string · rates[].operatorRates[].mccMnc

    "214-07" for one network; "214" for All Operators
  • operatorrequired

    string | null · rates[].operatorRates[].operator

  • raterequired

    money · rates[].operatorRates[].rate

    USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • networkPriced

    boolean · rates[].networkPriced

    True when each SMS on this row is charged its destination network's rate from operatorRates; ratePerUnit then applies to other or unknown networks
  • totalrequired

    integer

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.

Add a rate to your route's deck

POST/api/v1/routes/{id}/rates

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

Request body (application/json)

  • destinationNamerequired

    string

    max 255 chars
  • operator

    string | null

    max 120 chars
  • prefixrequired

    string

    max 24 chars
  • ratePerUnitrequired

    string

  • billingIncrement

    string

    max 10 chars
  • minDuration

    integer

    min 0

Response 201

  • datarequired

    object

  • idrequired

    string (uuid) · data.id

  • routeIdrequired

    string (uuid) · data.routeId

  • destinationNamerequired

    string · data.destinationName

  • operatorrequired

    string | null · data.operator

  • prefixrequired

    string · data.prefix

  • ratePerUnitrequired

    money · data.ratePerUnit

    USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • billingIncrementrequired

    string | null · data.billingIncrement

  • minDurationrequired

    integer | null · data.minDuration

  • effectiveDaterequired

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

    ISO-8601 timestamp (UTC)
  • statusrequired

    string · data.status

  • mccMnc

    string | null · data.mccMnc

    SMS sheets priced by network code: the network the row price came from ("214" = whole country)
  • operatorRates

    object[] | null · data.operatorRates

    SMS sheets priced by network: the price per destination network (charged per network when networkPriced is true). A message is charged its network's rate (networks not listed pay the All Operators rate when there is one); ratePerUnit is the price for other or unknown networks. The network is determined from the number's range (ported numbers may be priced at the network the range belongs to)
  • mccMncrequired

    string · data.operatorRates[].mccMnc

    "214-07" for one network; "214" for All Operators
  • operatorrequired

    string | null · data.operatorRates[].operator

  • raterequired

    money · data.operatorRates[].rate

    USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • networkPriced

    boolean · data.networkPriced

    True when each SMS on this row is charged its destination network's rate from operatorRates; ratePerUnit then applies to other or unknown networks
  • updatedrequired

    boolean · data.updated

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

Export a route's rates as CSV

GET/api/v1/routes/{id}/rates/export

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

Parameters

  • idrequired

    path · string

Response 200 (text/csv)

The deck as CSV (attachment).

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.

Add many rates to your route's deck

POST/api/v1/routes/{id}/rates/bulk

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

Request body (application/json)

  • rowsrequired

    object[]

  • destinationName

    string · rows[].destinationName

    max 255 chars
  • operator

    string | null · rows[].operator

    max 120 chars
  • prefixrequired

    string · rows[].prefix

    max 24 chars
  • ratePerUnitrequired

    string · rows[].ratePerUnit

    max 32 chars
  • billingIncrement

    string · rows[].billingIncrement

    max 10 chars
  • minDuration

    integer · rows[].minDuration

    min 0

Response 201

  • datarequired

    object

  • addedrequired

    integer · data.added

  • updatedrequired

    integer · data.updated

  • skippedrequired

    integer · data.skipped

  • skippedRowsrequired

    object[] · data.skippedRows

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

Edit or block one rate in your deck

PATCH/api/v1/routes/{id}/rates/{rateId}

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • rateIdrequired

    path · string

Request body (application/json)

  • destinationName

    string

    max 255 chars
  • ratePerUnit

    string

  • billingIncrement

    string | null

    max 10 chars
  • minDuration

    integer | null

    min 0
  • blocked

    boolean

Response 200

  • datarequired

    object

    Same fields as RouteRate, shown earlier on this page.

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

Delete one rate from your deck

DELETE/api/v1/routes/{id}/rates/{rateId}

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • rateIdrequired

    path · string

Response 200

  • datarequired

    object

  • messagerequired

    string · data.message

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

List scheduled rate changes on your route

GET/api/v1/routes/{id}/rate-changes

Access
API key. Scoped keys need routes:read.
Rate limit
100 requests per second (the default)

With how many buyers are held by each change and how many already accepted it.

Parameters

  • idrequired

    path · string

Response 200

  • datarequired

    object[]

  • idrequired

    string (uuid) · data[].id

  • kindrequired

    string · data[].kind

  • statusrequired

    string · data[].status

  • effectiveDaterequired

    string (date-time) · data[].effectiveDate

    ISO-8601 timestamp (UTC)
  • increasesrequired

    integer · data[].increases

  • decreasesrequired

    integer · data[].decreases

  • addedrequired

    integer · data[].added

  • removedrequired

    integer · data[].removed

  • largestIncreasePctrequired

    number | null · data[].largestIncreasePct

  • sampleOldRaterequired

    money | null · data[].sampleOldRate

    US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point. USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • sampleNewRaterequired

    money | null · data[].sampleNewRate

    US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point. USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • flatOldPricerequired

    money | null · data[].flatOldPrice

    US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point. USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • flatNewPricerequired

    money | null · data[].flatNewPrice

    US dollars as a decimal string with exactly 6 decimal places, e.g. "0.012500". Do money arithmetic with a decimal type, not floating point. USD as a decimal string with exactly 6 places, e.g. "0.012500".
  • createdAtrequired

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

    ISO-8601 timestamp (UTC)
  • notifiedAtrequired

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

    ISO-8601 timestamp (UTC)
  • promotedAtrequired

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

    ISO-8601 timestamp (UTC)
  • cancelledAtrequired

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

    ISO-8601 timestamp (UTC)
  • heldPurchasesrequired

    integer | null · data[].heldPurchases

  • acceptedPurchasesrequired

    integer · data[].acceptedPurchases

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.

Schedule a price change on a one-price route

POST/api/v1/routes/{id}/rate-changes/flat

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

An increase takes effect after the notice period when list-rate buyers are bound; buyers are notified and can accept in advance. Replaces any change already scheduled.

Parameters

  • idrequired

    path · string

Request body (application/json)

  • newPricerequired

    string

  • effectiveDate

    string (date-time) | null

    Omit for the default notice period

Response 201

  • datarequired

    object

  • scheduledrequired

    boolean · data.scheduled

    False when the change applied immediately
  • changeIdrequired

    string (uuid) · data.changeId

  • effectiveDaterequired

    string (date-time) · data.effectiveDate

    ISO-8601 timestamp (UTC)
  • boundBuyersrequired

    integer · data.boundBuyers

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

Withdraw a scheduled rate change

POST/api/v1/routes/{id}/rate-changes/{changeId}/cancel

Access
API key. Scoped keys need routes:write.
Rate limit
100 requests per second (the default)

Parameters

  • idrequired

    path · string

  • changeIdrequired

    path · string

Response 200

  • datarequired

    object

  • cancelledrequired

    boolean · data.cancelled

    One of true

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