Developer platform

Voice as an API, not a SIP stack you have to learn

Place calls, inspect them, and react to what happens — through a versioned REST API, signed webhooks, and a browser SDK. Sandbox environments let you build against real behavior before anything touches production traffic.

REST API

Predictable, versioned, and idempotent where it counts

Create a call, hang it up, send DTMF, or pull recordings and usage — through one consistently designed API. Every resource is authenticated, permission-scoped, rate-limited, and documented with a real OpenAPI specification.

  • Idempotency keys on write operations — a retried request never double-creates a call
  • Consistent pagination and error shape across every endpoint
  • Every request and response is request-ID traceable, end to end
// Create an outbound call POST /v1/calls { "from": "+15551230000", "to": "+15559876543", "idempotencyKey": "order-48213-callback" }
Webhooks

Know what happened, signed and on time

Call status, recording completion, streaming session events and low-balance alerts arrive as signed webhooks with automatic retry and a full delivery history — inspect exactly what was sent and re-deliver on demand.

  • HMAC signature with timestamp — reject anything replayed or forged
  • Exponential backoff with a maximum retry policy
  • Endpoint auto-suspension after repeated failures, so a dead endpoint doesn't spin forever
// call.completed webhook payload (abridged) { "event": "call.completed", "callId": "cl_01hxyz...", "durationSeconds": 184, "disconnectReason": "normal_clearing" }
Browser SDK

Add calling to your web app in a few method calls

A JavaScript SDK wraps the browser calling connection: connect, place or answer a call, mute, send digits, and pick input/output devices — with normalized call-state events so your UI never has to speak signaling directly.

  • No permanent credential ever ships to the browser
  • Automatic reconnect handling on network changes
  • Works behind restrictive NAT and firewalls
// Browser calling SDK const phone = await klicko.connect(token); const call = await phone.call("+15559876543"); call.on("answered", () => console.log("connected"));
Build with confidence

Sandbox environments, per project

Development, staging and production are separate environments within the same project — with their own connections, routes and numbers — so integration testing never risks a production route or a real customer call.

Common questions

Developer platform, answered directly

Is there a sandbox environment to test against?

Yes — every project includes development, staging and production environments, each with its own isolated connections, routes, and numbers, so you can build and test integrations without any risk to live traffic.

Are webhook deliveries retried automatically?

Yes. Failed webhook deliveries retry with exponential backoff up to a configured maximum, and every delivery attempt — successful or not — is recorded in a delivery history you can inspect and manually replay.

Can I safely retry a call-creation request?

Yes — write operations accept an idempotency key, so a retried request (for example after a network timeout) never creates a duplicate call.

Get API credentials and start building

We'll set you up with a sandbox project and walk through your first call.