Skip to main content
Two official SDKs, both covering every /v1 endpoint: Both retry rate limits, page through lists, send an idempotency key on the paths that spend money, and raise errors carrying the API’s stable code, the request_id to quote and the doc_url to read. A test in each compares its method table against the OpenAPI document in both directions, so an endpoint cannot go unwrapped and a method cannot claim an endpoint that does not exist.
There is no Python SDK yet. Integrate has a fifteen-line client in Node and in Python for anyone who would rather not add a dependency.

Quickstart

Both SDKs name their methods the same way: agents.create, calls.list, sipTrunks.status, billing.createTopup. Twelve resources, 56 methods.

Pagination

Lists are cursor-paginated. Iterate the page to walk every page; the cursor and your filters are carried along.

Errors

Match on code. The message is written for people and may be reworded.

Idempotency

calls.create and billing.createTopup require an idempotency key. The SDKs generate one per call and reuse it across their own retries, so a network timeout never becomes two phone calls. Pass your own to make a retry from your side safe too.

Retries

The two SDKs share one policy:
  • 429: retried after Retry-After, capped at ten seconds, up to maxRetries (default 2). Rate-limited requests are never charged.
  • Network failures, timeouts and 502504: retried only for GET and for requests carrying an idempotency key. DELETE, PATCH and unkeyed POST (hanging up, starting or pausing a campaign, testing a trunk, rotating a key) are never repeated when the outcome is unknown.
  • 500 and other 4xx: never retried.

Pinning a version

Sends the Wixzel-Version header, so an upgrade is something you do rather than something that happens to you.

Options

Both expose an escape hatch, client.request(method, path, …), that reaches an endpoint the SDK does not model yet with the same auth, retries and error handling.

In the browser and in Flutter

A live key in a page or a shipped app is a key anyone can read. Call your own backend from the client, and let the backend hold the key.
The API’s CORS policy does not yet expose Retry-After, X-Wixzel-Balance or Idempotent-Replay to page scripts, so those read as empty in a browser. Everything else works.

Source