Callio developers

Add calling, chat and location to your app

Callio puts voice and video calls, chat and live location inside your iOS, Android, Flutter, React Native or web app. Your users talk to each other or to your contact centre without ever seeing a phone number.

  1. Get a sandbox. You get a test organisation with two users, an API key and a console login. It takes a few seconds.
  2. Mint tokens on your server. Your backend calls POST /api/v1/tokens with the API key and hands the token to your app. The SDK never sees a password.
  3. Add the SDK and start it. Then dial a user, an order, or support.

Versions

All SDKs are at … and follow semantic versioning. Read the changelog.

API

REST with JSON. Download the OpenAPI 3.1 spec for code generators and Postman.

Webhooks

Call, chat and order events are signed with HMAC-SHA256 and sent to your URL. They are also available as a pull feed at /api/v1/events.

Quick start

Your server: hand out tokens

// Node / Express. CALLIO_KEY is the API key from your sandbox (keep it on the server).
app.post('/callio-token', requireYourLogin, async (req, res) => {
  const r = await fetch(`${CALLIO_URL}/api/v1/tokens`, {
    method: 'POST',
    headers: { Authorization: `Bearer ${process.env.CALLIO_KEY}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({ username: req.user.callioUsername, ttlSec: 900 }),
  });
  res.json(await r.json());   // { token, expiresAt }
});

API reference

Authenticate every request with Authorization: Bearer cio_…. Paste a sandbox key to try the read calls here; it stays in this tab.

Loading…

Samples

Call by order

A customer calls whoever is delivering their order. Reassigning the order reroutes the next call.

POST /api/v1/orders
{ "id": "ORD-1001", "customer": "customer1",
  "agent": "agent1", "label": "Grocery delivery" }

// in the app
engine.callOrder('ORD-1001')

Call support

The app calls the tenant's support entry point. It overflows to the next one when nobody answers.

// web engine
await engine.loadEntryPoints();
engine.callSupport();          // or callSupport('Arabic desk')

Pre-call check

Before a call, test the server, the microphone, STUN and TURN.

const r = await engine.preCallTest();
if (!r.ok) showWarning(r.verdict);

Follow events for BI

let after = 0;
for (;;) {
  const r = await api(`/api/v1/events?after=${after}`);
  store(r.events); after = r.next;
}

Full host-app examples, including CallKit and ConnectionService ringing from a killed app, are in sdk/EXAMPLES.md in the SDK repository. The changelog is in sdk/CHANGELOG.md.

Get a sandbox

A test organisation with a customer and an agent who can call and chat, an API key and an admin console login. It allows 10 users and 2 calls at a time, with no recording, and expires after 14 days.