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.
| Where | Package | Install |
|---|---|---|
| Node, Bun, Deno, edge (server) | @deewan/sdk | npm install @deewan/sdk |
| Python (server) | deewan | pip install deewan |
| Any other server language | HTTPS + JSON | OpenAPI 3.1 |
| Browser, custom interface | @deewan/client | npm install @deewan/client |
| React Native / Expo | @deewan/react-native | npx expo install @deewan/react-native react-native-webview |
| Flutter | deewan | flutter pub add deewan |
| iOS (Swift) · Android (Kotlin) | The system web view | Mobile apps |
Node.js server SDK
npm install @deewan/sdkTyped, retrying and dependency-free. Works in Node 18+, Bun, Deno and edge runtimes. Server-side only — it carries your API key.
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
| Node | Python | Endpoint |
|---|---|---|
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
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.
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)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 "", 204Browser client
npm install @deewan/clientFor 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:
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"}'