API-Doku
Mit der API reichen eigene Skripte, Bots oder Werkzeuge wie n8n Clips ein, fragen den Status ab und laden fertige Clips herunter. Alles, was die API kann, geht auch in der Oberfläche, und jeder Clip kostet dieselben Tokens.
Wer die API nutzen kann
Im Studio-Tarif und solange du Guthaben aus einem Token-Paket hast. Das wird bei jeder Anfrage neu geprüft: Wechselst du in einen kleineren Tarif ohne Paketguthaben, antwortet die API mit plan_required, bis wieder eine der Bedingungen erfüllt ist.
Schlüssel
Den Schlüssel erzeugst du in den Einstellungen unter „API-Zugriff". Er wird genau einmal angezeigt, danach speichern wir nur noch einen nicht umkehrbaren Hash. Ein neuer Schlüssel macht den alten sofort ungültig.
Behandle den Schlüssel wie ein Passwort. Nie in Browser-Code, öffentliche Repositories, Screenshots oder Chats. Die API erlaubt bewusst keine Aufrufe aus dem Browser. Wenn du glaubst, dass jemand deinen Schlüssel kennt, widerrufe ihn sofort in den Einstellungen. Der Schlüssel kann nur Clips verarbeiten, nie Konto, Zahlung oder Sicherheitseinstellungen ändern.
Anmeldung
Schicke den Schlüssel bei jeder Anfrage im Header mit. Alle Adressen beginnen mit https://lazyclipper.com/api/v1.
Authorization: Bearer ct_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Endpunkte
| Methode und Pfad | Zweck |
|---|---|
GET/me | Tarif, Guthaben und Tokenpreise |
POST/clips | Clip einreichen |
GET/clips | Liste deiner fertigen Clips der letzten 14 Tage |
GET/clips/{id} | Status eines Clips |
GET/clips/{id}/file | Fertigen Clip als MP4 herunterladen |
Clip einreichen
Anfrage mit JSON. Nur url ist Pflicht. Werte, die dein Tarif nicht enthält oder die unbekannt sind, fallen auf den Standard zurück, genau wie in der Oberfläche.
| Feld | Werte | Standard |
|---|---|---|
url | Link zu einem Twitch- oder Kick-Clip | Pflicht |
targetDuration | "15", "30", "45", "full" | "full" |
sfxIntensity | "low", "medium", "high" | "medium" |
captionStyle | "classic", "box", "minimal" | "classic" |
speed | "normal", "schneller", "viel-schneller" | "normal" |
pitch | "normal", "hoeher", "viel-hoeher" | "normal" |
silenceCut, faceZoom, faceSplit | true oder false | false |
speakerFocus, channelOverlay | true oder false, je nach Tarif | false |
context | Kurze Beschreibung des Clips, höchstens 300 Zeichen | leer |
introText | Gesprochenes Intro, höchstens 200 Zeichen, kostet 10 Tokens extra | leer |
Die Antwort kommt mit Status 202, sobald der Clip in der Warteschlange steht:
{
"id": "590ad858-8e71-4fac-ac88-d86fbf4cc7c5",
"status": "queued",
"queuePosition": 2,
"tokensCharged": 10,
"tokensRemaining": 2490,
"statusUrl": "/api/v1/clips/590ad858-8e71-4fac-ac88-d86fbf4cc7c5"
}
Beispiel: kompletter Ablauf
# 1. Submit a clip
curl -X POST https://lazyclipper.com/api/v1/clips \
-H "Authorization: Bearer $LAZYCLIPPER_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-clip-001" \
-d '{"url":"https://www.twitch.tv/channel/clip/ClipSlug","targetDuration":"30"}'
# 2. Poll the status until it is "done" or "failed" (at most every 5 seconds)
curl https://lazyclipper.com/api/v1/clips/CLIP_ID \
-H "Authorization: Bearer $LAZYCLIPPER_KEY"
# 3. Download the finished clip
curl -L -o clip.mp4 https://lazyclipper.com/api/v1/clips/CLIP_ID/file \
-H "Authorization: Bearer $LAZYCLIPPER_KEY"
Status
| Wert | Bedeutung |
|---|---|
queued | Wartet in der Schlange, queuePosition sagt, wie viele Clips vorher drankommen |
processing | Wird gerade bearbeitet, progress in Prozent |
done | Fertig, downloadUrl ist gesetzt |
failed | Fehlgeschlagen, die Tokens wurden automatisch erstattet |
expired | Fertig gewesen, nach 14 Tagen gelöscht |
Doppelte Aufträge vermeiden
Schicke bei POST /clips einen eigenen Idempotency-Key mit, zum Beispiel eine ID aus deinem System. Kommt dieselbe Anfrage innerhalb von 24 Stunden noch einmal, etwa weil dein Skript nach einem Netzwerkfehler neu versucht, bekommst du die erste Antwort zurück, und es wird nichts doppelt abgebucht. Die Antwort trägt dann den Header Idempotent-Replayed: true.
Grenzen
- 120 Anfragen pro Minute je Konto
- 30 neue Clips pro 10 Minuten je Konto
- Ist die Warteschlange voll, kommt
queue_full. Warte die Sekunden aus dem HeaderRetry-Afterab. - Höhere Tarife werden in der Warteschlange vorgezogen, wartende Clips rücken mit der Zeit automatisch auf.
Fehler
Fehler haben immer dieselbe Form:
{ "error": { "code": "insufficient_tokens", "message": "Not enough tokens (10 needed, 0 left). ..." } }
| Code | HTTP | Bedeutung |
|---|---|---|
missing_api_key | 401 | Kein Schlüssel im Header |
invalid_api_key | 401 | Schlüssel unbekannt oder widerrufen |
plan_required | 403 | Dein Tarif enthält keinen API-Zugang |
account_disabled | 403 | Konto gesperrt |
not_in_plan | 403 | Eine angefragte Funktion ist nicht in deinem Tarif |
invalid_request | 400 | Anfrage unvollständig oder ungültig, zum Beispiel ein falscher Clip-Link |
insufficient_tokens | 402 | Nicht genug Tokens |
not_found | 404 | Clip oder Endpunkt gibt es nicht in deinem Konto |
rate_limited | 429 | Zu viele Anfragen, siehe Retry-After |
queue_full | 429 | Warteschlange voll, siehe Retry-After |
server_error | 500 | Fehler bei uns, bitte später erneut versuchen |
Versionen
Version 1 bleibt stabil. Neue Felder können dazukommen, bestehende ändern ihre Bedeutung nicht. Was bestehende Skripte brechen würde, kommt nur als neue Version mit Vorlauf.
Für die Nutzung der API gelten zusätzlich die Nutzungsbedingungen, besonders §5d.
← Zurück