Für Entwickler

Den Bibelplan-Stand auslesen

Wenn du eine eigene Anwendung baust, kann sie erfahren, welche Bibelstelle heute im Bibelplan eines Levit-Audio-Nutzers ansteht — sofern er es dir erlaubt. Gedacht ist das zum Beispiel für eine Predigtvorbereitung, die die Exegese gleich mit dem richtigen Kapitel öffnet.

Was diese Schnittstelle ist — und was nicht

Sie beantwortet eine Frage: Welche Bibelstelle steht heute im Plan? Sie ist ausschließlich lesend — es gibt keinen Weg, über sie etwas zu ändern, abzuhaken oder einen Plan zu starten.

Sie gibt keine personenbezogenen Daten heraus: keinen Namen, keine E-Mail-Adresse, keine Kontokennung. Und sie gibt keine Audio-Verweise heraus — intern trägt ein Plankapitel Verweise auf die Aufnahmen, deren Kennung und Dateigrößen. Nichts davon verlässt den Server: Eine zweite Anwendung braucht es nicht, und die Aufnahmen sind lizenziert.

Geliefert wird nur der Hauptplan. Zusatzpläne bleiben außen vor — eine Antwort, eine Bedeutung.

Basis-URL: https://audio.levit-cloud.de
Verfügbar ab: Backend 0.199.0

Schritt 1: Ein Token erhalten

Ein Zugang gehört einem Nutzer und wird von ihm erteilt. Es gibt keine gemeinsame Anmeldung zwischen Anwendungen; das Token ist die Brücke.

In der App: Einstellungen → Sync & Daten → Zugänge für andere Apps → Bezeichnung eingeben → Erzeugen.

Der Klartext erscheint genau einmal. Gespeichert wird auf dem Server nur seine Prüfsumme — wer ihn nicht sichert, braucht einen neuen. Er beginnt mit lvt_, damit er in Protokollen und Sicherheitswerkzeugen auffällt.

Schritt 2: Den Stand abrufen

curl https://audio.levit-cloud.de/integration/bibelplan/heute \
  -H "Authorization: Bearer lvt_…"

Antwort bei aktivem Plan

{
  "success": true,
  "data": {
    "aktiv": true,
    "planTag": 20,
    "kapitel": [
      { "spur": 1, "bookNumber": 40, "bookNameDe": "Matthäus", "chapterNumber": 20 }
    ]
  }
}
Feld Bedeutung
aktiv Ob überhaupt ein Hauptplan läuft
planTag Der Tag im Plan, 1-basiert. Kann null sein
kapitel Was heute ansteht — ein Eintrag je Spur
spur 1 ist die Hauptspur; ein zweispuriger Plan führt z. B. zusätzlich einen Psalm
bookNumber Bibelbuch 1–66 (1 = 1. Mose, 40 = Matthäus, 66 = Offenbarung)
chapterNumber Kapitel innerhalb des Buchs

Es zählt der Plantag, nicht das nächste ungelesene Kapitel. Ein Plan ist eine Liste von Tagen; Tag für Tag hören rückt ihn vor. Auch die Tagesroutine der App folgt genau diesem Feld.

Antwort ohne aktiven Plan

{ "success": true, "data": { "aktiv": false, "kapitel": [] } }

In diesem Fall fehlt planTag ganz — nicht null, sondern gar nicht vorhanden. Prüfe deshalb zuerst aktiv.

Fehler

Alle Fehler tragen dieselbe Hülle:

{ "success": false, "error": { "code": "…", "message": "…" } }
Status Wann
401 Kein Authorization: Bearer-Kopf vorhanden
401 Token unbekannt, widerrufen oder falsch geformt
429 Abfragegrenze überschritten

Die drei ungültigen Fälle sind absichtlich nicht unterscheidbar: unbekannt, widerrufen und falsch geformt ergeben wortgleich dieselbe Antwort. Wer rät, soll aus der Antwort nicht lernen, wie weit er danebenlag. Behandle jedes 401 gleich — Token neu erfragen.

Abfragegrenzen

Drei Stufen greifen übereinander; die strengste gilt.

Stufe Grenze
Diese Route 30 Anfragen pro Minute
Server allgemein 100 pro Minute
Reverse Proxy 100 im Schnitt, Puffer 50

Das reicht weit für den gedachten Zweck. Wer den Stand laufend anzeigt, sollte ihn zwischenspeichern — er ändert sich höchstens täglich.

Widerrufen

In der App auf demselben Bildschirm, Widerrufen neben dem Eintrag. Ab dem nächsten Aufruf antwortet die Schnittstelle mit 401. Der Eintrag bleibt in der Liste stehen — als Beleg, dass es ihn gab und wann er zuletzt benutzt wurde.

Beispiel

const antwort = await fetch(
  "https://audio.levit-cloud.de/integration/bibelplan/heute",
  { headers: { Authorization: `Bearer ${token}` } },
);

if (antwort.status === 401) return null; // Token neu erfragen

const { data } = await antwort.json();
if (!data.aktiv || data.kapitel.length === 0) return null;

const heute = data.kapitel.find((k) => k.spur === 1) ?? data.kapitel[0];
return `${heute.bookNameDe} ${heute.chapterNumber}`;

Hinweise für den Betrieb

Fragen dazu: Kontakt. Es gilt, was dort steht — dies ist ein privates Projekt, und es besteht kein Anspruch auf Unterstützung.