Skip to content

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.

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. Use max_uses and expires_at to limit exposure.