Calls inside
your product.

Audio and video for up to ten people. Invites, call records, saved chat and billing, behind one API.

Design reviewwaiting
NusratTanvirFarhanRoom
0m3m6m9m12m
In use
0:00
Billed
0 min
Charge
0 BDT
Three people, one room. Billed once, rounded up to the minute.

Everything a call needs, nothing you have to host.

Invites and scheduling

Share a code, set a window. Calls open ten minutes early and close thirty minutes after they end.

invite.code, expires_at, max_uses

Small rooms

10

Call records

Duration, participants, IP and platform for every session.

user_id: nusrat
platform: android
peak_participants: 3

Saved chat

Messages are stored with the call, so latecomers can catch up.

GET /v1/calls/{id}/messages

Usage reports

Room-minutes by team, user or call. Download as CSV.

GET /v1/usage?group_by=team

Three requests to a live call.

Sign

Your backend signs a user token

HS256 with your API secret. Your own user_id goes in sub. Tokens live for up to an hour.

backend/tele.go
signer := teletoken.Signer{
    APIKey:    os.Getenv("TELE_API_KEY"),
    APISecret: os.Getenv("TELE_API_SECRET"),
}

token, err := signer.UserToken(teletoken.User{
    ID:   "nusrat",
    Name: "Nusrat",
    Team: "design",
}, 15*time.Minute)

Join

Your app redeems the invite

One request checks the invite, the schedule and the guest list, then returns everything needed to connect.

POST /v1/invites/{code}/join
curl -X POST $TELE_API/v1/invites/$CODE/join \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Client-Platform: web"

{
  "ws_url": "wss://tele-lk.cloudguys.io",
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "ice_servers": [ ... ],
  "role": "participant"
}

Connect

The media connects directly

Pass the response to the client SDK on web, Flutter or mobile. Tele records the session as it happens.

app/call/CallView.tsx
const room = new Room({ adaptiveStream: true });

await room.connect(join.ws_url, join.token, {
  rtcConfig: { iceServers: join.ice_servers },
});

await room.localParticipant
  .enableCameraAndMicrophone();

Billed by the room, not the head.

Billed once

A call is one room. Ten people cost the same as two.

Rounded up

A call of 10:05 bills as 11 minutes, at 1 BDT each by default.

Waiting counts

A host alone in the room is in use. Rates can differ by team.

Wherever your users are.

Make your first call in ten minutes.

Read the docs