Telecom as code. REST + webhooks.
Provision seats, manage local CLI pools, fetch CDRs, listen for call events. Idempotent endpoints, documented schemas, HMAC-signed webhooks. Ship voice into your platform without an account-manager email chain.
Idempotent · HMAC webhooks · cursor pagination · 24h retry · stable schemas
Spin up a seat. ~200 ms.
Returns SIP host, username, secret, CLI pool ID, transport policy. Drop straight into ViciDial / FreePBX / your SDK.
curl -X POST https://api.unlimcall.com/v1/seats \
-H "Authorization: Bearer uc_live_xxxxxxxx" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "sdr-seat-us-east-001",
"country": "US",
"tier": "standard",
"min_seats": 10
}'
# 200 OK
{
"id": "seat_2NzKxLqV4jE",
"sip_host": "sip-us-east.unlimcall.com",
"sip_username": "unl_001",
"sip_secret": "********", // shown once at create
"cli_pool_id": "pool_us_east_default",
"transport": ["udp","tcp","tls"],
"stir_shaken": "attestation_a",
"created_at": "2026-05-07T12:34:56Z"
}What you build with.
Three primitives the API is shaped around. Everything else is convenience on top.
CDRs stream into your warehouse
Bulk export to S3 / GCS or stream individual call events to a webhook. Schema is documented and stable. Pull into Postgres, Snowflake, BigQuery — or your dialer.
Programmatic local-presence policy
Manage CLI rotation rules per market via API. Throttle-aware — set a CPS ceiling per number, auto-rest flagged CLIs, rotate within the pool you hold under our license.
Every POST accepts an idempotency key
Safe to retry during network failures or webhook delivery loops. No double-provisioning, no double-billing — same key returns the same response object.
The surface area.
The full reference is in the docs. Headline endpoints below — there are ~30 in total covering seats, CDRs, webhooks, markets, billing, and CLI pools.
- POST
/v1/seatsProvision a new outbound seat — returns SIP credentials, CLI pool ID - GET
/v1/seats/{id}Fetch seat config — usage stats, CLI pool, current concurrency - DELETE
/v1/seats/{id}Decommission seat — credentials revoked immediately - GET
/v1/cdrsList call detail records — filter by date, seat, country, status - GET
/v1/marketsList available markets with live pricing and CLI pool sizes - POST
/v1/webhooksRegister a webhook endpoint for call.completed, seat.provisioned, cli.rotated
What backend engineers actually ask.
- AuthenticationBearer token · scoped per project · rotate any time from portal
- Rate limits60 req/s default, 1000 burst · raise on request
- Idempotencyevery POST accepts Idempotency-Key header · 24h dedup window
- Paginationcursor-based · limit max 1000 per page · stable across writes
- WebhooksHMAC-SHA256 signed · retry with exponential backoff up to 24h
- CDR retention90 days hot · 7 years cold archive · per-account override
- API versioningheader-based (X-API-Version) · breaking changes get a new version, old version supported 12 months
- REST + webhooks — no proprietary SDK required
- Idempotent POSTs — safe to retry
- HMAC-signed webhooks · 24h exponential backoff
- Cursor pagination · stable across concurrent writes
- Header-based versioning · 12-month deprecation window
- CDR bulk export to S3/GCS or per-call webhook
Pick a country.Pay in two minutes.
- Magic-link signup
- Cancel before commit ends
- Lines live in ~2 min