aisplice

API-Referenz

Videos

POST/v1/videos
GET/v1/videos/{task_id}
GET/v1/videos/{task_id}/content

Asynchrone Videogenerierung (Seedance, Kling, Veo, Wan, Grok Imagine …). /v1/videos akzeptiert Text-zu-Video- und Bild-zu-Video-Eingaben in einer Anfrage im OpenAI-Format. Es gibt eine task_id zurück, die Sie abfragen — oder Sie registrieren beim Einreichen einen Webhook.

#Anfrageparameter

  • modelstringerforderlich

    Eine Video-Modell-ID von der Modellseite, z. B. doubao-seedance-2.5.

  • promptstringerforderlich

    Szenenbeschreibung; bei image2video steuert sie die Bewegung.

  • imagestringoptional

    Nur image2video: Startframe-Bild als URL oder base64.

  • imagesarrayoptional

    Referenzframes für Anbieter, die mehrere Bilder in einem Task akzeptieren.

  • durationnumberoptional

    Cliplänge in Sekunden — eine Dimension der Preisstufe; unterstützte Werte stehen auf der Modellkarte.

  • secondsnumberoptional

    Alias, den manche Modellfamilien für die Cliplänge verwenden; duration ist das bevorzugte Feld.

  • resolutionstringoptional

    Ausgabeauflösung wie 720p oder 1080p, sofern das Modell sie anbietet.

  • sizestringoptional

    Auswahl von Seitenverhältnis oder Größe für Modellfamilien, die Größen im Stil Breite x Höhe verwenden.

  • webhook_urlstringoptional

    HTTPS-URL, die aufgerufen wird, sobald der Task einen Endzustand erreicht — den Callback-Vertrag beschreibt der Video-Leitfaden.

  • webhook_secretstringoptional

    Wenn gesetzt, enthalten Zustellungen X-Xiaoxiang-Signature: sha256=hex(HMAC-SHA256(body, secret)).

Durchreichen von Anbieterparametern

Modellfamilien akzeptieren zusätzliche Anbieterparameter (aspect_ratio, cfg_scale, negative_prompt …), die unverändert durchgereicht werden — die Modellkarte dokumentiert sie; unbekannte Felder lehnt der Upstream ab, nicht das Gateway.

Fehlgeschlagene Tasks werden automatisch erstattet

Video-Tasks werden beim Einreichen vorab belastet und vollständig erstattet, wenn der Task mit failed endet — das Buchungsjournal verzeichnet die Erstattung mit Verweis auf die ursprüngliche Belastung.

#Laufenden Task abbrechen

DELETE/v1/videos/:task_id

Stoppt einen Task, der noch keinen Endzustand erreicht hat. Bei Erfolg wird das reservierte Kontingent erstattet, der Task mit dem Grund "cancelled by user" als fehlgeschlagen verbucht, und ein registrierter Webhook wird als task.failed ausgelöst.

Die meisten Anbieter können nicht abbrechen

Das Abbrechen wird an den Upstream-Anbieter weitergegeben, und nur einige unterstützen es. Alle anderen antworten mit 501 task_cancel_not_supported. Behandeln Sie Abbrechen in Ihrer UI als Versuch: Fragen Sie weiter ab und versprechen Sie dem Nutzer keine Erstattung, bevor der Aufruf 200 zurückgibt.
curl -X DELETE https://www.aisplice.store/v1/videos/task_xxx \
  -H "Authorization: Bearer sk-YOUR_KEY"
cancelled.json
{
  "id": "task_xxx",
  "task_id": "task_xxx",
  "status": "cancelled"
}

Beachten Sie, dass "cancelled" nur in dieser Antwort vorkommt. Eine spätere Abfrage meldet den Task als failed, weil er in diesen Zustand überführt wurde.

  • 404 task_not_existUnbekannte Task-ID, oder sie gehört zu einem anderen Konto.
  • 409 task_not_cancellableDer Task ist bereits beendet — es gibt nichts zu stoppen.
  • 501 task_cancel_not_supportedDieser Anbieter bietet keine API zum Abbrechen.

Vollständige Fehlercode-Tabelle →

#Vorhandenes Video remixen

POST/v1/videos/:video_id/remix

Rendert ein fertiges Video mit neuem Prompt neu, bei Modellen, die das unterstützen. Senden Sie nur prompt: Modell, Dauer, Auflösung und Preisfaktoren werden vom ursprünglichen Task übernommen, und die Anfrage ist an den Kanal gebunden, der ihn erzeugt hat.

curl https://www.aisplice.store/v1/videos/task_xxx/remix \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: remix-of-task_xxx" \
  -d '{"prompt": "Same shot, at night"}'
remix.json
{
  "task_id": "task_yyy",
  "status": "queued",
  "remixed_from_video_id": "task_xxx"
}

Ein Remix ist ein neuer kostenpflichtiger Task

Er kostet so viel wie das Original, folgt demselben Lebenszyklus und gibt eine eigene task_id zurück. Fragen Sie die neue ID ab — das Original bleibt unverändert.
  • 400 invalid_requestBei einem Remix ist prompt erforderlich.
  • 400 task_not_existDie Quell-Video-ID ist unbekannt oder gehört zu einem anderen Konto.
  • 400 task_channel_disableDer Kanal, der das ursprüngliche Video erzeugt hat, ist nicht mehr aktiviert.

Vollständige Fehlercode-Tabelle →

#Zugehörige Fehler

  • 404 not_foundUnbekannter Pfad, unbekannter Modellname oder eine abgelaufene bzw. fremde task_id.
  • 422 unprocessable_entityDer Anbieter hat vom Gateway weitergeleitete Parameterwerte abgelehnt (z. B. nicht unterstützte Größe oder Dauer).
  • 401Ungültiges oder fehlendes Bearer-Token. Auf diesem Pfad gibt es kein error.code — werten Sie den Status aus.
  • 402 insufficient_user_quotaDas Wallet-Guthaben deckt die vorab reservierte Schätzung nicht.
  • 429Drosselung pro Schlüssel. Leerer Body; warten Sie Retry-After ab. Ein 429, das insufficient_user_quota enthält, ist dagegen ein tägliches Ausgabenlimit.
  • 503 model_not_foundUnbekanntes Modell, oder derzeit bedient es kein funktionsfähiger Kanal.

Vollständige Fehlercode-Tabelle →

#Beispielanfrage

# submit
curl https://www.aisplice.store/v1/videos \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "doubao-seedance-2.5", "prompt": "A drone shot of a lighthouse at dawn"}'

# poll every 5s
curl https://www.aisplice.store/v1/videos/$TASK_ID -H "Authorization: Bearer sk-YOUR_KEY"

# download when completed
curl -L https://www.aisplice.store/v1/videos/$TASK_ID/content -o out.mp4 -H "Authorization: Bearer sk-YOUR_KEY"

#Antwort

response.json
// POST — submit accepted
{"task_id": "task_xxx", "status": "queued"}

// GET /v1/videos/{task_id}
{
  "task_id": "task_xxx",
  "status": "in_progress",      // queued | in_progress | completed | failed
  "progress": "45%"
}

// terminal state
{
  "task_id": "task_xxx",
  "status": "completed",
  "metadata": {"url": "https://…"}
}

Immer noch nicht gelöst?

Senden Sie uns die Anfrage-ID oder die Fehlermeldung, und wir sehen uns das an.