Establishing session

VOLTATelecommunications

VOLTA Fabric

A cloud communications platform sitting directly on the carrier

Most CPaaS providers rent minutes from someone like us. VOLTA Fabric runs on the switch itself — which removes an intermediary hop, a margin layer and an entire class of finger-pointing during incidents.

Hosted PBX

Multi-tenant cloud PBX with IVR designer, skills-based ACD, call recording with 7-year retention, presence, voicemail-to-email and mobile softphones for iOS and Android.

Teams Direct Routing

Certified SBC pairing for Microsoft Teams with tenant onboarding, per-user licence mapping, emergency location handling and hybrid PSTN break-out.

Programmable voice

Create, bridge, transfer and record calls through a REST API, or drive live call control over WebSocket with sub-40 ms command latency.

Real-time media streams

Fork inbound media to your own transcription, sentiment or compliance engine over secure WebSocket with 20 ms PCM frames.

Messaging APIs

SMS, RCS and WhatsApp Business messaging with direct operator connections, sender-ID registration and delivery-receipt webhooks.

Operator-grade tooling

CDR streaming to S3 or Kafka, rate-sheet APIs, sub-account provisioning, per-second balance checks and signed event webhooks with replay.

Developer portal

Six product APIs, one credential, one versioned contract

Every VOLTA product exposes the same authentication model, the same idempotency semantics and the same signed-webhook envelope. Pick a language, copy the request, and the sandbox will answer with the exact payload documented here.

Base URL

https://api.volta.network/v2

Sandbox

https://sandbox.volta.network/v2

API version

2026-04-01 (pinned)

01 · Multi-tenant hosted telephony

Cloud PBX

Provision tenants, extensions, IVR trees and hunt groups on VOLTA's multi-tenant softswitch. Every seat is created against a customer tenant with its own dial plan, class of service, recording policy and emergency location, so resellers can onboard an entire business in a single orchestrated call rather than a support ticket.

  • Tenant, seat and device provisioning
  • IVR designer with time-of-day routing
  • Skills-based ACD queues and wallboards
  • Voicemail-to-email and 7-year recording retention
Seats per tenant
25,000
Registrar SLA
99.999%
Media regions
9
POSTapi.volta.network/v2/pbx/tenants/tn_8241/extensions
1import { Volta } from "@volta/node";
2
3const volta = new Volta({ apiKey: process.env.VOLTA_API_KEY });
4
5const result = await volta.request({
6 method: "POST",
7 path: "/v2/pbx/tenants/tn_8241/extensions",
8 body: {
9 "extension": "204",
10 "display_name": "Ieva Ozola",
11 "class_of_service": "international",
12 "devices": [
13 {
14 "type": "webrtc"
15 },
16 {
17 "type": "sip",
18 "mac": "805EC0A41B77"
19 }
20 ],
21 "voicemail": {
22 "enabled": true,
23 "email": "ieva@acme.example"
24 },
25 "recording": "inbound_outbound"
26 },
27 idempotencyKey: crypto.randomUUID(),
28});
29
30console.log(result.status, result.data);

02 · Dedicated instances and hybrid PSTN

Enterprise PBX

Dedicated, single-tenant PBX instances for organisations with regulatory, latency or integration requirements that shared platforms cannot satisfy. Deploy in a VOLTA region or inside your own VPC, pair with Microsoft Teams Direct Routing, keep legacy PRI gateways alive during migration and expose a private API host with mutual TLS.

  • Single-tenant instances in region or in your VPC
  • Teams Direct Routing and Zoom Phone pairing
  • Hybrid PRI / SIP failover during migration
  • Active-active clustering with geo-redundant SBCs
Concurrent calls
40,000
Failover target
< 2 s
Deployment
Region or VPC
POSTapi.volta.network/v2/enterprise/instances/in_1190/routing-plans
1import { Volta } from "@volta/node";
2
3const volta = new Volta({ apiKey: process.env.VOLTA_API_KEY });
4
5const result = await volta.request({
6 method: "POST",
7 path: "/v2/enterprise/instances/in_1190/routing-plans",
8 body: {
9 "name": "EMEA outbound",
10 "failover": [
11 "sbc-fra-01",
12 "sbc-ams-02"
13 ],
14 "rules": [
15 {
16 "match": "^\\+44",
17 "trunk": "trk_uk_platinum",
18 "cli": "+442038900112"
19 },
20 {
21 "match": "^\\+971",
22 "trunk": "trk_gulf_direct",
23 "cli": "+97144019920"
24 }
25 ],
26 "emergency": {
27 "profile": "e112",
28 "validate_address": true
29 }
30 },
31 idempotencyKey: crypto.randomUUID(),
32});
33
34console.log(result.status, result.data);

03 · Call control at carrier latency

Programmable Voice API

Create, bridge, transfer, record and terminate calls with REST, then steer live media over WebSocket with sub-40 ms command latency. Because the API runs on the switch rather than on top of a wholesale supplier, post-dial delay and answer-seizure ratio are the carrier's own figures, and every leg exposes RTP quality metrics in real time.

  • Outbound, inbound and conference call control
  • Real-time media forking to your transcription stack
  • DTMF capture, whisper, barge and supervised transfer
  • Per-leg MOS, jitter and packet-loss telemetry
Command latency
< 40 ms
Median PDD
1.84 s
Codecs
OPUS · G.711 · G.729
POSTapi.volta.network/v2/calls
1import { Volta } from "@volta/node";
2
3const volta = new Volta({ apiKey: process.env.VOLTA_API_KEY });
4
5const result = await volta.request({
6 method: "POST",
7 path: "/v2/calls",
8 body: {
9 "from": "+442035550100",
10 "to": "+442038900112",
11 "route_class": "platinum",
12 "record": true,
13 "machine_detection": "hangup",
14 "webhook": "https://acme.example/voice/events"
15 },
16 idempotencyKey: crypto.randomUUID(),
17});
18
19console.log(result.status, result.data);

04 · Direct operator messaging

SMS API

Send A2P SMS, RCS and WhatsApp Business messages over direct operator connections in more than 190 countries. Sender ID registration, local content rules, GSM-7 and UCS-2 segmentation, link shortening and per-country throughput shaping are handled for you, with delivery receipts streamed back as signed webhooks within seconds.

  • A2P SMS, RCS and WhatsApp on one endpoint
  • Automatic sender-ID and template compliance
  • Batch send with per-country throughput shaping
  • DLR webhooks with operator-level error codes
Throughput
1,200 msg/s
Countries
190+
Median DLR
1.4 s
POSTapi.volta.network/v2/messages
1import { Volta } from "@volta/node";
2
3const volta = new Volta({ apiKey: process.env.VOLTA_API_KEY });
4
5const result = await volta.request({
6 method: "POST",
7 path: "/v2/messages",
8 body: {
9 "from": "VOLTA",
10 "to": [
11 "+37060012345",
12 "+48501223344"
13 ],
14 "text": "Your VOLTA one-time code is 448 210. It expires in 5 minutes.",
15 "channel": "sms",
16 "validity_minutes": 5,
17 "webhook": "https://acme.example/sms/dlr"
18 },
19 idempotencyKey: crypto.randomUUID(),
20});
21
22console.log(result.status, result.data);

05 · Interconnect automation for operators

Carrier API

Everything a wholesale partner needs without opening a ticket: create and amend interconnects, publish or ingest rate sheets, manage IP authorisation and channel limits, stream CDRs to S3 or Kafka, and pull ASR, ACD and PDD by destination. The same endpoints power VOLTA's own NOC, so partners see exactly what our engineers see.

  • Interconnect, IP-auth and channel-limit management
  • Rate-sheet publish, ingest and effective-date diffing
  • Near-real-time CDR streaming to S3 or Kafka
  • ASR, ACD, PDD and NER by destination and carrier
CDR lag
< 30 s
Rate-sheet formats
CSV · JSON · XML
Partners live
800+
GETapi.volta.network/v2/carrier/interconnects/ic_3308/quality
1import { Volta } from "@volta/node";
2
3const volta = new Volta({ apiKey: process.env.VOLTA_API_KEY });
4
5const result = await volta.request({
6 method: "GET",
7 path: "/v2/carrier/interconnects/ic_3308/quality",
8 query: {
9 "destination": "44",
10 "window": "24h",
11 "granularity": "1h"
12 },
13 idempotencyKey: crypto.randomUUID(),
14});
15
16console.log(result.status, result.data);

06 · Live rating and margin control

Pricing API

Query the same rating engine that bills the switch. Resolve any E.164 number to a destination, prefix, route class and per-minute rate, compare quality tiers before you commit traffic, model margin on a customer sheet, and subscribe to change notifications so your own price book is never more than a few seconds behind the carrier's.

  • Prefix resolution with LRN and MNP awareness
  • Route-class comparison with ASR and ACD context
  • Customer sheet generation and margin modelling
  • Rate-change webhooks with effective dating
Lookup latency
18 ms p95
Prefixes rated
428,000
Currencies
EUR · USD · GBP
GETapi.volta.network/v2/pricing/rates
1import { Volta } from "@volta/node";
2
3const volta = new Volta({ apiKey: process.env.VOLTA_API_KEY });
4
5const result = await volta.request({
6 method: "GET",
7 path: "/v2/pricing/rates",
8 query: {
9 "number": "+442038900112",
10 "route_class": "all",
11 "currency": "EUR"
12 },
13 idempotencyKey: crypto.randomUUID(),
14});
15
16console.log(result.status, result.data);

Authentication

OAuth2 client credentials, scoped per product

Production traffic authenticates with a client-credentials grant against auth.volta.network. Tokens live for 60 minutes, carry explicit scopes and can be bound to an IP allow-list. Static API keys remain available for sandbox and internal tooling, and every SDK caches and refreshes tokens transparently.

  • Scopes: voice.write · messaging.write · pricing.read · carrier.admin
  • Optional mutual TLS and IP allow-listing per credential
  • Idempotency-Key honoured for 24 hours on every POST
  • Rate limits returned in X-RateLimit-Remaining and Retry-After
1# 1. Exchange your client credentials for a 60-minute access token
2curl -sS -X POST https://auth.volta.network/oauth2/token \
3 -u "$VOLTA_CLIENT_ID:$VOLTA_CLIENT_SECRET" \
4 -d "grant_type=client_credentials&scope=voice.write messaging.write pricing.read"
5
6# 200 OK
7# {
8# "access_token": "vlt_at_9F2CQ…",
9# "token_type": "Bearer",
10# "expires_in": 3600,
11# "scope": "voice.write messaging.write pricing.read"
12# }
13
14# 2. Call any endpoint with the token
15curl -sS https://api.volta.network/v2/account \
16 -H "Authorization: Bearer vlt_at_9F2CQ…"

Webhooks

Signed events, replayable for 30 days

Call, message, carrier-quality and pricing events are delivered as signed JSON to your endpoint. Verify the HMAC over the raw body before parsing, acknowledge with 2xx inside five seconds, and process asynchronously. Failed deliveries retry with exponential backoff for 24 hours and can be replayed from the dashboard or the API.

Volta-Signature: t=1785342900,v1=6f3c9a1d…

HMAC-SHA256 over `t` + `.` + raw body

Volta-Event-Id: evt_1XA55TRB

Stable per event — use it to de-duplicate

Volta-Delivery: 3 of 12

Attempt counter, exponential backoff over 24 h

Volta-Api-Version: 2026-04-01

Pinned per account, never changed silently

1import express from "express";
2import { verifySignature } from "@volta/node/webhooks";
3
4const app = express();
5
6app.post("/voice/events", express.raw({ type: "*/*" }), (req, res) => {
7 const ok = verifySignature({
8 payload: req.body, // raw bytes, never the parsed body
9 signature: req.header("Volta-Signature"), // t=1785…,v1=6f3c…
10 secret: process.env.VOLTA_WEBHOOK_SECRET,
11 toleranceSeconds: 300,
12 });
13
14 if (!ok) return res.status(401).send("invalid signature");
15
16 const event = JSON.parse(req.body.toString());
17 queue.enqueue(event); // acknowledge fast, process asynchronously
18 res.status(204).end();
19});

Developer experience

Place a supervised international call in one request

Authenticate once, choose a route class, and VOLTA handles carrier selection, transcoding, recording and event delivery. Idempotency keys, signed webhooks and per-second balance checks are standard.

api.volta.network / v2
curl -X POST https://api.volta.network/v2/calls \
  -H "Authorization: Bearer $VOLTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+442035550100",
    "to": "+442038900112",
    "route_class": "platinum",
    "record": true,
    "webhook": "https://acme.example/voice/events"
  }'

# 201 Created
# { "call_id": "cl_7Q2XK9RD", "state": "ringing", "pdd_ms": 1840 }