SDKs

Six idioms.
One contract.

Every Dials SDK is generated from the same versioned OpenAPI document. Same request shape. Same response shape. Same retries, errors, signing, and idempotency.

At a glance

What every SDK gives you.

Typed
End-to-end
Requests, responses, errors, and webhooks — all typed at the boundary.
Retries
Exponential
Backoff with jitter for 408, 429, 5xx — never for 4xx outside 408/429.
Signing
Webhook + HMAC
Verify inbound webhooks with a single SDK call.
Idempotency
Built in
Idempotency keys generated and replayed automatically on retry.

Languages

Pick your idiom.

TypeScript

npm i @dials/sdk

GA
Rust

cargo add dials-sdk

GA
Python

pip install dials

Beta
Go

go get github.com/dials/sdk-go

Beta
Swift

Swift Package Manager

Coming soon
Kotlin

Gradle: implementation("com.dials:sdk")

Coming soon

TypeScript

Reach the same path.

Configure a client with your tenant and audience, hold the permissions you need, and call any of the actions. The same body shape the dashboard sends.

TypeScript
import { Dials } from "@dials/sdk";

const dials = new Dials({
  audience: "platform.dials.com",
  scope:    ["dials.read", "dials.dial"]
});

const results = await dials.numbers.search({
  contains:            "0100",
  startsWith:          "512",
  repeatingDigit:      "5",
  repeatingDigitCount: 3,
  region:              "TX",
  postalCode:          "78701",
  nearLatLong:         "30.2672,-97.7431",
  voice:               true,
  limit:               25
});

for (const num of results.items) {
  console.log(num.e164);
}

Rust

Production by default.

Rust SDK is the reference implementation. Identical retries, identical signing, identical types. Compiles to a static binary.

Rust
use dials_sdk::{Dials, NumberSearch};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let dials = Dials::from_env()?;
    let res = dials
        .numbers()
        .search(NumberSearch::new()
            .area_code("512")
            .exchange_code("555")
            .local_calling_area(true)
            .limit(25))
        .await?;
    for n in res.items { println!("{}", n.e164); }
    Ok(())
}

Pick a language.

Install an SDK, point it at your tenant, and run a health check end-to-end.