Zum Hauptinhalt springen

KI-Assistent

Der KI-Assistent erstellt Bilder, Videos, Musik und Schriften und schreibt Texte als JSON, mit den KI-Diensten, die ein Workspace verbunden hat. Über die API ist er ein Weiterleiter: Sie senden eine Anfrage, Reelwire gibt sie mit dem eigenen Schlüssel des Workspaces für diesen Dienst an OpenAI, Google, Black Forest Labs, BytePlus, ElevenLabs, Stability AI oder Anthropic weiter und liefert zurück, was herauskam. Der Dienst rechnet über das eigene Konto des Workspaces ab; Reelwire schlägt nichts auf. Die Modelle, die Stelle, an der der Schlüssel jedes Dienstes angelegt wird, und die Stellen, an denen sich der Assistent im Dashboard öffnet, finden Sie unter KI-Assistent im Kapitel Dashboard: Medien, jeder Datei-Platz einer Marke und des Inhalts eines Beitrags, Mit KI einrichten oben in den Dialogen der Marke, von Beitrag hinzufügen, Clip erstellen und Aktualisierungsanfrage senden sowie Vorlage mit KI auswählen im Clip-Studio.

MethodePfadBerechtigung
GET/v1/ai/modelsai:read
POST/v1/ai/generateai:write
POST/v1/ai/chatsai:write
GET/v1/ai/chatsai:read
GET/v1/ai/chats/{id}ai:read
POST/v1/ai/chats/{id}/messagesai:write
POST/v1/ai/chats/{id}/stopai:write
POST/v1/ai/attachmentsai:write
POST/v1/ai/results/{id}/keepai:write
POST/v1/ai/results/{id}/last-frameai:write
GET/v1/ai-keysangemeldete Person
PUT/v1/ai-keys/{provider}/{section}angemeldete Person
POST/v1/ai-keys/{provider}/{section}/deleteangemeldete Person

Die Berechtigung heißt Media - AI assistant und steht auf der Seite API-Schlüssel. Ein Ergebnis zu behalten schreibt es in die Mediathek und braucht nur diese Berechtigung.

Die Schlüssel für die Dienste sind mit keinem API-Schlüssel erreichbar. /v1/ai-keys gehört einer angemeldeten Person, auf der Seite API-Schlüssel: Ein Schlüssel, der sie setzen könnte, könnte das Geld des Workspaces bei einem anderen Unternehmen ausgeben. GET /v1/ai-keys listet jeden Dienst mit seinen Bereichen (image, video, sound, text) und zu jedem, ob ein Schlüssel gespeichert ist (configured), seine letzten vier Zeichen (hint), wann er abläuft (expiresAt) und ob vorher eine Erinnerung per E-Mail verschickt wird (remindExpiry), nie den Schlüssel selbst. readable: false bedeutet, dass ein gespeicherter Schlüssel nicht mehr gelesen werden kann, weil Reelwire das Geheimnis geändert hat, unter dem es Schlüssel aufbewahrt, und er neu eingefügt werden muss. PUT /v1/ai-keys/{provider}/{section} mit { "key": "...", "expiresAt": "...", "remindExpiry": true } speichert einen (key kann entfallen, wo schon einer gespeichert ist, um nur die beiden anderen zu ändern; expiresAt ist ein Zeitpunkt in der Zukunft oder null, und die Erinnerung braucht einen) und POST /v1/ai-keys/{provider}/{section}/delete entfernt ihn (404, wenn dort keiner gespeichert ist); beide erfordern den Inhaber oder einen Kollegen mit Verwaltung. Die Dienste sind openai, google, bfl, byteplus, elevenlabs, stability und anthropic, jeweils nur in den Bereichen, die sie bedienen; ein Dienst oder Bereich, den sie nicht bedienen, ist ein 404. Die eine Ausnahme ist das Löschen: Ein Schlüssel, der in einem Bereich gespeichert ist, den sein Dienst nicht mehr bedient, etwa google unter video aus der Zeit vor der Abschaltung der Video-Modelle von Google, wird von nichts genutzt, nirgends aufgelistet und kann trotzdem entfernt werden. Das Ablaufdatum ist nur, was Sie angeben: Reelwire nutzt den Schlüssel weiter, bis der Dienst ihn ablehnt, und schickt mit remindExpiry eine Woche und einen Tag vorher eine E-Mail an den Inhaber und alle mit Verwaltung. Ein Schlüssel wird auch dann gespeichert, wenn der Dienst ihn ablehnt: Wo der Dienst eine günstige Möglichkeit zum Nachfragen bietet (OpenAI, Google, Anthropic), sagt check in der Antwort, ob er den Schlüssel angenommen hat.

Dateien an eine Nachricht anhängen​

POST /v1/ai/attachments nimmt eine Datei als multipart/form-data unter file entgegen: jede Art, bis 20 MB (eine größere ist ein 400). Es antwortet mit 201 und { "attachment": { "id", "name", "mimeType", "byteSize", "readable" } }, wobei readable sagt, wie ein Text- oder Schriftmodell sie liest: picture (PNG, JPEG, WebP oder GIF bis 5 MB), pdf, text (reiner Text, CSV, JSON, XML, Markdown, HTML, Code), document (der Text in einer Word-, Excel- oder PowerPoint-Datei) oder none; dann erfährt das Modell nur ihren Namen und Typ. Tragen Sie die IDs in options.attachments der nächsten Nachricht ein: Die Nachricht behält sie, sie erscheinen daran als attachments des Durchgangs, und das Modell liest sie mit jeder späteren Nachricht des Chats, die neuesten zuerst, soweit eine einzelne Anfrage an den Dienst es zulässt. Eine Datei wird mit ihrem Chat aufbewahrt und mit ihm entfernt; eine, die keine Nachricht übernommen hat, wird nach einem Tag entfernt. Anhängen ist für einen Text- oder Schrift-Chat mit einem Modell gedacht, das Dateien liest; jeder andere Chat lehnt sie ab (400). Eine ID, die es nicht mehr gibt, ist ein 404, und eine, die ein anderer Chat schon übernommen hat, ein 409: Hängen Sie die Datei erneut an. Eine leere Datei ist ein 400, und das Anhängen ist auf 120 Dateien pro Minute begrenzt. Kein MCP-Tool hängt eine Datei an, da ein Tool keine Datei trägt: options.images zeigt einem Modell stattdessen Bilder aus der Mediathek.

Welche Modelle verwendet werden können​

curl https://app.reelwire.io/v1/ai/models -H "Authorization: Bearer $REELWIRE_KEY"

Jedes Modell ist aufgelistet, ob der Workspace für seinen Dienst einen Schlüssel hat oder nicht. configured: true bedeutet, dass es jetzt verwendet werden kann: Sein Dienst hat auf der Seite API-Schlüssel einen Schlüssel im eigenen Bereich des Modells (Bild, Video, Sound für Musik, oder Text und Schrift). Ein Schlüssel, der für einen Bereich gespeichert ist, schaltet keinen anderen frei; ein Workspace kann also die Bilder von Black Forest Labs haben und nicht seine Videos. Jeder Anbieter listet die Bereiche, die er bedient (sections), und die, in denen er einen Schlüssel hat (configuredSections). Die Modelle kommen je Dienst mit dem leichtesten zuerst und steigen zum leistungsfähigsten auf, nach der eigenen Bezeichnung des Dienstes (lite, mini, fast, draft); in dieser Reihenfolge bietet sie auch das Dashboard an. Jedes Modell sagt, was es erstellt (kinds: image, video, sound, font, text), in einer Zeile, wofür es gedacht ist (about), welche Bildformate (aspectRatios) und Längen (durations) es erzeugt, wie viele Bilder eine Nachricht verlangen darf (maxCount), ob es ein Bild ändern (references) oder einen transparenten Hintergrund erzeugen kann (transparent), ob ein Video Ton hat (audio, und audioAlways, wo er sich nicht abschalten lässt), ob es auf einem von Ihnen gewählten Bild beginnt und endet (firstFrame, lastFrame, mit frameNote, wo es etwas zu beachten gibt), ob ein Musikstück Gesang haben kann (vocals) und wie viele Bilder ein Text- oder Schriftmodell mit jeder Nachricht ansieht (images, 0, wo es keine ansieht).

Dasselbe als Tabelle je Modell steht unter Einstellungen je Modell im Kapitel Dashboard.

Die Antwort enthält keine Preise: Sie sind die des jeweiligen Dienstes und ändern sich oft. Jeder Anbieter darin trägt pricingUrl, die Adresse der Preisliste dieses Dienstes.

Etwas erstellen​

Ein Chat ist ein Gespräch mit einem Modell über eine Sache. POST /v1/ai/generate startet einen und sendet seine erste Nachricht:

curl https://app.reelwire.io/v1/ai/generate \
-H "Authorization: Bearer $REELWIRE_KEY" -H "Content-Type: application/json" \
-d '{
"kind": "image",
"model": "google/gemini-nano-banana-2.1",
"prompt": "A flat, minimal fox in orange, for a finance brand",
"options": { "aspectRatio": "1:1", "count": 2 },
"purpose": { "label": "Logo", "brief": "The logo of Northwind Markets" }
}'

Es antwortet sofort mit 202, mit dem Chat und einem Durchgang im Zustand RUNNING. Die Arbeit läuft im Hintergrund: Fragen Sie GET /v1/ai/chats/{id} ab, bis der Durchgang DONE, FAILED oder CANCELLED ist. POST /v1/ai/chats/{id}/stop stoppt die Nachricht, die gerade beantwortet wird, und antwortet mit dem Chat: Der Durchgang wird CANCELLED, nichts davon wird behalten, und der Dienst wird gebeten abzubrechen, wo er das zulässt. Das tut nur BytePlus (Seedance), und nur für ein Video, das noch in seiner Warteschlange steht; auf jeden anderen Dienst wird einfach nicht mehr gewartet, und er kann die Anfrage auf seiner Seite trotzdem noch abschließen und berechnen. Es antwortet mit 409, wenn nichts läuft. Bilder und Texte brauchen Sekunden bis eine Minute; Videos ein bis vier Minuten, Musik und Schriften bis zu einigen Minuten mehr, fragen Sie also etwa alle zehn Sekunden ab. Startet Reelwire in der Zwischenzeit neu, wird auf einen Auftrag, an dem der Dienst noch arbeitet (jedes Video und die Bilder von Black Forest Labs), erneut gewartet; eine mittendrin abgebrochene Anfrage schlägt mit der Meldung fehl, sie erneut zu senden, statt ein zweites Mal gesendet und doppelt bezahlt zu werden.

FeldWofür
kindimage, video, sound (Musik, als MP3 geliefert), font oder text.
modelEine Modell-ID aus /v1/ai/models, die diese Art erzeugt.
promptWas erstellt werden soll, bis zu 4000 Zeichen.
options.aspectRatioDas Bildformat, "w:h". Es wird das nächstliegende verwendet, das das Modell erzeugt.
options.countBilder auf einmal, 1 bis 4 und nicht mehr als maxCount des Modells, jedes wird berechnet.
options.durationSecondsDie Länge eines Videos oder Musikstücks, bis zu 190 Sekunden. Es wird die nächstliegende verwendet, die das Modell erzeugt.
options.transparentEin transparenter Hintergrund, wo das Modell es kann.
options.audioTon in einem Video, wo das Modell es kann.
options.vocalsGesang in einem Musikstück, wo das Modell es kann (vocals: true). Sonst instrumental.
options.refineEin Bildergebnis dieses Chats, das geändert werden soll, über seine ID.
options.referenceEin Bild aus der Mediathek, das geändert werden soll, bei einem Modell mit references: ein PNG, JPEG oder WebP, media://<id>. Nicht zusammen mit refine.
options.firstFrameFür ein Video bei einem Modell mit firstFrame: ein PNG-, JPEG- oder WebP-Bild aus der Mediathek, media://<id>, mit dem das Video beginnt.
options.lastFrameDas Bild, mit dem es endet, bei einem Modell mit lastFrame und nur zusammen mit firstFrame.
options.imagesFür einen Text oder eine Schrift, bei einem Modell, dessen images über 0 liegt: bis zu so viele PNG-, JPEG- oder WebP-Bilder aus der Mediathek, media://<id>, die sich das Modell mit dieser Nachricht ansieht. Je 5 MB, zusammen 20 MB.
options.attachmentsFür einen Text oder eine Schrift, bei einem Modell, dessen images über 0 liegt: bis zu so viele mit POST /v1/ai/attachments angehängte Dateien, über ihre IDs. Die Nachricht behält sie, und das Modell liest sie auch mit jeder späteren Nachricht des Chats.
purposeWofür der Chat da ist, mit jeder Nachricht gesendet: label, brief, aspectRatio, transparent, language und bei einem Text format. place sagt, wo er geöffnet wurde, und wird nur protokolliert.

Ein Modell, das Reelwire nicht anbietet, ist ein 404. Ein Modell, das die kind nicht erzeugt, ein Text-Chat ohne purpose.format.schema oder ein erstes bzw. letztes Bild oder ein zu änderndes Bild, das kein PNG, JPEG oder WebP aus der Mediathek dieses Workspaces ist, ist ein 400, geprüft, bevor etwas an den Dienst gesendet wird.

POST /v1/ai/chats mit kind, model und purpose startet einen Chat ohne Nachricht (201), und POST /v1/ai/chats/{id}/messages mit prompt und options sendet die nächste (202, beantwortet wie generate): „Mach den Hintergrund blau“. Das Modell erhält die früheren Anfragen des Chats. Ein Chat beantwortet jeweils eine Nachricht: Eine weitere zu senden, während eine läuft, ist ein 409, ebenso das Senden an einen Chat, dessen Modell Reelwire nicht mehr anbietet (starten Sie einen neuen Chat mit einem anderen Modell; eine darauf laufende Nachricht schlägt fehl und sagt es). Das Senden ist auf beiden Routen auf 30 Nachrichten pro Minute begrenzt, weil jede beim Dienst Geld kostet.

GET /v1/ai/chats listet die 50 jüngsten Chats des letzten Tages, jeden mit seiner id, kind, model, label, der Zahl seiner bisherigen messages und dem Zeitpunkt, an dem er abläuft (expiresAt).

Was zurückkommt​

{
"chat": {
"id": "01M37DK0NAPXE2GV9APHS8GT71",
"kind": "image",
"model": "google/gemini-nano-banana-2.1",
"modelName": "Nano Banana 2.1",
"purpose": { "label": "Logo", "brief": "The logo of Northwind Markets" },
"createdAt": "2026-09-23T15:18:41.120Z",
"updatedAt": "2026-09-23T15:19:16.403Z",
"expiresAt": "2026-09-24T15:19:16.403Z",
"turns": [
{
"id": "01M37DK0NG22D4...",
"prompt": "A flat, minimal fox in orange, for a finance brand",
"options": { "aspectRatio": "1:1", "count": 2 },
"state": "DONE",
"error": null,
"reply": null,
"attachments": [],
"createdAt": "2026-09-23T15:18:41.180Z",
"finishedAt": "2026-09-23T15:19:16.390Z",
"results": [
{
"id": "01M37DK0P8...",
"name": "ai-7kq3mz9xfp.png",
"mimeType": "image/png",
"byteSize": 812345,
"width": 1024,
"height": 1024,
"data": { "aspectRatio": "1:1" },
"url": "https://app.reelwire.io/v1/assets/01M37DK0P8.../download?exp=...&sig=...",
"kept": null
}
]
}
]
}
}

Ein Bild, Video, Musikstück oder eine Schrift hat eine signierte Vorschau-url, eine Stunde gültig. Ein Bild, Video oder Musikstück heißt ai- plus zehn zufällige Buchstaben und Ziffern; eine Schrift trägt den Namen ihrer Familie, etwa Northwind-Sans-Regular.otf. data enthält das Format, in dem ein Bild oder Video erstellt wurde (aspectRatio), und die Länge eines Musikstücks (durationSeconds); bei einem Text steht dort stattdessen seine Antwort, und es gibt keine url. Ein FAILED-Durchgang nennt den Grund in error, mit den eigenen Worten des Dienstes, wo er welche gab: ein abgelehnter Schlüssel, ein Konto ohne Guthaben, ein Prompt, den seine Sicherheitsprüfung gestoppt hat.

Ergebnisse sind Vorschläge und werden einen Tag lang aufbewahrt, nachdem der Chat zuletzt verwendet wurde, außerhalb der Mediathek und ihres Speichers. Behalten Sie die, die Sie möchten:

curl -X POST https://app.reelwire.io/v1/ai/results/01M37DK0P8.../keep \
-H "Authorization: Bearer $REELWIRE_KEY" -H "Content-Type: application/json" -d '{"name": "fox-logo"}'

Es antwortet mit 201 und der file der Mediathek, deren ref (media://...) das ist, was ein Marken-Platz oder der Inhalt einer Vorlage entgegennimmt, und dem storage des Workspaces. name ist optional; ohne ihn behält das Ergebnis seinen eigenen Namen. Eine behaltene Datei unterliegt den Regeln der Mediathek: dem Speicherkontingent, Bildern bis 2048 mal 2048 Pixel und Videos bis 50 MB. Erneutes Behalten antwortet mit der bereits behaltenen Datei und already: true, statt mit einer zweiten Kopie. Ein Text hat keine Datei zum Behalten, und ihn zu behalten ist ein 409. Ein eigener name, den die Mediathek schon enthält, ist ebenfalls ein 409; der eigene Name des Ergebnisses wird stattdessen mit -2, -3 frei gemacht.

Um von einem Video aus weiterzumachen, „was als Nächstes geschieht“, starten Sie das nächste dort, wo das letzte endete. Kein Videodienst erinnert sich an den Clip, den er erstellt hat, daher wird sein letztes Einzelbild zum ersten Einzelbild des nächsten Videos:

curl -X POST https://app.reelwire.io/v1/ai/results/01M37DK0P8.../last-frame \
-H "Authorization: Bearer $REELWIRE_KEY"

Es nimmt das letzte Einzelbild des Videoergebnisses in voller Größe, behält es nach den Regeln der Mediathek als JPEG in der Mediathek und antwortet mit 201 und der file der Mediathek sowie dem storage des Workspaces. Senden Sie die nächste Nachricht mit diesem ref als options.firstFrame, bei einem Modell mit firstFrame. Das ist es, was Mit diesem Video fortfahren im Dashboard tut. Ein Ergebnis, das kein Video ist, ist ein 409.

Texte: JSON, das zu einem Schema passt​

Ein Text-Chat antwortet mit JSON und sonst nichts und braucht purpose.format.schema: das JSON Schema, dem die Antwort entsprechen muss. Dem Modell wird das Schema mitgeteilt, und seine Antwort wird dagegen geprüft, bevor Sie sie sehen; eine Antwort, die nicht passt, wird einmal mit den Gründen zurückgeschickt, danach schlägt der Durchgang fehl.

{
"kind": "text",
"model": "anthropic/claude-opus-5-5",
"prompt": "Announce the summer sale, friendly and short",
"purpose": {
"label": "Texts on the clip",
"language": "de",
"format": {
"schema": {
"type": "object",
"properties": {
"headline": { "type": "string", "maxLength": 60 },
"subline": { "type": "string", "maxLength": 120 }
},
"required": ["headline", "subline"],
"additionalProperties": false
},
"instructions": "headline: the first line on the clip. subline: the line under it.",
"current": { "headline": "Sommer", "subline": "" }
}
}
}

instructions sagt, wofür jedes Feld da ist, example gibt ein Beispiel für guten Inhalt, und current, was gerade geschrieben steht, damit eine Nachricht wie „kürzer“ etwas zum Kürzen hat. Eine Änderung betrifft nur das, wonach gefragt wird: Das Modell beginnt bei seiner letzten Antwort oder bei current und lässt jedes andere Feld und Wort, wie es war. Das Schema darf bis zu 60.000 Zeichen lang sein, example und current je bis zu 20.000.

Schriften​

Ein font-Chat lässt ein Textmodell eine neue Schrift entwerfen: jeden Großbuchstaben, Kleinbuchstaben, jede Ziffer und jedes gängige Zeichen als Umriss auf einem festen Raster. Reelwire baut aus dem Entwurf eine OpenType-Datei (font/otf) und prüft sie, indem es sie zurückliest. Eine Schrift pro Nachricht, und sie braucht einige Minuten. Die data des Ergebnisses enthalten family, description, glyphs (wie viele entworfen wurden) und missing (Zeichen, die der Entwurf ausgelassen hat und die auf eine andere Schrift zurückfallen); auch der reply des Durchgangs nennt sie. Eine Bitte um Änderung („fetter“) entwirft die ganze Schrift neu.

Über einen Assistenten​

Der MCP-Server bietet dasselbe als Tools an: reelwire_ai_models, reelwire_ai_generate, reelwire_ai_reply, reelwire_ai_chat (ohne die ID eines Chats die Chats des letzten Tages), reelwire_ai_stop und reelwire_ai_keep; reelwire_ai_reply nimmt continueFrom entgegen, die ID eines Videoergebnisses, und erledigt das Obige in einem Aufruf. Sie sind unter der Adresse /mcp/all aufgelistet; unter /mcp findet ein Assistent sie mit reelwire_find_tools (siehe Installieren). Die Schlüssel für die Dienste gehören aus dem oben genannten Grund nicht dazu, ebenso wenig das Anhängen einer Datei. Siehe MCP-Tools.