Asistente de IA
El asistente de IA crea imágenes, videos, música y fuentes tipográficas, y escribe textos como JSON, con los servicios de IA que un espacio de trabajo ha conectado. A través de la API es un intermediario: usted envía una solicitud, Reelwire la reenvía a OpenAI, Google, Black Forest Labs, BytePlus, ElevenLabs, Stability AI o Anthropic con la clave propia del espacio de trabajo para ese servicio y le devuelve el resultado. El servicio factura en la cuenta propia del espacio de trabajo; Reelwire no añade nada. Consulte Asistente de IA en el capítulo del panel para ver los modelos, dónde se crea la clave de cada servicio y dónde se abre el asistente en el panel: Medios, cada espacio para un archivo de una marca y del contenido de una publicación, Configurar con IA en la parte superior de los diálogos de la marca, Nueva publicación, Crear clip y Enviar solicitud de actualización, y Seleccionar plantilla con IA en el Estudio de clips.
| Método | Ruta | Permiso |
|---|---|---|
GET | /v1/ai/models | ai:read |
POST | /v1/ai/generate | ai:write |
POST | /v1/ai/chats | ai:write |
GET | /v1/ai/chats | ai:read |
GET | /v1/ai/chats/{id} | ai:read |
POST | /v1/ai/chats/{id}/messages | ai:write |
POST | /v1/ai/chats/{id}/stop | ai:write |
POST | /v1/ai/attachments | ai:write |
POST | /v1/ai/results/{id}/keep | ai:write |
POST | /v1/ai/results/{id}/last-frame | ai:write |
GET | /v1/ai-keys | persona con sesión iniciada |
PUT | /v1/ai-keys/{provider}/{section} | persona con sesión iniciada |
POST | /v1/ai-keys/{provider}/{section}/delete | persona con sesión iniciada |
El permiso es Media - AI assistant en la pantalla Claves de API. Guardar un resultado lo escribe en la biblioteca multimedia y solo necesita este permiso.
Ninguna clave de API da acceso a las claves de los servicios. /v1/ai-keys pertenece a una persona con sesión iniciada, en la pantalla Claves de API: una clave que pudiera configurarlas podría gastar el dinero del espacio de trabajo en otra empresa. GET /v1/ai-keys lista cada servicio con sus secciones (image, video, sound, text) y, para cada una, si hay una clave guardada (configured) y sus últimos cuatro caracteres (hint), cuándo caduca (expiresAt) y si antes se envía un recordatorio por correo electrónico (remindExpiry), nunca la clave en sí. readable: false significa que una clave guardada ya no se puede leer, porque Reelwire cambió el secreto con el que guarda las claves, y hay que pegarla de nuevo. PUT /v1/ai-keys/{provider}/{section} con { "key": "...", "expiresAt": "...", "remindExpiry": true } guarda una (key puede omitirse donde ya hay una guardada, para cambiar solo los otros dos campos; expiresAt es un instante futuro o null, y el recordatorio necesita uno) y POST /v1/ai-keys/{provider}/{section}/delete la elimina (404 si no hay ninguna guardada ahí); ambas requieren al propietario o a un colega con Administración. Los servicios son openai, google, bfl, byteplus, elevenlabs, stability y anthropic, cada uno solo en las secciones que ofrece; un servicio o una sección que no ofrece es un 404. La única excepción es eliminar: una clave guardada en una sección que su servicio ya no ofrece, como google en video de antes de que se retiraran los modelos de video de Google, no la usa nada, no aparece en ninguna lista y aun así se puede eliminar. La caducidad es solo lo que usted indica: Reelwire sigue usando la clave hasta que el servicio la rechaza y, con remindExpiry, envía un correo al propietario y a todos los que tienen Administración una semana y un día antes. Una clave se guarda incluso cuando el servicio la rechaza: cuando el servicio tiene una forma barata de comprobarla (OpenAI, Google, Anthropic), check en la respuesta indica si aceptó la clave.
Adjuntar archivos a un mensaje
POST /v1/ai/attachments recibe un archivo como multipart/form-data en file: de cualquier tipo, hasta 20 MB (uno mayor es un 400). Responde con 201 y { "attachment": { "id", "name", "mimeType", "byteSize", "readable" } }, donde readable indica cómo lo lee un modelo de texto o de fuentes: picture (PNG, JPEG, WebP o GIF de hasta 5 MB), pdf, text (texto sin formato, CSV, JSON, XML, Markdown, HTML, código), document (el texto de un archivo de Word, Excel o PowerPoint) o none, en cuyo caso al modelo solo se le indican su nombre y su tipo. Ponga los ids en options.attachments del siguiente mensaje: el mensaje los conserva, aparecen en él como attachments del turno, y el modelo los lee con cada mensaje posterior del chat, los más recientes primero, dentro de lo que admite una solicitud al servicio. Un archivo se conserva con su chat y se elimina con él; el que ningún mensaje ha tomado se elimina al cabo de un día. Adjuntar es para un chat de texto o de fuentes con un modelo que lee archivos; cualquier otro chat los rechaza (400). Un id que ya no existe es un 404, y uno que otro chat ya ha tomado es un 409: adjunte el archivo de nuevo. Un archivo vacío es un 400, y adjuntar está limitado a 120 archivos por minuto. Ninguna herramienta MCP adjunta un archivo, porque una herramienta no transporta archivos: options.images muestra al modelo imágenes de la biblioteca multimedia en su lugar.
Qué modelos se pueden usar
curl https://app.reelwire.io/v1/ai/models -H "Authorization: Bearer $REELWIRE_KEY"
Todos los modelos aparecen en la lista, tenga o no el espacio de trabajo una clave para su servicio. configured: true significa que se puede usar ahora: su servicio tiene una clave en la sección propia del modelo (imagen, video, sonido para música, o texto y fuentes) en la pantalla Claves de API. Una clave guardada para una sección no activa ninguna otra, de modo que un espacio de trabajo puede tener las imágenes de Black Forest Labs y no sus videos. Cada proveedor lista las secciones que ofrece (sections) y aquellas en las que tiene una clave (configuredSections). Los modelos llegan por servicio empezando por el más ligero y subiendo hasta el más potente, según la propia denominación del servicio (lite, mini, fast, draft), que es el orden en que los ofrece el panel. Cada modelo indica qué crea (kinds: image, video, sound, font, text), una línea sobre para qué sirve (about), los formatos (aspectRatios) y las duraciones (durations) que genera, cuántas imágenes puede pedir un mensaje (maxCount), si puede modificar una imagen (references) o crear un fondo transparente (transparent), si un video tiene sonido (audio, y audioAlways cuando no se puede desactivar), si empieza y termina en una imagen que usted elige (firstFrame, lastFrame, con frameNote cuando hay algo que saber), si una pieza musical puede llevar canto (vocals) y cuántas imágenes mira un modelo de texto o de fuentes con cada mensaje (images, 0 si no mira ninguna).
Lo mismo, como tabla por modelo, está en Ajustes por modelo en el capítulo del panel.
La respuesta no incluye precios: son los de cada servicio y cambian a menudo. Cada proveedor de la respuesta lleva pricingUrl, la dirección de la lista de precios de ese servicio.
Crear algo
Un chat es una conversación con un modelo sobre una cosa. POST /v1/ai/generate inicia uno y envía su primer mensaje:
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" }
}'
Responde de inmediato con 202, con el chat y un turno en el estado RUNNING. El trabajo se hace en segundo plano: consulte GET /v1/ai/chats/{id} hasta que el turno sea DONE, FAILED o CANCELLED. POST /v1/ai/chats/{id}/stop detiene el mensaje que se está respondiendo y responde con el chat: el turno pasa a CANCELLED, no se conserva nada de él y se pide al servicio que cancele donde lo permite. Solo lo hace BytePlus (Seedance), y solo para un video que aún espera en su cola; con cualquier otro servicio simplemente se deja de esperar, y puede terminar la solicitud por su lado, y cobrarla. Responde con 409 cuando no hay nada en marcha. Las imágenes y los textos tardan de segundos a un minuto; los videos, de uno a cuatro minutos; la música y las fuentes, hasta unos minutos más, así que consulte cada diez segundos aproximadamente. Si Reelwire se reinicia entretanto, se vuelve a esperar un trabajo que el servicio aún está procesando (todos los videos y las imágenes de Black Forest Labs); una solicitud interrumpida a medias falla con un mensaje para enviarla de nuevo, en lugar de enviarse por segunda vez y pagarse dos veces.
| Campo | Para qué sirve |
|---|---|
kind | image, video, sound (música, entregada como MP3), font o text. |
model | Un id de modelo de /v1/ai/models que cree este tipo. |
prompt | Qué crear, hasta 4000 caracteres. |
options.aspectRatio | El formato, "w:h". Se usa el más cercano que el modelo crea. |
options.count | Imágenes de una vez, de 1 a 4 y no más que el maxCount del modelo; cada una se factura. |
options.durationSeconds | La duración de un video o de una pieza musical, hasta 190 segundos. Se usa la más cercana que el modelo crea. |
options.transparent | Un fondo transparente, donde el modelo pueda. |
options.audio | Sonido en un video, donde el modelo pueda. |
options.vocals | Canto en una pieza musical, donde el modelo pueda (vocals: true). De lo contrario, instrumental. |
options.refine | Un resultado de imagen de este chat que se va a modificar, por su id. |
options.reference | Una imagen de la biblioteca multimedia que se va a modificar, en un modelo con references: un PNG, JPEG o WebP, media://<id>. No junto con refine. |
options.firstFrame | Para un video en un modelo con firstFrame: una imagen PNG, JPEG o WebP de la biblioteca multimedia, media://<id>, con la que empieza el video. |
options.lastFrame | La imagen con la que termina, en un modelo con lastFrame y solo junto con firstFrame. |
options.images | Para un texto o una fuente, en un modelo cuyo images sea mayor que 0: hasta ese número de imágenes PNG, JPEG o WebP de la biblioteca multimedia, media://<id>, que el modelo mira con este mensaje. 5 MB cada una, 20 MB en total. |
options.attachments | Para un texto o una fuente, en un modelo cuyo images sea mayor que 0: hasta ese número de archivos adjuntados con POST /v1/ai/attachments, por sus ids. El mensaje los conserva, y el modelo los lee también con cada mensaje posterior del chat. |
purpose | Para qué sirve el chat, enviado con cada mensaje: label, brief, aspectRatio, transparent, language y, para un texto, format. place indica dónde se abrió y solo se registra en el log. |
Un modelo que Reelwire no ofrece es un 404. Un modelo que no crea el kind, un chat de texto sin purpose.format.schema, o un primer o último fotograma o una imagen que modificar que no sea un PNG, JPEG o WebP de la biblioteca multimedia de este espacio de trabajo es un 400, comprobado antes de enviar nada al servicio.
POST /v1/ai/chats con kind, model y purpose inicia un chat sin mensaje (201), y POST /v1/ai/chats/{id}/messages con prompt y options envía el siguiente (202, respondido como generate): «pon el fondo azul». Al modelo se le dan las solicitudes anteriores del chat. Un chat responde un mensaje a la vez: enviar otro mientras uno está en marcha es un 409, y también lo es enviar a un chat cuyo modelo Reelwire ya no ofrece (inicie un chat nuevo con otro modelo; un mensaje en marcha en él falla e indica el motivo). Enviar, en cualquiera de las dos rutas, está limitado a 30 mensajes por minuto, porque cada uno cuesta dinero en el servicio.
GET /v1/ai/chats lista los 50 chats más recientes del último día, cada uno con su id, kind, model, label, cuántos mensajes ha tenido (messages) y cuándo caduca (expiresAt).
Qué se obtiene
{
"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
}
]
}
]
}
}
Una imagen, un video, una pieza musical o una fuente tiene una url de vista previa firmada, válida durante una hora. Una imagen, un video o una pieza musical se llama ai- más diez letras y dígitos aleatorios; una fuente lleva el nombre de su familia, como Northwind-Sans-Regular.otf. data contiene el formato en que se creó una imagen o un video (aspectRatio) y la duración de una pieza musical (durationSeconds); en un texto está ahí su respuesta, y no hay url. Un turno FAILED indica el motivo en error, con las palabras del propio servicio cuando dio alguna: una clave rechazada, una cuenta sin crédito, un prompt que detuvo su control de seguridad.
Los resultados son propuestas y se conservan un día desde la última vez que se usó el chat, fuera de la biblioteca multimedia y de su almacenamiento. Guarde los que quiera:
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"}'
Responde con 201 y el file de la biblioteca, cuyo ref (media://...) es lo que admite un espacio de marca o el contenido de una plantilla, y el storage del espacio de trabajo. name es opcional; sin él, el resultado conserva su propio nombre. Un archivo guardado cumple las reglas de la propia biblioteca: la cuota de almacenamiento, imágenes de hasta 2048 por 2048 píxeles y videos de hasta 50 MB. Guardarlo otra vez responde con el archivo ya guardado y already: true, en lugar de una segunda copia. Un texto no tiene archivo que guardar, y guardarlo es un 409. Un name propio que la biblioteca ya contiene también es un 409; el nombre propio del resultado se deja libre con -2, -3.
Para continuar desde un video, «qué pasa después», empiece el siguiente donde terminó el anterior. Ningún servicio de video recuerda el clip que creó, así que su último fotograma pasa a ser el primer fotograma del siguiente video:
curl -X POST https://app.reelwire.io/v1/ai/results/01M37DK0P8.../last-frame \
-H "Authorization: Bearer $REELWIRE_KEY"
Toma el último fotograma del resultado de video a su tamaño completo, lo guarda en la biblioteca multimedia como JPEG según las reglas de la propia biblioteca y responde con 201 y el file de la biblioteca y el storage del espacio de trabajo. Envíe el siguiente mensaje con ese ref como options.firstFrame, en un modelo con firstFrame. Es lo que hace Continuar desde este video en el panel. Un resultado que no es un video es un 409.
Textos: JSON que se ajusta a un esquema
Un chat de texto responde con JSON y nada más, y necesita purpose.format.schema: el JSON Schema al que debe ajustarse la respuesta. Al modelo se le indica el esquema, y su respuesta se comprueba con él antes de que usted la vea; una respuesta que no encaja se devuelve una vez con los motivos y después el turno falla.
{
"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 indica para qué sirve cada campo, example da un ejemplo de buen contenido y current lo que está escrito ahora, de modo que un mensaje como «más corto» tenga algo que acortar. Un cambio afecta solo a lo que se pide: el modelo parte de su última respuesta, o de current, y deja cada otro campo y palabra como estaba. El esquema puede tener hasta 60 000 caracteres, y example y current hasta 20 000 cada uno.
Fuentes
Un chat font hace que un modelo de texto diseñe una tipografía nueva: cada mayúscula, minúscula, dígito y signo común como contorno en una cuadrícula fija. Reelwire crea con el diseño un archivo OpenType (font/otf) y lo comprueba leyéndolo de nuevo. Una fuente por mensaje, y tarda unos minutos. El data del resultado contiene family, description, glyphs (cuántos se diseñaron) y missing (caracteres que el diseño omitió y que recurren a otra fuente); el reply del turno también los nombra. Una petición de cambio («más gruesa») vuelve a diseñar toda la fuente.
A través de un asistente
El servidor MCP ofrece lo mismo como herramientas: reelwire_ai_models, reelwire_ai_generate, reelwire_ai_reply, reelwire_ai_chat (sin el id de un chat, los chats del último día), reelwire_ai_stop y reelwire_ai_keep; reelwire_ai_reply admite continueFrom, el id de un resultado de video, y hace lo anterior en una sola llamada. Aparecen en la dirección /mcp/all; en /mcp un asistente las encuentra con reelwire_find_tools (consulte Instalarlo). Las claves de los servicios no figuran entre ellas, por el motivo expuesto arriba, y tampoco adjuntar un archivo. Consulte Herramientas MCP.