API reference
Quick start
Create an API key, check your status and start a stream from the API.
1. Create an API key
- Open your LiveSunday dashboard.
- On the Stream page, open Advanced → API keys.
- Name the key after the tool that will use it, such as "Companion", and click Create.
- Copy the key. It starts with
ls_live_.
Any member of your organization can create, reveal and revoke keys, up to 10 active keys. To copy a key again later, click the eye button next to it. If a key leaks, revoke it and create a new one. A revoked key stops working at once.
Keep your key secret
Anyone with the key can start and stop your stream and change its languages. Don't paste it into shared documents, screenshots or public repositories.
2. Send the key
Send the key in the Authorization header on every request:
Authorization: Bearer ls_live_your_key_hereThe key tells LiveSunday which organization you mean, so URLs never carry an organization ID.
Some tools can only call a URL and can't set headers. For those, put the key in the apiKey query parameter instead:
curl "https://api.livesunday.ai/v1/status?apiKey=ls_live_your_key_here"Use the header whenever you can. Proxies, routers and server logs often record full URLs, key included. If you send both, LiveSunday uses the header.
A missing, unknown or revoked key gets 401 with the code UNAUTHORIZED.
3. Check the status
GET /v1/status tells you whether a stream is live and whether a start would work right now.
curl https://api.livesunday.ai/v1/status \ -H "Authorization: Bearer ls_live_your_key_here"const response = await fetch("https://api.livesunday.ai/v1/status", { headers: { Authorization: "Bearer ls_live_your_key_here", },});const data = await response.json();console.log(data);{
"organization": { "id": "a6888adb-ac9a-4d3d-8a0a-3d95239868dd", "name": "Grace Chapel" },
"session": null,
"audience": { "total": 0, "byLanguage": { "en": 0 } },
"canStart": { "ok": true, "console": { "userName": "Sam Rivera" } }
}canStart.ok is true when a start would work. console.userName is the person signed in on the Stream page that would send the audio. When canStart.ok is false, canStart.code says why, for example OPERATOR_NOT_CONNECTED when no Stream page is open. See Which computer sends the audio.
4. Start the stream
Open the Stream page on the computer connected to your sound, choose your microphone and allow microphone access. Then:
curl -X POST https://api.livesunday.ai/v1/stream/start \ -H "Authorization: Bearer ls_live_your_key_here"const response = await fetch("https://api.livesunday.ai/v1/stream/start", { method: "POST", headers: { Authorization: "Bearer ls_live_your_key_here", },});const data = await response.json();console.log(data);The response is 201 with the same status object, now with a session:
{
"organization": { "id": "a6888adb-ac9a-4d3d-8a0a-3d95239868dd", "name": "Grace Chapel" },
"session": {
"id": "ff07d6dc-c5f6-4138-9bdd-7293db385528",
"state": "active",
"sourceLanguage": "en",
"translationLanguages": ["es"],
"startedAt": "2026-10-27T03:35:57.487Z",
"startSource": "api",
"captionsHidden": false
},
"audience": { "total": 0, "byLanguage": { "en": 0, "es": 0 } },
"canStart": { "ok": false, "code": "SESSION_ALREADY_ACTIVE" }
}The stream uses the languages saved in your dashboard. To start this one stream in another source language, send { "sourceLanguage": "es" } as the body. Your saved languages don't change.
Stop it with POST /v1/stream/stop.

