Skip to content

API reference

Compliance

Identity verification and US calling compliance.

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

Start identity verification

POST/api/v1/kyc/start

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

Begins a verification with the identity provider and returns the hosted page to open. Each call starts a new attempt.

Request body (application/json)

  • accountTyperequired

    string

    One of individual, business

Response 200

  • datarequired

    object

  • verificationUrlrequired

    string (uri) · data.verificationUrl

Errors

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

Get your identity verification status

GET/api/v1/kyc/status

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

depositGate says whether verification is currently required before adding or withdrawing funds; configured whether verification is available at all.

Response 200

  • datarequired

    object

  • kycStatusrequired

    string · data.kycStatus

    One of not_started, pending, verified, rejected
  • accountTyperequired

    string | null · data.accountType

    One of individual, business
  • kycExemptrequired

    boolean · data.kycExempt

  • depositGaterequired

    boolean · data.depositGate

  • configuredrequired

    boolean · data.configured

Errors

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

Get your US calling compliance profile

GET/api/v1/us-compliance/profile

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

Your STIR/SHAKEN and FCC registrations, reused for every US voice purchase. data is null until you submit one.

Response 200

  • datarequired

    object | null

  • userIdrequired

    string (uuid) · data.userId

  • legalBusinessNamerequired

    string · data.legalBusinessName

  • contactNamerequired

    string · data.contactName

  • contactEmailrequired

    string · data.contactEmail

  • contactPhonerequired

    string | null · data.contactPhone

  • frnrequired

    string · data.frn

    FCC Registration Number
  • filer499Idrequired

    string · data.filer499Id

    FCC Form 499 Filer ID
  • ocnrequired

    string · data.ocn

    Operating Company Number
  • rmdRegisteredrequired

    boolean · data.rmdRegistered

    Listed in the FCC Robocall Mitigation Database
  • rmdReferencerequired

    string | null · data.rmdReference

  • signsOwnTrafficrequired

    boolean · data.signsOwnTraffic

    Signs its own STIR/SHAKEN attestations
  • stirShakenCertrequired

    string | null · data.stirShakenCert

  • attestationLevelrequired

    string | null · data.attestationLevel

    One of A, B, C
  • termsAcceptedAtrequired

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

    ISO-8601 timestamp (UTC)
  • submittedAtrequired

    string (date-time) · data.submittedAt

    ISO-8601 timestamp (UTC)
  • updatedAtrequired

    string (date-time) · data.updatedAt

    ISO-8601 timestamp (UTC)

Errors

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

Submit or update your US calling compliance profile

PUT/api/v1/us-compliance/profile

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

Required before a US voice route purchase can be reviewed. Accepting the terms stamps termsAcceptedAt.

Request body (application/json)

  • legalBusinessNamerequired

    string

    max 255 chars
  • contactNamerequired

    string

    max 255 chars
  • contactEmailrequired

    string (email)

    max 255 chars
  • contactPhone

    string | null

    max 40 chars
  • frnrequired

    string

    max 40 chars
  • filer499Idrequired

    string

    max 40 chars
  • ocnrequired

    string

    max 20 chars
  • rmdRegisteredrequired

    boolean

  • rmdReference

    string | null

    max 2000 chars
  • signsOwnTrafficrequired

    boolean

  • stirShakenCert

    string | null

    max 4000 chars
  • attestationLevel

    string | null

    One of A, B, C
  • termsAcceptedrequired

    boolean

Response 200

Errors

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

Check whether a route needs a US compliance profile

GET/api/v1/us-compliance/route/{routeId}/requirement

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

Parameters

  • routeIdrequired

    path · string

Response 200

  • datarequired

    object

  • requiredrequired

    boolean · data.required

  • hasProfilerequired

    boolean · data.hasProfile

  • profileCompleterequired

    boolean · data.profileComplete

Errors

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

Get your US compliance review status

GET/api/v1/us-compliance/status

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

actionNeeded is true when a US purchase is waiting on review and your profile is not complete enough for it to proceed.

Response 200

  • datarequired

    object

  • hasProfilerequired

    boolean · data.hasProfile

  • profileCompleterequired

    boolean · data.profileComplete

  • pendingReviewCountrequired

    integer · data.pendingReviewCount

  • actionNeededrequired

    boolean · data.actionNeeded

Errors

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