CLI
Instale y use todos los comandos de la CLI de RunAPI para acciones de modelo, Tasks, archivos, cargas, información de cuenta, precios, devoluciones de llamada y Harness.
La CLI de RunAPI es un cliente de terminal basado en JSON para acciones de modelos y herramientas de cuenta. Escribe los datos de resultados en la salida estándar y el progreso operativo en el error estándar, por lo que funciona igualmente bien en una terminal, en scripts de shell, en trabajos de CI y en Harness.
Instalar
Instale la versión actual en Linux o macOS:
curl -fsSL https://runapi.ai/cli/install.sh | sh
Las instalaciones de Homebrew y desde el código fuente de Go también están disponibles:
brew install runapi-ai/tap/runapi
go install github.com/runapi-ai/cli/cmd/runapi@latest
En Windows, descargue el archivo windows-amd64 o windows-arm64
correspondiente desde la última versión de la CLI, extraiga runapi.exe y agréguelo
a PATH.
Fije el instalador a una versión o a un directorio de instalación cuando una implementación requiera un binario reproducible:
curl -fsSL https://runapi.ai/cli/install.sh | sh -s -- --version v0.13.1
curl -fsSL https://runapi.ai/cli/install.sh | sh -s -- --dir "$HOME/.local/bin"
El instalador también acepta RUNAPI_VERSION, RUNAPI_INSTALL_DIR, RUNAPI_INSTALL_BASE, RUNAPI_DOWNLOAD_BASE y RUNAPI_SKIP_LIBC_CHECK=1.
Inicio rápido
En una estación de trabajo, inicie sesión en el navegador y confirme la fuente de credenciales:
runapi login
runapi auth status
Ejecute una acción de modelo con una entrada JSON en línea o un archivo JSON:
runapi nano-banana text-to-image --input '{"prompt":"a hummingbird drinking espresso","aspect_ratio":"1:1"}'
runapi nano-banana text-to-image --input-file request.json
La mayoría de las acciones del modelo son asíncronas. Esperan un resultado terminal de
forma predeterminada; agregue --async para devolver la Tarea inmediatamente y use wait
más tarde:
TASK_ID=$(runapi suno text-to-music --async --input '{"model":"suno-v5","vocal_mode":"instrumental","style":"minimal piano","title":"Short Piano Theme"}' | jq -r '.id')
runapi wait "$TASK_ID" --service suno --action text-to-music
Convenciones de comandos
Cada comando emite JSON en la salida estándar a menos que una opción solicite explícitamente
un valor escalar, como files create --url-only o listen
--print-secret. Los mensajes de progreso y diagnóstico permanecen en el error
estándar, por lo que JSON puede fluir de forma segura a jq:
runapi nano-banana text-to-image --input-file request.json \
| jq -r '.images[].url' \
| xargs -I{} curl -OL {}
Las acciones del modelo aceptan exactamente una fuente de entrada de solicitud:
--input '<json object>'proporciona JSON en línea.--input-file path/to/request.jsoncarga JSON desde un archivo.--input-file -lee JSON desde la entrada estándar.
Usa runapi <service> <action> --help antes de construir una solicitud.
La CLI instalada lista los campos actuales de la acción, los identificadores de modelo
aceptados y las restricciones de validación.
Estas opciones globales se aplican a todos los comandos:
--api-key
Usa una clave de API para esta invocación. Reemplaza a RUNAPI_API_KEY.
--base-url
Usa un origen de API diferente para esta invocación.
--timeout
Establece el tiempo de espera total del comando y el máximo de espera de una tarea. El valor predeterminado es 15 minutos.
--poll-interval
Establece el intervalo de sondeo de tareas. El valor predeterminado es 3 segundos.
--async
Devuelve el resultado inmediatamente tras enviar una acción de modelo asíncrona.
--quiet
Suprime el progreso en la salida de error estándar sin modificar la salida JSON.
Acciones del modelo
La forma del comando de modelo es runapi <service> <action>. Las acciones síncronas devuelven su respuesta de inmediato. Para las acciones asíncronas, el comportamiento predeterminado es enviar, sondear y devolver el resultado terminal de la tarea; --async devuelve en su lugar la respuesta de creación.
Para los campos de URL de medios de nivel superior, se carga una ruta de archivo local legible
antes de que se ejecute la acción del modelo. Las URL http:// y https:// existentes se
envían sin cambios. Use files create cuando necesite una URL temporal
reutilizable, cuando el origen sea una URL remota o cuando el origen sean datos Base64.
Acciones de audio y música
suno:add-instrumental,add-vocals,blend-lyrics,boost-style,check-voice,convert-audio,cover-audio,create-mashup,extend-music,generate-artwork,generate-lyrics,generate-midi,generate-persona,generate-voice,get-timestamped-lyrics,regenerate-validation-phrase,replace-section,separate-audio-stems,text-to-music,text-to-sound,visualize-music,voice-to-validation-phraseproducer:text-to-musicgemini-omni:create-audio,create-character,text-to-videoopenai-tts:text-to-speechfish-audio:text-to-speechgemini-tts:text-to-speechelevenlabs:isolate-audio,speech-to-text,text-to-dialogue,text-to-sound,text-to-speech
Acciones de imagen
nano-banana:edit-image,text-to-imageimagen-4:remix-image,text-to-imageseedream:decompose-layers,edit-image,text-to-imageflux:remix-image,text-to-imageflux-2:remix-image,text-to-imageflux-kontext:text-to-imageqwen-2:edit-image,text-to-imageqwen-3:edit-image,text-to-imageqwen-image:edit-image,remix-image,text-to-imagerecraft:remove-background,upscale-imagez-image:text-to-imageideogram-v3:edit-image,reframe-image,remix-image,text-to-imagegpt-image:edit-image,text-to-imagegpt-image-2:edit-image,text-to-imagegpt-4o-image:text-to-imagemidjourney:edit-image,get-seed,image-to-prompt,shorten-prompt,text-to-image
Acciones de video y animación
veo-3-1:extend-video,text-to-video,upscale-videoseedance:text-to-videorunway:extend-video,text-to-videorunway-aleph:edit-videokling:avatar,edit-video,extend-video,image-to-video,motion-control,text-to-videoinfinitetalk:audio-to-videoomnihuman:audio-to-video,human-identification,subject-detectionwan:animate,edit-video,image-to-video,speech-to-video,text-to-image,text-to-videoluma:modify-videohailuo:image-to-video,text-to-videovolcengine-lip-sync:lip-sync-videohappyhorse:edit-video,image-to-video,text-to-videogrok-imagine:edit-image,extend,image-to-video,text-to-image,text-to-video,upscale-imagetopaz:upscale-image,upscale-videomidjourney:extend-video,image-to-video
La lista anterior es el inventario completo de acciones en esta versión de la CLI. El contrato exacto de solicitud y respuesta de cada acción está disponible en la Referencia de la API, y la ayuda del comando local es la fuente para los campos específicos de cada versión.
Ciclo de vida de la tarea
Usa get para inspeccionar el estado actual de una Task asíncrona sin
esperar. Usa wait para sondear hasta que se complete, falle o alcance el
tiempo de espera del comando. Ambos comandos requieren el servicio y la acción originales
para que la CLI pueda seleccionar la forma de resultado de Task correcta.
runapi get "$TASK_ID" --service suno --action text-to-music
runapi wait "$TASK_ID" --service suno --action text-to-music --poll-interval 5s
Archivos
runapi files create mantiene el flujo de URL de File Upload temporal. Sube una ruta local, URL remota o fuente Base64 y devuelve una URL que expira después de una hora.
runapi files create ./reference.png --url-only
runapi files create --url https://example.test/reference.png --file-name reference.png
runapi files create --base64 "$(base64 < reference.png)" --file-name reference.png
Las opciones de origen son mutuamente excluyentes. --url-only imprime únicamente la URL; omítelo para recibir la respuesta JSON completa.
Usa el ciclo de vida de archivo persistente cuando necesites un file_id
estable en lugar de una URL:
runapi files create-file ./knowledge.pdf
runapi files list --order desc
runapi files retrieve file_123
runapi files content file_123 --output ./knowledge-copy.pdf
runapi files delete file_123
content requiere --output; pasa - para escribir los bytes exactos del File en la salida estándar. Consulta Files and Uploads para conocer los límites, el aislamiento de cuenta y el ciclo de vida REST.
Cargas
Usa Uploads para enviar una o más Parts antes de componer el File final.
Create declara el recuento final de bytes y los metadatos; repite --part-id en
el orden de composición al completar:
runapi uploads create --bytes 1048576 --filename archive.bin --mime-type application/octet-stream
runapi uploads add-part upload_123 ./archive.part-01
runapi uploads complete upload_123 --part-id part_123
runapi uploads cancel upload_123
Cuenta y precios
Inspeccione el usuario autenticado y la cuenta seleccionada, luego consulte el saldo y los contadores de gasto:
runapi account info
runapi account balance
pricing list lee los Price Schedules actuales. Filtra por servicio, acción o modelo. pricing quote estima la reserva de Task para un servicio y acción requeridos; agrega --model cuando la acción es específica del modelo y proporciona los Pricing Inputs con --params o --params-file.
runapi pricing list --service suno --action text-to-music --model suno-v4
runapi pricing quote --service suno --action text-to-music --model suno-v4 \
--params '{"vocal_mode":"auto_lyrics","prompt":"A chill lo-fi beat"}'
runapi pricing quote --service suno --action text-to-music --params-file pricing-inputs.json
Los comandos de precios no requieren credenciales a menos que la cotización haga referencia a una tarea de origen de propiedad de la cuenta.
Autenticación y configuración
runapi login abre un flujo de autorización en el navegador y guarda la credencial resultante. Para servidores y CI, auth import-token acepta una Clave de API desde la entrada estándar, la verifica de forma predeterminada y la guarda sin exponer el valor en la lista de procesos ni en el historial del shell:
printf '%s' "$RUNAPI_API_KEY" | runapi auth import-token --token -
runapi auth status
runapi logout
auth import-token --skip-verify admite la configuración de imágenes sin conexión. Úsalo solo cuando la verificación no pueda ejecutarse durante la configuración; auth status verifica la credencial activa más adelante.
La precedencia de la Clave de API es --api-key, luego RUNAPI_API_KEY, luego el
archivo de configuración local de la CLI. La precedencia de la URL base es --base-url, luego
RUNAPI_BASE_URL, luego la URL base guardada, luego https://runapi.ai.
El archivo de configuración es ~/.config/runapi/config.json, o
$XDG_CONFIG_HOME/runapi/config.json cuando XDG_CONFIG_HOME está definido.
Oyente de devolución de llamada local
runapi listen recibe devoluciones de llamada de Task para una Clave de API seleccionada y, opcionalmente, reenvía cada devolución de llamada firmada a un endpoint HTTP local. Es necesario iniciar sesión en el navegador antes de usar las operaciones de escucha.
runapi login
runapi api-keys list --json
runapi listen http://localhost:3000/webhooks/runapi --callback-api-key-id token_abc123
La URL posicional y --forward-to son alternativas. El listener escribe cada cuerpo de devolución de llamada firmado en la salida estándar. Una tarea con callback_url continúa entregando a esa URL y también se copia al listener local.
Después de recibir un evento de escucha válido, la CLI lo confirma antes de
intentar la solicitud HTTP local. Cada evento se reenvía localmente una vez:
las respuestas que no son 2xx y los errores de conexión se informan en la terminal,
pero no hacen que el listener reproduzca el evento. Este comportamiento de depuración
local no modifica los reintentos de entrega para la callback_url de una tarea.
Cada cuenta puede ejecutar hasta 100 listeners activos por clave de suscripción de devoluciones de llamada y 1 000 listeners activos en total. Cuando se alcanza un límite, detenga un listener inactivo o espere e inténtelo de nuevo. La respuesta de la API indica si la clave seleccionada, su cuenta o la capacidad general del servicio está llena.
Un listener inactivo busca nuevos eventos aproximadamente cada 15 a 30 segundos. Normalmente los eventos se encuentran en unos 15 segundos y se leen inmediatamente cuando están disponibles. Si se alcanza un límite, detén un listener inactivo o espera e inténtalo de nuevo. El comportamiento de entrega y confirmación existente no cambia.
La selección de clave es, en orden: --callback-api-key-id para un comando,
callback_api_key_id en el proyecto .runapi.toml, luego un
selector interactivo. La configuración del proyecto se guarda en la raíz de Git, o en el
directorio actual fuera de un repositorio de Git, y contiene solo el ID
estable:
callback_api_key_id = "token_abc123"
Imprima el secreto de firma de escucha de una clave seleccionada sin iniciar un oyente, o rótelo tras una exposición:
runapi listen --print-secret --callback-api-key-id token_abc123
runapi listen --rotate-secret --callback-api-key-id token_abc123
La rotación invalida los listeners activos de la clave seleccionada. Actualice cada verificador local con el nuevo secreto generado antes de reiniciar su listener.
Arnés
Instale la habilidad portátil de la CLI de RunAPI en un Harness compatible, inspeccione los destinos admitidos o elimine una habilidad instalada:
runapi agent install-skill --target codex
runapi agent list-targets
runapi agent uninstall-skill --target codex
Los destinos integrados son claude, codex, gemini, openclaw y
hermes. install-skill acepta --version para fijar una versión de skill,
--target-dir para un destino personalizado, --source para un repositorio
de origen, y --force para sobrescribir un directorio de skill existente.
Autocompletado del shell y versión
Genere scripts de completado para Bash, Zsh, Fish o PowerShell. Por ejemplo, cargue el completado de Bash en el shell actual:
source <(runapi completion bash)
runapi completion zsh
runapi completion fish
runapi completion powershell
runapi version
Usa runapi --help para listar los comandos, runapi <command> --help para las
opciones de un comando, y runapi <service> <action> --help para los campos de
una acción de modelo.
Códigos de salida
Los comandos salen con un código distinto de cero que los scripts pueden gestionar:
0
Éxito
2
Error de autenticación o plataforma no compatible
3
Créditos insuficientes o falta una dependencia local requerida
4
Error de validación, recurso no encontrado o error al analizar el manifiesto
5
Tiempo de espera agotado, error de descarga o discrepancia en la suma de verificación
6
Límite de solicitudes superado
7
La tarea falló
Para los campos de solicitud, los valores de estado de Task, las cargas útiles de devolución de llamada, los cuerpos de error y el manejo de límites de velocidad, continúe con la Referencia de la API. Use los SDK cuando el mismo flujo de trabajo pertenezca a una aplicación.