Real-time chat, voice & video,
one single API.
streamche gives developers in West Africa unified chat, presence and WebRTC infrastructure — nothing to operate, billed in local currency with mobile money.
Built for West African digital products
The platform
One API for every real-time need
Modular building blocks that plug into your existing app in a few lines of code.
Conversations that never lose a message
Direct and group conversations, read receipts, reconnect without loss (last_event_id), duplicate-proof idempotency.
Reliable calls on mobile networks
Rooms up to 8 participants, audio-only mode for weak connections, adaptive bitrate (simulcast), built-in TURN to cross operator NATs.
Short-lived participant tokens (≤ 15 min) issued from your backend.
Who’s online, in real time
Online/away states with automatic expiry (30 s Redis TTL + heartbeat), subscription to restricted user lists.
Your backend, informed of everything
HMAC-SHA256 signed events with 5-minute replay protection, automatic retries (1 min → 24 h) and event_id deduplication.
POST https://votre-app.tld/webhooks/streamche X-ST-Signature: sha256=9f2a… // HMAC + anti-rejeu 5 min { "event": "participant.joined", "room": "teleconsultation-42", "identity": "patient-7", "event_id": "evt_01J..." // déduplication }
Native mobile money
Prepaid credits via Feexpay: MTN, Moov, cards. Per-participant-minute and per-message metering, per-project spending caps.
Get started
Your first call in a few lines
One API key, three REST calls, and your user is on video. Flutter and JavaScript SDKs included.
# 1. Créer une salle curl -X POST https://streamche.fassiki.com/api/v1/rtc/rooms \ -H "Authorization: Bearer $STREAMCHE_KEY" \ -d '{"name":"teleconsultation-42"}' # 2. Émettre un token participant (15 min) curl -X POST .../api/v1/rtc/rooms/{id}/tokens \ -d '{"identity":"patient-7","role":"publisher"}'
use Illuminate\Support\Facades\Http; $room = Http::withToken($STREAMCHE_KEY) ->post('https://streamche.fassiki.com/api/v1/rtc/rooms', ['name' => 'teleconsultation-42'])->json(); $token = Http::withToken($STREAMCHE_KEY) ->post(".../api/v1/rtc/rooms/{$room['id']}/tokens", ['identity' => 'patient-7'])->json('token');
const res = await fetch("https://streamche.fassiki.com/api/v1/rtc/rooms", { method: "POST", headers: { Authorization: `Bearer ${STREAMCHE_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ name: "teleconsultation-42" }), }); const { token } = await res.json(); // Connectez le participant au WebSocket sécurisé
Built for production
Serious foundations, not a weekend demo
What separates a real real-time service from a weekend project.
Precise metering
Every participant-minute and message is an immutable, idempotent event — your invoice matches usage exactly.
Recording (V1.5)
Composite room recording, S3-compatible storage, signed expiring download URLs.
Delivery reliability
Verifiable signatures, delivery log, exponential retries and automatic deactivation after prolonged failures.
retry 1m · 5m · 15m · 1h
Audio-only mode
Optimized for unstable 2G/3G networks: consistent audio quality when video isn’t possible.
Use cases
Built for your products
Pricing
Pay as you grow, in FCFA
Prepaid credits or monthly plans — mobile money and cards accepted.
Starter
- Included minutes and monthly active users, overage billed.
- Unlimited signed webhooks
- Email support within 24 h
Plans are being finalized — get in touch for early-access pricing.
Let’s talk about your project
Integration, volumes, dedicated deployment or partnership: our team replies fast.
Contact usAPI documentation
Complete OpenAPI specification: rooms, tokens, chat, webhooks, usage and billing.
View the spec