{
  "info": {
    "_postman_id": "5b1e0c4e-7d2a-4c8e-9f3a-70a1c0de5e01",
    "name": "PacketExchange API",
    "description": "The PacketExchange REST API (version 1.2.0), generated from the live OpenAPI document.\n\nSet `apiKey` in the \"PacketExchange (test key)\" environment to a `wmmn_test_sk_` key. Test keys go through routing and pricing without delivering anything or touching your live balance. Create keys in the dashboard under Developers > API keys.\n\nFull reference: https://packetexchange.io/api-docs",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://packetexchange.io/api/v1",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string",
      "description": "Your API key. Set it in an environment, never in a shared collection."
    }
  ],
  "item": [
    {
      "name": "Authentication",
      "description": "Log in, refresh tokens, sessions, email verification and password reset.",
      "item": [
        {
          "name": "Create an account",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@example.com\",\n  \"password\": \"correct-horse-battery-staple\",\n  \"contactName\": \"<contactName>\",\n  \"acceptTerms\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/register",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "register"
              ]
            },
            "description": "Creates the account, emails a verification link and signs you in. `acceptTerms` must be `true`. An invite code, when given, adds test credit once the email is verified. Returns the same session payload as login.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 200 requests per hour.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthRegister"
          },
          "response": []
        },
        {
          "name": "Log in with email and password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@example.com\",\n  \"password\": \"correct-horse-battery-staple\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/login",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "login"
              ]
            },
            "description": "Returns an access token, a refresh token and your profile. When two-factor authentication is on, returns `{ mfaRequired: true, mfaToken }` instead: complete the login with POST /auth/2fa/verify. Repeated failures lock the account temporarily.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 20 requests per 5 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthLogin"
          },
          "response": []
        },
        {
          "name": "Complete a two-factor login",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mfaToken\": \"<mfaToken>\",\n  \"code\": \"482913\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/2fa/verify",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "2fa",
                "verify"
              ]
            },
            "description": "Exchanges the `mfaToken` from login plus an authenticator (or backup) code for a session.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 15 requests per 5 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuth2faVerify"
          },
          "response": []
        },
        {
          "name": "Refresh an access token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"refreshToken\": \"<refreshToken>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/refresh",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "refresh"
              ]
            },
            "description": "Reads the refresh token from the httpOnly cookie, or from the body for non-browser clients. Rotates the refresh token: store the new one. Cross-site browser requests are refused with `CSRF_BLOCKED`; a missing token is `MISSING_TOKEN`.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthRefresh"
          },
          "response": []
        },
        {
          "name": "Log out the current session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/auth/logout",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "logout"
              ]
            },
            "description": "Revokes only this session (other devices stay signed in) and clears the refresh cookie.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthLogout"
          },
          "response": []
        },
        {
          "name": "List your active sessions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/auth/sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "sessions"
              ]
            },
            "description": "Signed-in devices, most recently seen first. `current` marks the one making the request.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#getAuthSessions"
          },
          "response": []
        },
        {
          "name": "Sign out one session",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/auth/sessions/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "sessions",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#deleteAuthSessionsById"
          },
          "response": []
        },
        {
          "name": "Sign out every other session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/auth/sessions/revoke-others",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "sessions",
                "revoke-others"
              ]
            },
            "description": "Keeps the current session. Needs the refresh token (cookie or body) to know which session is current; without it the answer is `NO_SESSION`.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthSessionsRevokeOthers"
          },
          "response": []
        },
        {
          "name": "Verify your email address",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"<token>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/verify-email",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "verify-email"
              ]
            },
            "description": "Consumes the token from the verification email. Any invite-code test credit is added at this point.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthVerifyEmail"
          },
          "response": []
        },
        {
          "name": "Confirm an email address change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"<token>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/confirm-email-change",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "confirm-email-change"
              ]
            },
            "description": "Finishes a change requested with POST /account/email, using the token from the link sent to the NEW address. Public on purpose: the single-use token is the proof, so the link works on any device.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 10 requests per 10 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthConfirmEmailChange"
          },
          "response": []
        },
        {
          "name": "Resend the verification email",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/auth/resend-verification",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "resend-verification"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthResendVerification"
          },
          "response": []
        },
        {
          "name": "Redeem an invite code after sign-up",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"482913\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/invite/redeem",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "invite",
                "redeem"
              ]
            },
            "description": "For social sign-ups, or a code mistyped at registration. `ok: false` carries the reason. When the email is not verified yet, the credit is held (`pending: true`) and added on verification.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Rate limit:** 10 requests per 10 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthInviteRedeem"
          },
          "response": []
        },
        {
          "name": "Resend a verification email by address",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/resend-verification-public",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "resend-verification-public"
              ]
            },
            "description": "For users whose link expired and who cannot sign in. Always answers the same way, whether or not the account exists.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 5 requests per hour.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthResendVerificationPublic"
          },
          "response": []
        },
        {
          "name": "Request a password reset email",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/forgot-password",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "forgot-password"
              ]
            },
            "description": "Always answers the same way, whether or not the account exists.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 5 requests per hour.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthForgotPassword"
          },
          "response": []
        },
        {
          "name": "Reset your password with a reset token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"<token>\",\n  \"newPassword\": \"<newPassword>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/reset-password",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "reset-password"
              ]
            },
            "description": "**Access:** Public: no key needed.\n\n**Rate limit:** 15 requests per hour.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthResetPassword"
          },
          "response": []
        },
        {
          "name": "Change your password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"currentPassword\": \"<currentPassword>\",\n  \"newPassword\": \"<newPassword>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/auth/change-password",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "change-password"
              ]
            },
            "description": "Requires the current password. Signs out every session, including this one once its access token expires, and emails a confirmation.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#postAuthChangePassword"
          },
          "response": []
        },
        {
          "name": "List the social login providers that are enabled",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/oauth/providers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "oauth",
                "providers"
              ]
            },
            "description": "**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#getAuthOauthProviders"
          },
          "response": []
        },
        {
          "name": "Start a social login",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/oauth/:provider/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "oauth",
                ":provider",
                "start"
              ],
              "query": [
                {
                  "key": "next",
                  "value": "",
                  "description": "(Optional) Relative path to open after signing in, e.g. /dashboard",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "provider",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A browser navigation, not an API call. Redirects to the provider; `next` is a same-site path to land on afterwards.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#getAuthOauthByProviderStart"
          },
          "response": []
        },
        {
          "name": "Finish a social login (provider callback)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/auth/oauth/:provider/callback",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "auth",
                "oauth",
                ":provider",
                "callback"
              ],
              "query": [
                {
                  "key": "code",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "state",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "error",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "provider",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Called by the provider after consent. Signs the browser in and redirects into the app, or to /login?oauth_error=... on failure.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/authentication#getAuthOauthByProviderCallback"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Account",
      "description": "Your profile, balance, preferences, team and account-level settings.",
      "item": [
        {
          "name": "Get your account profile",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account"
              ]
            },
            "description": "Profile, balance and account state. Secrets are never included.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccount"
          },
          "response": []
        },
        {
          "name": "Update your account profile",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"companyName\": \"Acme\",\n  \"contactName\": \"<contactName>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account"
              ]
            },
            "description": "Every field is optional; send only what changes. An empty string clears an optional text field. Session only because it can change the payout destination.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#putAccount"
          },
          "response": []
        },
        {
          "name": "Get one headline figure per workspace",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/hub-stats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "hub-stats"
              ]
            },
            "description": "Counts for the post-login hub. A figure that cannot be computed is null, never a guess.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountHubStats"
          },
          "response": []
        },
        {
          "name": "Get which walkthrough steps the account has completed",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/guide-progress",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "guide-progress"
              ]
            },
            "description": "Each key is a step signal derived from real data (a route exists, a call was made), true or false.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountGuideProgress"
          },
          "response": []
        },
        {
          "name": "Request an email address change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"newEmail\": \"you@example.com\",\n  \"currentPassword\": \"<currentPassword>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/email",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "email"
              ]
            },
            "description": "Needs the current password. Sends a confirmation link to the new address; the address changes only when it is confirmed. The old address is told.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountEmail"
          },
          "response": []
        },
        {
          "name": "Confirm an email change from a signed-in session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"<token>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/email/confirm",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "email",
                "confirm"
              ]
            },
            "description": "Same effect as the public POST /auth/confirm-email-change, which is what the emailed link uses.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountEmailConfirm"
          },
          "response": []
        },
        {
          "name": "List recent security activity",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/activity",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "activity"
              ]
            },
            "description": "The latest 50 security events on the account (sign-ins, password and key changes), newest first.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountActivity"
          },
          "response": []
        },
        {
          "name": "Export all your account data",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "export"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "A data-protection export of everything held about the account. JSON by default (served as an attachment); `format=xlsx` returns a workbook with one sheet per dataset.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountExport"
          },
          "response": []
        },
        {
          "name": "Close your account",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"password\": \"correct-horse-battery-staple\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/close",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "close"
              ]
            },
            "description": "Needs the password (and a 2FA code when 2FA is on). Personal data is anonymised; financial records are kept. A balance under the payout minimum can only be closed by opting in to `forfeitBalance` and echoing the exact `forfeitAmountUsd` from GET /account/close/preview.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountClose"
          },
          "response": []
        },
        {
          "name": "Preview what closing the account would take",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/close/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "close",
                "preview"
              ]
            },
            "description": "What is withdrawable, held or would be forfeited, and whether the account can be closed now.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountClosePreview"
          },
          "response": []
        },
        {
          "name": "Save your onboarding goal",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"goal\": \"buyer\",\n  \"dismissed\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/onboarding",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "onboarding"
              ]
            },
            "description": "Records the first-run goal, or marks the welcome wizard seen or dismissed.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountOnboarding"
          },
          "response": []
        },
        {
          "name": "Get your balance and test credit",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/balance",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "balance"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountBalance"
          },
          "response": []
        },
        {
          "name": "Get your Switch plan and trial status",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/switch-subscription",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "switch-subscription"
              ]
            },
            "description": "Works without a Switch plan: this is how an account finds out it has none.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountSwitchSubscription"
          },
          "response": []
        },
        {
          "name": "Start a Switch subscription checkout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"plan\": \"standard\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/switch-subscription/checkout",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "switch-subscription",
                "checkout"
              ]
            },
            "description": "Returns a card checkout `url` to open, and when the first charge falls. Answers `{ alreadyActive: true }` when the account already has the Switch, or `{ alreadySubscribed: true }` when a subscription exists that our record had not caught up with.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\n**Rate limit:** 10 requests per 5 minutes.\n\n**Careful:** Starts a paid Switch subscription checkout.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountSwitchSubscriptionCheckout"
          },
          "response": []
        },
        {
          "name": "Get your Switch free-trial application",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/switch-trial-application",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "switch-trial-application"
              ]
            },
            "description": "Eligibility, the latest application if any, and profile values to prefill the form.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountSwitchTrialApplication"
          },
          "response": []
        },
        {
          "name": "Apply for a Switch free trial",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"companyName\": \"Acme\",\n  \"contactName\": \"<contactName>\",\n  \"desiredPlan\": \"starter\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/switch-trial-application",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "switch-trial-application"
              ]
            },
            "description": "Our team reviews every application by hand. Refused with CONFLICT when the account already has the Switch or an application is pending.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\n**Rate limit:** 5 requests per 10 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountSwitchTrialApplication"
          },
          "response": []
        },
        {
          "name": "Open the Switch billing portal",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/switch-subscription/portal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "switch-subscription",
                "portal"
              ]
            },
            "description": "Returns a URL where the card, cancellation and invoices of the Switch subscription are managed.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\n**Rate limit:** 10 requests per 5 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountSwitchSubscriptionPortal"
          },
          "response": []
        },
        {
          "name": "Start two-factor authentication setup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/2fa/setup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "2fa",
                "setup"
              ]
            },
            "description": "Generates a pending secret and an otpauth:// URI for an authenticator app. Nothing changes until POST /account/2fa/enable confirms a code.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccount2faSetup"
          },
          "response": []
        },
        {
          "name": "Turn on two-factor authentication",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"482913\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/2fa/enable",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "2fa",
                "enable"
              ]
            },
            "description": "Confirms a code from the authenticator and returns one-time backup codes, shown only this once.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccount2faEnable"
          },
          "response": []
        },
        {
          "name": "Turn off two-factor authentication",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"482913\",\n  \"password\": \"correct-horse-battery-staple\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/2fa/disable",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "2fa",
                "disable"
              ]
            },
            "description": "**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccount2faDisable"
          },
          "response": []
        },
        {
          "name": "Get your spend alert settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/alerts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "alerts"
              ]
            },
            "description": "Defaults (no thresholds, email on) when nothing has been saved.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountAlerts"
          },
          "response": []
        },
        {
          "name": "Update your spend alert settings",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"lowBalanceThreshold\": 1,\n  \"dailySpendCap\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/alerts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "alerts"
              ]
            },
            "description": "Send at least one field. Thresholds are USD amounts; null removes one.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/account#putAccountAlerts"
          },
          "response": []
        },
        {
          "name": "List your saved marketplace searches",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/saved-searches",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "saved-searches"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountSavedSearches"
          },
          "response": []
        },
        {
          "name": "Save a marketplace search",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"filters\": {}\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/saved-searches",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "saved-searches"
              ]
            },
            "description": "Up to 50 per account; the 51st is refused with CONFLICT.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountSavedSearches"
          },
          "response": []
        },
        {
          "name": "Delete a saved search",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/saved-searches/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "saved-searches",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/account#deleteAccountSavedSearchesById"
          },
          "response": []
        },
        {
          "name": "List your favorite routes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/favorites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "favorites"
              ]
            },
            "description": "Only routes you can still see (public and active, your own, or privately granted).\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountFavorites"
          },
          "response": []
        },
        {
          "name": "Add a route to your favorites",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/favorites",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "favorites"
              ]
            },
            "description": "Idempotent: favoriting twice is not an error.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountFavorites"
          },
          "response": []
        },
        {
          "name": "Remove a route from your favorites",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/favorites/:routeId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "favorites",
                ":routeId"
              ],
              "variable": [
                {
                  "key": "routeId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Idempotent: removing a route that is not a favorite is not an error.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/account#deleteAccountFavoritesByRouteId"
          },
          "response": []
        },
        {
          "name": "List your dedicated IP addresses",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/ips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "ips"
              ]
            },
            "description": "Empty, with `enabled: false`, while dedicated IPs are not offered.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountIps"
          },
          "response": []
        },
        {
          "name": "Get your SIP interconnect details",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/ips/interconnect",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "ips",
                "interconnect"
              ]
            },
            "description": "Everything needed to connect: where to send traffic, which addresses our calls leave from, and what is already authorised.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountIpsInterconnect"
          },
          "response": []
        },
        {
          "name": "Get your connectivity brief",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/ips/connectivity",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "ips",
                "connectivity"
              ]
            },
            "description": "Where to send traffic, what to whitelist and how you are recognised, including per-purchase destinations, in plain language.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/account#getAccountIpsConnectivity"
          },
          "response": []
        },
        {
          "name": "Take a dedicated ingress IP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/ips/activate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "ips",
                "activate"
              ]
            },
            "description": "Idempotent: when you already hold one it is returned with `created: false` and nothing is charged. Answers 201 when a new address was assigned.\n\n**Access:** API key. Scoped keys need `account:write`.\n\n**Careful:** Takes a dedicated IP address.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountIpsActivate"
          },
          "response": []
        },
        {
          "name": "Take a dedicated egress IP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/ips/activate-egress",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "ips",
                "activate-egress"
              ]
            },
            "description": "Idempotent like the ingress version. Refused with VALIDATION_ERROR while dedicated sending addresses are not available.\n\n**Access:** API key. Scoped keys need `account:write`.\n\n**Careful:** Takes a dedicated IP address.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountIpsActivateEgress"
          },
          "response": []
        },
        {
          "name": "Release a dedicated IP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/ips/:id/release",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "ips",
                ":id",
                "release"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Hands the address back to the pool. `id` is the assignment id or IP id from the list.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/account#postAccountIpsByIdRelease"
          },
          "response": []
        }
      ]
    },
    {
      "name": "API keys",
      "description": "Create, scope and revoke API keys. Dashboard session only: a key can never mint or list keys.",
      "item": [
        {
          "name": "List your API keys",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "api-keys"
              ]
            },
            "description": "Active (non-revoked) keys with their prefix, scopes and last use. Never includes a secret.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/api-keys#getAccountApiKeys"
          },
          "response": []
        },
        {
          "name": "Create an API key",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "api-keys"
              ]
            },
            "description": "Returns the full key ONCE in `key`. Omit `scopes` for a full-access key; a scoped key can reach only the operations whose scope it holds. Scopes can be narrowed later but never broadened, so include everything the integration needs. A security email is sent to the account owner.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/api-keys#postAccountApiKeys"
          },
          "response": []
        },
        {
          "name": "Rename an API key or narrow its scopes",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\",\n  \"scopes\": [\n    \"voice:send\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/api-keys/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "api-keys",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Scopes may only be tightened: any scope not already on the key is rejected with VALIDATION_ERROR.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/api-keys#patchAccountApiKeysById"
          },
          "response": []
        },
        {
          "name": "Revoke an API key",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/api-keys/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "api-keys",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Takes effect immediately; requests with the key then get 401.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/api-keys#deleteAccountApiKeysById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "API usage",
      "description": "Request volume, error rate and latency for your own API traffic.",
      "item": [
        {
          "name": "Get API usage for your account or one key",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/api-usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "api-usage"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "",
                  "description": "(Optional) Trailing window in days (1-90)",
                  "disabled": true
                },
                {
                  "key": "keyId",
                  "value": "",
                  "description": "(Optional) Only requests made with this API key (one of yours)",
                  "disabled": true
                }
              ]
            },
            "description": "Request volume, error rate, p95 latency, per-day counts and top endpoints over a trailing window (default 7 days, max 90). Pass `keyId` to see one API key; omit it for all traffic including dashboard sessions.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/api-usage#getAccountApiUsage"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "Endpoints we POST signed events to, their delivery history and resends.",
      "item": [
        {
          "name": "List your webhook endpoints",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks"
              ]
            },
            "description": "Secrets are redacted to their last 4 characters.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#getAccountWebhooks"
          },
          "response": []
        },
        {
          "name": "Create a webhook endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/webhooks/packetexchange\",\n  \"events\": [\n    \"call.completed\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks"
              ]
            },
            "description": "The signing secret is returned ONCE in `secret`. URLs must be https and resolve to a public address. Works from a dashboard session, or with an API key that was created with the `webhooks:write` permission. A full-access key does not include `webhooks:write`: it has to be chosen explicitly, so keys issued before this permission existed cannot manage endpoints.\n\nEach delivery is a POST of `{ event, data, timestamp }` with headers `X-Webhook-Event`, `X-Webhook-Id` (the delivery id), `X-PX-Timestamp` (Unix seconds at send time) and two signatures: `X-PX-Signature: v1=<hex HMAC-SHA256 of \"<timestamp>.<raw body>\">` (verify this one, and reject timestamps more than 5 minutes old to stop replays) and the legacy `X-Webhook-Signature: sha256=<hex HMAC-SHA256 of the raw body>`, kept during the transition.\n\n**Access:** API key. Scoped keys need `webhooks:write`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#postAccountWebhooks"
          },
          "response": []
        },
        {
          "name": "Update a webhook endpoint",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/webhooks/packetexchange\",\n  \"events\": [\n    \"call.completed\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Change the URL, the subscribed events or `isActive`. The signing secret and delivery history are kept. Works from a dashboard session, or with an API key that was created with the `webhooks:write` permission. A full-access key does not include `webhooks:write`: it has to be chosen explicitly, so keys issued before this permission existed cannot manage endpoints.\n\n**Access:** API key. Scoped keys need `webhooks:write`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#patchAccountWebhooksById"
          },
          "response": []
        },
        {
          "name": "Delete a webhook endpoint",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Removes the endpoint, its secret and its delivery history. Events stop immediately. Works from a dashboard session, or with an API key that was created with the `webhooks:write` permission. A full-access key does not include `webhooks:write`: it has to be chosen explicitly, so keys issued before this permission existed cannot manage endpoints.\n\n**Access:** API key. Scoped keys need `webhooks:write`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#deleteAccountWebhooksById"
          },
          "response": []
        },
        {
          "name": "Rotate a webhook signing secret",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/:id/rotate-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                ":id",
                "rotate-secret"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Issues a new secret, returned once. Deliveries are signed with it from this moment (including pending retries); there is no overlap window, so update your receiver at the same time. Works from a dashboard session, or with an API key that was created with the `webhooks:write` permission. A full-access key does not include `webhooks:write`: it has to be chosen explicitly, so keys issued before this permission existed cannot manage endpoints.\n\n**Access:** API key. Scoped keys need `webhooks:write`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#postAccountWebhooksByIdRotateSecret"
          },
          "response": []
        },
        {
          "name": "Send a test ping to a webhook endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/:id/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                ":id",
                "test"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Queues a `ping` delivery, signed like any other, usually delivered within 15 seconds.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#postAccountWebhooksByIdTest"
          },
          "response": []
        },
        {
          "name": "List deliveries for one webhook endpoint",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/:id/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                ":id",
                "deliveries"
              ],
              "query": [
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional) The `nextCursor` from the previous page",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#getAccountWebhooksByIdDeliveries"
          },
          "response": []
        },
        {
          "name": "List webhook deliveries across all your endpoints",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                "deliveries"
              ],
              "query": [
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional) The `nextCursor` from the previous page",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "webhookId",
                  "value": "",
                  "description": "(Optional) Only deliveries to this endpoint",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "event",
                  "value": "",
                  "description": "(Optional) Only this event name, e.g. call.completed",
                  "disabled": true
                }
              ]
            },
            "description": "Newest first. Filter by endpoint, status or event. Includes the endpoint URL on each row.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#getAccountWebhooksDeliveries"
          },
          "response": []
        },
        {
          "name": "Get one webhook delivery, with its payload",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/deliveries/:deliveryId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                "deliveries",
                ":deliveryId"
              ],
              "variable": [
                {
                  "key": "deliveryId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#getAccountWebhooksDeliveriesByDeliveryId"
          },
          "response": []
        },
        {
          "name": "Resend a webhook delivery",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/account/webhooks/deliveries/:deliveryId/resend",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "account",
                "webhooks",
                "deliveries",
                ":deliveryId",
                "resend"
              ],
              "variable": [
                {
                  "key": "deliveryId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Queues a NEW delivery with the same event and payload to the same endpoint, signed with a fresh timestamp. The original delivery is left as it was, so the history shows both. The new delivery has its own id (X-Webhook-Id); the payload is byte-identical, so de-duplicate on your own event data if you need exactly-once processing. The endpoint must be active.\n\n**Access:** API key. Scoped keys need `account:write`.\n\n**Rate limit:** 30 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/webhooks#postAccountWebhooksDeliveriesByDeliveryIdResend"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Marketplace routes",
      "description": "Browse, resolve, list and manage voice and SMS termination routes.",
      "item": [
        {
          "name": "Browse the route marketplace",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cliType",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "routeType",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minPrice",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "maxPrice",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minAsr",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minAcd",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "maxPdd",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minScore",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minCapacity",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "billing",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "wholesale",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "callcenter",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "retail",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "otp",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "openRtp",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "dialer",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "a2p",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "bundlesOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Public. Every row is anonymous: no seller name, id or endpoint. Signed-in callers get the full `stats` block; anonymous callers get counts only. Money fields are 6-decimal USD strings. Each row carries `measured` (ASR, ACD, NER and PDD measured from real calls, or null) beside the seller-stated `expectedAsr`/`expectedAcd`/`expectedPdd`; anonymous callers get the attempt count as a band and no buyer count. Sort by measured quality with `sort=measured_asr_desc|measured_asr_asc|measured_acd_desc|measured_acd_asc|ner_desc|ner_asc`, or `quality_desc` (measured NER then ASR where measured, else stated ASR): listings with measured figures come first.\n\n**Access:** Key optional: a key personalises the answer.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutes"
          },
          "response": []
        },
        {
          "name": "List a new route for sale",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"voice\",\n  \"country\": \"United Kingdom\",\n  \"countryCode\": \"GB\",\n  \"prefix\": [\n    \"44\"\n  ],\n  \"destinationName\": \"<destinationName>\",\n  \"pricePerUnit\": \"<pricePerUnit>\",\n  \"cliType\": \"full_cli\",\n  \"capacity\": 1,\n  \"billingIncrement\": \"<billingIncrement>\",\n  \"routeType\": \"direct\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 30 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutes"
          },
          "response": []
        },
        {
          "name": "Get marketplace totals for a filter",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/stats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "stats"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "country",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cliType",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "routeType",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minPrice",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "maxPrice",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minAsr",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minAcd",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "maxPdd",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minScore",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minCapacity",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "billing",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "wholesale",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "callcenter",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "retail",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "otp",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "openRtp",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "dialer",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "a2p",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "bundlesOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Same filters as the listing. Anonymous callers get counts only; price, ASR, score and capacity figures need a signed-in caller.\n\n**Access:** Key optional: a key personalises the answer.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesStats"
          },
          "response": []
        },
        {
          "name": "Price a phone number across the marketplace",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/price-number?number=%2B447700900123",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "price-number"
              ],
              "query": [
                {
                  "key": "number",
                  "value": "+447700900123",
                  "description": "(Required) A full number or dial code, any formatting"
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Every buyer-visible route that serves the number, at the rate it would actually charge for it, cheapest first. A route with a rate sheet is priced by its longest matching active prefix (if that row is blocked the route does not serve the number); a single-price route serves it when a listed prefix, or failing that its country code, starts the number. This is the public list price: negotiated prices and private grants are not applied. SMS prices are by destination network on routes that price a country per mobile network: `network` says which network `rate` is for and `countryRate` 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). The number is normalised to digits (a leading 00 is dropped). At most 100 routes are returned; `total` counts all of them. An embargoed destination returns no routes and `notice: \"sanctioned\"`. Seller identities are never included.\n\n**Access:** Key optional: a key personalises the answer.\n\n**Rate limit:** 30 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesPriceNumber"
          },
          "response": []
        },
        {
          "name": "List destinations on the marketplace",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/routes/countries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "countries"
              ]
            },
            "description": "Every country with at least one live public route, with its route count, A to Z.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesCountries"
          },
          "response": []
        },
        {
          "name": "Get a route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Public for live public routes. The seller gets the full owner view; a granted buyer sees a private route; any other signed-in caller gets an access stub for a private route. Carries `measured` (quality measured from real calls, or null) and `routeChecks` (the last 7 days of route checks, or null).\n\n**Access:** Key optional: a key personalises the answer.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesById"
          },
          "response": []
        },
        {
          "name": "Update a route you listed",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"voice\",\n  \"country\": \"United Kingdom\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The price of an ACTIVE route cannot change in place (400 VALIDATION_ERROR): schedule the change with POST /routes/{id}/rate-changes/flat, or pause the route first. On a paused route a price increase pauses buyers who pay the list rate until they accept it (see POST /purchases/{id}/accept-rate).\n\n**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#putRoutesById"
          },
          "response": []
        },
        {
          "name": "Delete a route you listed",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Restorable for `restoreWindowDays` via POST /routes/{id}/restore.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#deleteRoutesById"
          },
          "response": []
        },
        {
          "name": "Draft a listing from a rate sheet",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "note",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/routes/autopilot/draft",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "autopilot",
                "draft"
              ]
            },
            "description": "Upload a CSV or Excel sheet (multipart field `file`, optional `note`). Returns a proposed listing and the questions a sheet cannot answer. Writes nothing.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesAutopilotDraft"
          },
          "response": []
        },
        {
          "name": "Test an endpoint before listing a route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"voice\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/probe-endpoint",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "probe-endpoint"
              ]
            },
            "description": "Sends a real SIP probe (voice), SMPP bind (SMS over SMPP) or URL check (SMS over HTTP) to the details you enter. Nothing is stored.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesProbeEndpoint"
          },
          "response": []
        },
        {
          "name": "List your call-centre routes and their call screening",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/callguard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "callguard"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesCallguard"
          },
          "response": []
        },
        {
          "name": "Get call screening settings, stats and flagged calls",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/screening",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "screening"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesByIdScreening"
          },
          "response": []
        },
        {
          "name": "Turn call screening on or off for a route",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/screening",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "screening"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Only for call-centre voice routes. Turning it on records your recording consent.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#patchRoutesByIdScreening"
          },
          "response": []
        },
        {
          "name": "Classify a sample transcript with call screening",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transcript\": \"<transcript>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/screening/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "screening",
                "test"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesByIdScreeningTest"
          },
          "response": []
        },
        {
          "name": "List your saved listing presets",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/listing-presets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "listing-presets"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesListingPresets"
          },
          "response": []
        },
        {
          "name": "Save a listing preset",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"values\": {}\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/listing-presets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "listing-presets"
              ]
            },
            "description": "Upserts by name; keeps your 12 most recent presets.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#putRoutesListingPresets"
          },
          "response": []
        },
        {
          "name": "Delete a listing preset",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/listing-presets/:name",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "listing-presets",
                ":name"
              ],
              "variable": [
                {
                  "key": "name",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#deleteRoutesListingPresetsByName"
          },
          "response": []
        },
        {
          "name": "Preview the listings publishing a deck will create",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/split-preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "split-preview"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesByIdSplitPreview"
          },
          "response": []
        },
        {
          "name": "List your recently deleted routes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/deleted",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "deleted"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesDeleted"
          },
          "response": []
        },
        {
          "name": "Restore a deleted route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/restore",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "restore"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The route comes back paused and private; publish it again when ready.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesByIdRestore"
          },
          "response": []
        },
        {
          "name": "List your saved SIP endpoints",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/my-endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my-endpoints"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesMyEndpoints"
          },
          "response": []
        },
        {
          "name": "Save a SIP endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ip\": \"203.0.113.10\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/my-endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my-endpoints"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesMyEndpoints"
          },
          "response": []
        },
        {
          "name": "Label a saved SIP endpoint",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/my-endpoints/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my-endpoints",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Sets the label shown next to the IP in \"My IPs\" and in the SIP endpoint pickers, so a seller with several switches can tell them apart. The label is trimmed, control and bidirectional-override characters are removed, and it is cut to 60 characters; an empty string or null clears it. Only saved endpoints (those with an `id` in GET /routes/my-endpoints) can be labelled; an unknown id, or someone else's, answers 404.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 60 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#patchRoutesMyEndpointsById"
          },
          "response": []
        },
        {
          "name": "Remove a saved SIP endpoint",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/my-endpoints/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my-endpoints",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#deleteRoutesMyEndpointsById"
          },
          "response": []
        },
        {
          "name": "Preview which route would carry a destination",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/resolve?to=%2B447700900123",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "resolve"
              ],
              "query": [
                {
                  "key": "to",
                  "value": "+447700900123",
                  "description": "(Required) Destination number or prefix"
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "strategy",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Resolves as your account (including private routes you bought). `price` is a 6-decimal USD string.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesResolve"
          },
          "response": []
        },
        {
          "name": "Test connectivity to your route endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "test"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Sends a real SIP probe to the route endpoint from every one of our media addresses.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Careful:** Places a real test call over the route.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesByIdTest"
          },
          "response": []
        },
        {
          "name": "Capture a SIP trace of a test call on a route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"number\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/sip-trace",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "sip-trace"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "For the seller or an active buyer. Optionally dials a real `number`. Buyers receive the trace with seller addresses masked.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Rate limit:** 10 requests per minute.\n\n**Careful:** Places a real test call over the route.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesByIdSipTrace"
          },
          "response": []
        },
        {
          "name": "Get a route's price history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/price-history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "price-history"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "For the seller and buyers of the route. Newest first.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesByIdPriceHistory"
          },
          "response": []
        },
        {
          "name": "Get traffic and revenue stats for your route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/stats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "stats"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesByIdStats"
          },
          "response": []
        },
        {
          "name": "List the routes you sell",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/my/list",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my",
                "list"
              ],
              "query": [
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Cursor mode: default 25, max 100. Paged mode: default 50, max 200.",
                  "disabled": true
                },
                {
                  "key": "includeChildren",
                  "value": "",
                  "description": "(Optional) Include the per-country children of A-Z decks",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "visibility",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "live",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "hiddenReason",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "scope",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "endpoint",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "deck",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "dir",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Two modes. Cursor mode (only `cursor`, `limit`, `includeChildren`): newest first, A-Z deck children hidden unless `includeChildren=true`. Paged mode (any of `offset`, `search`, `type`, `status`, `visibility`, `live`, `hiddenReason`, `scope`, `endpoint`, `deck`, `sort`, `dir`): up to 200 rows a page, with `total`, and each row carries `origin` (its endpoint, your label for it, and the deck and rate sheet it came from). `scope=listings` lists every row a buyer could see as a listing (single routes and deck children); `hiddenReason` lists exactly the routes counted under that reason by GET /routes/my/listing-health. `search` matches the route name, country, endpoint IP or host, your IP label, the deck name and a route id prefix; a number such as `+44` is a dial code (country code or coverage prefix). `endpoint` and `deck` take a group `key` from GET /routes/my/groups.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesMyList"
          },
          "response": []
        },
        {
          "name": "Count your SMS routes hidden for lack of an endpoint",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/sms-endpoint-gap",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "sms-endpoint-gap"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesSmsEndpointGap"
          },
          "response": []
        },
        {
          "name": "Set one delivery endpoint on all your endpoint-less SMS routes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"method\": \"http\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/sms-endpoint/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "sms-endpoint",
                "bulk"
              ]
            },
            "description": "An SMPP method runs a real bind first; if it fails nothing changes and `error.details` carries the reason and the addresses to whitelist.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 6 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesSmsEndpointBulk"
          },
          "response": []
        },
        {
          "name": "Count your listed routes that are live, and why the rest are hidden",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/my/listing-health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my",
                "listing-health"
              ]
            },
            "description": "Answers \"why does my route count differ from the marketplace?\". `listed` counts your active, public routes (A-Z deck parents excluded); `live` counts the ones buyers can see, using the marketplace's own filters, so the two numbers cannot disagree with the board. Each reason carries a count, a label and the fix. The routes behind `sms_no_delivery` and `voice_no_endpoint` can be listed with GET /routes/my/list?hiddenReason=<key> and fixed in one call with POST /routes/my/bulk-sms-delivery or /routes/my/bulk-sip-endpoint.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesMyListingHealth"
          },
          "response": []
        },
        {
          "name": "Set one SMS delivery method on many of your SMS routes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"delivery\": {\n    \"smsDeliveryMethod\": \"http\",\n    \"smsDeliveryUrl\": \"https://example.com/webhooks/packetexchange\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/my/bulk-sms-delivery",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my",
                "bulk-sms-delivery"
              ]
            },
            "description": "Applies one delivery method (SMPP or HTTP) to a selection of your SMS routes: an explicit `routeIds` list, or every route matching `filter` (at most 5,000). Only your own live routes are touched; each route that is not eligible is returned in `skipped` with a reason. Send `dryRun: true` first to see how many would change: nothing is probed or written. On a real run the endpoint is checked ONCE for the whole batch: SMPP gets a real bind (no message is sent) and HTTP gets a URL check. If the bind is refused NO route is changed and the call answers 400 VALIDATION_ERROR with `error.details` = `{ kind: \"smpp_bind_failed\", host, port, systemId, bindType, reason, whitelistIps, failoverIps }`: `whitelistIps` is the one SMS source address your SMSC must allow (every bind and message leaves from it); `failoverIps` are used only while that address is down, so allowing them is optional. A field that fails validation answers 400 with one `{ path, message }` per field. All routes change in one transaction.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesMyBulkSmsDelivery"
          },
          "response": []
        },
        {
          "name": "Set one SIP endpoint on many of your voice routes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"delivery\": {\n    \"jingleSipIp\": \"<jingleSipIp>\",\n    \"sipPort\": 1\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/my/bulk-sip-endpoint",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my",
                "bulk-sip-endpoint"
              ]
            },
            "description": "Applies one SIP endpoint (IP or host, port, technical prefix and optional digest credentials) to a selection of your voice routes: an explicit `routeIds` list, or every route matching `filter` (at most 5,000). Only your own live routes are touched; routes that are not eligible, or that would duplicate another of your listings on the same IP and tech prefix (same country and prefixes), are returned in `skipped`. Send `dryRun: true` first to see how many would change. An invalid, private or reserved address, or one of our own addresses, is refused outright (400, on `jingleSipIp`). Otherwise one SIP probe is sent to the endpoint; if it gets no answer the call answers 400 VALIDATION_ERROR with `error.details` = `{ kind: \"sip_probe_failed\", message, checks }` and nothing changes. Repeat with `confirmUnreachable: true` to apply anyway (a single-route edit never probes, so bulk is never stricter). The IP is also added to your saved endpoints. All routes change in one transaction.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postRoutesMyBulkSipEndpoint"
          },
          "response": []
        },
        {
          "name": "Group the routes you sell by endpoint or by A-Z deck",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/my/groups?by=endpoint",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my",
                "groups"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "visibility",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "live",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "hiddenReason",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "scope",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "endpoint",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "deck",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "by",
                  "value": "endpoint",
                  "description": "(Required)"
                }
              ]
            },
            "description": "Your routes matching the same filters as GET /routes/my/list (paged mode), grouped by `by=endpoint` (the SIP IP, SMSC host or delivery URL host, with your label for the IP) or `by=deck` (the A-Z deck a route was split out of, with the rate sheet behind it). Each group has total, live and hidden counts. List a group's routes with GET /routes/my/list?endpoint=<key> or ?deck=<key>; the bulk actions accept the same keys in `filter`. Only your own routes are counted.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesMyGroups"
          },
          "response": []
        },
        {
          "name": "Check whether your switches are refusing our calls",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/my/endpoint-status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "my",
                "endpoint-status"
              ]
            },
            "description": "One entry per SIP endpoint (IP or host) used by your active voice routes. `refusing` is true when we have evidence your switch is turning our calls away: calls we sent it in the last 6 hours answered with SIP 401, 403 or 407 (at least 3 of them, and at least half of the calls that got an answer), or our own test call to it was barred or refused from some of our addresses (`partial`, with the refused addresses in `refusedIps` when known). `evidence` is that finding in one sentence, `routeId` is a route on the endpoint you can test from, and `since` is when the current incident was first seen. `allow` lists the addresses to allow on your switch: every one of `egressIps`, for SIP on `sipPort` (UDP and TCP) and RTP media on the UDP `rtpPortRange`, the same values GET /sip/network-info publishes. Only your own endpoints and your own calls are counted.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesMyEndpointStatus"
          },
          "response": []
        },
        {
          "name": "List the buyers of your route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/buyers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "buyers"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Owner only: anyone other than the route's seller gets 403 FORBIDDEN. One row per buyer, identified only by a pseudonym scoped to this route (the same \"Buyer #3F2A\" that appears on offers for the route), so it cannot be matched to an account or across your other routes. No account id, name, company, email, IP or dialled number is returned. Figures cover the last 30 days; for an A-Z deck they include its per-country listings. `status` is the buyer's current relationship (ended = cancelled; ended buyers with no traffic in the window are left out). `asr30d` and `calls30d` are voice only, counted per call attempt group, and null until a call has been measured. Sorted by revenue.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesByIdBuyers"
          },
          "response": []
        },
        {
          "name": "Show the billing increments your rate sheet sets",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-increments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-increments"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Owner only: anyone other than the route's seller gets 403 FORBIDDEN. Groups the route's active rate rows by billing increment (e.g. 1/1 on some destinations, 60/60 on others). Rows with a null increment inherit `fallback`, the route-level increment.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getRoutesByIdRateIncrements"
          },
          "response": []
        },
        {
          "name": "Read a rate sheet into a draft listing (no account needed)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "note",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/public/listings/parse",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "listings",
                "parse"
              ]
            },
            "description": "Multipart upload (field `file`, optional `note`). Returns the proposed listing and parsed rates; stores nothing.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 6 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postPublicListingsParse"
          },
          "response": []
        },
        {
          "name": "Save a draft listing to claim after sign-up",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"payload\": \"<payload>\",\n  \"rates\": [\n    {\n      \"prefix\": \"44\",\n      \"ratePerUnit\": \"<ratePerUnit>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/public/listings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "listings"
              ]
            },
            "description": "Returns a token; the listing is created only when a signed-in account claims it.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 10 requests per 10 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postPublicListings"
          },
          "response": []
        },
        {
          "name": "Look at a saved draft listing",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/public/listings/:token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "listings",
                ":token"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** Public: no key needed.\n\n**Rate limit:** 30 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#getPublicListingsByToken"
          },
          "response": []
        },
        {
          "name": "Create a route from a saved draft listing",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/listings/:token/claim",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "listings",
                ":token",
                "claim"
              ],
              "variable": [
                {
                  "key": "token",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Idempotent per token: claiming twice returns the route already created.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/marketplace-routes#postListingsByTokenClaim"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Route checks",
      "description": "Check up to three routes with a short real call before you buy them, then buy the ones that passed with the routing order set.",
      "item": [
        {
          "name": "Check up to three routes before buying",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeIds\": [\n    \"<routeId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/check",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "check"
              ]
            },
            "description": "Places one short real call over each route (1 to 3, in your order: the first is your primary, the rest backups) and reports whether it works. Returns `202` with a `checkId` at once; poll GET /routes/check/{checkId}.\n\n- **network** (default): the call goes to a public line that answers by itself (a speaking clock or information line) in the destination, chosen from the ones the route's rates cover and, where we have one, of the same line type as `number` (mobile or fixed). The call is answered, held about two seconds and ended. Where no such line exists yet for a destination, a lighter check runs instead: it confirms only that the route accepts calls, places no call to anyone, and says so (`accepts`).\n- **ring_me**: the route calls `number`, which must be your own phone in a country the route serves. Ringing counts as working. Satellite and premium-rate ranges are refused; one number can be rung by checks 3 times an hour, and an account can ring 3 different numbers a day (`429`).\n\n`number` (network mode) narrows the check to a destination: a dial code (`92`) or a full number (`+923001234567`); for an A-Z rate sheet pass it, or the route's own country is used.\n\nBilling: each connected leg is charged at the route's rate (your own effective rate for that number) for the billable seconds, plus the normal platform fee, from your test credit first and then your balance (`paidFrom` says which). Unanswered legs and suspected false answers cost nothing; a check of your own listing is free. A funded balance is required (`400` otherwise). Limits: 10 checks a minute and 60 an hour per account (`429`); when the limiter cannot be reached checks pause (`503`) rather than run unlimited. Send `X-Idempotency-Key` to make a retry safe: the retry returns the first check instead of placing a second. Blended routes cannot be checked yet (`400`). A test key returns a simulated result immediately: no call, no charge.\n\nYou may check routes you have not bought. Private routes need an access grant.\n\n**Access:** API key. Scoped keys need `voice:send`.\n\nReference: https://packetexchange.io/api-docs/reference/route-checks#postRoutesCheck"
          },
          "response": []
        },
        {
          "name": "Send a test SMS over an SMS route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\",\n  \"number\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/check/sms",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "check",
                "sms"
              ]
            },
            "description": "Sends ONE short fixed message over exactly this SMS listing (never Smart Routing) to your own mobile, by the same transport a real message uses, and reports what happened. Returns `202` with a `checkId` at once; poll GET /routes/check/{checkId} (the test is its only route). The text is fixed and so is the sender: \"PacketExchange test message: this route delivered to your phone. Ref K7QD\", from a platform sender chosen by the route's sender rules (numeric on a route that carries numeric senders only).\n\nResults: `accepted` (the route took it; no carrier receipt yet), `delivered` (a carrier receipt confirmed it) or `refused` (the route refused it, or the receipt said it failed; `errorCode` says which). Receipts usually arrive within a minute; on a route that returns none the test stays `accepted`, and `routeReturnsReceipts` says whether the route has returned any lately. A later receipt updates the test, so it also appears in GET /routes/checks.\n\n`number` must be a mobile in international format that the route covers (by its rate sheet or its prefixes, longest prefix first); a number it does not cover is refused (`400`), as are premium-rate, satellite, special-service and short-code ranges, embargoed destinations and numbers on your Do-Not-Contact list.\n\nBilling: the route's normal price for one message for that number (your own effective rate), plus the normal platform fee, from your test credit first and then your balance (`paidFrom`). A message the route refuses is not charged, and one whose receipt says it failed is refunded. Testing your own listing is free. Limits: 3 test messages to one number an hour (across all accounts), 5 different numbers and 20 test messages per account a day (`429`); when the limiter cannot be reached tests pause (`503`). Send `X-Idempotency-Key` to make a retry safe. A test key returns a simulated result at once: nothing is sent and nothing is charged.\n\nTest messages never count in SMS volume, revenue or quality figures. A buyer's delivered test counts as working and a refused one as a failure on the listing's check health, which the seller sees without learning who ran it.\n\n**Access:** API key. Scoped keys need `sms:send`.\n\nReference: https://packetexchange.io/api-docs/reference/route-checks#postRoutesCheckSms"
          },
          "response": []
        },
        {
          "name": "Is there a test line for these routes?",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/check/coverage?routeIds=%3CrouteIds%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "check",
                "coverage"
              ],
              "query": [
                {
                  "key": "routeIds",
                  "value": "<routeIds>",
                  "description": "(Required) Comma-separated route ids (1 to 3)"
                },
                {
                  "key": "number",
                  "value": "",
                  "description": "(Optional) Optional dial code or number, to ask about one destination of an A-Z rate sheet",
                  "disabled": true
                }
              ]
            },
            "description": "For each route (1 to 3), whether we have a registered public test line for its destination (or for `number`'s destination on an A-Z rate sheet). When there is none, check the route with `mode: ring_me` and your own number. Says yes or no only.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/route-checks#getRoutesCheckCoverage"
          },
          "response": []
        },
        {
          "name": "Get a route check's results",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/check/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "check",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Per-route verdicts, in your order. `message` is the sentence to show a person. Routes are named without seller details.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/route-checks#getRoutesCheckById"
          },
          "response": []
        },
        {
          "name": "List your recent route checks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/checks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "checks"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/route-checks#getRoutesChecks"
          },
          "response": []
        },
        {
          "name": "Buy the routes that passed a check and set the routing order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/check/:id/purchase",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "check",
                ":id",
                "purchase"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Buys every route in the check that came back working, in your order, and puts them at the top of your routing order: the first is the primary, the rest its backups (your other ranked routes keep their relative order below them). Routes you already bought are reused. A route that cannot be bought (for example email not verified, a private route, or a US route that needs compliance review) is reported in `purchases[].error` and does not stop the others. Needs a live key.\n\n**Access:** API key. Scoped keys need `purchases:write`.\n\nReference: https://packetexchange.io/api-docs/reference/route-checks#postRoutesCheckByIdPurchase"
          },
          "response": []
        },
        {
          "name": "Check health of a route you sell",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/check-health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "check-health"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "For your own listing: the last 24 hours of full route checks (working vs failed), the recent checks, and any suspension made by checks with its reason and evidence. A listing whose checks fail 10 or more times in 24 hours with none working is confirmed once more and then suspended from the marketplace; run POST /routes/check with its id (free for your own listing) after fixing it, and a working result puts it back. A call answered under 1.5 s after our INVITE (or under 2.5 s with no ringing) is a false answer and counts as a failure; `answerMs` is the evidence. Your own checks, checks to a buyer's own number (ring_me) and lighter checks never count. On an SMS listing the window counts buyers' test messages instead: delivered is working, refused is a failure, a message still awaiting a receipt does not count, and an SMS listing is never suspended automatically.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/route-checks#getRoutesByIdCheckHealth"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Rate sheets",
      "description": "Upload and manage per-prefix rate decks on routes you sell.",
      "item": [
        {
          "name": "List rate-sheet imports for a route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#getRoutesByIdRateSheets"
          },
          "response": []
        },
        {
          "name": "Upload a rate sheet to a route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Multipart upload (field `file`, CSV or Excel). Creates an import to preview, diff and apply; nothing is priced until you apply it.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateSheets"
          },
          "response": []
        },
        {
          "name": "Upload and apply a rate sheet in one step",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets/quick",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets",
                "quick"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Applies straight away when the sheet reads unambiguously; otherwise returns `outcome: \"review\"` with the reasons.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateSheetsQuick"
          },
          "response": []
        },
        {
          "name": "Get a rate-sheet import",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets/:importId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets",
                ":importId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "importId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#getRoutesByIdRateSheetsByImportId"
          },
          "response": []
        },
        {
          "name": "Preview a rate-sheet import",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fxRate\": 1,\n  \"mapping\": \"<mapping>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets/:importId/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets",
                ":importId",
                "preview"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "importId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateSheetsByImportIdPreview"
          },
          "response": []
        },
        {
          "name": "Compare a rate-sheet import with the live deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fxRate\": 1,\n  \"mapping\": \"<mapping>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets/:importId/diff",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets",
                ":importId",
                "diff"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "importId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateSheetsByImportIdDiff"
          },
          "response": []
        },
        {
          "name": "Apply a rate-sheet import",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fxRate\": 1,\n  \"mapping\": \"<mapping>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets/:importId/apply",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets",
                ":importId",
                "apply"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "importId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Rate increases put list-rate buyers on hold until they accept the new rate.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateSheetsByImportIdApply"
          },
          "response": []
        },
        {
          "name": "Roll a route back to an earlier rate-sheet import",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets/:importId/rollback",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets",
                ":importId",
                "rollback"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "importId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateSheetsByImportIdRollback"
          },
          "response": []
        },
        {
          "name": "Reapply a rate-sheet import with new settings",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fxRate\": 1,\n  \"mapping\": \"<mapping>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-sheets/:importId/reapply",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-sheets",
                ":importId",
                "reapply"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "importId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateSheetsByImportIdReapply"
          },
          "response": []
        },
        {
          "name": "Publish an A-Z deck as per-country listings",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"perCarrier\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/publish-by-country",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "publish-by-country"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\n**Rate limit:** 6 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdPublishByCountry"
          },
          "response": []
        },
        {
          "name": "Collapse per-country listings back into one deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/collapse-bundle",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "collapse-bundle"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdCollapseBundle"
          },
          "response": []
        },
        {
          "name": "List the per-country listings of a deck",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/children",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "children"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#getRoutesByIdChildren"
          },
          "response": []
        },
        {
          "name": "List per-destination rates on a route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rates"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Public for public routes. Buyers see cleaned destination names and no upstream operator labels.\n\n**Access:** Key optional: a key personalises the answer.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#getRoutesByIdRates"
          },
          "response": []
        },
        {
          "name": "Add a rate to your route's deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"destinationName\": \"<destinationName>\",\n  \"prefix\": \"44\",\n  \"ratePerUnit\": \"<ratePerUnit>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rates"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRates"
          },
          "response": []
        },
        {
          "name": "Export a route's rates as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rates/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rates",
                "export"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** Key optional: a key personalises the answer.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#getRoutesByIdRatesExport"
          },
          "response": []
        },
        {
          "name": "Add many rates to your route's deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\n      \"prefix\": \"44\",\n      \"ratePerUnit\": \"<ratePerUnit>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rates/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rates",
                "bulk"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRatesBulk"
          },
          "response": []
        },
        {
          "name": "Edit or block one rate in your deck",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"destinationName\": \"<destinationName>\",\n  \"ratePerUnit\": \"<ratePerUnit>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rates/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rates",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#patchRoutesByIdRatesByRateId"
          },
          "response": []
        },
        {
          "name": "Delete one rate from your deck",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rates/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rates",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#deleteRoutesByIdRatesByRateId"
          },
          "response": []
        },
        {
          "name": "List scheduled rate changes on your route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-changes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-changes"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "With how many buyers are held by each change and how many already accepted it.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#getRoutesByIdRateChanges"
          },
          "response": []
        },
        {
          "name": "Schedule a price change on a one-price route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"newPrice\": \"<newPrice>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-changes/flat",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-changes",
                "flat"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "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.\n\n**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateChangesFlat"
          },
          "response": []
        },
        {
          "name": "Withdraw a scheduled rate change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/:id/rate-changes/:changeId/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                ":id",
                "rate-changes",
                ":changeId",
                "cancel"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "changeId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `routes:write`.\n\nReference: https://packetexchange.io/api-docs/reference/rate-sheets#postRoutesByIdRateChangesByChangeIdCancel"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Route blends",
      "description": "Blended routes that spread traffic across several member routes.",
      "item": [
        {
          "name": "Preview a blended route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"members\": [\n    {\n      \"rate\": 1,\n      \"weightPct\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/blends/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "blends",
                "preview"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-blends#postRoutesBlendsPreview"
          },
          "response": []
        },
        {
          "name": "Propose the cheapest complete blend for a destination",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"countryCode\": \"GB\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/blends/propose",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "blends",
                "propose"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/route-blends#postRoutesBlendsPropose"
          },
          "response": []
        },
        {
          "name": "List your blended routes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/blends",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "blends"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-blends#getRoutesBlends"
          },
          "response": []
        },
        {
          "name": "Create a blended route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"type\": \"voice\",\n  \"country\": \"United Kingdom\",\n  \"countryCode\": \"GB\",\n  \"members\": [\n    {\n      \"rate\": 1,\n      \"weightPct\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/blends",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "blends"
              ]
            },
            "description": "Refused when no member is enabled, or when the blend cannot carry the destination it claims unless `acknowledgeIncomplete` is set.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Rate limit:** 30 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/route-blends#postRoutesBlends"
          },
          "response": []
        },
        {
          "name": "Get a blended route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/blends/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "blends",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-blends#getRoutesBlendsById"
          },
          "response": []
        },
        {
          "name": "Update a blended route",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"visibility\": \"public\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/routes/blends/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "blends",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-blends#patchRoutesBlendsById"
          },
          "response": []
        },
        {
          "name": "Archive a blended route",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/routes/blends/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "routes",
                "blends",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-blends#deleteRoutesBlendsById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Purchases",
      "description": "Buy access to marketplace routes and manage what you bought.",
      "item": [
        {
          "name": "List your route purchases",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/purchases#getPurchases"
          },
          "response": []
        },
        {
          "name": "Buy access to a marketplace route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/purchases",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases"
              ]
            },
            "description": "No upfront cost: usage is billed per minute or message from your balance. Requires a LIVE API key: a test key is refused with 400.\n\n**Access:** API key. Scoped keys need `purchases:write`.\n\n**Careful:** Buys access to a marketplace route.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#postPurchases"
          },
          "response": []
        },
        {
          "name": "Get your voice routing order",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/routing-order",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                "routing-order"
              ]
            },
            "description": "Your SIP credentials and whitelisted IPs identify your ACCOUNT, not a route, so every active voice purchase can carry any call it covers. When several cover a number equally well (same prefix length), your routing order decides, then the cheaper rate, then the older purchase. This lists every voice purchase that can hold a position (active, paused or pending review): ranked ones first by position, then unranked ones oldest first. Destination names are cleaned of seller details. `rateSheet` routes are priced by an A-Z deck, so they can overlap any destination.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#getPurchasesRoutingOrder"
          },
          "response": []
        },
        {
          "name": "Replace your voice routing order",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"purchaseIds\": [\n    \"<purchaseId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/purchases/routing-order",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                "routing-order"
              ]
            },
            "description": "`purchaseIds[0]` becomes position 1, the next 2, and so on; every other voice purchase of yours is cleared to unranked. Atomic: a reorder never leaves two routes half-swapped. An empty list clears the whole order (back to cheapest, then oldest). A repeated id is 400 VALIDATION_ERROR; an id that is not one of your rankable voice purchases is 404 and nothing changes.\n\n**Access:** API key. Scoped keys need `purchases:write`.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#putPurchasesRoutingOrder"
          },
          "response": []
        },
        {
          "name": "See your first-choice and backup routes per destination",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/failover",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                "failover"
              ]
            },
            "description": "For each prefix your active voice routes list: the route tried first and the backups behind it, in the order a call would use them. When automatic failover is on (`enabled: true`), a call that a route refuses before it is answered (for example SIP 403, 480, 5xx or no response) is tried straight away on the next route, up to `maxAttempts` routes, and only the route that connects is billed. A wrong number, a busy or declined call and an unanswered call are never retried. Over a SIP trunk only server errors and congestion (5xx) move a call on; `apiOnly` marks backups SIP trunk calls never use. `singleRoute: true` marks a destination with no backup. A-Z rate sheets are listed separately because they have no single prefix. Names are cleaned of seller details. Read-only.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#getPurchasesFailover"
          },
          "response": []
        },
        {
          "name": "See which of your routes would carry a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/route-for?to=%2B447700900123",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                "route-for"
              ],
              "query": [
                {
                  "key": "to",
                  "value": "+447700900123",
                  "description": "(Required) The number to check, international format"
                }
              ]
            },
            "description": "Runs the same ranking the live SIP path uses, for your account and with the same number normalisation, so the answer is what a real call would do. Lists every route of yours that covers the number, in order, with the step of the rule that put each one behind the one above. Also reports the two refusals that sit in front of routing: an embargoed destination and an empty balance; when `refused` is set, no route carries the call. Read-only.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\n**Rate limit:** 60 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#getPurchasesRouteFor"
          },
          "response": []
        },
        {
          "name": "Set a purchase's routing position",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"priority\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/purchases/:id/routing-priority",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id",
                "routing-priority"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Sets (`priority: n`) or clears (`priority: null`) one voice purchase's position in your routing order; 1 is tried first. Positions do not have to be contiguous, and two purchases may share one (then rate, then age decides). Voice purchases only, and not a cancelled one (400 VALIDATION_ERROR). To reorder several at once use PUT /purchases/routing-order.\n\n**Access:** API key. Scoped keys need `purchases:write`.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#patchPurchasesByIdRoutingPriority"
          },
          "response": []
        },
        {
          "name": "Clear a purchase's routing position",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/:id/routing-priority",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id",
                "routing-priority"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The purchase goes back to unranked: after every ranked route, cheapest then oldest.\n\n**Access:** API key. Scoped keys need `purchases:write`.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#deletePurchasesByIdRoutingPriority"
          },
          "response": []
        },
        {
          "name": "Get a purchase",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/purchases#getPurchasesById"
          },
          "response": []
        },
        {
          "name": "Pause or resume a purchase",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/purchases/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/purchases#patchPurchasesById"
          },
          "response": []
        },
        {
          "name": "Cancel a purchase",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/purchases#deletePurchasesById"
          },
          "response": []
        },
        {
          "name": "Get call counts, ASR and spend for a purchase",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/:id/usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id",
                "usage"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/purchases#getPurchasesByIdUsage"
          },
          "response": []
        },
        {
          "name": "Accept a seller's rate increase",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"acceptedRate\": \"<acceptedRate>\",\n  \"deckVersion\": \"<deckVersion>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/purchases/:id/accept-rate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id",
                "accept-rate"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A purchase paused by a price rise resumes at the new rate. Pass the rate (or deck version) you reviewed so a further change is not accepted by mistake.\n\n**Access:** API key. Scoped keys need `purchases:write`.\n\n**Careful:** Accepts a higher rate on a route you buy.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#postPurchasesByIdAcceptRate"
          },
          "response": []
        },
        {
          "name": "List scheduled rate changes on a route you bought",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/purchases/:id/upcoming-rate-changes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "purchases",
                ":id",
                "upcoming-rate-changes"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Rate changes the seller has scheduled on a route you bought and that are not yet in effect, soonest first: the effective date, the old and new rate per destination (biggest increases first, at most 200 rows per change; `totalRows` is the full count), and whether you have already accepted each one. For a per-country listing of an A-Z deck, only that listing's destinations are shown. Accept a change in advance with POST /purchases/{id}/accept-rate and `changeId`: at the effective date an accepted purchase keeps running instead of being paused for re-consent. `affectsYou` is false when you do not pay the list rate (an accepted offer or a private price), so a change will not pause you. Destination names are cleaned of seller details.\n\n**Access:** API key. Scoped keys need `routes:read`.\n\nReference: https://packetexchange.io/api-docs/reference/purchases#getPurchasesByIdUpcomingRateChanges"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Offers",
      "description": "Propose, counter and accept prices on marketplace routes.",
      "item": [
        {
          "name": "List offers you made and received",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/offers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "offers"
              ],
              "query": [
                {
                  "key": "role",
                  "value": "",
                  "description": "(Optional) Default all",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/offers#getOffers"
          },
          "response": []
        },
        {
          "name": "Make an offer on a route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\",\n  \"proposedPrice\": \"<proposedPrice>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/offers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "offers"
              ]
            },
            "description": "Opens a negotiation at `proposedPrice` (6-decimal USD string). The seller can accept, reject or counter.\n\n**Access:** API key. Scoped keys need `offers:write`.\n\n**Careful:** Makes or answers a binding offer on a route.\n\nReference: https://packetexchange.io/api-docs/reference/offers#postOffers"
          },
          "response": []
        },
        {
          "name": "Make offers on several routes at once",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"items\": [\n    {\n      \"routeId\": \"<routeId>\",\n      \"proposedPrice\": \"<proposedPrice>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/offers/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "offers",
                "bulk"
              ]
            },
            "description": "One offer per item, grouped. Routes that cannot take an offer (your own, inactive, already negotiating) are skipped and reported back.\n\n**Access:** API key. Scoped keys need `offers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/offers#postOffersBulk"
          },
          "response": []
        },
        {
          "name": "List your bulk offers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/offers/groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "offers",
                "groups"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/offers#getOffersGroups"
          },
          "response": []
        },
        {
          "name": "Accept or reject every open offer in a bulk offer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"accept\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/offers/groups/:id/respond",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "offers",
                "groups",
                ":id",
                "respond"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `offers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/offers#postOffersGroupsByIdRespond"
          },
          "response": []
        },
        {
          "name": "Get an offer with its negotiation history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/offers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "offers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/offers#getOffersById"
          },
          "response": []
        },
        {
          "name": "Accept, reject, counter or withdraw an offer",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"counter\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/offers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "offers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "`price` is required for `counter`. Accepting creates or reprices the purchase at the agreed price.\n\n**Access:** API key. Scoped keys need `offers:write`.\n\n**Careful:** Makes or answers a binding offer on a route.\n\nReference: https://packetexchange.io/api-docs/reference/offers#patchOffersById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Route access",
      "description": "Request and grant access to private marketplace routes.",
      "item": [
        {
          "name": "List access grants and requests on your private route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-access?routeId=%3CrouteId%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-access"
              ],
              "query": [
                {
                  "key": "routeId",
                  "value": "<routeId>",
                  "description": "(Required)"
                }
              ]
            },
            "description": "For the seller. Private routes are invite-only, so the requesting buyer's email and name are shown here.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-access#getRouteAccess"
          },
          "response": []
        },
        {
          "name": "Grant a buyer access to your private route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\",\n  \"email\": \"you@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-access",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-access"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-access#postRouteAccess"
          },
          "response": []
        },
        {
          "name": "Request access to a private route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-access/request",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-access",
                "request"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-access#postRouteAccessRequest"
          },
          "response": []
        },
        {
          "name": "Approve an access request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customPrice\": \"<customPrice>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-access/:id/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-access",
                ":id",
                "approve"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-access#postRouteAccessByIdApprove"
          },
          "response": []
        },
        {
          "name": "Change the custom price on an access grant",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customPrice\": \"<customPrice>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-access/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-access",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-access#patchRouteAccessById"
          },
          "response": []
        },
        {
          "name": "Revoke an access grant",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-access/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-access",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-access#deleteRouteAccessById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Route messages",
      "description": "Buyer and seller conversations about a route.",
      "item": [
        {
          "name": "List your route conversations",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-messages/threads",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-messages",
                "threads"
              ]
            },
            "description": "The other party is shown by a label, never by account.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-messages#getRouteMessagesThreads"
          },
          "response": []
        },
        {
          "name": "Get one route conversation",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-messages/:routeId/:buyerId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-messages",
                ":routeId",
                ":buyerId"
              ],
              "variable": [
                {
                  "key": "routeId",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "buyerId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-messages#getRouteMessagesByRouteIdByBuyerId"
          },
          "response": []
        },
        {
          "name": "Send a message about a route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\",\n  \"body\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-messages"
              ]
            },
            "description": "Contact details (emails, phone numbers, links, handles) are refused. Sellers must pass `buyerId` to start a thread.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-messages#postRouteMessages"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Route reports",
      "description": "Report a problem with a route you bought.",
      "item": [
        {
          "name": "List route problem reports you raised or received",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-reports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports"
              ],
              "query": [
                {
                  "key": "role",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#getRouteReports"
          },
          "response": []
        },
        {
          "name": "Report a problem with a route you bought",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\",\n  \"message\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-reports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports"
              ]
            },
            "description": "Optionally attach a CDR and a fresh SIP trace. The seller sees you under a pseudonym.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#postRouteReports"
          },
          "response": []
        },
        {
          "name": "Count route reports waiting on you",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-reports/action-counts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                "action-counts"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#getRouteReportsActionCounts"
          },
          "response": []
        },
        {
          "name": "Get a route report with its thread",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-reports/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#getRouteReportsById"
          },
          "response": []
        },
        {
          "name": "Reply on a route report",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-reports/:id/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                ":id",
                "messages"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#postRouteReportsByIdMessages"
          },
          "response": []
        },
        {
          "name": "Acknowledge a route report (seller)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-reports/:id/acknowledge",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                ":id",
                "acknowledge"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#postRouteReportsByIdAcknowledge"
          },
          "response": []
        },
        {
          "name": "Mark a route report resolved (seller)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"note\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-reports/:id/resolve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                ":id",
                "resolve"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#postRouteReportsByIdResolve"
          },
          "response": []
        },
        {
          "name": "Confirm a route report is fixed (buyer)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/route-reports/:id/confirm",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                ":id",
                "confirm"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#postRouteReportsByIdConfirm"
          },
          "response": []
        },
        {
          "name": "Reopen a resolved route report (buyer)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"note\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-reports/:id/reopen",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                ":id",
                "reopen"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#postRouteReportsByIdReopen"
          },
          "response": []
        },
        {
          "name": "Escalate a route report to support",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"note\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/route-reports/:id/escalate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "route-reports",
                ":id",
                "escalate"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/route-reports#postRouteReportsByIdEscalate"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Markets",
      "description": "Market-wide rate indices across destinations.",
      "item": [
        {
          "name": "Get the marketplace summary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/markets/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "markets",
                "summary"
              ]
            },
            "description": "Public counts for everyone; capacity, ASR, ACD and average price only for signed-in callers.\n\n**Access:** Key optional: a key personalises the answer.\n\nReference: https://packetexchange.io/api-docs/reference/markets#getMarketsSummary"
          },
          "response": []
        },
        {
          "name": "List destinations with live routes and their lowest rates",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/pricing/destinations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pricing",
                "destinations"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "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.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/markets#getPricingDestinations"
          },
          "response": []
        },
        {
          "name": "Get the live market for one destination",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/pricing/destinations/:slug",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pricing",
                "destinations",
                ":slug"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "slug",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "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.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/markets#getPricingDestinationsBySlug"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Voice and SMS",
      "description": "Place single calls and send single SMS over the routes you bought, and read their history.",
      "item": [
        {
          "name": "List your API call history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/comms/calls",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "calls"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional) Accepted but not applied: each endpoint already fixes its own type",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) Only rows created at or after this instant",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) Only rows created before this instant",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional) The `nextCursor` from the previous page",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Ledger entries for calls placed through POST /comms/calls, newest first.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/voice-and-sms#getCommsCalls"
          },
          "response": []
        },
        {
          "name": "Place a single outbound call",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"+447700900123\",\n  \"from\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/comms/calls",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "calls"
              ]
            },
            "description": "Dials `to` over a route you purchased (or one Smart Routing selects). By default the request BLOCKS until the call ends - answer and hangup, no answer, or `maxDuration` - then returns the outcome and what it cost (200); set a client timeout above `maxDuration`. With `async: true` it returns at once with **202** and `status: ringing`; follow the call on GET /comms/calls/{id} or with the call.ringing, call.answered, call.gathered and call.completed webhooks. Validation, routing and balance errors are still returned straight away in both modes. `actions` make the answered call speak (`say`, in en, es, fr, de, pt or hi), play an MP3 (`play`), collect keypad digits (`gather`), wait (`pause`) or end (`hangup`), in order; audio is prepared before dialling, so a bad URL costs nothing. Billed per the route increment at the route price plus the platform fee, after the call completes; there is no charge for spoken text. A test key simulates the call against test credit and runs no actions.\n\n**Access:** API key. Scoped keys need `voice:send`.\n\n**Rate limit:** 10 requests per second.\n\n**Careful:** Places a real call or sends a real message, billed to your balance. A test key simulates it against test credit.\n\nReference: https://packetexchange.io/api-docs/reference/voice-and-sms#postCommsCalls"
          },
          "response": []
        },
        {
          "name": "Get one call: live status, cost and gathered digits",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/comms/calls/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "calls",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Works for any call placed through POST /comms/calls, while it runs and after it ends: status, timestamps, duration, cost, the hangup cause in plain words, and the digits collected by gather actions. A reseller sub-account key sees only its own calls. Unknown ids answer 404.\n\n**Access:** API key. Scoped keys need `voice:send`.\n\nReference: https://packetexchange.io/api-docs/reference/voice-and-sms#getCommsCallsById"
          },
          "response": []
        },
        {
          "name": "List your SMS history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/comms/sms",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "sms"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional) Accepted but not applied: each endpoint already fixes its own type",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) Only rows created at or after this instant",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) Only rows created before this instant",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional) The `nextCursor` from the previous page",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Ledger entries for messages sent over the API and SMPP, newest first.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/voice-and-sms#getCommsSms"
          },
          "response": []
        },
        {
          "name": "Send a single SMS",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"+447700900123\",\n  \"from\": \"+447700900123\",\n  \"message\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/comms/sms",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "sms"
              ]
            },
            "description": "Forwards the message to the route seller and returns straight away with a message id. `status` is the send-time outcome (accepted, sent or failed). The final outcome comes later from the carrier's delivery receipt, when the route returns one: read it with `GET /comms/sms/{messageId}` or subscribe to the `sms.delivered` and `sms.failed` webhooks. A message that fails on its receipt is refunded. Billed per segment at the route price plus the platform fee. A test key simulates the send against test credit.\n\n**Access:** API key. Scoped keys need `sms:send`.\n\n**Rate limit:** 10 requests per second.\n\n**Careful:** Places a real call or sends a real message, billed to your balance. A test key simulates it against test credit.\n\nReference: https://packetexchange.io/api-docs/reference/voice-and-sms#postCommsSms"
          },
          "response": []
        },
        {
          "name": "Get the delivery status and timeline of a sent SMS",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/comms/sms/:messageId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "sms",
                ":messageId"
              ],
              "variable": [
                {
                  "key": "messageId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Returns the message's current status and its timeline: `queued` (charged), `sent` (the route accepted the hand-off), then `delivered` or `failed`, each with a timestamp, and an `errorCode` on failure.\n\n**Where delivered comes from.** Only from a carrier delivery receipt. Receipts come back on SMPP routes whose supplier returns them, and on HTTP routes whose seller posts them back to us. A route that returns none leaves its messages at `sent` with `awaitingReceipt: true`; `routeReturnsReceipts` tells you whether the route has returned any in the last 30 days, so you know whether to wait. A receipt that reports the message undelivered, expired or rejected marks it `failed` and refunds it.\n\nCovers messages sent with `POST /comms/sms` and `POST /comms/sms/bulk`. An unknown id answers 200 with status `not_found` rather than 404.\n\n**Access:** API key. Scoped keys need `sms:send`.\n\nReference: https://packetexchange.io/api-docs/reference/voice-and-sms#getCommsSmsByMessageId"
          },
          "response": []
        },
        {
          "name": "Send up to 1,000 SMS in one request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\",\n  \"from\": \"+447700900123\",\n  \"messages\": [\n    {\n      \"to\": \"+447700900123\",\n      \"message\": \"Hello from Acme\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/comms/sms/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "sms",
                "bulk"
              ]
            },
            "description": "Sends each message in order over one route and returns a result per recipient. Each message is billed exactly as `POST /comms/sms` bills it: a reseller sub-account API key pays the sub-account's retail rate, a test key simulates. Stops at the first insufficient-balance refusal (account or sub-account) and marks the rest `skipped`. Not idempotent: retrying resends every message.\n\n**Access:** API key. Scoped keys need `sms:send`.\n\n**Careful:** Places a real call or sends a real message, billed to your balance. A test key simulates it against test credit.\n\nReference: https://packetexchange.io/api-docs/reference/voice-and-sms#postCommsSmsBulk"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Verify",
      "description": "One-time passcodes by SMS or voice call: send a code, then check what the user typed. We keep only a hash of the code.",
      "item": [
        {
          "name": "Read a one-time passcode to a phone by voice call",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/comms/voice-otp",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "voice-otp"
              ]
            },
            "description": "Calls `to` and, when answered, reads the code one digit at a time: \"Your {brand} verification code is 4, 8, 2, 9, 1, 3. Again, 4, 8, 2, 9, 1, 3.\" Repeated `repeat` times (default 2, max 3), then the call hangs up. Pass your own `code` (4-10 digits) or let us generate one of `length` digits (default 6); a generated code is returned only when you set `returnCode: true`. You check the code yourself; use POST /verify/start instead to have us check it. Languages: en, es, fr, de, pt, hi. `brand` defaults to your company name and is cleaned to letters, digits and spaces (max 30). Returns as soon as the call is ringing; the outcome and cost arrive with the call.completed webhook and on GET /comms/voice-otp/{id}. Billed exactly like POST /comms/calls: the route rate per billing increment plus the platform fee. No text-to-speech surcharge. A test key simulates the call against test credit. Omit `strategy` and the code goes out over Smart Routing's `best_quality` route for the destination (plain calls and SMS default to `balanced`). Limits, shared by voice passcodes and the Verify API: 5 codes per number per hour, 30 seconds between codes to the same number, a per-account daily cap, and a cap on codes into one number range per hour. A limit answers 429 with `details.retryAfterSeconds`. Embargoed destinations, premium-rate / satellite / high-risk ranges and numbers on your Do-Not-Contact list are refused with 400.\n\n**Access:** API key. Scoped keys need `voice:send`.\n\n**Rate limit:** 10 requests per second.\n\n**Careful:** Places a real call or sends a real message, billed to your balance. A test key simulates it against test credit.\n\nReference: https://packetexchange.io/api-docs/reference/verify#postCommsVoiceOtp"
          },
          "response": []
        },
        {
          "name": "Get the outcome of a voice passcode call",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/comms/voice-otp/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "comms",
                "voice-otp",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Whether the call was answered, how long it ran and what it cost. Never returns the code.\n\n**Access:** API key. Scoped keys need `voice:send`.\n\nReference: https://packetexchange.io/api-docs/reference/verify#getCommsVoiceOtpById"
          },
          "response": []
        },
        {
          "name": "Send a verification code by SMS or voice call",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"+447700900123\",\n  \"channel\": \"sms\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/verify/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "verify",
                "start"
              ]
            },
            "description": "Generates a code of `length` digits (default 6), sends it over `channel`, and returns a `verificationId`. We store only a keyed hash (HMAC) of the code; the code itself is never stored or logged. The code expires after `expirySeconds` (default 600). SMS languages: en, es, fr, de, pt, hi, ar. Voice languages: en, es, fr, de, pt, hi. `from` is the SMS sender ID (defaults to your brand) or, for voice, the caller ID. Billed as the SMS or call that carries the code: the route rate plus the platform fee, no verification fee. A test key sends nothing, charges test credit and returns `testCode` so you can finish the flow. Omit `strategy` and the code goes out over Smart Routing's `best_quality` route for the destination (plain calls and SMS default to `balanced`). Limits, shared by voice passcodes and the Verify API: 5 codes per number per hour, 30 seconds between codes to the same number, a per-account daily cap, and a cap on codes into one number range per hour. A limit answers 429 with `details.retryAfterSeconds`. Embargoed destinations, premium-rate / satellite / high-risk ranges and numbers on your Do-Not-Contact list are refused with 400.\n\n**Access:** API key. Scoped keys need `verify:write`.\n\n**Rate limit:** 10 requests per second.\n\n**Careful:** Sends a real SMS or places a real voice call carrying the code, billed as that message or call. A test key simulates it.\n\nReference: https://packetexchange.io/api-docs/reference/verify#postVerifyStart"
          },
          "response": []
        },
        {
          "name": "Check the code a user entered",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"verificationId\": \"<verificationId>\",\n  \"code\": \"482913\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/verify/check",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "verify",
                "check"
              ]
            },
            "description": "`approved` exactly once: a code is single use, and a second check of an approved verification answers `denied` with reason `already_used`. Five attempts in total; the fifth wrong guess answers `max_attempts` and the verification is dead. After `expiresAt` every check answers `expired`, even with the right code. Spaces and dashes in the submitted code are ignored. The comparison is constant-time.\n\n**Access:** API key. Scoped keys need `verify:write`.\n\n**Rate limit:** 20 requests per second.\n\nReference: https://packetexchange.io/api-docs/reference/verify#postVerifyCheck"
          },
          "response": []
        },
        {
          "name": "Get the state of a verification",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/verify/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "verify",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Status, attempts used and how the code was delivered. Never returns the code.\n\n**Access:** API key. Scoped keys need `verify:write`.\n\nReference: https://packetexchange.io/api-docs/reference/verify#getVerifyById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Number lookup",
      "description": "Validate a number and see its country, line type, network, risk and cheapest live price. Prefix-based, free.",
      "item": [
        {
          "name": "Look up a phone number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/lookup/:number",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "lookup",
                ":number"
              ],
              "variable": [
                {
                  "key": "number",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Validates and formats an E.164 number and tells you what its prefix is on the exchange: country, line type (mobile, fixed, toll free, premium), the network where the rate decks agree, whether it is a blocked or high-risk destination, and the cheapest live public price to reach it by voice and by SMS (the same logic as `GET /routes/price-number`).\n\nSMS prices are by destination network where the route prices per network: `pricing.sms.network` says which network the price is for and `pricing.sms.countryRate` 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).\n\n**Prefix-based.** No carrier HLR query is made, so the answer cannot tell you whether the number is in service or has been ported. It is free, needs no key (a scoped key needs `routes:read`), and is limited to 60 lookups a minute per caller. Send the number in international format (`+447700900123` or `00447700900123`; spaces and dashes are ignored). A malformed number answers 200 with `valid: false` and a `reason`.\n\n**Access:** Key optional: a key personalises the answer.\n\n**Rate limit:** 60 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/number-lookup#getLookupByNumber"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Phone numbers",
      "description": "The DID Store: search, buy, route and release phone numbers; SMS and softphone lines on them.",
      "item": [
        {
          "name": "Browse the number catalogue",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/catalog",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "catalog"
              ],
              "query": [
                {
                  "key": "countryId",
                  "value": "",
                  "description": "(Optional) From GET .../catalog/countries",
                  "disabled": true
                },
                {
                  "key": "typeId",
                  "value": "",
                  "description": "(Optional) From GET .../catalog/types",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Text match over country, city, area prefix and type; digits also match the start of the full dialling prefix (\"4420\" finds London). Spans the whole catalogue once it is indexed, otherwise the fetched page",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "",
                  "description": "(Optional) Order by the cheapest monthly price, setup price or location. Omitted: the catalogue order",
                  "disabled": true
                },
                {
                  "key": "maxMonthly",
                  "value": "",
                  "description": "(Optional) Only groups whose cheapest monthly price is at most this, in USD",
                  "disabled": true
                }
              ]
            },
            "description": "Number groups by country, city and type, with the price of each SKU. While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsCatalog"
          },
          "response": []
        },
        {
          "name": "List countries with numbers for sale",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/catalog/countries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "catalog",
                "countries"
              ]
            },
            "description": "While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsCatalogCountries"
          },
          "response": []
        },
        {
          "name": "List number types for sale",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/catalog/types",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "catalog",
                "types"
              ]
            },
            "description": "While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsCatalogTypes"
          },
          "response": []
        },
        {
          "name": "Buy a phone number",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"skuId\": \"<skuId>\",\n  \"groupId\": \"<groupId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/buy",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "buy"
              ]
            },
            "description": "Charges the setup price plus the first month to your balance (or the named sub-account's) and orders the number. It starts `pending`; `number` is null until provisioning completes. Requires a verified identity where KYC is enforced.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\n**Careful:** Buys a phone number, charged to your balance.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsBuy"
          },
          "response": []
        },
        {
          "name": "List your phone numbers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/mine",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "mine"
              ]
            },
            "description": "While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsMine"
          },
          "response": []
        },
        {
          "name": "Get your request to list numbers on the marketplace",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/listing-request",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "listing-request"
              ]
            },
            "description": "Your latest request, plus a profile prefill for the form. Works while the number store is off.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsListingRequest"
          },
          "response": []
        },
        {
          "name": "Ask to list your numbers on the marketplace",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contactName\": \"<contactName>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/listing-request",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "listing-request"
              ]
            },
            "description": "Our team reviews the request and lists the numbers by hand. One open request at a time (409 CONFLICT otherwise). A validation failure here answers 400 with `error.field` naming the first bad field instead of a `details` array.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\n**Rate limit:** 5 requests per 10 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsListingRequest"
          },
          "response": []
        },
        {
          "name": "List your numbers usable as outbound caller IDs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/cli-eligible",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "cli-eligible"
              ]
            },
            "description": "Active, provisioned numbers you own.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsCliEligible"
          },
          "response": []
        },
        {
          "name": "Add your numbers to a dialer caller-ID set",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"setId\": \"<setId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/to-cli-set",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "to-cli-set"
              ]
            },
            "description": "Adds the chosen (or all) active numbers so they rotate as caller IDs on voice campaigns.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsToCliSet"
          },
          "response": []
        },
        {
          "name": "Get one of your phone numbers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsById"
          },
          "response": []
        },
        {
          "name": "Get a number's call flow",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/routing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "routing"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Ring strategy and ordered destinations. Hosted line passwords are never included.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdRouting"
          },
          "response": []
        },
        {
          "name": "Replace a number's call flow",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"endpoints\": [\n    {\n      \"kind\": \"sip\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/routing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "routing"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Full replace: an endpoint sent with an id is kept or updated, one without an id is created, and any existing endpoint you leave out is deleted (hosted lines included - send them back by id to keep them).\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#putDidsByIdRouting"
          },
          "response": []
        },
        {
          "name": "Point a number at one destination (and an optional backup)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mode\": \"sip\",\n  \"target\": \"<target>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/routing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "routing"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The simple form of call routing: a primary and an optional failover backup. Hosted softphone lines and any extra destinations are left alone. Use PUT for the full call flow.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#patchDidsByIdRouting"
          },
          "response": []
        },
        {
          "name": "List a number's softphone lines",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/sip-lines",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "sip-lines"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Passwords are not included; use reveal.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdSipLines"
          },
          "response": []
        },
        {
          "name": "Create a softphone line on a number",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/sip-lines",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "sip-lines"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Returns the full login, password included, once.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsByIdSipLines"
          },
          "response": []
        },
        {
          "name": "Reveal a softphone line's login",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/sip-lines/:lineId/reveal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "sip-lines",
                ":lineId",
                "reveal"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "lineId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsByIdSipLinesByLineIdReveal"
          },
          "response": []
        },
        {
          "name": "Delete a softphone line",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/sip-lines/:lineId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "sip-lines",
                ":lineId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "lineId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#deleteDidsByIdSipLinesByLineId"
          },
          "response": []
        },
        {
          "name": "Turn monthly auto-renew on or off",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/auto-renew",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "auto-renew"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "With auto-renew off, the number is released at its next renewal date instead of being charged.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#patchDidsByIdAutoRenew"
          },
          "response": []
        },
        {
          "name": "List inbound calls to a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/cdrs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "cdrs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Newest first; default 200",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Recent inbound calls, newest first, with a calls and minutes total.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdCdrs"
          },
          "response": []
        },
        {
          "name": "See which AI voice agent answers a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/ai-agent",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "ai-agent"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Returns the agent pointed at this number (or null), whether inbound AI answering is switched on for the platform, and the per-minute AI voice rate.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdAiAgent"
          },
          "response": []
        },
        {
          "name": "Point a number at an AI voice agent",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"agentId\": \"<agentId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/ai-agent",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "ai-agent"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Send `{ \"agentId\": \"<your agent id>\" }` and inbound calls to the number are answered by that agent instead of ringing the number's call flow; send `{ \"agentId\": null }` to go back to the call flow, which is kept untouched meanwhile. Billed per second at the AI voice per-minute rate to the number's owner, on top of the number's monthly price. Each call is capped at the agent's maximum call length and at what your balance covers; when the agent is disabled or your balance covers less than 30 seconds, the number rings its call flow as usual. The agent must belong to your account.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#putDidsByIdAiAgent"
          },
          "response": []
        },
        {
          "name": "Get a number's voicemail, recording, IVR and schedule settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/features",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "features"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A number with nothing configured rings its call flow as normal.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdFeatures"
          },
          "response": []
        },
        {
          "name": "Configure voicemail on a number",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"mode\": \"on_no_answer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/features/voicemail",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "features",
                "voicemail"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#putDidsByIdFeaturesVoicemail"
          },
          "response": []
        },
        {
          "name": "Configure call recording on a number",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"announce\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/features/recording",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "features",
                "recording"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#putDidsByIdFeaturesRecording"
          },
          "response": []
        },
        {
          "name": "Configure the IVR menu on a number",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"greetingAssetId\": \"<greetingAssetId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/features/ivr",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "features",
                "ivr"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#putDidsByIdFeaturesIvr"
          },
          "response": []
        },
        {
          "name": "Configure business-hours routing on a number",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"timezone\": \"<timezone>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/features/schedule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "features",
                "schedule"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#putDidsByIdFeaturesSchedule"
          },
          "response": []
        },
        {
          "name": "List a number's uploaded greetings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/greetings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "greetings"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdGreetings"
          },
          "response": []
        },
        {
          "name": "Upload a voicemail or IVR greeting",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"voicemail_greeting\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/greetings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "greetings"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "WAV or MP3, up to 8 MB. Send multipart with a `file` part (and `kind` as a field or query parameter), or JSON with `contentBase64`.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsByIdGreetings"
          },
          "response": []
        },
        {
          "name": "Download a greeting's audio",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/greetings/:assetId/audio",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "greetings",
                ":assetId",
                "audio"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "assetId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdGreetingsByAssetIdAudio"
          },
          "response": []
        },
        {
          "name": "Delete a greeting",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/greetings/:assetId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "greetings",
                ":assetId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "assetId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#deleteDidsByIdGreetingsByAssetId"
          },
          "response": []
        },
        {
          "name": "List call recordings on a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/recordings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "recordings"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Newest first; default 200",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdRecordings"
          },
          "response": []
        },
        {
          "name": "Download a call recording",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/recordings/:recId/audio",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "recordings",
                ":recId",
                "audio"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "recId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdRecordingsByRecIdAudio"
          },
          "response": []
        },
        {
          "name": "Delete a call recording",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/recordings/:recId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "recordings",
                ":recId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "recId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#deleteDidsByIdRecordingsByRecId"
          },
          "response": []
        },
        {
          "name": "List voicemails on a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/voicemails",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "voicemails"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Newest first; default 200",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdVoicemails"
          },
          "response": []
        },
        {
          "name": "Download a voicemail",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/voicemails/:recId/audio",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "voicemails",
                ":recId",
                "audio"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "recId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdVoicemailsByRecIdAudio"
          },
          "response": []
        },
        {
          "name": "Mark a voicemail heard or unheard",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"heard\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/voicemails/:recId/heard",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "voicemails",
                ":recId",
                "heard"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "recId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsByIdVoicemailsByRecIdHeard"
          },
          "response": []
        },
        {
          "name": "Delete a voicemail",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/voicemails/:recId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "voicemails",
                ":recId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "recId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#deleteDidsByIdVoicemailsByRecId"
          },
          "response": []
        },
        {
          "name": "Release a phone number",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/release",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "release"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Cancels the number and stops its monthly charge. Irreversible: the number goes back to the carrier.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsByIdRelease"
          },
          "response": []
        },
        {
          "name": "Get a number's SMS settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/sms-settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "sms-settings"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "While SMS on numbers is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdSmsSettings"
          },
          "response": []
        },
        {
          "name": "Update a number's SMS settings",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smsEnabled\": true,\n  \"forwardWebhookUrl\": \"<forwardWebhookUrl>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/sms-settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "sms-settings"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#putDidsByIdSmsSettings"
          },
          "response": []
        },
        {
          "name": "List SMS conversations on a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/messages/conversations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "messages",
                "conversations"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "One row per other party, newest activity first, with unread counts.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdMessagesConversations"
          },
          "response": []
        },
        {
          "name": "List SMS messages on a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "messages"
              ],
              "query": [
                {
                  "key": "peer",
                  "value": "",
                  "description": "(Optional) One conversation; omit for the number's whole log",
                  "disabled": true
                },
                {
                  "key": "before",
                  "value": "",
                  "description": "(Optional) ISO timestamp: page older than this (use `nextBefore`)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Default 50",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Newest first. Page older with `before` set to the previous `nextBefore`.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdMessages"
          },
          "response": []
        },
        {
          "name": "Send an SMS from one of your numbers",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"+447700900123\",\n  \"body\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "messages"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Charges per segment, then hands the message to the carrier. A hard send failure refunds the charge and marks the message failed.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\n**Careful:** Sends a real SMS from your number, billed to your balance.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsByIdMessages"
          },
          "response": []
        },
        {
          "name": "Mark an SMS conversation read",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"peer\": \"<peer>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/:id/messages/read",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "messages",
                "read"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:write`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsByIdMessagesRead"
          },
          "response": []
        },
        {
          "name": "Search the catalogue by digit pattern or vanity run",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "search"
              ],
              "query": [
                {
                  "key": "pattern",
                  "value": "",
                  "description": "(Optional) Digits to match against the dialing prefix (country + area)",
                  "disabled": true
                },
                {
                  "key": "match",
                  "value": "",
                  "description": "(Optional) Default contains",
                  "disabled": true
                },
                {
                  "key": "vanity",
                  "value": "",
                  "description": "(Optional) Only prefixes with repeating or sequential runs",
                  "disabled": true
                },
                {
                  "key": "countryId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "typeId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "text",
                  "value": "",
                  "description": "(Optional) Text over country, city and type name",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Default 50",
                  "disabled": true
                }
              ]
            },
            "description": "Scans catalogue pages for groups whose dialing prefix matches. While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsSearch"
          },
          "response": []
        },
        {
          "name": "Buy several phone numbers in one request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"items\": [\n    {\n      \"skuId\": \"<skuId>\",\n      \"groupId\": \"<groupId>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dids/bulk-buy",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "bulk-buy"
              ]
            },
            "description": "Buys each item in order and reports a result per item. Stops buying once your balance runs out and marks the rest `skipped`.\n\n**Access:** API key. Scoped keys need `numbers:write`.\n\n**Careful:** Buys a phone number, charged to your balance.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#postDidsBulkBuy"
          },
          "response": []
        },
        {
          "name": "Get a spend and usage overview across your numbers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/analytics/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                "analytics",
                "overview"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsAnalyticsOverview"
          },
          "response": []
        },
        {
          "name": "Get spend and usage analytics for a number",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dids/:id/analytics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dids",
                ":id",
                "analytics"
              ],
              "query": [
                {
                  "key": "months",
                  "value": "",
                  "description": "(Optional) Trailing months in the series",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Totals and a month-by-month series. Spend figures are USD display numbers.\n\n**Access:** API key. Scoped keys need `numbers:read`.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getDidsByIdAnalytics"
          },
          "response": []
        },
        {
          "name": "Browse the public number catalogue",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/public/numbers/catalog",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "numbers",
                "catalog"
              ],
              "query": [
                {
                  "key": "countryId",
                  "value": "",
                  "description": "(Optional) From GET .../catalog/countries",
                  "disabled": true
                },
                {
                  "key": "typeId",
                  "value": "",
                  "description": "(Optional) From GET .../catalog/types",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Text match over country, city, area prefix and type; digits also match the start of the full dialling prefix (\"4420\" finds London). Spans the whole catalogue once it is indexed, otherwise the fetched page",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "",
                  "description": "(Optional) Order by the cheapest monthly price, setup price or location. Omitted: the catalogue order",
                  "disabled": true
                },
                {
                  "key": "maxMonthly",
                  "value": "",
                  "description": "(Optional) Only groups whose cheapest monthly price is at most this, in USD",
                  "disabled": true
                }
              ]
            },
            "description": "No account needed: prices only, for pre-signup browsing. While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 30 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getPublicNumbersCatalog"
          },
          "response": []
        },
        {
          "name": "Number catalogue market summary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/public/numbers/catalog/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "numbers",
                "catalog",
                "summary"
              ]
            },
            "description": "No account needed. The store's live figures: how many countries and number groups are for sale, and the cheapest monthly price by number type and by country. Prices only. Indexed in the background and refreshed about every 20 minutes. While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 15 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getPublicNumbersCatalogSummary"
          },
          "response": []
        },
        {
          "name": "List countries in the public number catalogue",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/public/numbers/catalog/countries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "numbers",
                "catalog",
                "countries"
              ]
            },
            "description": "While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 15 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getPublicNumbersCatalogCountries"
          },
          "response": []
        },
        {
          "name": "List number types in the public number catalogue",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/public/numbers/catalog/types",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "numbers",
                "catalog",
                "types"
              ]
            },
            "description": "While the number store is switched off this answers 200 with `data: { disabled: true, comingSoon: true, message }`.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 15 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/phone-numbers#getPublicNumbersCatalogTypes"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Billing",
      "description": "Ledger, invoices, statements, spending and exports. All amounts are USD 6-decimal strings.",
      "item": [
        {
          "name": "List ledger transactions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/transactions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "transactions"
              ],
              "query": [
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) Inclusive start (ISO-8601)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) Exclusive end (ISO-8601)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional) The `nextCursor` from the previous page",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional) csv streams every matching row (up to 10,000) as a spreadsheet file",
                  "disabled": true
                }
              ]
            },
            "description": "Your account ledger, newest first, cursor-paginated. Filter by type and an ISO date range (inclusive `from`, exclusive `to`). With `format=csv` the response is a CSV file of every matching row (up to 10,000) instead of JSON.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingTransactions"
          },
          "response": []
        },
        {
          "name": "Get your spending and earnings summary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "summary"
              ]
            },
            "description": "Dashboard totals: spending (all time and today, UTC), seller earnings (all time, 30 days, today), active purchases and campaigns, and the withdrawable versus held part of your balance.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingSummary"
          },
          "response": []
        },
        {
          "name": "Get seller earnings broken down by route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/earnings-by-route",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "earnings-by-route"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Top 50 routes by earnings over the last `days`. Attribution comes from call records, so it is partial: records without a route land in an \"Unattributed\" row, and the total can differ slightly from the credit ledger (`attribution: \"partial\"`).\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingEarningsByRoute"
          },
          "response": []
        },
        {
          "name": "Get your outbound usage grouped by destination country",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/usage-by-destination",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "usage-by-destination"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Records, voice sessions, answered sessions, minutes, SMS segments, ASR, ACD and cost per destination country. ASR is voice-only and counted over customer sessions (a failed-over call counts once). With no dates the window is all time; `basis.window` states the window used. `format=csv` returns a CSV file.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingUsageByDestination"
          },
          "response": []
        },
        {
          "name": "Get your end-of-day balance history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/balance-history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "balance-history"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "One point per UTC day that had ledger activity. Balances here are plain JSON numbers for charting, not ledger strings.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingBalanceHistory"
          },
          "response": []
        },
        {
          "name": "Get daily voice and SMS spend",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/traffic-timeseries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "traffic-timeseries"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Charges per UTC day split into voice and SMS. Amounts are plain JSON numbers for charting.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingTrafficTimeseries"
          },
          "response": []
        },
        {
          "name": "List your call and message records",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/cdrs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "cdrs"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional) csv streams up to 50,000 rows",
                  "disabled": true
                }
              ]
            },
            "description": "Your call detail records (test probes excluded), newest first, cursor-paginated. With `format=csv` the response is a CSV file of up to 50,000 rows. For larger exports use `POST /billing/exports`.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingCdrs"
          },
          "response": []
        },
        {
          "name": "Stream your call records as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/cdrs/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "cdrs",
                "export"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Streams every matching record (up to 1,000,000 rows) as a CSV file in one response.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingCdrsExport"
          },
          "response": []
        },
        {
          "name": "List your call-record exports",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/exports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "exports"
              ]
            },
            "description": "Your 50 most recent export jobs.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingExports"
          },
          "response": []
        },
        {
          "name": "Start a background call-record export",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"from\": \"2026-10-01T09:00:00Z\",\n  \"to\": \"2026-10-01T09:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/billing/exports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "exports"
              ]
            },
            "description": "Queues a CSV export job. At most 3 exports may be pending or running at once; a fourth gets 429 `TOO_MANY_EXPORTS`. Poll `GET /billing/exports` and download when `downloadable` is true.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#postBillingExports"
          },
          "response": []
        },
        {
          "name": "Download a finished call-record export",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/exports/:id/download",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "exports",
                ":id",
                "download"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Returns the CSV file. Only the account that queued the export can download it (another account gets 404). 409 `EXPORT_NOT_READY` while the job is not finished; 410 `EXPORT_EXPIRED` once the retention sweep has deleted the file.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingExportsByIdDownload"
          },
          "response": []
        },
        {
          "name": "List your receipts and statements",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/invoices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "invoices"
              ]
            },
            "description": "Top-up receipts and statements (up to 200, newest first). For numbered tax invoices see `GET /billing/tax-invoices`.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingInvoices"
          },
          "response": []
        },
        {
          "name": "Get a receipt or statement",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/invoices/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "invoices",
                ":id"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional) html returns a printable page",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "JSON by default; `format=html` returns a self-contained printable page.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingInvoicesById"
          },
          "response": []
        },
        {
          "name": "Get your monthly statement",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/statements?month=%3Cmonth%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "statements"
              ],
              "query": [
                {
                  "key": "month",
                  "value": "<month>",
                  "description": "(Required) Calendar month, YYYY-MM (UTC)"
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Every ledger line in a calendar month (UTC) with totals by type and the tax on platform fees. Totals and `net` are plain JSON numbers; line-item amounts are ledger strings. `format=csv` returns a CSV file.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingStatements"
          },
          "response": []
        },
        {
          "name": "Get the financial position of your wallet or a sub-account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/financial-activity/position",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "financial-activity",
                "position"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional) A sub-account you operate; omit for your own wallet",
                  "disabled": true
                }
              ]
            },
            "description": "Posted balance, credit limit, reserved for live calls, settlement holds, pending payments, and what that leaves to spend, with the source of each figure. Figures are plain JSON numbers (USD). Pass `customerId` for a sub-account you operate.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingFinancialActivityPosition"
          },
          "response": []
        },
        {
          "name": "List live call authorisations on a wallet",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/financial-activity/authorisations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "financial-activity",
                "authorisations"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional) A sub-account you operate; omit for your own wallet",
                  "disabled": true
                }
              ]
            },
            "description": "Funds currently reserved for calls in progress. Amounts are plain JSON numbers (USD).\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingFinancialActivityAuthorisations"
          },
          "response": []
        },
        {
          "name": "Reconcile a wallet balance against its ledger",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/financial-activity/reconciliation",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "financial-activity",
                "reconciliation"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional) A sub-account you operate; omit for your own wallet",
                  "disabled": true
                }
              ]
            },
            "description": "Explains the posted balance by ledger component and reports anything it cannot explain as unreconciled, rather than as confirmed money. Amounts are plain JSON numbers (USD).\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingFinancialActivityReconciliation"
          },
          "response": []
        },
        {
          "name": "List posted, pending and unposted money movements",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/financial-activity/activity",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "financial-activity",
                "activity"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional) A sub-account you operate; omit for your own wallet",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "state",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "One timeline of posted ledger lines, pending payments and usage not yet posted. `truncated` is true when more rows matched than `limit`. Amounts are plain JSON numbers (USD).\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingFinancialActivityActivity"
          },
          "response": []
        },
        {
          "name": "List sub-account wallets you operate with their positions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/financial-activity/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "financial-activity",
                "customers"
              ]
            },
            "description": "Every non-closed sub-account with its balance, credit and what it can spend now. Amounts are plain JSON numbers.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingFinancialActivityCustomers"
          },
          "response": []
        },
        {
          "name": "List your tax invoices",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/tax-invoices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "tax-invoices"
              ]
            },
            "description": "Numbered tax invoices (gap-free per account), newest first, up to 500.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingTaxInvoices"
          },
          "response": []
        },
        {
          "name": "Generate the tax invoice for a month",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"period\": \"<period>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/billing/tax-invoices/generate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "tax-invoices",
                "generate"
              ]
            },
            "description": "Idempotent per period: if the month already has an invoice it is returned with `alreadyExisted: true` and status 200; a new one returns 201. 503 when the invoice register is not available on this node.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#postBillingTaxInvoicesGenerate"
          },
          "response": []
        },
        {
          "name": "Get a tax invoice",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/billing/tax-invoices/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "billing",
                "tax-invoices",
                ":id"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional) html returns a printable page",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "JSON by default; `format=html` returns a printable invoice page.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/billing#getBillingTaxInvoicesById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Top-ups",
      "description": "Add funds by card, crypto or wire.",
      "item": [
        {
          "name": "List your top-ups",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/topups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups"
              ]
            },
            "description": "Your 50 most recent top-ups of every method and status.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#getTopups"
          },
          "response": []
        },
        {
          "name": "Start a card top-up",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amountUsd\": 5\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/topups/stripe",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "stripe"
              ]
            },
            "description": "Creates a pending top-up and a card payment to confirm client-side with `clientSecret` and `publishableKey`. The balance is credited when the card processor confirms the payment. If card payments are not enabled, the pending top-up is returned with a `message` instead. Requires identity verification when the platform enforces it (403 `KYC_REQUIRED`), and is subject to account flags and top-up velocity limits.\n\n**Access:** API key. Scoped keys need `billing:write`.\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#postTopupsStripe"
          },
          "response": []
        },
        {
          "name": "Top up with an x402 USDC payment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amountUsd\": 5\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/topups/x402",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "x402"
              ]
            },
            "description": "Pay-per-request top-up using the x402 protocol. Call once without an `X-PAYMENT` header to receive a 402 challenge with the payment requirements; retry with a signed `X-PAYMENT` header to settle and be credited in the same request. A replayed payment returns the original top-up with `already: true`. It settles real USDC on Base mainnet into your live balance, so test keys are refused with 403 `TEST_KEY_NOT_ALLOWED`. Requires identity verification when the platform enforces it (403 `KYC_REQUIRED`), and is subject to account flags and top-up velocity limits.\n\n**Access:** API key. Scoped keys need `billing:write`.\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#postTopupsX402"
          },
          "response": []
        },
        {
          "name": "Start a crypto top-up",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amountUsd\": 5,\n  \"token\": \"BTC\",\n  \"network\": \"bitcoin\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/topups/crypto",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "crypto"
              ]
            },
            "description": "Returns where to send funds. When a unique deposit address (or memo) could be allocated, `autoCredit` is true and the deposit credits automatically on confirmation; otherwise send to the shared address quoting `reference` and it is credited after manual verification. A memo, when present, is mandatory. Requires identity verification when the platform enforces it (403 `KYC_REQUIRED`), and is subject to account flags and top-up velocity limits.\n\n**Access:** API key. Scoped keys need `billing:write`.\n\n**Rate limit:** 10 requests per minute.\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#postTopupsCrypto"
          },
          "response": []
        },
        {
          "name": "Start a wire-transfer top-up",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amountUsd\": 100\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/topups/wire",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "wire"
              ]
            },
            "description": "Returns bank details and a reference you must quote on the transfer. Credited within 1-3 business days of receipt. 503 `WIRE_UNAVAILABLE` when wire is not offered. Requires identity verification when the platform enforces it (403 `KYC_REQUIRED`), and is subject to account flags and top-up velocity limits.\n\n**Access:** API key. Scoped keys need `billing:write`.\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#postTopupsWire"
          },
          "response": []
        },
        {
          "name": "List available top-up methods and their limits",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/topups/methods",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "methods"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#getTopupsMethods"
          },
          "response": []
        },
        {
          "name": "Start saving a card for auto-recharge",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/topups/setup-intent",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "setup-intent"
              ]
            },
            "description": "Returns a client secret to collect and save a card for later unattended charges. 503 `STRIPE_DISABLED` when card payments are off.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#postTopupsSetupIntent"
          },
          "response": []
        },
        {
          "name": "List your saved cards",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/topups/payment-methods",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "payment-methods"
              ]
            },
            "description": "Brand, last 4 and expiry only. Empty when card payments are off or no card is saved.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#getTopupsPaymentMethods"
          },
          "response": []
        },
        {
          "name": "Set your default card",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"paymentMethodId\": \"<paymentMethodId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/topups/payment-methods/default",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "payment-methods",
                "default"
              ]
            },
            "description": "The default card is the one auto-recharge charges.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#postTopupsPaymentMethodsDefault"
          },
          "response": []
        },
        {
          "name": "Remove a saved card",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/topups/payment-methods/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "payment-methods",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Removing the default card also clears it as default, which stops auto-recharge from charging.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#deleteTopupsPaymentMethodsById"
          },
          "response": []
        },
        {
          "name": "Get your auto-recharge settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/topups/auto-recharge",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "auto-recharge"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#getTopupsAutoRecharge"
          },
          "response": []
        },
        {
          "name": "Update your auto-recharge settings",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"threshold\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/topups/auto-recharge",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "auto-recharge"
              ]
            },
            "description": "Send only the fields to change; `null` clears a value. Enabling requires a default card and both a threshold and an amount.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\n**Careful:** Starts a payment to top up your balance.\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#putTopupsAutoRecharge"
          },
          "response": []
        },
        {
          "name": "List your pending top-ups with payment instructions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/topups/pending",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "topups",
                "pending"
              ]
            },
            "description": "Pending crypto and wire top-ups with the address or bank details to complete them. Pending top-ups expire after 7 days. `amountUsd` here is a plain JSON number.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/top-ups#getTopupsPending"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Payouts",
      "description": "Withdraw your seller balance. Dashboard session only.",
      "item": [
        {
          "name": "List your payout requests",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/payouts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "payouts"
              ]
            },
            "description": "Your 100 most recent payouts, newest first.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\nReference: https://packetexchange.io/api-docs/reference/payouts#getPayouts"
          },
          "response": []
        },
        {
          "name": "Request a payout of your seller balance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"method\": \"crypto\",\n  \"amountUsd\": 50\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/payouts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "payouts"
              ]
            },
            "description": "Withdraws from the withdrawable part of your balance (card top-ups inside the chargeback hold window are excluded). Crypto payouts need `cryptoAddress`; wire payouts need `wireBankDetails`. Requires a verified identity (403 `KYC_REQUIRED`). The amount is reserved immediately and the team processes the request.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\n**Careful:** Requests a payout of your balance.\n\nReference: https://packetexchange.io/api-docs/reference/payouts#postPayouts"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Dialer",
      "description": "Outbound dialer and SMS campaigns, their numbers, caller IDs and results.",
      "item": [
        {
          "name": "Ask the dialer assistant a question or give it an instruction",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/agent/ask",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "agent",
                "ask"
              ]
            },
            "description": "A conversational assistant that reads and operates YOUR dialer (campaigns, numbers, caller IDs). Send the `history` from the previous reply to continue a conversation. `actions` lists what it did, including any writes.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerAgentAsk"
          },
          "response": []
        },
        {
          "name": "Get dialer analytics across all your campaigns",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/analytics/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "analytics",
                "overview"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO date/time",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO date/time",
                  "disabled": true
                }
              ]
            },
            "description": "Defaults to the last 30 days when `from`/`to` are omitted.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerAnalyticsOverview"
          },
          "response": []
        },
        {
          "name": "Get detailed analytics for one campaign",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/analytics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "analytics"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCampaignsByIdAnalytics"
          },
          "response": []
        },
        {
          "name": "List your dialer and SMS campaigns",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCampaigns"
          },
          "response": []
        },
        {
          "name": "Create a dialer or SMS campaign",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"routeId\": \"<routeId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns"
              ]
            },
            "description": "Creates the campaign in `draft`. Add numbers (POST /campaigns/{id}/numbers or /contacts/import), then start it with POST /campaigns/{id}/control. A campaign created with a test key is simulated and never really dialled or billed.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCampaigns"
          },
          "response": []
        },
        {
          "name": "Get a campaign",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCampaignsById"
          },
          "response": []
        },
        {
          "name": "Update a campaign",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"messageBody\": \"<messageBody>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#putDialerCampaignsById"
          },
          "response": []
        },
        {
          "name": "Delete a campaign",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerCampaignsById"
          },
          "response": []
        },
        {
          "name": "Start, pause or stop a campaign",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"start\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/control",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "control"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Starting spends money: calls and messages are billed to your balance as they happen. Start is refused with VALIDATION_ERROR when the balance is insufficient or the campaign has no numbers.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Careful:** Starting a campaign dials real numbers or sends real messages, billed as they happen.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCampaignsByIdControl"
          },
          "response": []
        },
        {
          "name": "Mark a draft campaign ready to start",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/ready",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "ready"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Status only; every start-time check still runs when you start it. Refused when the campaign has no contacts yet.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCampaignsByIdReady"
          },
          "response": []
        },
        {
          "name": "Get live progress and spend for a campaign",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/stats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "stats"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCampaignsByIdStats"
          },
          "response": []
        },
        {
          "name": "Parse a contact file and suggest a column mapping",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filename\": \"<filename>\",\n  \"contentBase64\": \"<contentBase64>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/contacts/parse",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "contacts",
                "parse"
              ]
            },
            "description": "Upload a CSV or XLSX (multipart `file` part, or JSON `contentBase64`/`content`, up to about 12 MB). Returns the detected columns, a suggested mapping, a preview and the data rows to send back to /contacts/import. Nothing is saved.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerContactsParse"
          },
          "response": []
        },
        {
          "name": "Import mapped contacts into a campaign or a saved list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    [\n      \"<row>\"\n    ]\n  ],\n  \"mapping\": {\n    \"headerRowIndex\": 1,\n    \"columns\": {\n      \"phone\": 1,\n      \"name\": 1,\n      \"firstName\": 1,\n      \"lastName\": 1\n    },\n    \"extraColumns\": [\n      1\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/contacts/import",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "contacts",
                "import"
              ]
            },
            "description": "Rows are re-normalised to E.164 and de-duplicated server-side, so what the preview showed is what is stored.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerContactsImport"
          },
          "response": []
        },
        {
          "name": "List a campaign’s numbers with their call outcome",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/numbers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "numbers"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCampaignsByIdNumbers"
          },
          "response": []
        },
        {
          "name": "Add destination numbers to a campaign",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"numbers\": [\n    \"+447700900123\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/numbers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "numbers"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Invalid and duplicate numbers are skipped and reported in `rejects`, not failed. The campaign becomes `ready` unless `keepDraft` is set.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCampaignsByIdNumbers"
          },
          "response": []
        },
        {
          "name": "Remove every number from a campaign",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/numbers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "numbers"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerCampaignsByIdNumbers"
          },
          "response": []
        },
        {
          "name": "Remove one number from a campaign",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/numbers/:numberId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "numbers",
                ":numberId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "numberId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerCampaignsByIdNumbersByNumberId"
          },
          "response": []
        },
        {
          "name": "List a campaign’s caller IDs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/clis",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "clis"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCampaignsByIdClis"
          },
          "response": []
        },
        {
          "name": "Add caller IDs to a campaign",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"clis\": [\n    \"+447700900123\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/clis",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "clis"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Up to 100 per request. Caller IDs rotate round-robin across calls unless a caller-ID set is assigned.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCampaignsByIdClis"
          },
          "response": []
        },
        {
          "name": "Remove every caller ID from a campaign",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/clis",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "clis"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerCampaignsByIdClis"
          },
          "response": []
        },
        {
          "name": "List your caller-ID sets",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCallerIds"
          },
          "response": []
        },
        {
          "name": "Create a caller-ID set",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCallerIds"
          },
          "response": []
        },
        {
          "name": "Get a caller-ID set",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCallerIdsById"
          },
          "response": []
        },
        {
          "name": "Rename or describe a caller-ID set",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"description\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#patchDialerCallerIdsById"
          },
          "response": []
        },
        {
          "name": "Delete a caller-ID set",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Campaigns using the set are detached from it and fall back to their own caller-ID list.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerCallerIdsById"
          },
          "response": []
        },
        {
          "name": "List the caller IDs in a set, with usage stats",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id/numbers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id",
                "numbers"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCallerIdsByIdNumbers"
          },
          "response": []
        },
        {
          "name": "Add caller IDs to a set",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"clis\": [\n    \"+447700900123\"\n  ],\n  \"paste\": \"<paste>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id/numbers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id",
                "numbers"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Send ONE of: `clis` (a list), `paste` (free text), a file (multipart `file` part, or `contentBase64`/`content`). Numbers must be E.164; invalid and duplicate entries are reported in `rejects`.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCallerIdsByIdNumbers"
          },
          "response": []
        },
        {
          "name": "Add your revenue share numbers to a caller-ID set",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"takingIds\": [\n    \"<takingId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id/from-revshare",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id",
                "from-revshare"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Omit `takingIds` (or pass \"all\") to add every active revenue share number you hold.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCallerIdsByIdFromRevshare"
          },
          "response": []
        },
        {
          "name": "Update one caller ID in a set",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true,\n  \"weight\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id/numbers/:nid",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id",
                "numbers",
                ":nid"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "nid",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Enable or disable it, and set its weight, caps, cooldown, status, tags, label or notes.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#patchDialerCallerIdsByIdNumbersByNid"
          },
          "response": []
        },
        {
          "name": "Remove one caller ID from a set",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id/numbers/:nid",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id",
                "numbers",
                ":nid"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "nid",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerCallerIdsByIdNumbersByNid"
          },
          "response": []
        },
        {
          "name": "Enable, disable or delete many caller IDs in a set",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"enable\",\n  \"cliIds\": [\n    \"<cliId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id/numbers/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id",
                "numbers",
                "bulk"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCallerIdsByIdNumbersBulk"
          },
          "response": []
        },
        {
          "name": "Get usage stats for a caller-ID set",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/caller-ids/:id/stats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "caller-ids",
                ":id",
                "stats"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCallerIdsByIdStats"
          },
          "response": []
        },
        {
          "name": "Assign a caller-ID set and rotation strategy to a campaign",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cliSetId\": \"<cliSetId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/campaigns/:id/cli",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "campaigns",
                ":id",
                "cli"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#putDialerCampaignsByIdCli"
          },
          "response": []
        },
        {
          "name": "Build a call-back list from callers to your revenue share numbers",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"takingIds\": [\n    \"<takingId>\"\n  ],\n  \"from\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/target-lists/from-revshare-cdr",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "target-lists",
                "from-revshare-cdr"
              ]
            },
            "description": "Returns the distinct inbound callers in the window. Revenue share call records keep only a MASKED prefix of each caller, so entries are marked `dialable: false` and are not saved as a dial list; `limitation` explains this when it applies.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerTargetListsFromRevshareCdr"
          },
          "response": []
        },
        {
          "name": "Match inbound callers to the caller IDs in a set",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/target-lists/compatible?cliSetId=%3CcliSetId%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "target-lists",
                "compatible"
              ],
              "query": [
                {
                  "key": "cliSetId",
                  "value": "<cliSetId>",
                  "description": "(Required)"
                },
                {
                  "key": "takingIds",
                  "value": "",
                  "description": "(Optional) \"all\" or comma-separated revenue share taking ids",
                  "disabled": true
                }
              ]
            },
            "description": "For each caller ID in the set, the inbound callers reachable from its country. `takingIds` may be comma-separated.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerTargetListsCompatible"
          },
          "response": []
        },
        {
          "name": "Match inbound callers to a caller-ID set and optionally save them",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cliSetId\": \"<cliSetId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/target-lists/compatible",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "target-lists",
                "compatible"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerTargetListsCompatible"
          },
          "response": []
        },
        {
          "name": "Preview a cleaned number list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"numbers\": [\n    \"+447700900123\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/target-lists/refine",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "target-lists",
                "refine"
              ]
            },
            "description": "De-duplicates, filters by country dial code or prefix, and optionally removes do-not-call entries. Nothing is saved.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerTargetListsRefine"
          },
          "response": []
        },
        {
          "name": "Save numbers as a contact list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"numbers\": [\n    \"+447700900123\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/target-lists/save",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "target-lists",
                "save"
              ]
            },
            "description": "Only valid full E.164 numbers are stored.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerTargetListsSave"
          },
          "response": []
        },
        {
          "name": "List your SMS templates",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/templates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "templates"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerTemplates"
          },
          "response": []
        },
        {
          "name": "Create an SMS template",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"body\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/templates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "templates"
              ]
            },
            "description": "`{{variable}}` placeholders are stored as written; per-recipient merge is not applied yet.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerTemplates"
          },
          "response": []
        },
        {
          "name": "Update an SMS template",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"body\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/templates/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "templates",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#patchDialerTemplatesById"
          },
          "response": []
        },
        {
          "name": "Delete an SMS template",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/templates/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "templates",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerTemplatesById"
          },
          "response": []
        },
        {
          "name": "List your saved contact lists",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/contact-lists",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "contact-lists"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerContactLists"
          },
          "response": []
        },
        {
          "name": "Create a saved contact list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"numbers\": [\n    \"+447700900123\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/contact-lists",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "contact-lists"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerContactLists"
          },
          "response": []
        },
        {
          "name": "Get a saved contact list with its numbers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/contact-lists/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "contact-lists",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerContactListsById"
          },
          "response": []
        },
        {
          "name": "Delete a saved contact list",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/contact-lists/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "contact-lists",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerContactListsById"
          },
          "response": []
        },
        {
          "name": "List your simple caller-ID lists",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/cli-sets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "cli-sets"
              ]
            },
            "description": "The older named caller-ID lists used by the campaign wizard. For rotation, caps and stats use /dialer/caller-ids.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/dialer#getDialerCliSets"
          },
          "response": []
        },
        {
          "name": "Create a simple caller-ID list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"clis\": [\n    \"+447700900123\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dialer/cli-sets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "cli-sets"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#postDialerCliSets"
          },
          "response": []
        },
        {
          "name": "Delete a simple caller-ID list",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dialer/cli-sets/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dialer",
                "cli-sets",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/dialer#deleteDialerCliSetsById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "AI voice agents",
      "description": "Build, preview and attach AI voice agents to campaigns.",
      "item": [
        {
          "name": "List your AI voice agents",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/ai-agents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#getAiAgents"
          },
          "response": []
        },
        {
          "name": "Create an AI voice agent",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"systemPrompt\": \"<systemPrompt>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/ai-agents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#postAiAgents"
          },
          "response": []
        },
        {
          "name": "List the voices an agent can speak with",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/ai-agents/voices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents",
                "voices"
              ]
            },
            "description": "A trimmed list (about 60), English non-premium voices first.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#getAiAgentsVoices"
          },
          "response": []
        },
        {
          "name": "Hear a voice speak a short line",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"voiceId\": \"<voiceId>\",\n  \"text\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/ai-agents/voices/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents",
                "voices",
                "preview"
              ]
            },
            "description": "Returns MP3 audio of `text` (up to 300 characters) in the chosen voice.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#postAiAgentsVoicesPreview"
          },
          "response": []
        },
        {
          "name": "Draft an agent from a plain-English description",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"description\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/ai-agents/draft",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents",
                "draft"
              ]
            },
            "description": "Turns a description such as \"call leads and book demos\" into a name, opening line, script, guardrails and suggested tools. Nothing is saved; pass the result to POST /ai-agents.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#postAiAgentsDraft"
          },
          "response": []
        },
        {
          "name": "Get an AI voice agent",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/ai-agents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#getAiAgentsById"
          },
          "response": []
        },
        {
          "name": "Update an AI voice agent",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"voiceId\": \"<voiceId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/ai-agents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#patchAiAgentsById"
          },
          "response": []
        },
        {
          "name": "Delete an AI voice agent",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/ai-agents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#deleteAiAgentsById"
          },
          "response": []
        },
        {
          "name": "Simulate one conversation turn with an agent",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/ai-agents/:id/simulate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "ai-agents",
                ":id",
                "simulate"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Send what the callee said (`message`) plus the prior turns (`history`); the agent answers with its spoken reply and what it would do next. No call is placed and nothing is billed.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/ai-voice-agents#postAiAgentsByIdSimulate"
          },
          "response": []
        }
      ]
    },
    {
      "name": "CLI tests",
      "description": "Caller-ID tests on real handsets.",
      "item": [
        {
          "name": "List your caller-ID tests",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests"
              ],
              "query": [
                {
                  "key": "routeId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "blendRouteId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#getCliTests"
          },
          "response": []
        },
        {
          "name": "Run a caller-ID test on a route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\",\n  \"displayCli\": \"+447700900123\",\n  \"testCountry\": \"United Kingdom\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/cli-tests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests"
              ]
            },
            "description": "Places a real call to a test handset in the destination country and reports what caller ID it displayed. Give exactly one of `routeId` or `blendRouteId`; a blend runs one test per member route.\n\n**Billing:** $0.50 per test, charged only if the call rang the handset (once per test). A call that never rings costs nothing. `GET /cli-tests/quota` returns the current price as `costPerTest`.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Careful:** Places a real test call to a handset. $0.50 per test, charged only if the call rang.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#postCliTests"
          },
          "response": []
        },
        {
          "name": "Check whether handset caller-ID testing is available",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/provider-status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "provider-status"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#getCliTestsProviderStatus"
          },
          "response": []
        },
        {
          "name": "List the countries with test handsets online",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/testable-destinations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "testable-destinations"
              ]
            },
            "description": "All fields are null when availability could not be checked.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#getCliTestsTestableDestinations"
          },
          "response": []
        },
        {
          "name": "Get your caller-ID test quota and price",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/quota",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "quota"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#getCliTestsQuota"
          },
          "response": []
        },
        {
          "name": "Preview a route liveness test before starting it",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeIds\": [\n    \"<routeId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/cli-tests/batches/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "batches",
                "preview"
              ]
            },
            "description": "For \"Test these routes\": checks each route you would test, one by one, with the same access rule as a single caller-ID test (voice, and public, yours or bought), and returns what the confirm step needs: which routes can be tested and why not, the most it can cost, handsets online per country, the expected time and your hourly quota. Writes nothing and charges nothing.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#postCliTestsBatchesPreview"
          },
          "response": []
        },
        {
          "name": "List your route liveness tests",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/batches",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "batches"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Newest first, each with its per-route rows.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#getCliTestsBatches"
          },
          "response": []
        },
        {
          "name": "Start a route liveness test on several routes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeIds\": [\n    \"<routeId>\"\n  ],\n  \"searchLabel\": \"<searchLabel>\",\n  \"displayCli\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/cli-tests/batches",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "batches"
              ]
            },
            "description": "Places one real test call over each route to a handset in its destination country, to show which routes are live right now, and reports the caller ID the handset displayed. Takes 2 to 20 voice routes (duplicates are merged). Calls are paced per country by the handsets online, and a route waits up to the handset wait time before it closes as not tested.\n\n**Billing:** each route is charged the caller-ID test price ONLY if the call rang, once. Routes that do not ring, are not tested or are cancelled cost nothing. Your balance must cover `routeCount x costPerTest` before it starts.\n\n**Refusals:** 400 VALIDATION_ERROR when the handset network is not connected, when fewer than 2 or more than the maximum routes are sent, when the test would pass your hourly test-call cap, when your balance does not cover the ceiling, or when any route cannot be tested (then `error.details.routes` lists `{ id, name, reason }` for each and nothing starts). 409 CONFLICT when you already have a route test running. Preview with POST /cli-tests/batches/preview first.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Careful:** Places a real test call to a handset. $0.50 per test, charged only if the call rang.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#postCliTestsBatches"
          },
          "response": []
        },
        {
          "name": "Get a route liveness test and each route's result",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/batches/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "batches",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Live per-route status. Poll while `active` is true (every few seconds is plenty); caller-ID verdicts can arrive for up to 24 hours after that.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#getCliTestsBatchesById"
          },
          "response": []
        },
        {
          "name": "Cancel a running route liveness test",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/batches/:id/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "batches",
                ":id",
                "cancel"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Every route not yet called is cancelled and never charged. A call already ringing finishes normally and is billed only if it rang. A test that already finished answers 400 VALIDATION_ERROR.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#postCliTestsBatchesByIdCancel"
          },
          "response": []
        },
        {
          "name": "Test a caller ID on your own switch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sipEndpoint\": \"<sipEndpoint>\",\n  \"displayCli\": \"+447700900123\",\n  \"testCountry\": \"United Kingdom\",\n  \"testCountryCode\": \"<testCountryCode>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/cli-tests/quick",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                "quick"
              ]
            },
            "description": "For a switch not hosted here: give its SIP address and the caller ID to present. A private test-only route is set up for you, and the test is reported like any other: $0.50, charged only if the call rang the handset.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\n**Careful:** Places a real test call to a handset. $0.50 per test, charged only if the call rang.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#postCliTestsQuick"
          },
          "response": []
        },
        {
          "name": "Get a caller-ID test and its result",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#getCliTestsById"
          },
          "response": []
        },
        {
          "name": "Cancel a pending or scheduled caller-ID test",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/cli-tests/:id/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "cli-tests",
                ":id",
                "cancel"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Tests already in progress or finished cannot be cancelled.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/cli-tests#postCliTestsByIdCancel"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Do not call",
      "description": "Your opt-out and suppression list, applied to dialer and SMS traffic.",
      "item": [
        {
          "name": "List your do-not-call entries",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dnc",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dnc"
              ]
            },
            "description": "Your own entries plus platform-wide ones. Both are suppressed from dialer and SMS traffic.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/do-not-call#getDnc"
          },
          "response": []
        },
        {
          "name": "Add a number to your do-not-call list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"phoneNumber\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dnc",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dnc"
              ]
            },
            "description": "Adding a number already on the list returns the existing entry.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/do-not-call#postDnc"
          },
          "response": []
        },
        {
          "name": "Download your do-not-call list as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dnc/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dnc",
                "export"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/do-not-call#getDncExport"
          },
          "response": []
        },
        {
          "name": "Add many numbers to your do-not-call list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"numbers\": [\n    \"+447700900123\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/dnc/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dnc",
                "bulk"
              ]
            },
            "description": "Up to 10,000 per request. Numbers already listed are skipped.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/do-not-call#postDncBulk"
          },
          "response": []
        },
        {
          "name": "Remove a number from your do-not-call list",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dnc/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dnc",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Only your own entries can be removed; a platform-wide entry or another account's id is 404.\n\n**Access:** API key. Scoped keys need `dialer:write`.\n\nReference: https://packetexchange.io/api-docs/reference/do-not-call#deleteDncById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Interconnections",
      "description": "The SIP IP whitelist and connectivity tests for your traffic.",
      "item": [
        {
          "name": "List your whitelisted source IPs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnections/ips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                "ips"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#getInterconnectionsIps"
          },
          "response": []
        },
        {
          "name": "Whitelist a source IP for your traffic",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ipAddress\": \"203.0.113.10\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/interconnections/ips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                "ips"
              ]
            },
            "description": "An address can authenticate for one account only; an address already registered elsewhere is refused with VALIDATION_ERROR.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#postInterconnectionsIps"
          },
          "response": []
        },
        {
          "name": "Remove a whitelisted source IP",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnections/ips/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                "ips",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Traffic from the address is refused from then on.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#deleteInterconnectionsIpsById"
          },
          "response": []
        },
        {
          "name": "List your interconnections",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnections",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections"
              ]
            },
            "description": "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.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#getInterconnections"
          },
          "response": []
        },
        {
          "name": "Get an interconnection",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnections/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "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.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#getInterconnectionsById"
          },
          "response": []
        },
        {
          "name": "Update an interconnection",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"buyerEndpoint\": {},\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/interconnections/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#putInterconnectionsById"
          },
          "response": []
        },
        {
          "name": "Set delivery-receipt settings on an SMS interconnection",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"requestDlrs\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/interconnections/:id/dlr-config",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                ":id",
                "dlr-config"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Stores whether to request delivery receipts and the https callback URL for them.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#putInterconnectionsByIdDlrConfig"
          },
          "response": []
        },
        {
          "name": "Test connectivity on a purchased route",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"purchaseId\": \"<purchaseId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/interconnections/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                "test"
              ]
            },
            "description": "`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.\n\n**Access:** API key. Scoped keys need `account:write`.\n\n**Careful:** Sends real test traffic over the purchased route.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#postInterconnectionsTest"
          },
          "response": []
        },
        {
          "name": "Get a summary of your interconnect setup",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnections/status/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                "status",
                "summary"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#getInterconnectionsStatusSummary"
          },
          "response": []
        },
        {
          "name": "Get live connection health per purchase",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnections/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                "health"
              ]
            },
            "description": "SIP purchases report whether the switch is up and the route configured; SMS purchases report their SMPP bind state.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#getInterconnectionsHealth"
          },
          "response": []
        },
        {
          "name": "Rotate the SIP and SMPP credentials on a purchase",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/interconnections/:purchaseId/rotate-credentials",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "interconnections",
                ":purchaseId",
                "rotate-credentials"
              ],
              "variable": [
                {
                  "key": "purchaseId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Issues new credentials, returned once. The old ones stop working immediately and open SMPP binds are dropped.\n\n**Access:** API key. Scoped keys need `account:write`.\n\nReference: https://packetexchange.io/api-docs/reference/interconnections#postInterconnectionsByPurchaseIdRotateCredentials"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Connections",
      "description": "Your SIP and SMPP connections to the exchange.",
      "item": [
        {
          "name": "Look up the account behind a connect code",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connections/lookup?token=%3Ctoken%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections",
                "lookup"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "<token>",
                  "description": "(Required)"
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#getConnectionsLookup"
          },
          "response": []
        },
        {
          "name": "Get your connect code",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connections/code",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections",
                "code"
              ]
            },
            "description": "Created on first read. Share it (or its QR) so another account can connect with you.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#getConnectionsCode"
          },
          "response": []
        },
        {
          "name": "Rotate your connect code",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connections/code/rotate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections",
                "code",
                "rotate"
              ]
            },
            "description": "The old code stops working. Existing connections are kept.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#postConnectionsCodeRotate"
          },
          "response": []
        },
        {
          "name": "Connect with another account by its code",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"<token>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/connections/connect",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections",
                "connect"
              ]
            },
            "description": "Both sides can then see each other's public routes; the owner is notified.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#postConnectionsConnect"
          },
          "response": []
        },
        {
          "name": "List your connections",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connections",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#getConnections"
          },
          "response": []
        },
        {
          "name": "Get a connection with the routes each side can see",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connections/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#getConnectionsById"
          },
          "response": []
        },
        {
          "name": "Remove a connection",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/connections/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Private route access granted through the connection is revoked on both sides.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#deleteConnectionsById"
          },
          "response": []
        },
        {
          "name": "Share or stop sharing your private routes with a connection",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/connections/:id/share-private",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "connections",
                ":id",
                "share-private"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/connections#postConnectionsByIdSharePrivate"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch",
      "description": "The carrier switch: account-level settings, mode and overview. Every Switch operation requires a Switch plan.",
      "item": [
        {
          "name": "Count customers, trunks, suppliers and other Switch records",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/entity-counts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "entity-counts"
              ]
            },
            "description": "Headline counts for the Switch overview and navigation.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch#getSwitchEntityCounts"
          },
          "response": []
        },
        {
          "name": "Get your Switch console mode",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/mode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "mode"
              ]
            },
            "description": "`ai` (AI Control) or `advanced` (the full console); null when never chosen, which the dashboard treats as AI Control. `aiAvailable` is false for team members without team.manage.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch#getSwitchMode"
          },
          "response": []
        },
        {
          "name": "Set your Switch console mode",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mode\": \"ai\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/mode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "mode"
              ]
            },
            "description": "A display preference only; nothing on the switch changes.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch#putSwitchMode"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: customers",
      "description": "Customers you sell to: accounts, balances, credit, contacts and lifecycle.",
      "item": [
        {
          "name": "Get a Switch customer routing assignment",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/routing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "routing"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdRouting"
          },
          "response": []
        },
        {
          "name": "Assign routing to a Switch customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"dialplanId\": \"<dialplanId>\",\n  \"routePlanId\": \"<routePlanId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/routing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "routing"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Sets the dialplan, route group, failover group, strategy or a direct supplier on the customer's first trunk. Use the per-trunk routing endpoint for a specific trunk. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdRouting"
          },
          "response": []
        },
        {
          "name": "List a Switch customer trunks with traffic",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/trunks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "trunks"
              ],
              "query": [
                {
                  "key": "scope",
                  "value": "",
                  "description": "(Optional) Default operational (excludes archived)",
                  "disabled": true
                },
                {
                  "key": "periodHours",
                  "value": "",
                  "description": "(Optional) Window for the traffic figures; unrecognised values fall back to 24",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Each trunk with its authentication readiness, identification, addresses, routing, inherited limits and traffic over the chosen period.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdTrunks"
          },
          "response": []
        },
        {
          "name": "Add a trunk to a Switch customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\",\n  \"authMode\": \"ip\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/trunks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "trunks"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "If `sipPassword` is set it is echoed back ONCE in the response.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdTrunks"
          },
          "response": []
        },
        {
          "name": "List your Switch customers with live and 24-hour figures",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers"
              ]
            },
            "description": "Every customer with trunk health, live calls, 24-hour traffic, credit used, primary contact and problem flags.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomers"
          },
          "response": []
        },
        {
          "name": "Create a Switch customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers"
              ]
            },
            "description": "Creates the customer, a \"Default\" trunk carrying the same credentials and limits, an empty routing row, and the customer's first API key. The SIP password and API key are returned ONCE in this response.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomers"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer command-centre overview",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "overview"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "KPIs, live traffic, quality, activity, setup state and data freshness in one read.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdOverview"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Includes customer-level IP allow-list entries in `ipAcls`. The SIP password is never returned here; see the credentials endpoint.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersById"
          },
          "response": []
        },
        {
          "name": "Update a Switch customer",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\",\n  \"source\": \"marketplace\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Any field from create, all optional. A `status` change is applied as the matching lifecycle action, with the same guards and history entry as POST /lifecycle. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#patchSwitchCustomersById"
          },
          "response": []
        },
        {
          "name": "Delete a draft Switch customer",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Only for a customer that never carried traffic or held financial records. Offboard a real customer with the close lifecycle action instead.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#deleteSwitchCustomersById"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer lifecycle state and financial position",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/lifecycle",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "lifecycle"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Which lifecycle actions are available now, live calls, trunk counts, recent history and the money position a close or suspend would leave.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdLifecycle"
          },
          "response": []
        },
        {
          "name": "Activate, suspend, reactivate, close or reopen a Switch customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"activate\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/lifecycle",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "lifecycle"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The one write path for a customer's state. Live calls keep talking unless `disconnectLiveCalls` is true. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdLifecycle"
          },
          "response": []
        },
        {
          "name": "List a Switch customer lifecycle history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "history"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Default 50",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdHistory"
          },
          "response": []
        },
        {
          "name": "Rotate a Switch customer inbound SIP password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sip-password",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sip-password"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Generates a new password and returns it ONCE. The old password stops working immediately.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSipPassword"
          },
          "response": []
        },
        {
          "name": "Reveal a Switch customer inbound SIP credentials",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/credentials",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "credentials"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Returns the current username and password without changing them. Every reveal is recorded in the audit log.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdCredentials"
          },
          "response": []
        },
        {
          "name": "List what needs attention on a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/attention",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "attention"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A compact projection of the customer's open operational issues: quality, margin, credit and setup problems.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdAttention"
          },
          "response": []
        },
        {
          "name": "List operational issues on a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/issues",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "issues"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The full issue records behind the attention feed, with trigger, recovery rule, evidence and ownership.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdIssues"
          },
          "response": []
        },
        {
          "name": "List a Switch customer contacts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "contacts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Ordered by role, then priority. A contact is a person to reach, never a login.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdContacts"
          },
          "response": []
        },
        {
          "name": "Add a Switch customer contact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"role\": \"technical\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "contacts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdContacts"
          },
          "response": []
        },
        {
          "name": "Update a Switch customer contact",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"role\": \"technical\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/contacts/:contactId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "contacts",
                ":contactId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#patchSwitchCustomersByIdContactsByContactId"
          },
          "response": []
        },
        {
          "name": "Delete a Switch customer contact",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/contacts/:contactId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "contacts",
                ":contactId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#deleteSwitchCustomersByIdContactsByContactId"
          },
          "response": []
        },
        {
          "name": "List internal notes on a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "notes"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Operator-private notes with the author name. Never visible to the customer.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdNotes"
          },
          "response": []
        },
        {
          "name": "Add an internal note to a Switch customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "notes"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdNotes"
          },
          "response": []
        },
        {
          "name": "Edit, pin or flag a Switch customer note",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Hello from Acme\",\n  \"type\": \"general\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/notes/:noteId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "notes",
                ":noteId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "noteId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The author and creation time never change.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#patchSwitchCustomersByIdNotesByNoteId"
          },
          "response": []
        },
        {
          "name": "Delete a Switch customer note",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/notes/:noteId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "notes",
                ":noteId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "noteId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#deleteSwitchCustomersByIdNotesByNoteId"
          },
          "response": []
        },
        {
          "name": "Get per-destination quality for a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/quality",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "quality"
              ],
              "query": [
                {
                  "key": "window",
                  "value": "",
                  "description": "(Optional) Hours: 1, 24 or 168. Default 24",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) Explicit window start (ISO-8601); overrides `window`",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) Explicit window end (ISO-8601)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "ASR, NER and PDD per destination over a window, with verdicts. The KPI row and the table are both computed from the same filtered set.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdQuality"
          },
          "response": []
        },
        {
          "name": "Drill into one destination for a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/quality/destination?prefix=44",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "quality",
                "destination"
              ],
              "query": [
                {
                  "key": "window",
                  "value": "",
                  "description": "(Optional) Hours: 1, 24 or 168. Default 24",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) Explicit window start (ISO-8601); overrides `window`",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) Explicit window end (ISO-8601)",
                  "disabled": true
                },
                {
                  "key": "prefix",
                  "value": "44",
                  "description": "(Required) The destination prefix to open"
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Which customer trunks sent it, which supplier trunks carried it, which route groups send it there, and how far the sessions got. Uses the same window and filters as the quality table.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdQualityDestination"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer receivables summary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/billing-summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "billing-summary"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "What is owed, unbilled and unrated, payments recorded and ageing. Credit headroom is a separate endpoint (credit-position).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdBillingSummary"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer credit position",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/credit-position",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "credit-position"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Credit limit, exposure, funds reserved by live calls, available credit and whether the next call would be admitted. Read-only; it reports the admission arithmetic without performing it.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdCreditPosition"
          },
          "response": []
        },
        {
          "name": "Preview how a payment would be allocated to invoices",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/payments/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "payments",
                "preview"
              ],
              "query": [
                {
                  "key": "amount",
                  "value": "",
                  "description": "(Optional) USD amount to preview",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdPaymentsPreview"
          },
          "response": []
        },
        {
          "name": "Record a payment received from a Switch customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/payments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "payments"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Records money the customer already paid you (nothing is collected). It credits the wallet and pays open invoices oldest-due first in one transaction; anything left is held unapplied.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Records or reverses a payment on a Switch customer ledger.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdPayments"
          },
          "response": []
        },
        {
          "name": "Reverse a recorded Switch customer payment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/payments/:transactionId/reverse",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "payments",
                ":transactionId",
                "reverse"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "transactionId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A posted payment is never edited or deleted. This posts a linked reversal and unwinds its invoice allocations; both entries stay on the record.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Records or reverses a payment on a Switch customer ledger.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdPaymentsByTransactionIdReverse"
          },
          "response": []
        },
        {
          "name": "Preview an invoice for a Switch customer unbilled period",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"notes\": \"Example\",\n  \"includeBroughtForward\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/invoice-preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "invoice-preview"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The period runs from the last invoice's end (or the customer's creation) to now. Issues nothing; returns a `reviewToken` for generate-invoice.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdInvoicePreview"
          },
          "response": []
        },
        {
          "name": "Issue the reviewed invoice for a Switch customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reviewToken\": \"<reviewToken>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/generate-invoice",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "generate-invoice"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Requires the `reviewToken` from invoice-preview; refused with 409 INVOICE_REVIEW_STALE if the data changed since, or INVOICE_UNRATED_USAGE if unrated usage remains and was not excluded.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdGenerateInvoice"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer billing profile",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/billing-profile",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "billing-profile"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "`profile` is what was entered (null if none); `resolved` is what an invoice issued now would freeze, including fallbacks.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdBillingProfile"
          },
          "response": []
        },
        {
          "name": "Save a Switch customer billing profile",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"legalName\": \"<legalName>\",\n  \"tradingName\": \"<tradingName>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/billing-profile",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "billing-profile"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The customer's legal and billing identity. Frozen onto invoices issued afterwards; never changes an invoice already issued. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#putSwitchCustomersByIdBillingProfile"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer default sell deck and each trunk's deck",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-deck",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-deck"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "An unknown customer answers 404 NOT_FOUND.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellDeck"
          },
          "response": []
        },
        {
          "name": "Set a Switch customer default sell deck",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"deckId\": \"<deckId>\",\n  \"confirm\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-deck",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-deck"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Without `confirm: true` nothing changes: the response lists the trunks whose prices would change. With it, the deck is assigned and trunks that follow the customer default reprice from the next call.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#putSwitchCustomersByIdSellDeck"
          },
          "response": []
        },
        {
          "name": "Email a Switch customer a portal sign-in link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/portal-invite",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "portal-invite"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Sends a magic sign-in link to the customer's portal email. With no portal email set it answers 400 VALIDATION_ERROR.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Sends an email to a third party.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdPortalInvite"
          },
          "response": []
        },
        {
          "name": "List a Switch customer sell rates with buy cost and margin",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Prefix or destination text",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "view",
                  "value": "",
                  "description": "(Optional) Default current",
                  "disabled": true
                },
                {
                  "key": "origin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "increment",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cost",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "margin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRates"
          },
          "response": []
        },
        {
          "name": "Add or replace one Switch customer sell rate",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefix\": \"44\",\n  \"rate\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Takes effect now on the customer's default trunk. Use the per-trunk rate endpoints to price a specific trunk.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRates"
          },
          "response": []
        },
        {
          "name": "Count a Switch customer sell rates by view",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/counts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "counts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesCounts"
          },
          "response": []
        },
        {
          "name": "List upcoming sell-rate starts and ends for a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/upcoming",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "upcoming"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesUpcoming"
          },
          "response": []
        },
        {
          "name": "Get a Switch customer rate-change notice period and what is queued",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/notice",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "notice"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The notice period you give this customer before a sell-rate increase takes effect, how many sell-rate changes are queued behind it, and who a notice email would go to by default (commercial contacts, then billing contacts, then the portal email; at most 5). Needs the rates.view permission. An unknown customer, or one that is not yours, answers 404.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesNotice"
          },
          "response": []
        },
        {
          "name": "Set a Switch customer rate-change notice period",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rateNoticeDays\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/notice",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "notice"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "With a notice period, a rise on any of this customer's prices (hand edit, bulk paste, sheet import, markup, sell-deck publish or assignment) is queued and takes effect that many days out, at the next 00:00 UTC; decreases and new destinations still apply at once. 0 = every change applies immediately. The new period applies to rises written from now on; changes already queued keep their dates. Needs the rates.publish permission; the change is audited. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#putSwitchCustomersByIdSellRatesNotice"
          },
          "response": []
        },
        {
          "name": "List a Switch customer queued sell-rate changes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/notice/changes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "notice",
                "changes"
              ],
              "query": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": "(Optional) Only this trunk's changes",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Every sell-rate change queued for this customer and not yet in effect, with the rate in force today beside it. Soonest first, then by prefix; at most 50,000 rows. The same rows as the CSV the customer receives.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesNoticeChanges"
          },
          "response": []
        },
        {
          "name": "Download a Switch customer queued sell-rate changes as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/notice/changes.csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "notice",
                "changes.csv"
              ],
              "query": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": "(Optional) Only this trunk's changes",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The list from GET /switch/customers/{id}/sell-rates/notice/changes as the CSV the customer receives, for you to check or forward.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesNoticeChangesCsv"
          },
          "response": []
        },
        {
          "name": "Email a Switch customer a rate-change notice",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"trunkId\": \"<trunkId>\",\n  \"to\": [\n    \"you@example.com\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/notice/send",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "notice",
                "send"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Emails the customer every queued change with its effective date: a table of the first 100 in the message and the full list (up to 5,000 rows) as CSV in the text part. The email is white-label: it is sent under your brand, replies go to your own support address, and it does not mention PacketExchange. Recipients are `to` when given (up to 10), otherwise the default recipients from GET .../sell-rates/notice. Answers 400 VALIDATION_ERROR when there are no queued changes, when `trunkId` is not one of this customer's trunks, or when there is no one to send to. A recipient the mail service refused is listed in `failed`, not raised as an error. Needs the rates.publish permission; the send is audited. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Sends an email to a third party.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesNoticeSend"
          },
          "response": []
        },
        {
          "name": "Preview discontinuing a Switch customer whole sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveFrom\": \"<effectiveFrom>\",\n  \"effectiveLocal\": \"<effectiveLocal>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/discontinue-all/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "discontinue-all",
                "preview"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesDiscontinueAllPreview"
          },
          "response": []
        },
        {
          "name": "Discontinue a Switch customer whole sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveFrom\": \"<effectiveFrom>\",\n  \"effectiveLocal\": \"<effectiveLocal>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/discontinue-all",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "discontinue-all"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Closes every rate's period at the effective moment; nothing is deleted and priced calls keep their rate. New calls fall back to your operator deck, then markup over cost. Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesDiscontinueAll"
          },
          "response": []
        },
        {
          "name": "Discontinue one Switch customer sell rate",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveFrom\": \"<effectiveFrom>\",\n  \"effectiveLocal\": \"<effectiveLocal>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/:rateId/discontinue",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                ":rateId",
                "discontinue"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesByRateIdDiscontinue"
          },
          "response": []
        },
        {
          "name": "List sell-rate discontinuation events for a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/discontinuations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "discontinuations"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesDiscontinuations"
          },
          "response": []
        },
        {
          "name": "Reprice a Switch customer deck as a markup over buy cost",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"markupPct\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/apply-markup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "apply-markup"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesApplyMarkup"
          },
          "response": []
        },
        {
          "name": "Export a Switch customer sell rates as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates.csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates.csv"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Prefix or destination text",
                  "disabled": true
                },
                {
                  "key": "view",
                  "value": "",
                  "description": "(Optional) Default current",
                  "disabled": true
                },
                {
                  "key": "origin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "increment",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cost",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "margin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Takes the same filters as the list, with buy cost and margin columns.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesCsv"
          },
          "response": []
        },
        {
          "name": "Add or replace many Switch customer sell rates",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\n      \"prefix\": \"44\",\n      \"rate\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "bulk"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesBulk"
          },
          "response": []
        },
        {
          "name": "Discontinue one Switch customer sell rate now",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Kept for existing clients: the rate is discontinued immediately, not deleted.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#deleteSwitchCustomersByIdSellRatesByRateId"
          },
          "response": []
        },
        {
          "name": "Discontinue every Switch customer sell rate now",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/clear",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "clear"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesClear"
          },
          "response": []
        },
        {
          "name": "List scheduled (future-dated) sell rates for a Switch customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/scheduled",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "scheduled"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#getSwitchCustomersByIdSellRatesScheduled"
          },
          "response": []
        },
        {
          "name": "Schedule a future Switch customer sell-rate change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefix\": \"44\",\n  \"rate\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/schedule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "schedule"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The rate becomes active at the effective moment. Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdSellRatesSchedule"
          },
          "response": []
        },
        {
          "name": "Cancel a scheduled Switch customer sell rate",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/sell-rates/scheduled/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "sell-rates",
                "scheduled",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#deleteSwitchCustomersByIdSellRatesScheduledByRateId"
          },
          "response": []
        },
        {
          "name": "Set a Switch customer billing cycle and payment terms",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"billingCycle\": \"weekly\",\n  \"paymentTermsDays\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customers/:id/billing-settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customers",
                ":id",
                "billing-settings"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customers#postSwitchCustomersByIdBillingSettings"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: customer trunks",
      "description": "Customer trunks: addressing, credentials, limits, readiness and approvals.",
      "item": [
        {
          "name": "List the trunk authentication methods available to you",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/auth-modes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                "auth-modes"
              ]
            },
            "description": "For each method: what the customer must send and what the switch checks. Methods the platform cannot honour for you are omitted.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksAuthModes"
          },
          "response": []
        },
        {
          "name": "Update a Switch customer trunk",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\",\n  \"authMode\": \"ip\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Setting `status` to disabled stops new calls but keeps the trunk configurable. A `sipPassword` sent here is echoed back once. Archived trunks are frozen: restore first. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#patchSwitchCustomerTrunksByTrunkId"
          },
          "response": []
        },
        {
          "name": "Delete an unused Switch customer trunk",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Refused, naming the dependency, once the trunk has carried traffic, holds rates or routing, or is the customer's last trunk. Archive it instead. Check removability first.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#deleteSwitchCustomerTrunksByTrunkId"
          },
          "response": []
        },
        {
          "name": "Show the configuration actually in force on a trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/effective-config",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "effective-config"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Every setting with the value a call would meet and the level it was inherited from, resolved by the same code as the call path. Read-only.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdEffectiveConfig"
          },
          "response": []
        },
        {
          "name": "Archive a Switch customer trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/archive",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "archive"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Takes the trunk out of service and out of operational lists, and freezes it. Nothing is destroyed; restore brings it back disabled.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdArchive"
          },
          "response": []
        },
        {
          "name": "Restore an archived Switch customer trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/restore",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "restore"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Comes back disabled, so no traffic starts until you enable it.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRestore"
          },
          "response": []
        },
        {
          "name": "Preview what disabling, enabling or archiving a trunk would do",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/service-impact",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "service-impact"
              ],
              "query": [
                {
                  "key": "action",
                  "value": "",
                  "description": "(Optional) Default disable",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Live channels, recent traffic, whether it is the customer's last enabled trunk, and what survives.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdServiceImpact"
          },
          "response": []
        },
        {
          "name": "Check whether a Switch customer trunk can be deleted",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/removability",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "removability"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRemovability"
          },
          "response": []
        },
        {
          "name": "Clone a Switch customer trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "clone"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Copies the trunk's settings and sell rates to a new trunk on the same customer.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdClone"
          },
          "response": []
        },
        {
          "name": "List a trunk's allowed source addresses",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/ips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "ips"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdIps"
          },
          "response": []
        },
        {
          "name": "Allow a source address on a trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cidr\": \"<cidr>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/ips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "ips"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Stored in canonical form. Refused when it cannot be saved (see addresses/preview); overlaps with other entries are returned in `conflicts`. Applies to new calls only.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdIps"
          },
          "response": []
        },
        {
          "name": "List a trunk's addresses with overlaps and customer-level entries",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/addresses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "addresses"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The richer form of /ips: each entry with its canonical form and every overlapping entry on your switch, including addresses added on the customer.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdAddresses"
          },
          "response": []
        },
        {
          "name": "Preview an address before allowing it on a trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cidr\": \"<cidr>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/addresses/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "addresses",
                "preview"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Read-only: the canonical form, size, whether it would be refused, and what it overlaps.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdAddressesPreview"
          },
          "response": []
        },
        {
          "name": "Test a caller-ID rewrite rule against a sample number",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sample\": \"<sample>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/cli-rewrite/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                "cli-rewrite",
                "preview"
              ]
            },
            "description": "Dry run; saves nothing and needs no trunk.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksCliRewritePreview"
          },
          "response": []
        },
        {
          "name": "Remove an allowed source address from a trunk",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/ips/:aclId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "ips",
                ":aclId"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "aclId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#deleteSwitchCustomerTrunksByTrunkIdIpsByAclId"
          },
          "response": []
        },
        {
          "name": "Set routing on a Switch customer trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routePlanId\": \"<routePlanId>\",\n  \"failoverRoutePlanId\": \"<failoverRoutePlanId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/routing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "routing"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Route group, failover group, dialplan, strategy or a direct supplier for this trunk. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to have the save refused with 409 STALE_WRITE if someone changed the record since.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRouting"
          },
          "response": []
        },
        {
          "name": "Show the route wired up for a trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/routing-path",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "routing-path"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Customer, trunk, fixed route or route group, then supplier trunks, with ids. For what a specific number would do, use /switch/routing/preview.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRoutingPath"
          },
          "response": []
        },
        {
          "name": "Reveal a Switch customer trunk's SIP credentials",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/credentials",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "credentials"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Returns the current username and password without changing them. Every reveal is recorded in the audit log.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdCredentials"
          },
          "response": []
        },
        {
          "name": "Get a trunk's credential history and last successful authentication",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/credential-status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "credential-status"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Everything about the credential except its value: username, storage, last change and reveal, and the last call identified with it.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdCredentialStatus"
          },
          "response": []
        },
        {
          "name": "Record that a trunk credential was copied",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"field\": \"sipPassword\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/credentials/copied",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "credentials",
                "copied"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Writes an audit entry only. Call it when your interface copies a credential to the clipboard.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdCredentialsCopied"
          },
          "response": []
        },
        {
          "name": "Replace a Switch customer trunk's SIP password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mode\": \"generate\",\n  \"password\": \"correct-horse-battery-staple\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/sip-password",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "sip-password"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Generate one, or set one by hand with `mode: \"manual\"`. The new password is returned ONCE and the old one stops working immediately (no overlap window).\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdSipPassword"
          },
          "response": []
        },
        {
          "name": "List trunk configuration changes awaiting or after review",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-changes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-changes"
              ],
              "query": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional) Comma-separated statuses, e.g. pending,approved",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchTrunkChanges"
          },
          "response": []
        },
        {
          "name": "Approve and apply a trunk configuration change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"note\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-changes/:id/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-changes",
                ":id",
                "approve"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "`applied` is the trunk after the change, redacted like every trunk read (`sipAuthPasswordSet` / `smppPasswordSet` instead of the secrets). `driftedSinceRequest` lists fields that changed on the trunk after the request was made.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchTrunkChangesByIdApprove"
          },
          "response": []
        },
        {
          "name": "Reject a trunk configuration change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"note\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-changes/:id/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-changes",
                ":id",
                "reject"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchTrunkChangesByIdReject"
          },
          "response": []
        },
        {
          "name": "Withdraw your own pending trunk change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-changes/:id/withdraw",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-changes",
                ":id",
                "withdraw"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchTrunkChangesByIdWithdraw"
          },
          "response": []
        },
        {
          "name": "Get whether supplier trunk changes need approval",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-approval-setting",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-approval-setting"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchTrunkApprovalSetting"
          },
          "response": []
        },
        {
          "name": "Turn supplier trunk change approval on or off",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"requireTrunkApproval\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-approval-setting",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-approval-setting"
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchTrunkApprovalSetting"
          },
          "response": []
        },
        {
          "name": "Get whether trunk readiness blocks first activation",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-readiness-setting",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-readiness-setting"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchTrunkReadinessSetting"
          },
          "response": []
        },
        {
          "name": "Turn the trunk readiness gate on or off",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"requireTrunkReadiness\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/trunk-readiness-setting",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "trunk-readiness-setting"
              ]
            },
            "description": "When on, it can refuse only the first-ever activation of a new trunk; existing trunks are grandfathered and bundle trunks are exempt.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchTrunkReadinessSetting"
          },
          "response": []
        },
        {
          "name": "Get the sell deck in force on a trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/sell-deck",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "sell-deck"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The resolved deck, plus the customer and system defaults it did not pick, and a sentence saying which won.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdSellDeck"
          },
          "response": []
        },
        {
          "name": "Assign a sell deck to a trunk",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mode\": \"customer_default\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/sell-deck",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "sell-deck"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Without `confirm: true` nothing changes and the response shows what would be in force. With it, the trunk reprices from the next call.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#putSwitchCustomerTrunksByTrunkIdSellDeck"
          },
          "response": []
        },
        {
          "name": "Preview a sell-deck assignment for a trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/sell-deck/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "sell-deck",
                "preview"
              ],
              "query": [
                {
                  "key": "mode",
                  "value": "",
                  "description": "(Optional) Default customer_default",
                  "disabled": true
                },
                {
                  "key": "deckId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "What would be in force under a mode, computed by the same resolver. Writes nothing.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdSellDeckPreview"
          },
          "response": []
        },
        {
          "name": "List a trunk's sell rates with buy cost and margin",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Prefix or destination text",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "view",
                  "value": "",
                  "description": "(Optional) Default current",
                  "disabled": true
                },
                {
                  "key": "origin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "increment",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cost",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "margin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRates"
          },
          "response": []
        },
        {
          "name": "Add or replace one sell rate on a trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefix\": \"44\",\n  \"rate\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRates"
          },
          "response": []
        },
        {
          "name": "Count a trunk's sell rates by view",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/counts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "counts"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRatesCounts"
          },
          "response": []
        },
        {
          "name": "List upcoming sell-rate starts and ends on a trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/upcoming",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "upcoming"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRatesUpcoming"
          },
          "response": []
        },
        {
          "name": "List sell-rate discontinuation events on a trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/discontinuations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "discontinuations"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRatesDiscontinuations"
          },
          "response": []
        },
        {
          "name": "Preview discontinuing a trunk's whole sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveFrom\": \"<effectiveFrom>\",\n  \"effectiveLocal\": \"<effectiveLocal>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/discontinue-all/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "discontinue-all",
                "preview"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRatesDiscontinueAllPreview"
          },
          "response": []
        },
        {
          "name": "Discontinue a trunk's whole sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveFrom\": \"<effectiveFrom>\",\n  \"effectiveLocal\": \"<effectiveLocal>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/discontinue-all",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "discontinue-all"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Nothing is deleted; priced calls keep their rate. Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRatesDiscontinueAll"
          },
          "response": []
        },
        {
          "name": "Discontinue one sell rate on a trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveFrom\": \"<effectiveFrom>\",\n  \"effectiveLocal\": \"<effectiveLocal>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/:rateId/discontinue",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                ":rateId",
                "discontinue"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRatesByRateIdDiscontinue"
          },
          "response": []
        },
        {
          "name": "Add or replace many sell rates on a trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\n      \"prefix\": \"44\",\n      \"rate\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "bulk"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRatesBulk"
          },
          "response": []
        },
        {
          "name": "Discontinue one sell rate on a trunk now",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Kept for existing clients: the rate is discontinued immediately, not deleted.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#deleteSwitchCustomerTrunksByTrunkIdRatesByRateId"
          },
          "response": []
        },
        {
          "name": "Discontinue every sell rate on a trunk now",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/clear",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "clear"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRatesClear"
          },
          "response": []
        },
        {
          "name": "List scheduled (future-dated) sell rates on a trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/scheduled",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "scheduled"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRatesScheduled"
          },
          "response": []
        },
        {
          "name": "Schedule a future sell-rate change on a trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefix\": \"44\",\n  \"rate\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/schedule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "schedule"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The rate becomes active at the effective moment. Omit the effective fields to act now. Send either `effectiveFrom` (an instant with an offset) or `effectiveLocal` plus `timezone`; a bare date is refused because midnight differs by country.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRatesSchedule"
          },
          "response": []
        },
        {
          "name": "Cancel a scheduled sell rate on a trunk",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/scheduled/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "scheduled",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#deleteSwitchCustomerTrunksByTrunkIdRatesScheduledByRateId"
          },
          "response": []
        },
        {
          "name": "Reprice as a markup over buy cost from a trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"markupPct\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates/apply-markup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates",
                "apply-markup"
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Applies to the customer's deck; on a single-trunk customer that is this trunk's deck.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#postSwitchCustomerTrunksByTrunkIdRatesApplyMarkup"
          },
          "response": []
        },
        {
          "name": "Export a trunk's sell rates as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/customer-trunks/:trunkId/rates.csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "customer-trunks",
                ":trunkId",
                "rates.csv"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Prefix or destination text",
                  "disabled": true
                },
                {
                  "key": "view",
                  "value": "",
                  "description": "(Optional) Default current",
                  "disabled": true
                },
                {
                  "key": "origin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "increment",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cost",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "margin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "trunkId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Scoped to this trunk's deck; takes the same filters as the list.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-customer-trunks#getSwitchCustomerTrunksByTrunkIdRatesCsv"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: suppliers",
      "description": "Suppliers and providers you buy from: accounts, trunks, admission and diagnostics.",
      "item": [
        {
          "name": "List providers with their trunks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers"
              ]
            },
            "description": "Every provider on your switch, each with its trunks (secrets redacted) and endpoint counts, plus trunks not yet assigned to a provider.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProviders"
          },
          "response": []
        },
        {
          "name": "Create a provider",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/providers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers"
              ]
            },
            "description": "A provider is the carrier or company that owns one or more supplier trunks.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchProviders"
          },
          "response": []
        },
        {
          "name": "Get a provider with its trunks, endpoints and contacts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersById"
          },
          "response": []
        },
        {
          "name": "Update a provider",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"accountCode\": \"<accountCode>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Partial update; status is changed through POST /{id}/status instead. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to be refused with 409 STALE_WRITE if someone else saved in between.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#patchSwitchProvidersById"
          },
          "response": []
        },
        {
          "name": "Delete a provider",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Its trunks are NOT deleted: they are detached (ungrouped) with their routing intact.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchProvidersById"
          },
          "response": []
        },
        {
          "name": "Change a provider lifecycle status",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"draft\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "status"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Stops or resumes traffic on every trunk of the provider. The response says whether traffic changed and how many active trunks were affected.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchProvidersByIdStatus"
          },
          "response": []
        },
        {
          "name": "List a provider contacts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "contacts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersByIdContacts"
          },
          "response": []
        },
        {
          "name": "Add a provider contact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"noc\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "contacts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "One contact per role (NOC, rates, billing, finance, fraud, account, emergency).\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchProvidersByIdContacts"
          },
          "response": []
        },
        {
          "name": "Update a provider contact",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"noc\",\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/contacts/:contactId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "contacts",
                ":contactId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#patchSwitchProvidersByIdContactsByContactId"
          },
          "response": []
        },
        {
          "name": "Delete a provider contact",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/contacts/:contactId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "contacts",
                ":contactId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchProvidersByIdContactsByContactId"
          },
          "response": []
        },
        {
          "name": "List providers with their trunks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts"
              ]
            },
            "description": "Every provider on your switch, each with its trunks (secrets redacted) and endpoint counts, plus trunks not yet assigned to a provider. Deprecated alias of the same operation under /switch/providers.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSupplierAccounts"
          },
          "response": []
        },
        {
          "name": "Create a provider",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts"
              ]
            },
            "description": "A provider is the carrier or company that owns one or more supplier trunks. Deprecated alias of the same operation under /switch/providers.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSupplierAccounts"
          },
          "response": []
        },
        {
          "name": "Get a provider with its trunks, endpoints and contacts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Deprecated alias of the same operation under /switch/providers.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSupplierAccountsById"
          },
          "response": []
        },
        {
          "name": "Update a provider",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"accountCode\": \"<accountCode>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Partial update; status is changed through POST /{id}/status instead. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to be refused with 409 STALE_WRITE if someone else saved in between. Deprecated alias of the same operation under /switch/providers.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#patchSwitchSupplierAccountsById"
          },
          "response": []
        },
        {
          "name": "Delete a provider",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Its trunks are NOT deleted: they are detached (ungrouped) with their routing intact. Deprecated alias of the same operation under /switch/providers.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchSupplierAccountsById"
          },
          "response": []
        },
        {
          "name": "Change a provider lifecycle status",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"draft\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id",
                "status"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Stops or resumes traffic on every trunk of the provider. The response says whether traffic changed and how many active trunks were affected. Deprecated alias of the same operation under /switch/providers.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSupplierAccountsByIdStatus"
          },
          "response": []
        },
        {
          "name": "List a provider contacts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id",
                "contacts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Deprecated alias of the same operation under /switch/providers.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSupplierAccountsByIdContacts"
          },
          "response": []
        },
        {
          "name": "Add a provider contact",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"noc\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id/contacts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id",
                "contacts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "One contact per role (NOC, rates, billing, finance, fraud, account, emergency). Deprecated alias of the same operation under /switch/providers.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSupplierAccountsByIdContacts"
          },
          "response": []
        },
        {
          "name": "Update a provider contact",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"noc\",\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id/contacts/:contactId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id",
                "contacts",
                ":contactId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Deprecated alias of the same operation under /switch/providers.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#patchSwitchSupplierAccountsByIdContactsByContactId"
          },
          "response": []
        },
        {
          "name": "Delete a provider contact",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/supplier-accounts/:id/contacts/:contactId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "supplier-accounts",
                ":id",
                "contacts",
                ":contactId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "contactId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Deprecated alias of the same operation under /switch/providers.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchSupplierAccountsByIdContactsByContactId"
          },
          "response": []
        },
        {
          "name": "Get call totals for a provider across its trunks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/call-records",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "call-records"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO start of the window",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO end of the window",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Calls, answer rate, minutes and cost over a window, overall and per trunk. `cost` and `minutes` are JSON numbers here (report figures, not ledger amounts).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersByIdCallRecords"
          },
          "response": []
        },
        {
          "name": "List a provider payables and unbilled cost",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/invoices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "invoices"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The provider billing terms, its payable documents, and cost carried since the last one that has not been raised yet (a JSON number).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersByIdInvoices"
          },
          "response": []
        },
        {
          "name": "List what is wrong with a provider right now",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/alerts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "alerts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Derived on every read, never stored: unroutable status, trunks in fault or draining, expiring credentials, expired trunks.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersByIdAlerts"
          },
          "response": []
        },
        {
          "name": "Get the change history for a provider and its trunks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/audit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "audit"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Max entries (default 100)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersByIdAudit"
          },
          "response": []
        },
        {
          "name": "List billing disputes with a provider",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/disputes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "disputes"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersByIdDisputes"
          },
          "response": []
        },
        {
          "name": "Open a billing dispute with a provider",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"periodStart\": \"<periodStart>\",\n  \"periodEnd\": \"<periodEnd>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/disputes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "disputes"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchProvidersByIdDisputes"
          },
          "response": []
        },
        {
          "name": "Update a billing dispute",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"periodStart\": \"<periodStart>\",\n  \"periodEnd\": \"<periodEnd>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/disputes/:disputeId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "disputes",
                ":disputeId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "disputeId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#patchSwitchProvidersByIdDisputesByDisputeId"
          },
          "response": []
        },
        {
          "name": "List SIP endpoints of a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "endpoints"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Primary and backup addresses with derived health and flap reports. A trunk with an address but no endpoint rows has its address adopted as endpoint 1 on first read.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdEndpoints"
          },
          "response": []
        },
        {
          "name": "Add a SIP endpoint to a supplier trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"host\": \"203.0.113.10\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "endpoints"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdEndpoints"
          },
          "response": []
        },
        {
          "name": "Update a SIP endpoint",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"primary\",\n  \"host\": \"203.0.113.10\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/endpoints/:endpointId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "endpoints",
                ":endpointId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "endpointId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#patchSwitchSuppliersByIdEndpointsByEndpointId"
          },
          "response": []
        },
        {
          "name": "Remove a SIP endpoint",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/endpoints/:endpointId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "endpoints",
                ":endpointId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "endpointId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The last endpoint of a trunk cannot be removed: add its replacement first.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchSuppliersByIdEndpointsByEndpointId"
          },
          "response": []
        },
        {
          "name": "Render the SBC gateway configuration for a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/sbc-profile",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "sbc-profile"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Read-only. Names which settings are profile-level (and so need a deploy) rather than applied per call. Each read is recorded in the audit log.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdSbcProfile"
          },
          "response": []
        },
        {
          "name": "Render the SBC gateway configuration for a provider",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/providers/:id/sbc-profile",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "providers",
                ":id",
                "sbc-profile"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Read-only. One rendered profile per trunk; `needsReload` says whether any of it needs deploying. Each read is recorded in the audit log.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchProvidersByIdSbcProfile"
          },
          "response": []
        },
        {
          "name": "List health events for a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/health-events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "health-events"
              ],
              "query": [
                {
                  "key": "endpointId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "days",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "kinds",
                  "value": "",
                  "description": "(Optional) Comma-separated: probe, transition, auto_disable, restore, degraded",
                  "disabled": true
                },
                {
                  "key": "before",
                  "value": "",
                  "description": "(Optional) ISO cursor from nextBefore",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Probe results, up/down transitions, auto-disables, restores and degradations. Probe rows are kept 7 days, state changes 90 days. Page with `before` = the previous `nextBefore`.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdHealthEvents"
          },
          "response": []
        },
        {
          "name": "Get the flap report for a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/flap-report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "flap-report"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Endpoints that changed state repeatedly in the window. Observe-only: nothing is disabled because of it.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdFlapReport"
          },
          "response": []
        },
        {
          "name": "Send a test call to a supplier trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"endpointId\": \"<endpointId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/test-call",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "test-call"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A real INVITE from every media worker, on demand. Never touches health counters or state. Address details are withheld for a marketplace trunk. Audited.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 6 requests per minute.\n\n**Careful:** Places a real test call or sends a real test SMS over the trunk.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdTestCall"
          },
          "response": []
        },
        {
          "name": "Move a supplier trunk to another provider",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"supplierId\": \"<supplierId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/assign-account",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "assign-account"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Pass `supplierId: null` to ungroup the trunk.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdAssignAccount"
          },
          "response": []
        },
        {
          "name": "List supplier trunks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers"
              ]
            },
            "description": "Every vendor trunk on your switch, newest first. SIP and SMPP secrets are replaced by *Set booleans.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliers"
          },
          "response": []
        },
        {
          "name": "Create a supplier trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers"
              ]
            },
            "description": "A trunk needs at least one reachable endpoint: a SIP host, an HTTPS SMS delivery URL, or an SMPP host.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliers"
          },
          "response": []
        },
        {
          "name": "Get live metrics for active supplier trunks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/live",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                "live"
              ]
            },
            "description": "Concurrent channels, peak CPS, reachability and the last hour of answer rate and post-dial delay per active trunk. Meant to be polled.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersLive"
          },
          "response": []
        },
        {
          "name": "Show where a supplier trunk sits in routing",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/routing",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "routing"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The route groups that reference it and at what priority, and any customer trunk wired straight to it. `unrouted` is true when no traffic can reach it.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdRouting"
          },
          "response": []
        },
        {
          "name": "Promote a marketplace purchase to a supplier trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"routeId\": \"<routeId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/promote",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                "promote"
              ]
            },
            "description": "Turns a route you bought on the marketplace into a trunk your switch can route to. Idempotent per route: promoting again returns the existing trunk. The seller address stays hidden.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersPromote"
          },
          "response": []
        },
        {
          "name": "Reveal a supplier trunk SIP credentials",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/credentials",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "credentials"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The one audited way to read a stored SIP password back. Refused (403) for a trunk promoted from the marketplace, whose login belongs to the seller.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdCredentials"
          },
          "response": []
        },
        {
          "name": "Get a supplier trunk overview and today figures",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "overview"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Trunk settings plus KPIs: today cost, minutes and calls, last-hour answer rate, ACD, PDD and MOS, live channels, CPS and outstanding payables. KPI money is a JSON number.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdOverview"
          },
          "response": []
        },
        {
          "name": "Get quality by destination for a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/quality",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "quality"
              ],
              "query": [
                {
                  "key": "window",
                  "value": "",
                  "description": "(Optional) Window in hours (default 24)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdQuality"
          },
          "response": []
        },
        {
          "name": "List quality and fraud protection events for a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/protection-events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "protection-events"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "What the protection sweep saw on this trunk and what it did (enforced) or would have done (observe mode).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdProtectionEvents"
          },
          "response": []
        },
        {
          "name": "Get a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Includes its inbound IP ACLs, a loopback warning when its address is also one of your customers, and the derived health state.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersById"
          },
          "response": []
        },
        {
          "name": "Update a supplier trunk",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\",\n  \"supplierId\": \"<supplierId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Partial update. When trunk change approval is on, the change is queued for review instead and the response carries `pendingChange`. Send `X-If-Unchanged-Since: <updatedAt you loaded>` to be refused with 409 STALE_WRITE if someone else saved in between.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#patchSwitchSuppliersById"
          },
          "response": []
        },
        {
          "name": "Delete a supplier trunk",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchSuppliersById"
          },
          "response": []
        },
        {
          "name": "Get the production readiness checklist for a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/readiness",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "readiness"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A pure read: it reports and never blocks. Bundle carriage trunks come back exempt with no checks.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdReadiness"
          },
          "response": []
        },
        {
          "name": "List configuration versions of a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/config-history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "config-history"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdConfigHistory"
          },
          "response": []
        },
        {
          "name": "Get one configuration version of a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/config-history/:versionId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "config-history",
                ":versionId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "versionId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The full snapshot as of that version, plus the previous version snapshot for comparison.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdConfigHistoryByVersionId"
          },
          "response": []
        },
        {
          "name": "Test a supplier trunk SMS delivery",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/test-sms",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "test-sms"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "SMPP performs a real bind with the stored credentials and sends nothing; HTTP can only be checked for a well-formed https URL.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 20 requests per minute.\n\n**Careful:** Places a real test call or sends a real test SMS over the trunk.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdTestSms"
          },
          "response": []
        },
        {
          "name": "Test unsaved SMS delivery details",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"smsDeliveryMethod\": \"http\",\n  \"smsDeliveryUrl\": \"<smsDeliveryUrl>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/test-sms",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                "test-sms"
              ]
            },
            "description": "For the create form. SMPP performs a real bind and sends nothing; HTTP can only be checked for a well-formed https URL. The password is used for this one handshake and never stored.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 20 requests per minute.\n\n**Careful:** Places a real test call or sends a real test SMS over the trunk.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersTestSms"
          },
          "response": []
        },
        {
          "name": "Email a supplier portal sign-in link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/portal-invite",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "portal-invite"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Sends a magic link to the trunk `portalEmail`. When no portal email is set it answers 400 VALIDATION_ERROR.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Sends an email to a third party.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdPortalInvite"
          },
          "response": []
        },
        {
          "name": "List the cost deck in force on a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Digits; matches prefixes starting with them",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) 1-1000, default 100",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Active rows only; scheduled and archived rows have their own endpoints. Search matches a prefix start.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdRates"
          },
          "response": []
        },
        {
          "name": "Set the cost for one prefix on a supplier trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefix\": \"44\",\n  \"rate\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Creates or replaces the active rate for the prefix (and origin), effective now.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdRates"
          },
          "response": []
        },
        {
          "name": "Set costs for many prefixes on a supplier trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\n      \"prefix\": \"44\",\n      \"rate\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "bulk"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdRatesBulk"
          },
          "response": []
        },
        {
          "name": "Delete one cost row from a supplier trunk",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchSuppliersByIdRatesByRateId"
          },
          "response": []
        },
        {
          "name": "Clear the cost deck of a supplier trunk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/clear",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "clear"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The deck is archived, not destroyed: restore it with POST /{id}/rates/restore.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdRatesClear"
          },
          "response": []
        },
        {
          "name": "List archived cost decks of a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/archived",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "archived"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdRatesArchived"
          },
          "response": []
        },
        {
          "name": "Restore an archived cost deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"revisionId\": \"<revisionId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/restore",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "restore"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Restores the newest archive unless `revisionId` names one. Each row returns to the status it was archived from.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdRatesRestore"
          },
          "response": []
        },
        {
          "name": "List scheduled cost changes on a supplier trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/scheduled",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "scheduled"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdRatesScheduled"
          },
          "response": []
        },
        {
          "name": "Schedule a future cost change for one prefix",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefix\": \"44\",\n  \"rate\": 1,\n  \"effectiveFrom\": \"2026-10-01T09:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/schedule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "schedule"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A date in the past or now applies the rate immediately instead.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#postSwitchSuppliersByIdRatesSchedule"
          },
          "response": []
        },
        {
          "name": "Cancel a scheduled cost change",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/scheduled/:rateId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "scheduled",
                ":rateId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "rateId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#deleteSwitchSuppliersByIdRatesScheduledByRateId"
          },
          "response": []
        },
        {
          "name": "Review queued cost changes before they take effect",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/suppliers/:id/rates/pending-review",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "suppliers",
                ":id",
                "rates",
                "pending-review"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Every queued change with the price billed today, the price that takes over and when, and the effect on the last 30 days of traffic. Rates are 6-decimal strings; `monthlyDelta` and `netMonthlyDelta` are JSON numbers. At most 500 rows.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-suppliers#getSwitchSuppliersByIdRatesPendingReview"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: rating",
      "description": "Rate decks, sell decks and sell rates: what you pay and what you charge.",
      "item": [
        {
          "name": "Analyse the cost and configured margin of a destination",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cost-analysis?destination=%2B447700900123",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cost-analysis"
              ],
              "query": [
                {
                  "key": "destination",
                  "value": "+447700900123",
                  "description": "(Required)"
                },
                {
                  "key": "origin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "seconds",
                  "value": "",
                  "description": "(Optional) Reference call length for the margin estimate",
                  "disabled": true
                }
              ]
            },
            "description": "Resolves the route a call from this customer trunk would take (the same resolver the switch uses), prices every eligible supplier with its own increment and deck, and estimates margin on a call of `seconds` length. Read-only: no call record, balance or capacity is touched. This is an estimate; see /margin/realised for what was actually earned.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchCostAnalysis"
          },
          "response": []
        },
        {
          "name": "List the suppliers that can carry a customer's traffic",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cost-analysis/suppliers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cost-analysis",
                "suppliers"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Destination-independent: which supplier trunks the customer's routing makes eligible, and whether each can be priced. Name a customer or a customer trunk. When a customer has several trunks with different routing, `ambiguous` says so.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchCostAnalysisSuppliers"
          },
          "response": []
        },
        {
          "name": "Get realised margin over a period",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/margin/realised",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "margin",
                "realised"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO timestamp; default 24 hours before `to`",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO timestamp; default now",
                  "disabled": true
                },
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional) voice (default) or all, which includes SMS",
                  "disabled": true
                }
              ]
            },
            "description": "What customers were actually charged minus what suppliers actually cost, including the estimated cost of answered attempts that did not win. All amounts are JSON numbers in USD. `exposure` lists what makes the figure less reliable (for example sessions billed with no supplier cost).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchMarginRealised"
          },
          "response": []
        },
        {
          "name": "List per-call realised margin",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/margin/realised/sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "margin",
                "realised",
                "sessions"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO timestamp; default 24 hours before `to`",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO timestamp; default now",
                  "disabled": true
                },
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional) voice (default) or all, which includes SMS",
                  "disabled": true
                },
                {
                  "key": "negativeOnly",
                  "value": "",
                  "description": "(Optional) Only sessions that lost money",
                  "disabled": true
                },
                {
                  "key": "failoverOnly",
                  "value": "",
                  "description": "(Optional) Only sessions that needed more than one attempt",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "One row per session with its charge and every supplier attempt beneath it. Paged (limit up to 200).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchMarginRealisedSessions"
          },
          "response": []
        },
        {
          "name": "Get the realised margin of one call",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/margin/realised/sessions/:callUuid",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "margin",
                "realised",
                "sessions",
                ":callUuid"
              ],
              "variable": [
                {
                  "key": "callUuid",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchMarginRealisedSessionsByCallUuid"
          },
          "response": []
        },
        {
          "name": "List supplier rate decks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks"
              ],
              "query": [
                {
                  "key": "supplierId",
                  "value": "",
                  "description": "(Optional) Only decks from this provider",
                  "disabled": true
                },
                {
                  "key": "trunkId",
                  "value": "",
                  "description": "(Optional) Only decks that price this supplier trunk",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Newest first, up to 500, with row counts and the supplier trunks each deck prices.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchRateDecks"
          },
          "response": []
        },
        {
          "name": "Create a supplier rate deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks"
              ]
            },
            "description": "Creates a draft deck (version 1, or the next version of an existing name for that provider). Load rows with PUT /rate-decks/{id}/rows.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecks"
          },
          "response": []
        },
        {
          "name": "Get a supplier rate deck",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The deck, its trunks and row count. Rows themselves are read from the supplier trunk rates.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchRateDecksById"
          },
          "response": []
        },
        {
          "name": "Delete a rate deck",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Deletes the deck and its rows. An active deck must be rolled back first.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#deleteSwitchRateDecksById"
          },
          "response": []
        },
        {
          "name": "List every version of a rate deck",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "history"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "All versions sharing this deck's name and provider, newest first.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchRateDecksByIdHistory"
          },
          "response": []
        },
        {
          "name": "Compare a rate deck with the prices in force",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/diff",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "diff"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Per supplier trunk the deck covers, what activating it would change against the rows pricing calls now. Writes nothing.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchRateDecksByIdDiff"
          },
          "response": []
        },
        {
          "name": "Set which supplier trunks a rate deck prices",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"trunkIds\": [\n    \"<trunkId>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/trunks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "trunks"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#putSwitchRateDecksByIdTrunks"
          },
          "response": []
        },
        {
          "name": "Replace the rows of a draft rate deck",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\n      \"prefix\": \"44\",\n      \"rate\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/rows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "rows"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Up to 200,000 rows, replacing whatever the deck held. Rows are stored pending and price nothing until the deck is activated. Validation runs straight after, and the validated deck is returned. Rows can only be changed while the deck is draft, uploaded, invalid or validated (`mutable: true`); an active deck is changed by opening a new version.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#putSwitchRateDecksByIdRows"
          },
          "response": []
        },
        {
          "name": "Open a new draft version of a rate deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/versions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "versions"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Copies this deck's rows and trunks into version n+1 as a draft, so an active deck can be repriced without editing it in place.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksByIdVersions"
          },
          "response": []
        },
        {
          "name": "Validate a rate deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/validate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "validate"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Checks the rows (missing prices, duplicate prefixes, increases) and stores the result on the deck. A deck with errors becomes invalid and cannot be activated.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksByIdValidate"
          },
          "response": []
        },
        {
          "name": "Submit a rate deck for approval",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/submit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "submit"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksByIdSubmit"
          },
          "response": []
        },
        {
          "name": "Approve a rate deck, now or from a future date",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveFrom\": \"<effectiveFrom>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "approve"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "With no effectiveFrom (or a past one) the deck is activated immediately. A future effectiveFrom schedules it and emits the cost_rate.scheduled webhook.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksByIdApprove"
          },
          "response": []
        },
        {
          "name": "Activate a rate deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/activate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "activate"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Makes the deck's rows price calls on its trunks from now on and supersedes the deck they replace. Exactly one deck is active per trunk.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksByIdActivate"
          },
          "response": []
        },
        {
          "name": "Roll back an active rate deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/:id/rollback",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                ":id",
                "rollback"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Withdraws the deck and restores the one it superseded (named in restoredDeckId). Emits the cost_rate.rolled_back webhook.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksByIdRollback"
          },
          "response": []
        },
        {
          "name": "Show what a blank rating or limit field inherits",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/inherited-defaults",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "inherited-defaults"
              ]
            },
            "description": "Your operator defaults, the platform fallbacks, and the inheritance chain for each field in plain words.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchInheritedDefaults"
          },
          "response": []
        },
        {
          "name": "List sell decks",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Every version of every sell deck, with how many customers and trunks each one reaches.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchSellDecks"
          },
          "response": []
        },
        {
          "name": "Create a sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks"
              ]
            },
            "description": "Creates a draft (version 1, or the next version of an existing name). Load prices, then publish.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellDecks"
          },
          "response": []
        },
        {
          "name": "Get a sell deck with its reach and versions",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks/:deckId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks",
                ":deckId"
              ],
              "variable": [
                {
                  "key": "deckId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchSellDecksByDeckId"
          },
          "response": []
        },
        {
          "name": "Update a sell deck's name, notes or charging profile",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"currency\": \"USD\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks/:deckId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks",
                ":deckId"
              ],
              "variable": [
                {
                  "key": "deckId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Superseded and archived decks cannot change. Changing the charging profile of an ACTIVE deck reprices every trunk on it from the next call, and is logged as a warning.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#patchSwitchSellDecksByDeckId"
          },
          "response": []
        },
        {
          "name": "List the prices in a sell deck",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks/:deckId/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks",
                ":deckId",
                "rates"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Prefix search (digits)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Default 100, max 1000",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "deckId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchSellDecksByDeckIdRates"
          },
          "response": []
        },
        {
          "name": "Replace the prices in a draft sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\n      \"prefix\": \"44\",\n      \"rate\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks/:deckId/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks",
                ":deckId",
                "rates"
              ],
              "variable": [
                {
                  "key": "deckId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Up to 200,000 rows, replacing whatever the draft held (last row wins per prefix and origin). Published decks are never overwritten; open a new version instead.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellDecksByDeckIdRates"
          },
          "response": []
        },
        {
          "name": "Open a new draft version of a sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks/:deckId/versions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks",
                ":deckId",
                "versions"
              ],
              "variable": [
                {
                  "key": "deckId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Copies the deck's charging profile and prices into version n+1 as a draft. Publishing it is what moves prices.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellDecksByDeckIdVersions"
          },
          "response": []
        },
        {
          "name": "Publish a sell deck (preview first, then confirm)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"confirm\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks/:deckId/publish",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks",
                ":deckId",
                "publish"
              ],
              "variable": [
                {
                  "key": "deckId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Without `confirm: true` this only reports whose prices would change and writes nothing. With it, the deck becomes active, the previous version is superseded, and its prices are written onto every trunk that resolves to it, from the next call onward.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellDecksByDeckIdPublish"
          },
          "response": []
        },
        {
          "name": "Set or clear the system default sell deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"deckId\": \"<deckId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-decks/system-default",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-decks",
                "system-default"
              ]
            },
            "description": "The deck used by trunks set to \"system default\". Only an active deck qualifies; send `deckId: null` to clear it.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellDecksSystemDefault"
          },
          "response": []
        },
        {
          "name": "Look up the buy and sell price for a destination",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/rate-lookup?destination=%2B447700900123",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-lookup"
              ],
              "query": [
                {
                  "key": "destination",
                  "value": "+447700900123",
                  "description": "(Required)"
                },
                {
                  "key": "trunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk for the buy side",
                  "disabled": true
                },
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "origin",
                  "value": "",
                  "description": "(Optional) Caller number, for origin-based rates",
                  "disabled": true
                }
              ]
            },
            "description": "Read-only. The buy side needs a supplier `trunkId`; the sell side is resolved for the customer or customer trunk named (or your own sell rates). Each side is a rating outcome, so \"no matching rate\" is distinguishable from a price of 0. `margin` is present only when both sides are rated.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchRateLookup"
          },
          "response": []
        },
        {
          "name": "List your operator sell rates",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/sell-rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-rates"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Prefix search (digits)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Default 100, max 1000",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "The operator-wide A-Z sell rates, by prefix.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#getSwitchSellRates"
          },
          "response": []
        },
        {
          "name": "Add or update one operator sell rate",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefix\": \"44\",\n  \"rate\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-rates"
              ]
            },
            "description": "Upserts by prefix and origin. Emits the sell_rate.changed webhook.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellRates"
          },
          "response": []
        },
        {
          "name": "Add or update operator sell rates in bulk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rows\": [\n    {\n      \"prefix\": \"44\",\n      \"rate\": 1\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-rates/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-rates",
                "bulk"
              ]
            },
            "description": "Up to 50,000 rows in one transaction; the last row wins per prefix and origin. Emits one sell_rate.changed webhook.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellRatesBulk"
          },
          "response": []
        },
        {
          "name": "Delete an operator sell rate",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/sell-rates/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-rates",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#deleteSwitchSellRatesById"
          },
          "response": []
        },
        {
          "name": "Clear operator sell rates",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"prefixes\": [\n    \"<prefixe>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/sell-rates/clear",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "sell-rates",
                "clear"
              ]
            },
            "description": "Deletes the listed prefixes, or EVERY operator sell rate when `prefixes` is omitted.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchSellRatesClear"
          },
          "response": []
        },
        {
          "name": "Read a rate sheet and propose a column mapping",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "targetKind",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "targetId",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "targetTrunkId",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "defaultIncrement",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "changeMode",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "effectiveFrom",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "timezone",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "fxRate",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "replace",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "mapping",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/parse",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                "parse"
              ]
            },
            "description": "Step 1 of the guided import into any switch deck (your own sell deck, a supplier trunk or a customer trunk). Returns the detected columns, a sample and warnings. Writes nothing.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksParse"
          },
          "response": []
        },
        {
          "name": "Preview what a rate sheet would change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "targetKind",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "targetId",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "targetTrunkId",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "defaultIncrement",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "changeMode",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "effectiveFrom",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "timezone",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "fxRate",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "replace",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "mapping",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/diff",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                "diff"
              ]
            },
            "description": "Dry run: compares the sheet with the target deck's live rows and reports added, changed and removed prefixes. `changeMode` decides whether omitted prefixes stop pricing. Writes nothing.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksDiff"
          },
          "response": []
        },
        {
          "name": "Apply a rate sheet to a switch deck",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "targetKind",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "targetId",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "targetTrunkId",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "defaultIncrement",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "changeMode",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "effectiveFrom",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "timezone",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "fxRate",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "replace",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "mapping",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/switch/rate-decks/apply",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "rate-decks",
                "apply"
              ]
            },
            "description": "Writes the sheet in one transaction and reports what landed. A non-USD sheet needs `fxRate`. For supplier decks a future `effectiveFrom` queues the change for that moment instead (the result then has `scheduled: true`).\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/switch-rating#postSwitchRateDecksApply"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: routing",
      "description": "Route plans, dialplans, routing rules, ACLs and route traces.",
      "item": [
        {
          "name": "List route groups",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/route-plans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "route-plans"
              ]
            },
            "description": "Route groups (stored as route plans): ordered supplier chains with failover rules. Newest change first, with entry counts.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchRoutePlans"
          },
          "response": []
        },
        {
          "name": "Create a route group",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/route-plans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "route-plans"
              ]
            },
            "description": "Names must be unique per operator. Defaults: priority selection, 3 attempts, the platform failover timeout.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#postSwitchRoutePlans"
          },
          "response": []
        },
        {
          "name": "Get a route group with its suppliers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/route-plans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "route-plans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchRoutePlansById"
          },
          "response": []
        },
        {
          "name": "Update a route group's settings",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"description\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/route-plans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "route-plans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Send `failoverTimeoutSeconds: null` to go back to the platform budget; omit it to leave it unchanged.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#patchSwitchRoutePlansById"
          },
          "response": []
        },
        {
          "name": "Delete a route group",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/route-plans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "route-plans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Customers assigned to it are detached and fall back to their routing strategy.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#deleteSwitchRoutePlansById"
          },
          "response": []
        },
        {
          "name": "Clone a route group with all its suppliers",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/route-plans/:id/clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "route-plans",
                ":id",
                "clone"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#postSwitchRoutePlansByIdClone"
          },
          "response": []
        },
        {
          "name": "Replace the suppliers in a route group",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"entries\": [\n    {\n      \"prefix\": \"44\",\n      \"routeId\": \"<routeId>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/route-plans/:id/entries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "route-plans",
                ":id",
                "entries"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Up to 200 entries, each naming exactly one supplier: a marketplace route you bought or one of your active supplier trunks. Duplicate supplier for the same prefix is refused.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#putSwitchRoutePlansByIdEntries"
          },
          "response": []
        },
        {
          "name": "List dialplans",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dialplans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dialplans"
              ]
            },
            "description": "Dialplans are ordered rules above route groups: match a number, rewrite it and the caller ID, then route or block.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchDialplans"
          },
          "response": []
        },
        {
          "name": "Create a dialplan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/dialplans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dialplans"
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#postSwitchDialplans"
          },
          "response": []
        },
        {
          "name": "Get a dialplan with its rules",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dialplans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dialplans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchDialplansById"
          },
          "response": []
        },
        {
          "name": "Rename, describe, enable or disable a dialplan",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"description\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/dialplans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dialplans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#patchSwitchDialplansById"
          },
          "response": []
        },
        {
          "name": "Delete a dialplan",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dialplans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dialplans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#deleteSwitchDialplansById"
          },
          "response": []
        },
        {
          "name": "Clone a dialplan with all its rules",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dialplans/:id/clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dialplans",
                ":id",
                "clone"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Cloned rules keep their route-group targets.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#postSwitchDialplansByIdClone"
          },
          "response": []
        },
        {
          "name": "Replace the rules in a dialplan",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rules\": [\n    {\n      \"position\": 1,\n      \"label\": \"Acme\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/dialplans/:id/rules",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dialplans",
                ":id",
                "rules"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Up to 200 rules, evaluated in `position` order. A route_group action must name one of your route groups; regular expressions that risk catastrophic backtracking are refused.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#putSwitchDialplansByIdRules"
          },
          "response": []
        },
        {
          "name": "Preview how a number would route",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/routing/preview?to=%2B447700900123",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "routing",
                "preview"
              ],
              "query": [
                {
                  "key": "to",
                  "value": "+447700900123",
                  "description": "(Required) Dialled number"
                },
                {
                  "key": "cli",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional) The customer",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional) Name the trunk for an exact restriction check",
                  "disabled": true
                }
              ]
            },
            "description": "Read-only: the dialplan rule matched, number and caller-ID rewrites, the route group, the ordered supplier chain, any customer or trunk restriction that would refuse the call, and candidates that were skipped. Failover is always sequential. For the full reasoning use POST /routing/trace.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchRoutingPreview"
          },
          "response": []
        },
        {
          "name": "Run a route trace for a number",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/routing/trace",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "routing",
                "trace"
              ]
            },
            "description": "Explains the routing decision end to end: normalisation, the policy matched, the sell price, every eligible supplier with its buy rate, capacity and margin, and why each excluded supplier was excluded. Uses the same resolvers as live calls but is NOT a call: no call record, balance movement or capacity use. The result is kept for an hour so it can be saved.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#postSwitchRoutingTrace"
          },
          "response": []
        },
        {
          "name": "List saved route traces",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/routing/traces",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "routing",
                "traces"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Default 25",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchRoutingTraces"
          },
          "response": []
        },
        {
          "name": "Save a route trace",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"traceId\": \"<traceId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/routing/traces",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "routing",
                "traces"
              ]
            },
            "description": "Keeps a trace run within the last hour, by its traceId, with an optional note. The stored copy is the server's own result. Saving the same trace twice returns `alreadySaved: true`.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#postSwitchRoutingTraces"
          },
          "response": []
        },
        {
          "name": "Get a saved route trace",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/routing/traces/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "routing",
                "traces",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The snapshot as it was saved. It is never re-run; running again produces a new trace.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchRoutingTracesById"
          },
          "response": []
        },
        {
          "name": "Delete a saved route trace",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/routing/traces/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "routing",
                "traces",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#deleteSwitchRoutingTracesById"
          },
          "response": []
        },
        {
          "name": "List inbound IP ACLs for a customer or trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/acls?entityId=%3CentityId%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "acls"
              ],
              "query": [
                {
                  "key": "entityType",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "entityId",
                  "value": "<entityId>",
                  "description": "(Required) The customer or trunk id"
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#getSwitchAcls"
          },
          "response": []
        },
        {
          "name": "Add an inbound IP ACL entry",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"entityType\": \"customer\",\n  \"entityId\": \"<entityId>\",\n  \"cidr\": \"<cidr>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/acls",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "acls"
              ]
            },
            "description": "Authorises an address or CIDR for a customer (IP authentication) or a trunk (identity).\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#postSwitchAcls"
          },
          "response": []
        },
        {
          "name": "Remove an inbound IP ACL entry",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/acls/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "acls",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Removing a customer address stops calls from that address immediately.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-routing#deleteSwitchAclsById"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: CDRs and analytics",
      "description": "Call records, exports, saved views, margin, cost and quality analysis.",
      "item": [
        {
          "name": "Get margin and quality totals for all traffic",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/analytics/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "analytics",
                "overview"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start (default: 30 days before to)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end (default: now)",
                  "disabled": true
                }
              ]
            },
            "description": "Revenue, cost, margin, ASR and minutes across every customer and supplier over the window, plus how much billed traffic carries no supplier cost yet.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchAnalyticsOverview"
          },
          "response": []
        },
        {
          "name": "Get daily margin and quality figures",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/analytics/timeseries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "analytics",
                "timeseries"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start (default: 30 days before to)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end (default: now)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchAnalyticsTimeseries"
          },
          "response": []
        },
        {
          "name": "Break down margin and quality by customer, supplier or destination",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/analytics/breakdown",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "analytics",
                "breakdown"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start (default: 30 days before to)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end (default: now)",
                  "disabled": true
                },
                {
                  "key": "by",
                  "value": "",
                  "description": "(Optional) Default customer",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchAnalyticsBreakdown"
          },
          "response": []
        },
        {
          "name": "List your recent call-record exports",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-exports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-exports"
              ]
            },
            "description": "The latest 25 Switch exports.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrExports"
          },
          "response": []
        },
        {
          "name": "Start a background call-record export",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"from\": \"+447700900123\",\n  \"to\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-exports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-exports"
              ]
            },
            "description": "Queues an export of the filtered records (body takes the same filters as GET /switch/cdrs). At most 3 exports may run at once. Numbers: a scoped API key without the `cdr:numbers` scope receives masked calling and dialled numbers (`numbersMasked` says so). Full-access keys and dashboard sessions see them in full.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#postSwitchCdrExports"
          },
          "response": []
        },
        {
          "name": "Get the status of a call-record export",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-exports/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-exports",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrExportsById"
          },
          "response": []
        },
        {
          "name": "Get traffic usage for one customer",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/usage?subAccountId=%3CsubAccountId%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "usage"
              ],
              "query": [
                {
                  "key": "subAccountId",
                  "value": "<subAccountId>",
                  "description": "(Required) The customer to report on (required)"
                },
                {
                  "key": "since",
                  "value": "",
                  "description": "(Optional) ISO-8601 start (default: 24 hours before until)",
                  "disabled": true
                },
                {
                  "key": "until",
                  "value": "",
                  "description": "(Optional) ISO-8601 end (default: now)",
                  "disabled": true
                },
                {
                  "key": "destinations",
                  "value": "",
                  "description": "(Optional) Include the per-destination breakdown",
                  "disabled": true
                }
              ]
            },
            "description": "Totals, per-day figures, live concurrent calls and (optionally) per-destination usage for a customer (sub-account) over a window of up to 92 days (default: the last 24 hours). A longer window is clamped and says so in `window.clamped`. `live.concurrentCalls` is null when the live monitor cannot be reached.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchUsage"
          },
          "response": []
        },
        {
          "name": "Record that call-record details were copied",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"what\": \"<what>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/:id/audit-copy",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                ":id",
                "audit-copy"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Writes an access entry to your account activity (for example when diagnostics are copied to the clipboard). Answers 202 with `{ success: true }` and no data.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#postSwitchCdrsByIdAuditCopy"
          },
          "response": []
        },
        {
          "name": "Get the values available to filter call records by",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-filter-options",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-filter-options"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrFilterOptions"
          },
          "response": []
        },
        {
          "name": "Get your saved call-records layout",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-workspace",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-workspace"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrWorkspace"
          },
          "response": []
        },
        {
          "name": "Save your call-records layout",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"order\": [\n    \"<order>\"\n  ],\n  \"cols\": [\n    \"<col>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-workspace",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-workspace"
              ]
            },
            "description": "Column order, visible columns, density, page size (50, 100 or 200) and column widths (48-600 px). Invalid values are dropped, not rejected.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#putSwitchCdrWorkspace"
          },
          "response": []
        },
        {
          "name": "Search call records",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start of the window",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end of the window",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional) Customer",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "vendorTrunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkMatch",
                  "value": "",
                  "description": "(Optional) How vendorTrunkId matches failover attempts (default selected)",
                  "disabled": true
                },
                {
                  "key": "routeGroupId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryPrefix",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destinationName",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "mediaMode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCodes",
                  "value": "",
                  "description": "(Optional) Comma-separated SIP codes (max 20)",
                  "disabled": true
                },
                {
                  "key": "q850Cause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "q850Causes",
                  "value": "",
                  "description": "(Optional) Comma-separated Q.850 causes (max 20)",
                  "disabled": true
                },
                {
                  "key": "hangupCause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMax",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMinMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMaxMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "codec",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "releaseParty",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ip",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ratingState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "negativeMarginOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "riskMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "attestation",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Up to 20 values separated by comma, semicolon or newline",
                  "disabled": true
                },
                {
                  "key": "searchField",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "searchMatch",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortDir",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "includeProbes",
                  "value": "",
                  "description": "(Optional) Include the platform's synthetic reachability probes (hidden by default)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Paged call records (one row per attempt) with a summary over the whole filtered window: calls, ASR and ACD (per call, failover collapsed), PDD median and p95, revenue, cost and margin. Long windows are clamped (see `window`). Numbers: a scoped API key without the `cdr:numbers` scope receives masked calling and dialled numbers (`numbersMasked` says so). Full-access keys and dashboard sessions see them in full.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrs"
          },
          "response": []
        },
        {
          "name": "Count call records by filter value",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/facets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                "facets"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start of the window",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end of the window",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional) Customer",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "vendorTrunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkMatch",
                  "value": "",
                  "description": "(Optional) How vendorTrunkId matches failover attempts (default selected)",
                  "disabled": true
                },
                {
                  "key": "routeGroupId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryPrefix",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destinationName",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "mediaMode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCodes",
                  "value": "",
                  "description": "(Optional) Comma-separated SIP codes (max 20)",
                  "disabled": true
                },
                {
                  "key": "q850Cause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "q850Causes",
                  "value": "",
                  "description": "(Optional) Comma-separated Q.850 causes (max 20)",
                  "disabled": true
                },
                {
                  "key": "hangupCause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMax",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMinMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMaxMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "codec",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "releaseParty",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ip",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ratingState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "negativeMarginOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "riskMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "attestation",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Up to 20 values separated by comma, semicolon or newline",
                  "disabled": true
                },
                {
                  "key": "searchField",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "searchMatch",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortDir",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "includeProbes",
                  "value": "",
                  "description": "(Optional) Include the platform's synthetic reachability probes (hidden by default)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "For the filtered window, how many records carry each status, SIP code, customer, supplier and so on.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsFacets"
          },
          "response": []
        },
        {
          "name": "Get charts for the filtered call records",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/analytics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                "analytics"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start of the window",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end of the window",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional) Customer",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "vendorTrunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkMatch",
                  "value": "",
                  "description": "(Optional) How vendorTrunkId matches failover attempts (default selected)",
                  "disabled": true
                },
                {
                  "key": "routeGroupId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryPrefix",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destinationName",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "mediaMode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCodes",
                  "value": "",
                  "description": "(Optional) Comma-separated SIP codes (max 20)",
                  "disabled": true
                },
                {
                  "key": "q850Cause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "q850Causes",
                  "value": "",
                  "description": "(Optional) Comma-separated Q.850 causes (max 20)",
                  "disabled": true
                },
                {
                  "key": "hangupCause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMax",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMinMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMaxMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "codec",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "releaseParty",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ip",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ratingState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "negativeMarginOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "riskMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "attestation",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Up to 20 values separated by comma, semicolon or newline",
                  "disabled": true
                },
                {
                  "key": "searchField",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "searchMatch",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortDir",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "includeProbes",
                  "value": "",
                  "description": "(Optional) Include the platform's synthetic reachability probes (hidden by default)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsAnalytics"
          },
          "response": []
        },
        {
          "name": "Break down failed calls by stage and reason",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/failure-summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                "failure-summary"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start of the window",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end of the window",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional) Customer",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "vendorTrunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkMatch",
                  "value": "",
                  "description": "(Optional) How vendorTrunkId matches failover attempts (default selected)",
                  "disabled": true
                },
                {
                  "key": "routeGroupId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryPrefix",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destinationName",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "mediaMode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCodes",
                  "value": "",
                  "description": "(Optional) Comma-separated SIP codes (max 20)",
                  "disabled": true
                },
                {
                  "key": "q850Cause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "q850Causes",
                  "value": "",
                  "description": "(Optional) Comma-separated Q.850 causes (max 20)",
                  "disabled": true
                },
                {
                  "key": "hangupCause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMax",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMinMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMaxMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "codec",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "releaseParty",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ip",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ratingState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "negativeMarginOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "riskMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "attestation",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Up to 20 values separated by comma, semicolon or newline",
                  "disabled": true
                },
                {
                  "key": "searchField",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "searchMatch",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortDir",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "includeProbes",
                  "value": "",
                  "description": "(Optional) Include the platform's synthetic reachability probes (hidden by default)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsFailureSummary"
          },
          "response": []
        },
        {
          "name": "Group failed calls by the dimensions they share",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/failure-groups",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                "failure-groups"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start of the window",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end of the window",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional) Customer",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "vendorTrunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkMatch",
                  "value": "",
                  "description": "(Optional) How vendorTrunkId matches failover attempts (default selected)",
                  "disabled": true
                },
                {
                  "key": "routeGroupId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryPrefix",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destinationName",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "mediaMode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCodes",
                  "value": "",
                  "description": "(Optional) Comma-separated SIP codes (max 20)",
                  "disabled": true
                },
                {
                  "key": "q850Cause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "q850Causes",
                  "value": "",
                  "description": "(Optional) Comma-separated Q.850 causes (max 20)",
                  "disabled": true
                },
                {
                  "key": "hangupCause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMax",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMinMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMaxMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "codec",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "releaseParty",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ip",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ratingState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "negativeMarginOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "riskMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "attestation",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Up to 20 values separated by comma, semicolon or newline",
                  "disabled": true
                },
                {
                  "key": "searchField",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "searchMatch",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortDir",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "includeProbes",
                  "value": "",
                  "description": "(Optional) Include the platform's synthetic reachability probes (hidden by default)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "dims",
                  "value": "",
                  "description": "(Optional) Comma-separated grouping dimensions",
                  "disabled": true
                },
                {
                  "key": "destinationDigits",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "bucket",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minSessions",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Clusters failures (for example one supplier, one destination, one SIP code) so a pattern reads as one problem.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsFailureGroups"
          },
          "response": []
        },
        {
          "name": "Get the call-filter vocabulary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/call-filters",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "call-filters"
              ]
            },
            "description": "The shared filter names and closed value sets used by call records, quality and live calls.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCallFilters"
          },
          "response": []
        },
        {
          "name": "Get the list-filter vocabulary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/list-filters",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "list-filters"
              ]
            },
            "description": "Filter names and value sets for the customer, supplier and trunk lists.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchListFilters"
          },
          "response": []
        },
        {
          "name": "Get one call record with attempts, SIP trace and timeline",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Numbers: a scoped API key without the `cdr:numbers` scope receives masked calling and dialled numbers (`numbersMasked` says so). Full-access keys and dashboard sessions see them in full. A record that is not yours answers 404 NOT_FOUND.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsById"
          },
          "response": []
        },
        {
          "name": "List the supplier attempts of a call",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/:id/attempts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                ":id",
                "attempts"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A record that is not yours answers 404 NOT_FOUND.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsByIdAttempts"
          },
          "response": []
        },
        {
          "name": "List saved call-record views",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-views",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-views"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrViews"
          },
          "response": []
        },
        {
          "name": "Save a call-record view",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-views",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-views"
              ]
            },
            "description": "Creates the view, or replaces the one with the same name.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#postSwitchCdrViews"
          },
          "response": []
        },
        {
          "name": "Delete a saved call-record view",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdr-views/:viewId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdr-views",
                ":viewId"
              ],
              "variable": [
                {
                  "key": "viewId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Answers `{ success: true }` with no data, whether or not the view existed.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#deleteSwitchCdrViewsByViewId"
          },
          "response": []
        },
        {
          "name": "Get the SIP trace of a call",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/:id/trace",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                ":id",
                "trace"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The signalling ladder for the call. Access is recorded in your account activity. A record that is not yours answers 404 NOT_FOUND.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsByIdTrace"
          },
          "response": []
        },
        {
          "name": "Re-run routing for a call record",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs/:id/retest",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs",
                ":id",
                "retest"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Resolves the route this call would take now, without placing a call, so a fix can be checked against the original failure.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#postSwitchCdrsByIdRetest"
          },
          "response": []
        },
        {
          "name": "Download filtered call records as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/cdrs.csv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "cdrs.csv"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO-8601 start of the window",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional) ISO-8601 end of the window",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "direction",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional) Customer",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "vendorTrunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk",
                  "disabled": true
                },
                {
                  "key": "supplierTrunkMatch",
                  "value": "",
                  "description": "(Optional) How vendorTrunkId matches failover attempts (default selected)",
                  "disabled": true
                },
                {
                  "key": "routeGroupId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryPrefix",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destinationName",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "mediaMode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sipCodes",
                  "value": "",
                  "description": "(Optional) Comma-separated SIP codes (max 20)",
                  "disabled": true
                },
                {
                  "key": "q850Cause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "q850Causes",
                  "value": "",
                  "description": "(Optional) Comma-separated Q.850 causes (max 20)",
                  "disabled": true
                },
                {
                  "key": "hangupCause",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "durationMax",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMinMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "pddMaxMs",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "codec",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "releaseParty",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ip",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "ratingState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "negativeMarginOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "riskMin",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "attestation",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional) Up to 20 values separated by comma, semicolon or newline",
                  "disabled": true
                },
                {
                  "key": "searchField",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "searchMatch",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortBy",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sortDir",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "includeProbes",
                  "value": "",
                  "description": "(Optional) Include the platform's synthetic reachability probes (hidden by default)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Synchronous export, capped at a row ceiling; `X-PKX-Row-Count`, `X-PKX-Truncated` and `X-PKX-Query-Id` headers describe the file. For large windows use POST /switch/cdr-exports. Numbers: a scoped API key without the `cdr:numbers` scope receives masked calling and dialled numbers (`numbersMasked` says so). Full-access keys and dashboard sessions see them in full.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-cdrs-and-analytics#getSwitchCdrsCsv"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: invoicing",
      "description": "Invoices, credit notes, payables, netting, settlement and ageing.",
      "item": [
        {
          "name": "List customer invoices",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/invoices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Page size (default 50, max 500)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchInvoices"
          },
          "response": []
        },
        {
          "name": "Issue an invoice from a reviewed preview",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customerId\": \"<customerId>\",\n  \"periodStart\": \"<periodStart>\",\n  \"periodEnd\": \"<periodEnd>\",\n  \"reviewToken\": \"<reviewToken>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/invoices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices"
              ]
            },
            "description": "Irreversible: allocates the next invoice number and claims the usage. Requires the `reviewToken` from a preview that still matches live data. Does not send the invoice; use POST /switch/invoices/{id}/send.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchInvoices"
          },
          "response": []
        },
        {
          "name": "Preview an invoice before issuing it",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customerId\": \"<customerId>\",\n  \"periodStart\": \"<periodStart>\",\n  \"periodEnd\": \"<periodEnd>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                "preview"
              ]
            },
            "description": "A read: allocates no number and claims no usage. Returns every figure the invoice would carry, the usage it could not price, and a review token. Issue with that token; if live data changes in between, issuing fails with INVOICE_REVIEW_STALE.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchInvoicesPreview"
          },
          "response": []
        },
        {
          "name": "Get an invoice with lines, payments and history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchInvoicesById"
          },
          "response": []
        },
        {
          "name": "Record a payment received against an invoice",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id/payments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id",
                "payments"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Updates `amountPaid` and the status (partial or paid). Overpayment is refused.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchInvoicesByIdPayments"
          },
          "response": []
        },
        {
          "name": "Void an invoice",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id/void",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id",
                "void"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "A correction, never an erasure: needs a reason, refuses an invoice that has payments against it (issue a credit note instead), and releases the usage it claimed so it can be billed again. Applied credit notes are returned to the customer.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchInvoicesByIdVoid"
          },
          "response": []
        },
        {
          "name": "Void an invoice and issue its replacement",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Example\",\n  \"reviewToken\": \"<reviewToken>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id/reissue",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id",
                "reissue"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Voids this invoice and issues a replacement over the same period in one step. Preview the replacement first (with `releaseInvoiceId`) and pass its review token. If the void succeeds but the issue fails, the original stays void and its usage is unbilled; the error says so.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchInvoicesByIdReissue"
          },
          "response": []
        },
        {
          "name": "Email an invoice to its recipients",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"to\": [\n    \"you@example.com\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id/send",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id",
                "send"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Safe to repeat. Sends to the billing contacts, or to up to 20 addresses in `to`. Only accepted sends count as delivered.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 60 requests per 10 minutes.\n\n**Careful:** Emails the invoice to its recipients.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchInvoicesByIdSend"
          },
          "response": []
        },
        {
          "name": "Render an invoice as printable HTML",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id/print",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id",
                "print"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchInvoicesByIdPrint"
          },
          "response": []
        },
        {
          "name": "Download an invoice as XML",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id/xml",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id",
                "xml"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchInvoicesByIdXml"
          },
          "response": []
        },
        {
          "name": "Download an invoice as PDF",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/invoices/:id/pdf",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "invoices",
                ":id",
                "pdf"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchInvoicesByIdPdf"
          },
          "response": []
        },
        {
          "name": "List credit notes",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/credit-notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "credit-notes"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Page size (default 50, max 500)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchCreditNotes"
          },
          "response": []
        },
        {
          "name": "Issue a credit note to a customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customerId\": \"<customerId>\",\n  \"amount\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/credit-notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "credit-notes"
              ]
            },
            "description": "Open credit reduces net receivables and can be applied to a later invoice with `applyCredits`. `invoiceId`, when given, must belong to the same customer.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchCreditNotes"
          },
          "response": []
        },
        {
          "name": "Get accounts-receivable ageing",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/ar-aging",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "ar-aging"
              ]
            },
            "description": "Outstanding customer invoice balances by days past due. `totalOutstanding` is net of open credit notes; the buckets are gross.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchArAging"
          },
          "response": []
        },
        {
          "name": "List supplier payables",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/payables",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "payables"
              ],
              "query": [
                {
                  "key": "vendorTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Page size (default 50, max 500)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchPayables"
          },
          "response": []
        },
        {
          "name": "Raise a payable for a supplier trunk over a period",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"vendorTrunkId\": \"<vendorTrunkId>\",\n  \"periodStart\": \"<periodStart>\",\n  \"periodEnd\": \"<periodEnd>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/payables",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "payables"
              ]
            },
            "description": "Totals the supplier cost of the usage on that trunk in the period and claims it, so it cannot be paid twice.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchPayables"
          },
          "response": []
        },
        {
          "name": "Get a payable with lines and payments",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/payables/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "payables",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchPayablesById"
          },
          "response": []
        },
        {
          "name": "Record a payment made to a supplier",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/payables/:id/payments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "payables",
                ":id",
                "payments"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Payments larger than the outstanding balance, or against a void payable, are refused.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchPayablesByIdPayments"
          },
          "response": []
        },
        {
          "name": "Void a payable",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/payables/:id/void",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "payables",
                ":id",
                "void"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Releases the usage it claimed so a corrected payable can pick it up. Voiding an already void payable is a no-op.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Careful:** Issues, voids or settles a billing document.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchPayablesByIdVoid"
          },
          "response": []
        },
        {
          "name": "Get accounts-payable ageing",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/ap-aging",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "ap-aging"
              ]
            },
            "description": "What you owe suppliers on open payables, by days past due.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchApAging"
          },
          "response": []
        },
        {
          "name": "List bilateral counterparties",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/counterparties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "counterparties"
              ]
            },
            "description": "A counterparty pairs a customer you sell to with a supplier trunk you buy from, so the two balances can be netted.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchCounterparties"
          },
          "response": []
        },
        {
          "name": "Create a bilateral counterparty",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/counterparties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "counterparties"
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchCounterparties"
          },
          "response": []
        },
        {
          "name": "Update a bilateral counterparty",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme\",\n  \"customerId\": \"<customerId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/counterparties/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "counterparties",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#patchSwitchCounterpartiesById"
          },
          "response": []
        },
        {
          "name": "Delete a bilateral counterparty",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/counterparties/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "counterparties",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#deleteSwitchCounterpartiesById"
          },
          "response": []
        },
        {
          "name": "Run netting for a counterparty over a period",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"periodStart\": \"<periodStart>\",\n  \"periodEnd\": \"<periodEnd>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/counterparties/:id/netting",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "counterparties",
                ":id",
                "netting"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Open receivables (less issued credit notes) minus open payables in the period give one net figure and direction. The run is recorded as final and fires the `netting.run` webhook; the money itself moves off-platform.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#postSwitchCounterpartiesByIdNetting"
          },
          "response": []
        },
        {
          "name": "List netting runs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/netting-runs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "netting-runs"
              ],
              "query": [
                {
                  "key": "counterpartyId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Settlements that offset what a bilateral counterparty owes you against what you owe them (latest 200).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-invoicing#getSwitchNettingRuns"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: operations",
      "description": "NOC, live calls, issues, fraud, the operations queue and AI control.",
      "item": [
        {
          "name": "See which caller IDs are presented, and by whom",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/cli-watch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "cli-watch"
              ],
              "query": [
                {
                  "key": "hours",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minCalls",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Observe only: nothing here blocks traffic. `wouldBlock` states how much real traffic a \"same caller ID N times\" rule would refuse before anyone enables one.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchFraudCliWatch"
          },
          "response": []
        },
        {
          "name": "See which senders rotate through many caller IDs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/ani-watch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "ani-watch"
              ],
              "query": [
                {
                  "key": "hours",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "minCalls",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "maxDistinct",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Observe only. Per sender, how many distinct caller IDs were presented in the window.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchFraudAniWatch"
          },
          "response": []
        },
        {
          "name": "Get fraud screening settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "settings"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchFraudSettings"
          },
          "response": []
        },
        {
          "name": "Update fraud screening settings",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fraudEnabled\": true,\n  \"fraudBlockScore\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "settings"
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchFraudSettings"
          },
          "response": []
        },
        {
          "name": "List fraud screening events",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "events"
              ]
            },
            "description": "Calls that were flagged or blocked by fraud screening, newest first.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchFraudEvents"
          },
          "response": []
        },
        {
          "name": "List what needs attention first on the switch",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/operations-queue",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "operations-queue"
              ]
            },
            "description": "Derived on every request from live trunk state, 24-hour margin and post-dial delay, rating and deck provenance. Each item carries the same issue reference used everywhere else.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchOperationsQueue"
          },
          "response": []
        },
        {
          "name": "List operational issues",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/issues",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "trunkId",
                  "value": "",
                  "description": "(Optional) Supplier trunk",
                  "disabled": true
                },
                {
                  "key": "supplierId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "includeReview",
                  "value": "",
                  "description": "(Optional) Include review-severity issues (default true)",
                  "disabled": true
                }
              ]
            },
            "description": "Every warning the product shows comes from this list. Team members see only issues within their customer and trunk scope. Nothing here changes routing, admission or rating: issue actions only change what people see and who owns it.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchIssues"
          },
          "response": []
        },
        {
          "name": "Get an operational issue by reference",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchIssuesByRef"
          },
          "response": []
        },
        {
          "name": "Get the history of an operational issue",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref/timeline",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref",
                "timeline"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchIssuesByRefTimeline"
          },
          "response": []
        },
        {
          "name": "Acknowledge an operational issue",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"note\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref/acknowledge",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref",
                "acknowledge"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchIssuesByRefAcknowledge"
          },
          "response": []
        },
        {
          "name": "Assign an operational issue to a team member",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"userId\": \"<userId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref/assign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref",
                "assign"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Pass `userId: null` to unassign.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchIssuesByRefAssign"
          },
          "response": []
        },
        {
          "name": "Resolve an operational issue",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"resolution\": \"<resolution>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref/resolve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref",
                "resolve"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchIssuesByRefResolve"
          },
          "response": []
        },
        {
          "name": "Dismiss an operational issue",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref/dismiss",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref",
                "dismiss"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Closes it as dismissed. It reopens automatically if the condition in `reopensWhen` occurs.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchIssuesByRefDismiss"
          },
          "response": []
        },
        {
          "name": "Reopen a resolved or dismissed operational issue",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"note\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref/reopen",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref",
                "reopen"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchIssuesByRefReopen"
          },
          "response": []
        },
        {
          "name": "Snooze notifications for an operational issue",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"minutes\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/issues/:ref/snooze",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "issues",
                ":ref",
                "snooze"
              ],
              "variable": [
                {
                  "key": "ref",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Mutes notifications only; the issue stays open and visible. Up to 14 days.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchIssuesByRefSnooze"
          },
          "response": []
        },
        {
          "name": "Count fraud screening events",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "summary"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchFraudSummary"
          },
          "response": []
        },
        {
          "name": "Get the learned traffic baseline used for risk scoring",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/baseline",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "baseline"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchFraudBaseline"
          },
          "response": []
        },
        {
          "name": "Retrain the traffic baseline from recent calls",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/retrain",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "retrain"
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchFraudRetrain"
          },
          "response": []
        },
        {
          "name": "Score the risk of a call without placing it",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subAccountId\": \"<subAccountId>\",\n  \"destination\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/fraud/score",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "fraud",
                "score"
              ]
            },
            "description": "Dry run of the risk assessment for a customer calling a destination. An unknown customer answers 404 NOT_FOUND.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchFraudScore"
          },
          "response": []
        },
        {
          "name": "List calls in progress",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/live",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "live"
              ],
              "query": [
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryPrefix",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "destination",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "answeredState",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "supplierName",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Calls up now, from the live monitor. Filters narrow the list; `unsupported` names any requested filter this surface cannot apply.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchLive"
          },
          "response": []
        },
        {
          "name": "Ask AI Control a question about your switch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/noc/ask",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "noc",
                "ask"
              ]
            },
            "description": "Natural-language questions and requests about your traffic, answered from your own switch data within your team permissions. Returns a reply and any actions it proposes or took. Nothing changes unless your role allows it.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchNocAsk"
          },
          "response": []
        },
        {
          "name": "Get Do Not Call list sizes and recent hits",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "summary"
              ]
            },
            "description": "Do Not Call on the Switch uses ONE list: the same entries as the Dialer's suppression list (/dnc), plus the platform-wide list. A call from a customer or trunk with \"Honor Do Not Call\" on is checked against both. This returns the list sizes, your entries by source, the Switch calls that matched in the last 7 and 30 days, how many customers and trunks honour the list, and the platform mode.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncSummary"
          },
          "response": []
        },
        {
          "name": "List Do Not Call entries",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/entries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "entries"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "",
                  "description": "(Optional) Number prefix to search for",
                  "disabled": true
                },
                {
                  "key": "scope",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Your own list and the platform-wide list. Reasons are shown only for your own entries.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncEntries"
          },
          "response": []
        },
        {
          "name": "List calls refused or warned by Do Not Call",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/hits",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "hits"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Your customers' Switch calls whose number matched a Do Not Call list, newest first (default 50, max 200).\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncHits"
          },
          "response": []
        },
        {
          "name": "Check whether a number is on a Do Not Call list",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/check?number=%2B447700900123",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "check"
              ],
              "query": [
                {
                  "key": "number",
                  "value": "+447700900123",
                  "description": "(Required)"
                }
              ]
            },
            "description": "Checks one number against your list and the platform list. When it is on both, your own entry is returned. The platform list never shows its reason.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncCheck"
          },
          "response": []
        },
        {
          "name": "List which customers and trunks honour Do Not Call",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "customers"
              ]
            },
            "description": "Every customer's setting with each trunk's own value (null = inherits from the customer) and the effective result.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncCustomers"
          },
          "response": []
        },
        {
          "name": "Get the Do Not Call setting of a customer or trunk",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/honor",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "honor"
              ],
              "query": [
                {
                  "key": "subAccountId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "customerTrunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Name `subAccountId` or `customerTrunkId`. A customer or trunk that is not yours answers 404.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncHonor"
          },
          "response": []
        },
        {
          "name": "Turn Do Not Call on or off for a customer or trunk",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"honor\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/honor",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "honor"
              ]
            },
            "description": "Name exactly one of `subAccountId` or `customerTrunkId`. A trunk can pass `honor: null` to inherit from its customer; a customer is either on or off. Takes effect on the next call and is audited with the before and after values.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#patchSwitchDncHonor"
          },
          "response": []
        },
        {
          "name": "Remove Do Not Call numbers from an uploaded list",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/scrub",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "scrub"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Upload a CSV or text file (multipart, field `file`, up to 500,000 rows and 16 MB). Rows whose number is on your list or the platform list are removed; every other row, including a header, comes back unchanged. With `?format=csv` the cleaned file is returned directly (counts in the `X-Dnc-Rows`, `X-Dnc-Clean`, `X-Dnc-Removed-Own`, `X-Dnc-Removed-Global` and `X-Dnc-Invalid` headers); otherwise the counts are returned and the file can be fetched from GET /switch/dnc/scrub/{id} for one hour. Rows that cannot be read as a number are kept and counted as invalid.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchDncScrub"
          },
          "response": []
        },
        {
          "name": "Download a scrubbed file",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/scrub/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "scrub",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Scrub results are kept for one hour; after that (or for an id that is not yours) the answer is 404 and the scrub must be run again.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncScrubById"
          },
          "response": []
        },
        {
          "name": "Add numbers to your Do Not Call list from a file",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "value": "",
                  "type": "text"
                },
                {
                  "key": "reason",
                  "value": "",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/import",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "import"
              ]
            },
            "description": "Multipart upload: field `file` (CSV or text of numbers, up to 500,000 rows and 16 MB) and an optional `reason`, which must come BEFORE the file part. The number column is found from the first line (a phone-like header, else the first column). Numbers already listed are skipped. Audited.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#postSwitchDncImport"
          },
          "response": []
        },
        {
          "name": "Download your Do Not Call list as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/dnc/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "dnc",
                "export"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-operations#getSwitchDncExport"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Switch: team and audit",
      "description": "Roles, team members, approvals and the audit history.",
      "item": [
        {
          "name": "Get your role and permissions on the switch",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "me"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#getSwitchMe"
          },
          "response": []
        },
        {
          "name": "List team members and the available roles",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/team",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "team"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#getSwitchTeam"
          },
          "response": []
        },
        {
          "name": "Add a team member",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@example.com\",\n  \"role\": \"viewer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/team",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "team"
              ]
            },
            "description": "Gives an email address a role on your switch, optionally limited to some customers and trunks (null = all).\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#postSwitchTeam"
          },
          "response": []
        },
        {
          "name": "Change a team member's role, scope or status",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"role\": \"viewer\",\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/team/:memberId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "team",
                ":memberId"
              ],
              "variable": [
                {
                  "key": "memberId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#patchSwitchTeamByMemberId"
          },
          "response": []
        },
        {
          "name": "Suspend a team member",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/team/:memberId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "team",
                ":memberId"
              ],
              "variable": [
                {
                  "key": "memberId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Suspends rather than deletes, so their history stays attributed.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#deleteSwitchTeamByMemberId"
          },
          "response": []
        },
        {
          "name": "Search the switch audit history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/audit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "audit"
              ],
              "query": [
                {
                  "key": "customerId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "trunkId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "actorUserId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "action",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "permission",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "sensitiveOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "outcome",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Who changed what, when, and under which permission. Cursor-paginated with `nextCursor`.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#getSwitchAudit"
          },
          "response": []
        },
        {
          "name": "Get the values available to filter the audit history by",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/audit/filter-options",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "audit",
                "filter-options"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#getSwitchAuditFilterOptions"
          },
          "response": []
        },
        {
          "name": "List approval requests",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/approvals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "approvals"
              ],
              "query": [
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional) Comma-separated statuses",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Actions waiting for (or decided by) a second person. Defaults to pending and approved.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#getSwitchApprovals"
          },
          "response": []
        },
        {
          "name": "Approve or reject an approval request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"decision\": \"approve\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/approvals/:id/decide",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "approvals",
                ":id",
                "decide"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#postSwitchApprovalsByIdDecide"
          },
          "response": []
        },
        {
          "name": "List approval policies",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/switch/approval-policies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "approval-policies"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#getSwitchApprovalPolicies"
          },
          "response": []
        },
        {
          "name": "Set the approval policy for a permission",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"permission\": \"customers.view\",\n  \"enabled\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/switch/approval-policies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "switch",
                "approval-policies"
              ]
            },
            "description": "Require a second person to approve actions under this permission, optionally only above an amount.\n\n**Test keys:** refused with 403 `TEST_KEY_NOT_ALLOWED`. The Switch has no test mode, so a change always applies to your live configuration. Test keys can still read Switch data.\n\n**Access:** API key. Scoped keys need `switch:manage`.\n\nReference: https://packetexchange.io/api-docs/reference/switch-team-and-audit#putSwitchApprovalPolicies"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Application Manager",
      "description": "Operate retail sub-accounts: provisioning, credit and routing.",
      "item": [
        {
          "name": "Get reseller analytics across your sub-accounts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/analytics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "analytics"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "",
                  "description": "(Optional) Trailing window in days (default 30)",
                  "disabled": true
                }
              ]
            },
            "description": "Headline totals and quality, a daily series, per-sub-account margin and top destinations. Figures are JSON numbers (analytics rollups, not ledger entries).\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationAnalytics"
          },
          "response": []
        },
        {
          "name": "Get your Application Manager settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "settings"
              ]
            },
            "description": "Created with defaults on first read.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSettings"
          },
          "response": []
        },
        {
          "name": "Update your Application Manager settings",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"defaultMarkupPct\": 1,\n  \"subLowBalanceThreshold\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/settings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "settings"
              ]
            },
            "description": "Default markup, low-balance threshold, default fraud caps and portal branding. Send only what changes.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#putApplicationSettings"
          },
          "response": []
        },
        {
          "name": "Get sub-account totals",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/overview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "overview"
              ]
            },
            "description": "**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationOverview"
          },
          "response": []
        },
        {
          "name": "List your sub-accounts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts"
              ],
              "query": [
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional) Default 50",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "lowBalanceOnly",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Newest first, cursor-paginated and searchable by label or external reference. `total` counts every match.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccounts"
          },
          "response": []
        },
        {
          "name": "Create a sub-account",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts"
              ]
            },
            "description": "Provisions its SIP credentials and one API key, both returned ONCE. Requires an active route purchase or an active route of your own.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccounts"
          },
          "response": []
        },
        {
          "name": "Create up to 100 sub-accounts at once",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subAccounts\": [\n    {\n      \"label\": \"Acme\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/bulk",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                "bulk"
              ]
            },
            "description": "Each item is created independently, so one bad row does not fail the batch. Each created entry carries its one-time credentials.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsBulk"
          },
          "response": []
        },
        {
          "name": "Get a sub-account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccountsById"
          },
          "response": []
        },
        {
          "name": "Update a sub-account",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Acme\",\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Suspending or closing revokes its API keys and stops its campaigns.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#patchApplicationSubAccountsById"
          },
          "response": []
        },
        {
          "name": "Fund a sub-account from your balance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/credit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "credit"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Moves money from your balance into the sub-account. Only active sub-accounts can be funded.\n\n**Access:** API key. Scoped keys need `application:write`.\n\n**Careful:** Moves money between your balance and a sub-account.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdCredit"
          },
          "response": []
        },
        {
          "name": "Return funds from a sub-account to your balance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1,\n  \"reason\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/debit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "debit"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Works on closed sub-accounts too, so a balance can be handed back after closure.\n\n**Access:** API key. Scoped keys need `application:write`.\n\n**Careful:** Moves money between your balance and a sub-account.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdDebit"
          },
          "response": []
        },
        {
          "name": "Record a payment a sub-account made to you",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/payment",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "payment"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Credits the sub-account for money it paid you outside the platform. Your own balance does not move.\n\n**Access:** API key. Scoped keys need `application:write`.\n\n**Careful:** Moves money between your balance and a sub-account.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdPayment"
          },
          "response": []
        },
        {
          "name": "Reverse a recorded sub-account payment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A fresh value per logical request makes retries safe."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 1,\n  \"reason\": \"Example\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/payment-correction",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "payment-correction"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Debits the sub-account to correct a payment recorded in error. Your own balance does not move.\n\n**Access:** API key. Scoped keys need `application:write`.\n\n**Careful:** Moves money between your balance and a sub-account.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdPaymentCorrection"
          },
          "response": []
        },
        {
          "name": "List a sub-account's API keys",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "api-keys"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccountsByIdApiKeys"
          },
          "response": []
        },
        {
          "name": "Issue an API key for a sub-account",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "api-keys"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The key is returned ONCE. It can reach only the sub-account traffic endpoints.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdApiKeys"
          },
          "response": []
        },
        {
          "name": "Revoke a sub-account API key",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/api-keys/:keyId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "api-keys",
                ":keyId"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "keyId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#deleteApplicationSubAccountsByIdApiKeysByKeyId"
          },
          "response": []
        },
        {
          "name": "Set a sub-account's portal email and send a sign-in link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/portal-invite",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "portal-invite"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Send `email: null` to clear it. The link is only emailed to active sub-accounts.\n\n**Access:** API key. Scoped keys need `application:write`.\n\n**Careful:** Sends an email to a third party.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdPortalInvite"
          },
          "response": []
        },
        {
          "name": "Close a sub-account",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/close",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "close"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Ends service: revokes its keys and stops its campaigns. No money moves; return any balance separately with the debit endpoint. Idempotent.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdClose"
          },
          "response": []
        },
        {
          "name": "Regenerate a sub-account SIP password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/sip-password",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "sip-password"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "The new password is returned ONCE; the old one stops working immediately.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#postApplicationSubAccountsByIdSipPassword"
          },
          "response": []
        },
        {
          "name": "Get lifetime usage for a sub-account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "usage"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccountsByIdUsage"
          },
          "response": []
        },
        {
          "name": "Get analytics for one sub-account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/analytics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "analytics"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "",
                  "description": "(Optional) Trailing window in days (default 30)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccountsByIdAnalytics"
          },
          "response": []
        },
        {
          "name": "List call records for a sub-account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/cdrs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "cdrs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "kind",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Newest first, offset-paginated.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccountsByIdCdrs"
          },
          "response": []
        },
        {
          "name": "Get a monthly statement for a sub-account",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/statement?month=%3Cmonth%3E",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "statement"
              ],
              "query": [
                {
                  "key": "month",
                  "value": "<month>",
                  "description": "(Required) YYYY-MM"
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Spend in USD and in the sub-account's display currency, split by voice and SMS, with a resale-tax block. Derived, not stored.\n\n**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccountsByIdStatement"
          },
          "response": []
        },
        {
          "name": "Export a sub-account's call records as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/application/sub-accounts/:id/cdrs/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "application",
                "sub-accounts",
                ":id",
                "cdrs",
                "export"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key. Scoped keys need `application:write`.\n\nReference: https://packetexchange.io/api-docs/reference/application-manager#getApplicationSubAccountsByIdCdrsExport"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Revenue share numbers",
      "description": "Revenue share number pools, IVR and payouts.",
      "item": [
        {
          "name": "Browse the revenue share number pool",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/numbers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "numbers"
              ],
              "query": [
                {
                  "key": "country",
                  "value": "",
                  "description": "(Optional) Country name contains",
                  "disabled": true
                },
                {
                  "key": "countryCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "q",
                  "value": "",
                  "description": "(Optional) Number starts with these digits",
                  "disabled": true
                },
                {
                  "key": "numberFrom",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "numberTo",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "maxRate",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "(Optional) Default available",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Cheapest first. Rates shown are what you earn per minute at the best payment term.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareNumbers"
          },
          "response": []
        },
        {
          "name": "Take a revenue share number",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"term\": \"1_1\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/numbers/:id/take",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "numbers",
                ":id",
                "take"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "You earn on every inbound minute to it. At most 5 numbers of one type per account.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevshareNumbersByIdTake"
          },
          "response": []
        },
        {
          "name": "Take one number of every available type",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"term\": \"1_1\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/take-one-of-each",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "take-one-of-each"
              ]
            },
            "description": "Skips types where you already hold the maximum.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevshareTakeOneOfEach"
          },
          "response": []
        },
        {
          "name": "Release a revenue share number back to the pool",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/takings/:id/release",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "takings",
                ":id",
                "release"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevshareTakingsByIdRelease"
          },
          "response": []
        },
        {
          "name": "List the revenue share numbers you hold",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/my-numbers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "my-numbers"
              ]
            },
            "description": "Active and released numbers with running call, minute and earnings totals.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareMyNumbers"
          },
          "response": []
        },
        {
          "name": "List calls to your revenue share numbers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/cdrs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "cdrs"
              ],
              "query": [
                {
                  "key": "numberId",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional) ISO date or timestamp",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional) `csv` returns a CSV download instead of JSON",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Newest first. `format=csv` downloads up to 5,000 rows as CSV.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareCdrs"
          },
          "response": []
        },
        {
          "name": "Get the public revenue share call log",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/access-log",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "access-log"
              ],
              "query": [
                {
                  "key": "country",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "since",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Recent calls across the pool, with origin and destination geography for mapping.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareAccessLog"
          },
          "response": []
        },
        {
          "name": "List the carrier paths that reach the pool",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/access-paths",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "access-paths"
              ],
              "query": [
                {
                  "key": "country",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareAccessPaths"
          },
          "response": []
        },
        {
          "name": "List revenue share rates by number type",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/rates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "rates"
              ],
              "query": [
                {
                  "key": "country",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "countryCode",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "maxRate",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional) `csv` returns a CSV download instead of JSON",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Available count and what you earn per minute at the best payment term. `format=csv` downloads CSV.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareRates"
          },
          "response": []
        },
        {
          "name": "Get your revenue share balance",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/balance",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "balance"
              ]
            },
            "description": "`available` = earned minus paid, requested and forfeited.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareBalance"
          },
          "response": []
        },
        {
          "name": "Get when each payout term next opens",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/schedule",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "schedule"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareSchedule"
          },
          "response": []
        },
        {
          "name": "Get a revenue share earnings statement",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/statement",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "statement"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "format",
                  "value": "",
                  "description": "(Optional) `csv` returns a CSV download instead of JSON",
                  "disabled": true
                }
              ]
            },
            "description": "Totals by number and by origin carrier for a period. `format=csv` downloads CSV.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareStatement"
          },
          "response": []
        },
        {
          "name": "List your revenue share payout requests",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/payouts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "payouts"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevsharePayouts"
          },
          "response": []
        },
        {
          "name": "Request a revenue share payout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 50,\n  \"term\": \"1_1\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/payouts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "payouts"
              ]
            },
            "description": "Paid in crypto to the address given. Subject to the minimum payout and, when enabled, identity verification.\n\n**Access:** Dashboard session only: API keys are refused with 403.\n\n**Careful:** Requests a payout of your balance.\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevsharePayouts"
          },
          "response": []
        },
        {
          "name": "List your IVR configurations",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareIvrConfigs"
          },
          "response": []
        },
        {
          "name": "Create an IVR configuration",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"default_music\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevshareIvrConfigs"
          },
          "response": []
        },
        {
          "name": "Update an IVR configuration",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"kind\": \"default_music\",\n  \"takingId\": \"<takingId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#patchRevshareIvrConfigsById"
          },
          "response": []
        },
        {
          "name": "Delete an IVR configuration",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#deleteRevshareIvrConfigsById"
          },
          "response": []
        },
        {
          "name": "Preview text-to-speech audio before saving",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ttsText\": \"<ttsText>\",\n  \"ttsVoiceId\": \"<ttsVoiceId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs",
                "preview"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevshareIvrConfigsPreview"
          },
          "response": []
        },
        {
          "name": "Generate the audio for a text-to-speech IVR",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs/:id/generate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs",
                ":id",
                "generate"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Renders and stores the audio, and returns it.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevshareIvrConfigsByIdGenerate"
          },
          "response": []
        },
        {
          "name": "Play an IVR configuration's audio",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs/:id/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs",
                ":id",
                "preview"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareIvrConfigsByIdPreview"
          },
          "response": []
        },
        {
          "name": "Upload audio for an IVR",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contentBase64\": \"<contentBase64>\",\n  \"contentType\": \"<contentType>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/ivr-configs/upload",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "ivr-configs",
                "upload"
              ]
            },
            "description": "Send a multipart `file` (with optional `takingId` and `name` fields), or JSON with `contentBase64` as below.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#postRevshareIvrConfigsUpload"
          },
          "response": []
        },
        {
          "name": "Attach an IVR to a number you hold",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ivrConfigId\": \"<ivrConfigId>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/takings/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "takings",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Send `ivrConfigId: null` to fall back to the default music loop.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#patchRevshareTakingsById"
          },
          "response": []
        },
        {
          "name": "Get the IVR set on a number you hold",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/takings/:id/ivr",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "takings",
                ":id",
                "ivr"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareTakingsByIdIvr"
          },
          "response": []
        },
        {
          "name": "Replace the IVR set on a number you hold",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mode\": \"single\",\n  \"variants\": [\n    {\n      \"ivrConfigId\": \"<ivrConfigId>\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/revshare/takings/:id/ivr",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "takings",
                ":id",
                "ivr"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "`single`: exactly one variant. `split`: two or more, each with a weight. `geo`: one per caller country plus at most one default.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#putRevshareTakingsByIdIvr"
          },
          "response": []
        },
        {
          "name": "Compare IVR variants on a number you hold",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/revshare/takings/:id/ivr-stats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "revshare",
                "takings",
                ":id",
                "ivr-stats"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Calls, minutes and earnings per variant and per caller country, with the best-earning variant once two have calls.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/revenue-share-numbers#getRevshareTakingsByIdIvrStats"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Notifications",
      "description": "In-app notifications for your account.",
      "item": [
        {
          "name": "List your notifications",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/notifications",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "notifications"
              ],
              "query": [
                {
                  "key": "unread",
                  "value": "",
                  "description": "(Optional) Only unread notifications",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "Unread critical notifications first, then newest activity first, with the unread and unread-critical counts.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/notifications#getNotifications"
          },
          "response": []
        },
        {
          "name": "Mark a notification as read",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/notifications/:id/read",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "notifications",
                ":id",
                "read"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/notifications#postNotificationsByIdRead"
          },
          "response": []
        },
        {
          "name": "Get your notification email preference",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/notifications/preferences",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "notifications",
                "preferences"
              ]
            },
            "description": "Whether unread critical notifications are emailed to you as a digest (on by default).\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/notifications#getNotificationsPreferences"
          },
          "response": []
        },
        {
          "name": "Set your notification email preference",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"actionEmail\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/notifications/preferences",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "notifications",
                "preferences"
              ]
            },
            "description": "Turn the \"needs attention\" digest email on or off. The digest lists unread critical notifications, at most once every 4 hours. Security and account emails are not affected.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/notifications#putNotificationsPreferences"
          },
          "response": []
        },
        {
          "name": "Mark all notifications as read",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/notifications/read-all",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "notifications",
                "read-all"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/notifications#postNotificationsReadAll"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Support",
      "description": "Support tickets and the public contact form.",
      "item": [
        {
          "name": "List your support tickets",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tickets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets"
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/support#getTickets"
          },
          "response": []
        },
        {
          "name": "Open a support ticket",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subject\": \"<subject>\",\n  \"message\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tickets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets"
              ]
            },
            "description": "The message becomes the first entry in the thread and support is alerted.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/support#postTickets"
          },
          "response": []
        },
        {
          "name": "Get a support ticket with its messages",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/tickets/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Internal staff notes are never included.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/support#getTicketsById"
          },
          "response": []
        },
        {
          "name": "Reply to a support ticket",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Hello from Acme\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/tickets/:id/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tickets",
                ":id",
                "messages"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Replying to a resolved ticket reopens it.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/support#postTicketsByIdMessages"
          },
          "response": []
        },
        {
          "name": "Contact support without an account",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subject\": \"<subject>\",\n  \"message\": \"Hello from Acme\",\n  \"email\": \"you@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/support/tickets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "support",
                "tickets"
              ]
            },
            "description": "The public contact form. When a valid credential is sent the ticket is filed on that account instead of as a guest ticket; an invalid credential is ignored, never refused.\n\n**Access:** Key optional: a key personalises the answer.\n\n**Rate limit:** 5 requests per hour.\n\nReference: https://packetexchange.io/api-docs/reference/support#postSupportTickets"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Compliance",
      "description": "Identity verification and US calling compliance.",
      "item": [
        {
          "name": "Start identity verification",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"accountType\": \"individual\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/kyc/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kyc",
                "start"
              ]
            },
            "description": "Begins a verification with the identity provider and returns the hosted page to open. Each call starts a new attempt.\n\n**Access:** API key. Scoped keys need `billing:write`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/compliance#postKycStart"
          },
          "response": []
        },
        {
          "name": "Get your identity verification status",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kyc/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kyc",
                "status"
              ]
            },
            "description": "`depositGate` says whether verification is currently required before adding or withdrawing funds; `configured` whether verification is available at all.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/compliance#getKycStatus"
          },
          "response": []
        },
        {
          "name": "Get your US calling compliance profile",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/us-compliance/profile",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "us-compliance",
                "profile"
              ]
            },
            "description": "Your STIR/SHAKEN and FCC registrations, reused for every US voice purchase. `data` is null until you submit one.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/compliance#getUsComplianceProfile"
          },
          "response": []
        },
        {
          "name": "Submit or update your US calling compliance profile",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"legalBusinessName\": \"<legalBusinessName>\",\n  \"contactName\": \"<contactName>\",\n  \"contactEmail\": \"you@example.com\",\n  \"frn\": \"<frn>\",\n  \"filer499Id\": \"<filer499Id>\",\n  \"ocn\": \"<ocn>\",\n  \"rmdRegistered\": true,\n  \"signsOwnTraffic\": true,\n  \"termsAccepted\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/us-compliance/profile",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "us-compliance",
                "profile"
              ]
            },
            "description": "Required before a US voice route purchase can be reviewed. Accepting the terms stamps `termsAcceptedAt`.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/compliance#putUsComplianceProfile"
          },
          "response": []
        },
        {
          "name": "Check whether a route needs a US compliance profile",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/us-compliance/route/:routeId/requirement",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "us-compliance",
                "route",
                ":routeId",
                "requirement"
              ],
              "variable": [
                {
                  "key": "routeId",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/compliance#getUsComplianceRouteByRouteIdRequirement"
          },
          "response": []
        },
        {
          "name": "Get your US compliance review status",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/us-compliance/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "us-compliance",
                "status"
              ]
            },
            "description": "`actionNeeded` is true when a US purchase is waiting on review and your profile is not complete enough for it to proceed.\n\n**Access:** API key with full access (not reachable by scoped keys).\n\nReference: https://packetexchange.io/api-docs/reference/compliance#getUsComplianceStatus"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Onboarding",
      "description": "The guided first-call flow for new accounts.",
      "item": [
        {
          "name": "Get everything the first-call guide needs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/first-call/state",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "first-call",
                "state"
              ]
            },
            "description": "Balance, verification, active purchases (with where to send traffic and the billing increment), the five most recent calls and the account connectivity brief. If the brief cannot be read, `brief` is null and `briefError` says why; no fallback address is ever guessed.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/onboarding#getFirstCallState"
          },
          "response": []
        },
        {
          "name": "Check first-call progress",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/first-call/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "first-call",
                "status"
              ]
            },
            "description": "Three cheap yes/no checks for a progress badge: any call made, any active purchase, a positive balance.\n\n**Access:** API key. Scoped keys need `account:read`.\n\nReference: https://packetexchange.io/api-docs/reference/onboarding#getFirstCallStatus"
          },
          "response": []
        },
        {
          "name": "Activate your own switch address",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"confirm\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/first-call/switch-address",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "first-call",
                "switch-address"
              ]
            },
            "description": "Moves the account onto its own ingress address. Call without `confirm` to preview what changes; send `confirm: true` to apply.\n\n**Access:** API key. Scoped keys need `account:write`.\n\n**Rate limit:** 10 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/onboarding#postFirstCallSwitchAddress"
          },
          "response": []
        },
        {
          "name": "Check whether a call to a destination would be accepted",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"destination\": \"+447700900123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/first-call/readiness",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "first-call",
                "readiness"
              ]
            },
            "description": "Dry-runs inbound admission for a destination against each way your traffic can be recognised (source address or SIP credentials). Places no call and moves no money. When refused, `rejection` explains why and whose move it is.\n\n**Access:** API key. Scoped keys need `account:read`.\n\n**Rate limit:** 20 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/onboarding#postFirstCallReadiness"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Status",
      "description": "Public platform status, incidents and maintenance.",
      "item": [
        {
          "name": "Get the public status page",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/status/page",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "page"
              ]
            },
            "description": "Overall state, component groups with 90-day history, active and recent incidents, and scheduled maintenance. Cached for 15 seconds.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 120 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/status#getStatusPage"
          },
          "response": []
        },
        {
          "name": "List past incidents",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/status/incidents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "incidents"
              ],
              "query": [
                {
                  "key": "cursor",
                  "value": "",
                  "description": "(Optional) The `nextCursor` from the previous page",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** Public: no key needed.\n\n**Rate limit:** 120 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/status#getStatusIncidents"
          },
          "response": []
        },
        {
          "name": "Get one incident with its updates",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/status/incidents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "incidents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "**Access:** Public: no key needed.\n\n**Rate limit:** 120 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/status#getStatusIncidentsById"
          },
          "response": []
        },
        {
          "name": "Subscribe to status updates as an RSS feed",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/status/feed.xml",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "feed.xml"
              ]
            },
            "description": "**Access:** Public: no key needed.\n\n**Rate limit:** 120 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/status#getStatusFeedXml"
          },
          "response": []
        },
        {
          "name": "Subscribe an email address to status updates",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"you@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/status/subscribe",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "subscribe"
              ]
            },
            "description": "Sends a confirmation email. The answer is the same whether or not the address was already subscribed.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 5 requests per hour.\n\nReference: https://packetexchange.io/api-docs/reference/status#postStatusSubscribe"
          },
          "response": []
        },
        {
          "name": "Confirm a status subscription from the email link",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/status/subscribe/confirm",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "subscribe",
                "confirm"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** Public: no key needed.\n\n**Rate limit:** 30 requests per 10 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/status#getStatusSubscribeConfirm"
          },
          "response": []
        },
        {
          "name": "Unsubscribe from status updates from the email link",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/status/unsubscribe",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "unsubscribe"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "**Access:** Public: no key needed.\n\n**Rate limit:** 30 requests per 10 minutes.\n\nReference: https://packetexchange.io/api-docs/reference/status#getStatusUnsubscribe"
          },
          "response": []
        },
        {
          "name": "Unsubscribe from status updates in one click",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/status/unsubscribe",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "status",
                "unsubscribe"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "",
                  "description": "(Optional)",
                  "disabled": true
                }
              ]
            },
            "description": "The RFC 8058 one-click unsubscribe target used by mail clients.\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 120 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/status#postStatusUnsubscribe"
          },
          "response": []
        }
      ]
    },
    {
      "name": "System",
      "description": "Health checks and service metadata.",
      "item": [
        {
          "name": "Check that the API is up",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health"
              ]
            },
            "description": "Liveness probe. Answers 200 `{ status: \"ok\" }` while this node can reach its database, and 503 `{ status: \"unavailable\", reason: \"database_unreachable\" }` (with `success: false`) when it cannot.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/system#getHealth"
          },
          "response": []
        },
        {
          "name": "Get component health for the platform",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/health/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health",
                "status"
              ]
            },
            "description": "API, database, cache and call switch health, recomputed at most every 10 seconds.\n\n**Access:** Public: no key needed.\n\nReference: https://packetexchange.io/api-docs/reference/system#getHealthStatus"
          },
          "response": []
        },
        {
          "name": "Get the public AI voice price per minute",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "auth": {
              "type": "noauth"
            },
            "url": {
              "raw": "{{baseUrl}}/pricing/ai-voice",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "pricing",
                "ai-voice"
              ]
            },
            "description": "The same per-minute rate the billing engine charges for AI-connected minutes, metered per second (`billingIncrementSeconds: 1`). Sell price only. No authentication, and it never answers 401, so a signed-in page can call it safely. Cacheable for 5 minutes (`Cache-Control: public, max-age=300`).\n\n**Access:** Public: no key needed.\n\n**Rate limit:** 60 requests per minute.\n\nReference: https://packetexchange.io/api-docs/reference/system#getPricingAiVoice"
          },
          "response": []
        }
      ]
    }
  ]
}