DeewanDocs
API keys

SDKs

Every Deewan SDK and how to install it: servers (Node, Python), web, React Native, Flutter, iOS and Android.

Deewan has two kinds of SDK. Server SDKs hold your API key and create rooms, join links and tokens. Client SDKs run in the browser or app and put people in the meeting — they never see an API key; your server hands them a join link or a token.

WherePackageInstall
Node, Bun, Deno, edge (server)@deewan/sdknpm install @deewan/sdk
Python (server)deewanpip install deewan
Any other server languageHTTPS + JSONOpenAPI 3.1
Browser, custom interface@deewan/clientnpm install @deewan/client
React Native / Expo@deewan/react-nativenpx expo install @deewan/react-native react-native-webview
Flutterdeewanflutter pub add deewan
iOS (Swift) · Android (Kotlin)The system web viewMobile apps

Node.js server SDK

bash
npm install @deewan/sdk

Typed, retrying and dependency-free. Works in Node 18+, Bun, Deno and edge runtimes. Server-side only — it carries your API key.

ts
import { Deewan, DeewanError } from "@deewan/sdk";

const deewan = new Deewan({
  apiKey: process.env.DEEWAN_API_KEY!,
  timeout: 15_000,  // per request, ms
  maxRetries: 2,    // for 429 and 5xx on safe requests
});

try {
  for await (const room of deewan.rooms.all()) {
    console.log(room.name, room.url);
  }
} catch (error) {
  if (error instanceof DeewanError) {
    console.error(error.status, error.code, error.message, error.requestId);
  }
}

Methods

NodePythonEndpoint
me()me()GET /me
rooms.list() · rooms.all()rooms.list() · rooms.all()GET /rooms
rooms.create() · retrieve() · update() · delete()same names/rooms, /rooms/{id}
rooms.createJoinLink()rooms.create_join_link()POST /rooms/{id}/join-links
rooms.createToken()rooms.create_token()POST /rooms/{id}/tokens
rooms.listParticipants() · muteParticipant() · removeParticipant() · end()list_participants() · mute_participant() · remove_participant() · end()/rooms/{id}/participants, /end
rooms.listWaiting() · admit() · deny()list_waiting() · admit() · deny()/rooms/{id}/waiting
meetings.list() · create() · retrieve() · update() · cancel()same names/meetings
polls.list() · create() · close() · reopen() · delete()same names/rooms/{id}/polls, /polls/{id}
breakouts.get() · start() · move() · announce() · end()same names/rooms/{id}/breakouts
recordings.list() · retrieve() · download() · delete()same names/recordings
webhooks.list() · create() · update() · delete() · test()same names/webhooks
verifyWebhook(raw, header, secret)verify_webhook(raw, header, secret)Checks a webhook signature

Python server SDK

bash
pip install deewan
# Only if you download recordings (decrypts them on your server):
pip install "deewan[recordings]"

Python 3.9+, no dependencies (the standard library's HTTP client). Same timeouts, retries and errors as the Node SDK; it refuses redirects and plain http, so your key only ever goes to Deewan.

python
import os
from deewan import Deewan, DeewanError

deewan = Deewan(os.environ["DEEWAN_API_KEY"])

room = deewan.rooms.create(name="Onboarding call")
link = deewan.rooms.create_join_link(
    room["id"], name="Sara", role="host",
    redirect_url="https://app.example.com/done",
)
print(link["url"])

try:
    deewan.rooms.retrieve("missing")
except DeewanError as error:
    print(error.status, error.code, error.message, error.request_id)
Verify a webhook (Flask)
from deewan import DeewanError, verify_webhook

@app.post("/deewan/webhooks")
def deewan_webhook():
    try:
        event = verify_webhook(request.get_data(), request.headers.get("Deewan-Signature"), os.environ["DEEWAN_WEBHOOK_SECRET"])
    except DeewanError:
        return "", 400
    print(event["type"], event["data"])
    return "", 204

Browser client

bash
npm install @deewan/client

For custom interfaces: connects with a media token, turns on end-to-end encryption, and exposes participants, tracks, chat and events. See Joining meetings.

React Native, Flutter, iOS and Android

See Mobile apps: embed Deewan's meeting with one component, or join with a token and draw your own screens.

Other languages

The API is plain HTTPS + JSON with a bearer key, so any language works (Go, PHP, Ruby, Java, .NET…). Generate a typed client from the OpenAPI document, or call it directly:

bash
curl -X POST https://deewan.io/api/v1/rooms/ROOM_ID/join-links \
  -H "Authorization: Bearer $DEEWAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Sara", "role": "host"}'