Zum Hauptinhalt springen

Renders und direkter Export

Jeder Clip, den ein Beitrag trägt, wird von einem Render-Auftrag gerendert. Der direkte Export ist der andere Weg, denselben Renderer zu nutzen: eine Vorlage ausfüllen und das Video mitnehmen. Keine Zeile für einen Render-Auftrag, kein Beitrag, kein Kanal. Das fertige Video wird bei den gerenderten Clips des Workspaces aufbewahrt und ist noch da, wenn Sie es abholen.

Im Dashboard ist der direkte Export Clip erstellen im Clip-Studio, und seine Videos sind dort unter Exportierte Videos aufgelistet. Sein Berechtigungsbereich ist Clip studio - Create clip (renders:read und renders:write); die Routen der API und die MCP-Tools behalten den Namen direkter Export.

MethodePfadBerechtigung
GET/v1/render-jobsrenders:read
GET/v1/render-jobs/{id}/packagerenders:read
GET/v1/renders/quotaallowance:read
POST/v1/templates/{templateId}/validatetemplates:read
POST/v1/direct-export/timingrenders:read
POST/v1/direct-export/videorenders:write
POST/v1/direct-export/batchrenders:write
GET/v1/direct-export/queuerenders:read
GET/v1/direct-export/video/{jobId}/reuserenders:read
POST/v1/direct-export/ziprenders:write
GET/v1/direct-export/video/{jobId}renders:read
GET/v1/direct-export/video/{jobId}/downloadrenders:read
POST/v1/direct-export/video/{jobId}/linkrenders:write
POST/v1/direct-export/video/{jobId}/discardrenders:write
GET/v1/direct-export/videosrenders:read
GET/v1/direct-export/videos/{jobId}renders:read
POST/v1/direct-export/keyframesrenders:write
GET/v1/export-files/{jobId}keine: der signierte Link selbst
POST/v1/renders/buy, /v1/renders/keep, /v1/renders/dropangemeldeter Inhaber
POST/v1/storage/splitangemeldeter Inhaber

Was in diesem Monat übrig ist​

curl http://localhost:4000/v1/renders/quota \
-H "Authorization: Bearer rw_your_key_here"
{
"quota": {
"allowance": 1200,
"used": 9,
"extra": 0,
"remaining": 1191,
"periodStart": "2026-09-06T13:50:50.821Z",
"periodEnd": "2026-10-06T13:50:50.821Z",
"overridden": false
},
"seats": { "used": 6, "max": 10 },
"partners": { "used": 0, "max": 100 },
"storage": {
"used": 26.9,
"max": 500,
"usedBytes": 28182585,
"maxBytes": 524288000,
"usedBy": { "media": 10821887, "renders": 17360698 },
"mediaPercent": 30,
"media": { "used": 10.3, "max": 150 },
"clips": { "used": 16.6, "max": 350 },
"split": { "minPercent": 10, "maxPercent": 90 }
}
}

Beobachten Sie quota.remaining vor einem Batch. periodEnd ist, wann es zurückgesetzt wird. Die Antwort trägt mehr als das, was die Seite Kontingent anzeigt: sources, woher jede Obergrenze kommt (was der Tarif enthält, was gekauft und was Reelwire gewährt hat), addOns, welche Zusatzpakete der Workspace hält und was mehr kosten würde, und canBuy, ob die anfragende Person kaufen darf. Was die Zusatzpakete kosten (addOns.monthlyCents, addOns.monthlyBy und die Preise in addOns.offers), ist Sache des Inhabers: Ein Schlüssel ohne plan:read und jeder Kollege erhält null für beide Summen und keine Angebote.

addOns.offers enthält nur, was ein Workspace selbst hinzufügt, für ihn bepreist: bei Enterprise zu den in seinem Angebot vereinbarten Preisen. Syndikationsteilnehmer gehören nie dazu. addOns.agreed nennt, was der Workspace hält, aber mit Reelwire vereinbart und nicht kauft: ["partners"] bei Enterprise und leer in den darunterliegenden Tarifen, die keine Teilnehmer halten. Mehr Teilnehmer sind ein neues Angebot, und POST /v1/renders/buy lehnt eine Teilnehmerstufe mit einem 409 ab. addOns.paysBy ist CARD, wo das Hinzugefügte sofort der Karte belastet wird, oder INVOICE, wo es sofort in Rechnung gestellt wird, zahlbar innerhalb von addOns.invoiceDays Tagen.

storage ist ein Kontingent, das sich die Mediathek und die gerenderten Clips teilen. storage.split sagt, wie weit der Inhaber die Grenze zwischen beiden gerade verschieben darf, was POST /v1/storage/split tut: siehe Mediathek.

Das Kontingent ist für einen Schlüssel nur lesbar. POST /v1/renders/buy, /keep und /drop ändern, wofür der Workspace zahlt, und gehören daher dem angemeldeten Inhaber: Ein Schlüssel wird abgelehnt, was auch immer seine Berechtigungen sind, und ein Kollege, der nicht der Inhaber ist, erhält einen eigenen 403:

{
"error": {
"type": "https://reelwire.io/errors/forbidden",
"code": "forbidden",
"message": "Only the owner of this workspace can buy more.",
"requestId": "01M2SQWHPGCVYFJR5HM761W5XN",
"details": []
}
}

Render-Aufträge​

curl "http://localhost:4000/v1/render-jobs?perPage=1" \
-H "Authorization: Bearer rw_your_key_here"
{
"jobs": [
{
"id": "01M2SQN531MF686B8KWYJA3NV8",
"origin": "custom",
"details": "Enterprise 2 Stream 1",
"postTitle": null,
"clip": {
"id": "01M2SQPAPH4YF66ZKK5Y5XA9Y7",
"mimeType": "video/mp4",
"url": "http://localhost:4000/v1/assets/01M2SQPAPH4YF66ZKK5Y5XA9Y7/download?exp=1789721392&sig=ae02f120693a5043646e04d5bd65a899deea94add53450aea4e9e510053bf1fb"
},
"templateId": "tpl_dd7e6b264fb8",
"templateName": "Big number",
"templateVariant": "Corporate glass",
"templateVersion": "1.0.0",
"state": "COMPLETED",
"outputsRequested": 1,
"outputsSucceeded": 1,
"submittedAt": "2026-09-18T07:45:50.788Z",
"finishedAt": "2026-09-18T07:46:28.715Z",
"error": null,
"priority": 1,
"clipsStored": 1,
"progress": 1,
"outputs": [{ "ratio": "9x16", "locale": "en", "state": "succeeded", "error": null }]
}
],
"total": 7,
"all": 7,
"page": 1,
"perPage": 1,
"facets": { "state": ["COMPLETED"] }
}

Ein Render-Auftrag durchläuft PENDING, SUBMITTED, RENDERING, DOWNLOADING, STORED und COMPLETED, mit PARTIAL, FAILED, TIMED_OUT und CANCELLED an der Seite. Filtern Sie danach mit state; die Liste paginiert, durchsucht und sortiert wie jedes Protokoll (siehe Listen und Paginierung).

progress ist der Mittelwert über die Ausgaben des Auftrags, wobei eine fertige ganz zählt, weshalb es hier dasselbe liest wie auf der Seite Beiträge. priority ist 1, wo der Auftrag mit priorisiertem Rendern eingereiht wurde, was Enterprise hat. clipsStored kleiner als outputsSucceeded bedeutet, dass Clips entfernt wurden, um Speicher freizugeben. clip ist das Video des Auftrags, solange es noch gespeichert ist, unter einer für eine Stunde signierten Adresse, und null, sobald es weg ist.

GET /v1/render-jobs/{id}/package liefert genau das, was dem Renderer übergeben wurde: die Vorlage, den Inhalt, die Marke, den Kanalkontext und die Optionen. Es ist eine eigene Anfrage statt Teil der Liste, weil ein Package ein ganzes Markendokument trägt und die Liste abgefragt wird.

Direkter Export​

Fragen, wie lang der Clip wird, den Inhalt prüfen, ihn starten, abfragen, dann herunterladen oder einen Link dazu weitergeben.

Wie lang es wird​

curl http://localhost:4000/v1/direct-export/timing \
-H "Authorization: Bearer rw_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"templateId": "tpl_dd7e6b264fb8",
"version": "1.0.0",
"variant": "Corporate glass",
"data": { "clipData": { "label": "Ten-year Bund yield at the close", "value": 2.41, "unit": "%" } }
}'
{ "fps": 30, "frames": 300, "durationMs": 10000, "version": "1.0.0", "variant": "Corporate glass" }

Manche Vorlagen laufen so lang, wie ihr Inhalt es braucht, daher wird das gefragt, während das Formular noch ausgefüllt wird. Es kostet nichts und speichert nichts, sodass es, obwohl es ein POST ist, jeder Schlüssel fragen darf, der renders lesen darf. version und variant sagen, welchen Build es zeitlich gemessen hat: ohne sie der neueste Build der ersten Variante der Vorlage. Es ist die eigene Länge der Vorlage; das Intro und das Outro einer Marke laufen in einem fertigen Clip darum herum.

Zuerst den Inhalt prüfen​

POST /v1/templates/{templateId}/validate nimmt variant, version und data und führt genau die Prüfungen aus, denen der Inhalt eines Videos vor dem Start unterliegt, einschließlich der Frage, ob jedes Bild, das der Inhalt nennt (media://...), in der Mediathek des Workspaces ist. Es rendert nichts, speichert nichts und kostet nichts, sodass es jeder Schlüssel fragen darf, der templates lesen darf, obwohl es ein POST ist. Es ist Eingabe prüfen im Dialog Clip erstellen.

curl http://localhost:4000/v1/templates/tpl_dd7e6b264fb8/validate \
-H "Authorization: Bearer rw_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"variant": "Corporate glass",
"data": { "clipData": { "headline": "Bund yields close at a three-week high", "value": 2.41 } }
}'
{
"ok": false,
"templateId": "tpl_dd7e6b264fb8",
"variant": "Corporate glass",
"version": "1.0.0",
"problems": [
{ "path": "/clipData", "message": "missing label" },
{ "path": "/clipData", "message": "has a field this template does not take: headline" }
]
}

Inhalt, der nicht passt, ist eine Antwort mit ok: false, kein Fehler: Jedes Problem nennt das Feld mit seinem Pfad und sagt in Worten, was falsch ist, etwa dass das Feld fehlt, ein Feld, das die Vorlage nicht nimmt, die Werte, die eine Auswahl erlaubt, ein Text über seiner Länge oder ein Bild, das die Mediathek nicht hat. variant und version sagen, wogegen geprüft wurde: ohne sie der neueste Build der ersten Variante der Vorlage. Eine Variante, die die Vorlage nicht hat, ist ein 400 schema_validation, der die Varianten nennt, die sie hat, ebenso eine Version, die sie nicht hat, oder data, das kein einzelnes Objekt ist.

Ein Video starten​

POST /v1/direct-export/video nimmt dieselben Felder plus das Aussehen: brandId, ratio und locale. Statt brandId nimmt es style, ein ganzes Markendokument, wie GET /v1/brands/{id} es liefert, für eine noch nicht gespeicherte Marke; ihre Dateien werden nur gerendert, wo sie media://-Referenzen auf Dateien der Mediathek des Workspaces sind, und alles andere darin wird weggelassen. Geben Sie eines der beiden an, nie beide. Die Batch- und Keyframe-Routen nehmen dieselbe Wahl.

curl http://localhost:4000/v1/direct-export/video \
-H "Authorization: Bearer rw_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"templateId": "tpl_dd7e6b264fb8",
"version": "1.0.0",
"variant": "Corporate glass",
"brandId": "01M1VFRWE7VHP3H54ESRJQ0SAJ",
"ratio": "9x16",
"locale": "en",
"data": {
"clipData": {
"kicker": "Rates",
"label": "Ten-year Bund yield at the close",
"value": 2.41,
"unit": "%",
"window": "a three-week high",
"source": "Deutsche Finanzagentur"
},
"metaData": { "title": "Bund yields close at a three-week high" }
}
}'
{ "jobId": "01M2SQTF3R3GHBVTR3DQQNH1DK", "templateId": "tpl_dd7e6b264fb8", "variant": "Corporate glass", "version": "1.0.0" }

202. Ohne version (oder mit latest) wird der neueste Build der Variante gerendert, und ohne variant die erste der Vorlage: Die Antwort sagt welche, ebenso der behaltene Export und seine Wiederverwendung. Eine Variante, die die Vorlage nicht hat, wird mit den vorhandenen abgelehnt und nie als eine andere gerendert. Der Inhalt wird in der verlangten Sprache gerendert, mit der Kopie dieser Sprache aus locales über den Standard gelegt, genau wie der Clip eines Kanals.

Die Vorlagen Hintergrund, Stinger, Intro und Outro erstellen die eigenen Filme einer Marke, die dann Teil der Marke werden, daher werden ihre Clips immer für sich gerendert: ohne das Intro, Outro, den Stinger oder Soundtrack der Marke darum herum und ohne ihren Hintergrund darunter, was auch immer die Marke gesetzt hat.

Ein Export wartet in derselben Schlange wie die Beiträge des Workspaces, in der Reihenfolge, in der er verlangt wurde: Mit priorisiertem Rendern, das Enterprise hat, gehen beide der Standardarbeit voraus.

Alles wird geprüft, bevor etwas eingereicht wird, sodass ein Fehler eine Antwort ist und kein Render, der eine Minute später fehlschlägt:

AblehnungWarum
404 unknown_templateDie Vorlage wird diesem Workspace nicht angeboten oder hat noch keinen Build zum Rendern.
404 not_foundKeine Marke mit dieser ID in diesem Workspace.
400 ratio_not_supportedDie Vorlage rendert dieses Bildformat nicht.
400 schema_validationDer Inhalt passt nicht zum Build, genau wie der Beitrag einer Beitragsliste geprüft wird, oder er nennt ein Bild (media://...), das die Mediathek nicht hat; jedes Detail zeigt auf das Feld, wie es die obige Prüfung tut. Auch eine Variante, die die Vorlage nicht hat (die Meldung nennt die, die sie hat), eine Version, die sie nicht hat, und ein Text mit brandId und style zugleich oder mit keinem von beiden.
429 rate_limitedIn diesem Monat sind keine Videos mehr übrig, Exporte, die noch rendern, eingerechnet. Die Meldung nennt das Kontingent und das Datum, an dem es zurückgesetzt wird.
503 upstream_unavailableGerade ist kein Renderer frei.

Mehrere Bildformate und Sprachen auf einmal​

POST /v1/direct-export/batch nimmt denselben Text mit ratios und locales statt ratio und locale und startet ein Video für jedes Bildformat in jeder Sprache: höchstens 24, ein wiederholtes Bildformat oder eine wiederholte Sprache zählt einmal.

curl http://localhost:4000/v1/direct-export/batch \
-H "Authorization: Bearer rw_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"templateId": "tpl_dd7e6b264fb8",
"version": "1.0.0",
"brandId": "01M1VFRWE7VHP3H54ESRJQ0SAJ",
"ratios": ["9x16", "1x1"],
"locales": ["en", "de"],
"data": {
"clipData": { "label": "Ten-year Bund yield at the close", "value": 2.41, "unit": "%" },
"locales": { "de": { "clipData": { "label": "Rendite der zehnjährigen Bundesanleihe zum Schluss" } } }
}
}'
{
"jobs": [
{ "jobId": "01M2SQTF3R3GHBVTR3DQQNH1DK", "ratio": "9x16", "locale": "en" },
{ "jobId": "01M2SQTF6B1Y8XK2G5E7WQ9D3M", "ratio": "9x16", "locale": "de" },
{ "jobId": "01M2SQTF9C4J7P0R2T6V8N1B5H", "ratio": "1x1", "locale": "en" },
{ "jobId": "01M2SQTFC2D5F8H1K4M7Q0S3V6", "ratio": "1x1", "locale": "de" }
],
"problem": null,
"variant": "Corporate glass",
"version": "1.0.0"
}

202. Jeder Auftrag ist von da an ein gewöhnlicher Export: für sich abgefragt, heruntergeladen, behalten und berechnet. variant und version sagen, welchen Build jeder von ihnen rendert, aufgelöst wie bei einem einzelnen Video. Der Inhalt und jedes Bildformat werden geprüft, und das Kontingent wird für alle geprüft, Exporte, die noch rendern, eingerechnet, bevor der erste gestartet wird, sodass ein Fehler den ganzen Batch mit denselben Antworten wie bei einem einzelnen Video ablehnt; ein Bildformat, das die Vorlage nicht rendert, wird genannt. Mehr als 24 Videos sind ein 400 schema_validation, der sagt, wie viele verlangt wurden. Lehnen die Renderer mittendrin ab, werden die Aufträge beantwortet, die gestartet wurden, und problem sagt, wie viele von wie vielen und warum.

Jeder Export und wie weit er ist​

GET /v1/direct-export/queue listet jeden Export des Workspaces auf, die neuesten zuerst: die, die noch warten oder rendern, die, die in den letzten zwei Stunden fehlschlugen, und die behaltenen (die neuesten 100). Es ist eine Anfrage für einen ganzen Batch und das, was die Karte Exportierte Videos des Dashboards zeigt.

{
"exports": [
{
"jobId": "01M2SQTF3R3GHBVTR3DQQNH1DK",
"templateId": "tpl_dd7e6b264fb8",
"templateName": "Big number",
"variant": "Corporate glass",
"version": "1.0.0",
"ratio": "9x16",
"locale": "en",
"brandId": "01M1VFRWE7VHP3H54ESRJQ0SAJ",
"brandName": "Northwind Markets",
"status": "rendering",
"progress": 0.4,
"ahead": 0,
"error": null,
"kept": false,
"keptNote": null,
"byteSize": null,
"durationMs": null,
"createdAt": "2026-09-24T09:57:12.402Z"
}
]
}

status, progress, ahead und keptNote bedeuten, was sie beim Abfragen eines Videos bedeuten, unten. Das Abfragen der Warteschlange klärt jeden Export, den sie auflistet, sodass ein Video, das gerade fertig wurde, behalten und gezählt wird, genau wie beim Abfragen. byteSize und durationMs sind da, sobald es behalten wird. Fragen Sie sie alle paar Sekunden ab, solange etwas rendert, nicht schneller.

Noch einmal erstellen​

GET /v1/direct-export/video/{jobId}/reuse antwortet mit dem, woraus ein Export gemacht wurde, in der Form, die /v1/media/renders/{id}/reuse für einen gerenderten Clip liefert: Vorlage, Variante, Build, Marke, Bildformat, Sprache und data, jede Sprache eingeschlossen. Es funktioniert über die Auftrags-ID, also auch für einen Export, der noch rendert oder fehlschlug, nicht nur für einen behaltenen. Nichts wird erstellt; ändern Sie, was zu ändern ist, und starten Sie ihn erneut mit POST /v1/direct-export/video oder /batch.

{
"reuse": {
"kind": "export",
"templateId": "tpl_dd7e6b264fb8",
"templateName": "Big number",
"variant": "Corporate glass",
"version": "1.0.0",
"pinnedVersion": "1.0.0",
"brandId": "01M1VFRWE7VHP3H54ESRJQ0SAJ",
"ratio": "9x16",
"locale": "en",
"data": { "clipData": { "label": "Ten-year Bund yield at the close", "value": 2.41, "unit": "%" } },
"title": "Copy of Big number",
"queueId": null
}
}

Mehrere als ein ZIP​

POST /v1/direct-export/zip mit { "jobIds": [...] }, 1 bis 24 davon, antwortet mit einem ZIP, das jede .mp4 enthält, benannt nach Vorlage, Variante, Version, Marke, Bildformat und Sprache:

HTTP/1.1 200 OK
content-type: application/zip
content-disposition: attachment; filename="Reelwire exports 2026-09-24.zip"

Jeder gewählte Export muss fertig sein: Einer, der noch rendert, ist ein 409 conflict, der das sagt, statt eines ZIP, das stillschweigend weniger Videos enthält, als verlangt wurden. Zusammen mehr als 400 MB sind ein 413 payload_too_large; laden Sie sie in kleineren Gruppen oder einzeln herunter.

Es ist Ausgewählte herunterladen des Dashboards und die eine Route des direkten Exports, die kein MCP-Tool erreicht, absichtlich: Ein Tool kann keine Datei tragen, daher übergibt ein Assistent stattdessen einen Link je Video (unten).

Abfragen​

curl http://localhost:4000/v1/direct-export/video/01M2SQTF3R3GHBVTR3DQQNH1DK \
-H "Authorization: Bearer rw_your_key_here"
{ "status": "rendering", "progress": 0.1, "renderer": "render-1", "ahead": 0, "error": null, "kept": false, "keptNote": null, "keptId": null }
{ "status": "succeeded", "progress": 1, "renderer": "render-1", "ahead": 0, "error": null, "kept": true, "keptNote": null, "keptId": "01M2SR0B6K9TQ4V1X3HZJ8D2PA" }

status ist queued, rendering, succeeded, failed, timed_out oder cancelled. ahead ist, wie viele Clips vor Ihrem liegen, solange er queued ist. Ein Renderer rendert nur einige Clips auf einmal und nimmt auch die Clips von Beiträgen an, also wäre „rendering, 0 %“ eine Minute lang eine Lüge, die sich wie ein Stillstand liest.

kept sagt, dass das fertige Video in die gerenderten Clips des Workspaces kopiert wurde, was in dem Moment geschieht, in dem es jemand fertig sieht, oder kurz danach, wenn niemand hinsieht. Es wird dann genau wie der Clip eines Beitrags aufbewahrt: im Clip-Anteil des Speichers, aufgelistet unter /v1/media/renders und die ältesten zuerst entfernt, wenn neuere Clips den Platz brauchen. Ein Clip, der größer ist als dieser ganze Anteil, wird nicht behalten, und keptNote sagt das; er kann noch zwei Stunden heruntergeladen werden. keptId ist die ID der behaltenen Kopie, die POST /v1/media/renders/{id}/copy nimmt, um das Video in die Mediathek zu legen.

Herunterladen​

Ein Download ist die .mp4 selbst.

curl -o export.mp4 \
http://localhost:4000/v1/direct-export/video/01M2SQTF3R3GHBVTR3DQQNH1DK/download \
-H "Authorization: Bearer rw_your_key_here"
HTTP/1.1 200 OK
content-type: video/mp4
content-disposition: inline; filename="export-9x16-en.mp4"

Ein behaltenes Video wird mit Range geliefert, sodass ein Player starten kann, bevor die Datei angekommen ist, und springen kann.

Jeder Clip, den Reelwire erstellt, ob von einem Beitrag oder ein Export, trägt seine eigenen Metadaten, die ein Player wie VLC in den Dateiinformationen zeigt:

TagWas es enthält
TitelDer Titel des Beitrags (metaData.title im Inhalt), sonst der Name der Vorlage
InterpretDer Name der Marke, wie der Clip ihn zeigt
Copyright© <year> <brand>
Datum und ErstellungszeitWann der Clip erstellt wurde
Encoding-ToolReelwire
KommentarMade with Reelwire, reelwire.io
SpracheDie Sprache des Clips, auf Bild und Ton

Sonst nichts: kein Name eines anderen Programms, nichts über Ihren Workspace, Kanal oder Ihre Beitragsliste und nichts, was den Clip als KI kennzeichnet. ?as=video, das früher das Video ohne ZIP darum verlangte, wird weiterhin akzeptiert und ändert nichts: Es gibt kein ZIP mehr.

POST /v1/direct-export/video/{jobId}/link antwortet mit einer Adresse, die die .mp4 in einem Browser ohne Zugangsberechtigung speichert. Das ist es, was ein Assistent übergibt, da ein Chat eine Adresse tragen kann, aber kein Video.

{
"url": "http://localhost:4000/v1/export-files/01M2SQTF3R3GHBVTR3DQQNH1DK?as=video&key=...",
"expiresAt": null,
"form": "video",
"kept": true
}

Der Link nennt diese eine Datei und sonst nichts. Bei einem behaltenen Video funktioniert er, solange das Video behalten wird, und expiresAt ist null; sonst gilt er fünfzehn Minuten. Vor Fertigstellung des Videos zu fragen ist ein 502 asset_unavailable, der sagt, was es stattdessen tut. Einen Link anzufordern zählt ein fertiges Video gegen das Kontingent, genau wie das Abfragen.

Der Link selbst, GET /v1/export-files/{jobId}, braucht keine Zugangsberechtigung, weil er eine ist: für genau eine Datei. Einer, der verändert wurde oder abgelaufen ist, ist ein 403, und einer zu einem nicht mehr behaltenen Video ein 404.

Jeder Export bisher​

GET /v1/direct-export/videos listet die behaltenen Exporte des Workspaces auf, die neuesten zuerst, mit einem Link zu jedem, der so lange gilt wie das Video. Es nimmt limit, standardmäßig 24 und höchstens 100.

{
"exports": [
{
"jobId": "01M2SQTF3R3GHBVTR3DQQNH1DK",
"templateId": "tpl_dd7e6b264fb8",
"templateName": "Big number",
"version": "1.0.0",
"variant": "Corporate glass",
"ratio": "9x16",
"locale": "en",
"brandId": "01M1VFRWE7VHP3H54ESRJQ0SAJ",
"width": 1080,
"height": 1920,
"durationMs": 10000,
"byteSize": 742118,
"createdBy": "apikey:01M2SQKKZ3ZPXK8RB7BK5QJ3GH",
"createdAt": "2026-09-18T07:49:02.114Z",
"videoUrl": "http://localhost:4000/v1/export-files/01M2SQTF3R3GHBVTR3DQQNH1DK?as=video&key=..."
}
],
"kept": "Kept with the rendered clips, in their share of the storage. When it is full the oldest clip goes first."
}

variant ist der Zuschnitt, in dem es gerendert wurde: Geben Sie ihn bei einer Variation weiter, sonst rendert die Variation die erste der Vorlage. GET /v1/direct-export/videos/{jobId} ist einer davon mit dem content, aus dem er gerendert wurde, womit eine Variation beginnt.

Verwerfen​

curl -X POST \
http://localhost:4000/v1/direct-export/video/01M2SQTF3R3GHBVTR3DQQNH1DK/discard \
-H "Authorization: Bearer rw_your_key_here"
{ "discarded": true }

Verwerfen stoppt ein noch rendernde Video und löscht die behaltene Kopie. Es ist gefahrlos wiederholbar: Eine ID, bei der nichts mehr zu verwerfen ist, antwortet mit { "discarded": false }. Einen Export, den Sie behalten wollen, müssen Sie gar nicht verwerfen. Es ist das, was Abbrechen und Löschen des Dashboards unter Exportierte Videos tun; das Schließen des Dialogs Clip erstellen verwirft nie und lässt jedes Video weiter rendern. Ein Schlüssel braucht dafür renders:write und eine angemeldete Person die Berechtigung Betrieb.

Was es kostet​

Ein Video zählt als ein Render gegen das Kontingent des Monats, abgerechnet, wenn es fertig ist, nicht wenn es startet: Ein Export, der zwei Sekunden nach dem Start abgebrochen wird, ist keiner, den Sie erhalten haben. Das Einreichen wird weiterhin abgelehnt, sobald nichts mehr übrig ist, sodass das Kontingent nicht überschritten werden kann.

Keyframes, POST /v1/direct-export/keyframes, sind einzelne Standbilder an Frames, die Sie wählen: derselbe Text wie bei einem Video plus frames, 1 bis 60 von { "name": "...", "frame": 120 }. Sie kommen als PNGs in einem ZIP zurück, jedes nach seinem Keyframe benannt, und zählen nicht gegen das Kontingent. Ein Frame hinter dem Ende des Clips ist ein 400. Lassen Sie frames weg für den Keyframe allein, ein Frame aus dem letzten Drittel des Clips.

Zwei weitere Felder machen sie zu einer Möglichkeit, Dinge auszuprobieren, bevor etwas gespeichert wird:

  • data weggelassen rendert das eigene durchgespielte Beispiel der Variante, den Inhalt, den ihre Vorschau zeigt, sodass ein Stil oder eine Marke angesehen werden kann, bevor jemand einen Beitrag geschrieben hat.
  • brandChange, neben brandId, legt eine Änderung über den Stil dieser Marke allein für diese Standbilder: Objekte auf jeder Tiefe zusammengeführt, eine Liste ganz ersetzt, null nimmt einen Wert weg, und die Farben werden wie bei einem Speichern aus palette neu berechnet. Die eigenen Dateien der Marke bleiben, wie gespeichert; eine Datei, die die Änderung nennt, muss in der Mediathek sein. Nichts wird geschrieben. Eine Änderung, die keinen gültigen Stil ergibt, ist ein 400.
{
"templateId": "tpl_dd7e6b264fb8",
"brandId": "01JA...",
"ratio": "9x16",
"locale": "en",
"brandChange": { "palette": { "brand": "#1E5AA8", "stage": "light" }, "text": { "primary": { "font": "montserrat" } } }
}

Export-IDs gehören einem Workspace​

Die Auftrags-IDs des Renderers sind global, daher merkt sich Reelwire, welcher Workspace welchen Auftrag gestartet hat. Eine Auftrags-ID eines anderen Workspaces antwortet mit 404, genau wie eine, die nie existierte.

Dieser Speicher ist auch der Ort, an dem ein Video lebt, bis es behalten wird, sodass ein Neustart von Reelwire, ein Deploy eingeschlossen, jeden Export verliert, der noch rendert. Danach gefragt, antwortet ein solcher Auftrag mit 404 und einer Meldung, die das sagt: Er wurde nicht berechnet, und der Weg weiter ist, ihn erneut zu starten. Ein bereits behaltenes Video übersteht einen Neustart.

Häufige Fehler​

Die Statusroute abfragen, bevor es nötig ist. Lesen Sie frames aus /timing und warten Sie ungefähr so lange vor der ersten Abfrage.

Verwerfen, was Sie behalten wollten. Verwerfen löscht auch die behaltene Kopie. Lassen Sie einen Export in Ruhe, und er bleibt, bis neuere Clips den Platz brauchen.

Erwarten, dass der Download JSON oder ein ZIP ist. Er ist video/mp4.

variant bei einer Variation weglassen. Dann ist es die erste Variante der Vorlage, die bei einer Branchenvorlage wie Finance ein anderer Beitrag mit anderen Feldern ist. Ein behaltener Export, seine Wiederverwendung und die eigene Antwort des Exports sagen alle, welche Variante es war; geben Sie sie weiter.

Einen Render ausgeben, um einen Fehler zu finden. POST /v1/templates/{templateId}/validate beantwortet dieselben Prüfungen umsonst, fehlende Bilder eingeschlossen.

Kontingent mit einem API-Schlüssel kaufen. Das ist Sache des angemeldeten Inhabers. Ein Schlüssel hat keine Rolle, was auch immer seine Berechtigungen sind.

Einen gerenderten Clip löschen, den ein Beitrag noch braucht. Jeder Beitrag seines Auftrags, der noch auf ihn wartet, wird mit ihm abgebrochen. Siehe Mediathek.