Scheduling & invites¶
Schedule a call¶
curl -X POST $TELE_API/v1/calls -H "Authorization: Bearer $HOST_TOKEN" -d '{
"title": "Design review",
"scheduled_start": "2026-10-20T10:00:00+06:00",
"scheduled_end": "2026-10-20T10:45:00+06:00",
"access_policy": "listed_only",
"members": [
{ "user_id": "u-102", "name": "Karim" },
{ "user_id": "u-205", "name": "Nadia" }
],
"invite": { "label": "calendar link", "expires_at": "2026-10-20T11:15:00+06:00" }
}'
curl -X POST $TELE_API/v1/calls -H "Authorization: Bearer $SERVICE_TOKEN" -d '{
"title": "Support session #4411",
"host": { "user_id": "agent-7", "name": "Agent Sumi", "team": "support" },
"members": [{ "user_id": "cust-9001", "name": "Customer" }],
"max_participants": 2
}'
host.user_id is required with a service token.
Leave out scheduled_start to create an instant call that can be joined right away.
Change or cancel¶
| Action | Request | Who |
|---|---|---|
| Reschedule or edit | PATCH /v1/calls/{id} with any of title, scheduled_start, scheduled_end, access_policy, max_participants, record |
host, service |
| Add or update a member | PUT /v1/calls/{id}/members/{user_id} with {"name": "…", "team": "…"} |
host, service |
| Remove a member | DELETE /v1/calls/{id}/members/{user_id} (the host can't be removed) |
host, service |
| Cancel | DELETE /v1/calls/{id} |
host, service |
| End now | POST /v1/calls/{id}/end |
host, service |
Ended and cancelled calls can't be edited, joined or reopened.
Invite links are yours¶
Tele issues and validates invite codes; your product owns the link. Put the code into a URL your app understands, such as a page, a deep link, an App Link or a Universal Link.
If your API key is configured with an invite_url_template (for example https://yourapp.example/call/{code}), Tele also returns a ready-made url alongside the code. Ask the Tele team to set one.
sequenceDiagram
participant U as User
participant App as Your app
participant BE as Your backend
participant Tele as Tele API
U->>App: opens https://yourapp.example/call/q3V9x2…
App->>App: log in if needed, extract the code
App->>BE: get a Tele user token
App->>Tele: GET /v1/invites/{code} (preview)
Tele-->>App: title, host, schedule, can_join_now
App->>Tele: POST /v1/invites/{code}/join
Preview before joining¶
GET /v1/invites/{code} tells your app what to show on a lobby screen and whether the current user can join now:
{
"call": {
"id": "01a1…", "title": "Design review", "status": "scheduled",
"host": { "user_id": "u-001", "name": "Rahim" },
"scheduled_start": "2026-10-20T04:00:00Z", "scheduled_end": "2026-10-20T04:45:00Z",
"join_opens_at": "2026-10-20T03:50:00Z", "join_closes_at": "2026-10-20T05:15:00Z"
},
"invite": { "label": "calendar link", "expires_at": "2026-10-20T05:15:00Z" },
"can_join_now": false,
"reason": { "code": "too_early", "message": "the call is not open for joining yet", "opens_at": "2026-10-20T03:50:00Z" }
}
Use reason.code to choose what to show:
reason.code |
Suggested UI |
|---|---|
too_early |
"Opens at {opens_at}". Show a countdown and enable Join when it opens. |
too_late, call_ended |
"This call has ended." |
call_cancelled |
"This call was cancelled." |
not_invited |
"You're not on the list for this call." |
invite_expired, invite_revoked, invite_exhausted |
"This link is no longer valid." |
Manage invites¶
# a single-use invite
curl -X POST $TELE_API/v1/calls/$CALL_ID/invites -H "Authorization: Bearer $HOST_TOKEN" \
-d '{"label": "for the auditor", "max_uses": 1, "expires_at": "2026-10-21T00:00:00Z"}'
# list (codes are never shown again)
curl $TELE_API/v1/calls/$CALL_ID/invites -H "Authorization: Bearer $HOST_TOKEN"
# revoke
curl -X DELETE $TELE_API/v1/invites/$INVITE_ID -H "Authorization: Bearer $HOST_TOKEN"
Pick the access policy deliberately
listed_only: an invite only works for users you added as members. Use it for private meetings.any_client_user: anyone among your users with the code can join. Use it for open rooms and shareable links. Usemax_usesandexpires_atto limit exposure.