API reference
Interconnections
The SIP IP whitelist and connectivity tests for your traffic.
11 operationsBase URL https://packetexchange.io/api/v1Postman collection
BrowseInterconnections
List your whitelisted source IPs
GET/
- Access
- API key. Scoped keys need
account:read. - Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
userIdrequireddata[].userId | string (uuid) | - |
ipAddressrequireddata[].ipAddress | string | IPv4/IPv6 address, optionally with a CIDR suffix |
labelrequireddata[].label | string | null | - |
createdAtrequireddata[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Whitelist a source IP for your traffic
POST/
- Access
- API key. Scoped keys need
account:write. - Rate limit
- 100 requests per second (the default)
An address can authenticate for one account only; an address already registered elsewhere is refused with VALIDATION_ERROR.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
ipAddressrequired | string | -max 49 chars |
label | string | -max 100 chars |
Response 201
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as WhitelistedIp, shown earlier on this page. |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Remove a whitelisted source IP
DELETE/
- Access
- API key. Scoped keys need
account:write. - Rate limit
- 100 requests per second (the default)
Traffic from the address is refused from then on.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
messagerequireddata.message | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
List your interconnections
GET/
- Access
- API key. Scoped keys need
account:read. - Rate limit
- 100 requests per second (the default)
One per purchase, with your credentials, the route (never its seller endpoint) and pricing: what you are actually billed on the route. route.pricePerUnit is the list price only.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
idrequireddata[].id | string (uuid) | - |
purchaseIdrequireddata[].purchaseId | string (uuid) | - |
typerequireddata[].type | string | -One of sip, smpp, api |
buyerEndpointrequireddata[].buyerEndpoint | object | null | Your own connection settings and credentials |
sellerEndpointrequireddata[].sellerEndpoint | enum | null | Always null: the seller endpoint is never shown to buyersOne of null |
statusrequireddata[].status | string | -One of active, inactive |
createdAtrequireddata[].createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
updatedAtrequireddata[].updatedAt | string (date-time) | ISO-8601 timestamp (UTC) |
purchaserequireddata[].purchase | object | null | - |
idrequireddata[].purchase.id | string (uuid) | - |
statusrequireddata[].purchase.status | string | - |
sipUsernamerequireddata[].purchase.sipUsername | string | null | - |
sipPasswordrequireddata[].purchase.sipPassword | string | null | - |
smppSystemIdrequireddata[].purchase.smppSystemId | string | null | - |
smppPasswordrequireddata[].purchase.smppPassword | string | null | - |
routerequireddata[].route | object | null | - |
idrequireddata[].route.id | string (uuid) | - |
typerequireddata[].route.type | string | -One of voice, sms |
countryrequireddata[].route.country | string | null | - |
countryCoderequireddata[].route.countryCode | string | null | - |
prefixrequireddata[].route.prefix | string[] | - |
destinationNamerequireddata[].route.destinationName | string | null | 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. |
listingRefdata[].route.listingRef | string | Anonymous short reference of the listing (4 characters, e.g. "7K2Q"): stable for the life of the listing, unique enough to tell two same-named listings apart, and derived from the listing alone (it says nothing about the seller). Absent on your own listings. |
pricePerUnitrequireddata[].route.pricePerUnit | money | List price only; see pricing for what you pay USD as a decimal string with exactly 6 places, e.g. "0.012500". |
billingIncrementrequireddata[].route.billingIncrement | string | null | - |
jingleSipIprequireddata[].route.jingleSipIp | enum | null | -One of null |
capacityrequireddata[].route.capacity | integer | null | - |
rateCountrequireddata[].route.rateCount | integer | Destinations on the rate deck; > 0 means priced per destination |
pricingrequireddata[].pricing | object | null | Your real rate basis for this route |
basisrequireddata[].pricing.basis | string | -One of flat, per_destination |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get an interconnection
GET/
- Access
- API key. Scoped keys need
account:read. - Rate limit
- 100 requests per second (the default)
In buyerEndpoint the SIP password is replaced by sipPasswordSet (here and on the two PUTs); the list endpoint carries your plaintext credentials for the connection card.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
idrequireddata.id | string (uuid) | - |
purchaseIdrequireddata.purchaseId | string (uuid) | - |
typerequireddata.type | string | -One of sip, smpp, api |
buyerEndpointrequireddata.buyerEndpoint | object | null | Your own connection settings and credentials |
sellerEndpointrequireddata.sellerEndpoint | enum | null | Always null: the seller endpoint is never shown to buyersOne of null |
statusrequireddata.status | string | -One of active, inactive |
createdAtrequireddata.createdAt | string (date-time) | ISO-8601 timestamp (UTC) |
updatedAtrequireddata.updatedAt | string (date-time) | ISO-8601 timestamp (UTC) |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Update an interconnection
PUT/
- Access
- API key. Scoped keys need
account:write. - Rate limit
- 100 requests per second (the default)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
buyerEndpoint | object | - |
status | string | -One of active, inactive |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as Interconnection, shown earlier on this page. |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Set delivery-receipt settings on an SMS interconnection
PUT/
- Access
- API key. Scoped keys need
account:write. - Rate limit
- 100 requests per second (the default)
Stores whether to request delivery receipts and the https callback URL for them.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idrequired | path | string | - |
Request body (application/json)
| Field | Type | Description |
|---|---|---|
requestDlrsrequired | boolean | - |
dlrCallbackUrl | string (uri) | null | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | Same fields as Interconnection, shown earlier on this page. |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Test connectivity on a purchased route
POST/
- Access
- API key. Scoped keys need
account:write. - Rate limit
- 100 requests per second (the default)
- Real traffic
- Sends real test traffic over the purchased route.
sip_options probes reachability from every media worker. test_call places a real billed test call to testNumber; smpp_bind checks an SMS bind. Test calls and binds are capped per purchase per hour and per day.
Request body (application/json)
| Field | Type | Description |
|---|---|---|
purchaseIdrequired | string (uuid) | - |
testType | string | -default "sip_options"One of sip_options, test_call, smpp_bind |
testNumber | string | -max 30 chars |
testCli | string | -max 30 chars |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
statusrequireddata.status | string | Outcome: connected, degraded, failed, no_answer, error or unknown |
messagerequireddata.message | string | - |
detailsrequireddata.details | object | Diagnostic trace. Never carries the seller address. |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get a summary of your interconnect setup
GET/
- Access
- API key. Scoped keys need
account:read. - Rate limit
- 100 requests per second (the default)
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
whitelistedIpsrequireddata.whitelistedIps | integer | - |
activePurchasesrequireddata.activePurchases | integer | - |
activeInterconnectionsrequireddata.activeInterconnections | integer | - |
totalInterconnectionsrequireddata.totalInterconnections | integer | - |
sipPublicIprequireddata.sipPublicIp | string | The edge address to send SIP traffic to |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Get live connection health per purchase
GET/
- Access
- API key. Scoped keys need
account:read. - Rate limit
- 100 requests per second (the default)
SIP purchases report whether the switch is up and the route configured; SMS purchases report their SMPP bind state.
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object[] | - |
purchaseIdrequireddata[].purchaseId | string (uuid) | - |
protocolrequireddata[].protocol | string | -One of sip, smpp |
boundrequireddata[].bound | boolean | - |
boundAtrequireddata[].boundAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
lastMessageAtrequireddata[].lastMessageAt | string (date-time) | null | ISO-8601 timestamp (UTC) |
remoteIprequireddata[].remoteIp | string | null | - |
configureddata[].configured | boolean | - |
reachablerequireddata[].reachable | boolean | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.
Rotate the SIP and SMPP credentials on a purchase
POST/
- Access
- API key. Scoped keys need
account:write. - Rate limit
- 100 requests per second (the default)
Issues new credentials, returned once. The old ones stop working immediately and open SMPP binds are dropped.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
purchaseIdrequired | path | string | - |
Response 200
| Field | Type | Description |
|---|---|---|
datarequired | object | - |
sipUsernamerequireddata.sipUsername | string | - |
sipPasswordrequireddata.sipPassword | string | - |
smppSystemIdrequireddata.smppSystemId | string | - |
smppPasswordrequireddata.smppPassword | string | - |
unboundSessionsrequireddata.unboundSessions | integer | - |
messagerequireddata.message | string | - |
Errors
- 400
VALIDATION_ERROR,INVALID_INPUTorBAD_REQUEST. ForVALIDATION_ERROR,error.detailsis an array of{ path, message }. - 401
UNAUTHORIZED: missing, invalid, expired or revoked credential. - 403
FORBIDDEN: not allowed - a scoped key lacks the scope, or the endpoint is session-only. - 404
NOT_FOUND: no such resource on your account. - 409
CONFLICT(or a code-specific 409): the change clashes with existing state. - 429
RATE_LIMITED: slow down and retry after theRetry-Afterseconds. - 500
INTERNAL_ERROR: unexpected failure. QuoteX-Request-Idto support.