Pular para o conteúdo
Recursos para Desenvolvedores
Recursos para Desenvolvedores

CLI

Instale e use todos os comandos da CLI do RunAPI para ações de modelo, Tasks, Files, Uploads, informações de conta, preços, Callbacks e Harness.

A CLI do RunAPI é um cliente de terminal com foco em JSON para ações de modelo e ferramentas de conta. Ela grava os dados de resultado na saída padrão e o progresso operacional no erro padrão, funcionando igualmente bem em um terminal, em scripts de shell, jobs de CI e no Harness.

Instalar

Instale a versão atual no Linux ou macOS:

SHELL
curl -fsSL https://runapi.ai/cli/install.sh | sh

Instalações via Homebrew e a partir do código-fonte com Go também estão disponíveis:

SHELL
brew install runapi-ai/tap/runapi
go install github.com/runapi-ai/cli/cmd/runapi@latest

No Windows, baixe o arquivo windows-amd64 ou windows-arm64 correspondente da versão mais recente da CLI, extraia o runapi.exe e adicione-o ao PATH.

Fixe o instalador em uma versão ou em um diretório de instalação quando uma implantação exigir um binário reproduzível:

SHELL
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"

O instalador também aceita RUNAPI_VERSION, RUNAPI_INSTALL_DIR, RUNAPI_INSTALL_BASE, RUNAPI_DOWNLOAD_BASE e RUNAPI_SKIP_LIBC_CHECK=1.

Início rápido

Em uma estação de trabalho, faça login no navegador e confirme a origem da credencial:

SHELL
runapi login
runapi auth status

Execute uma ação de modelo com uma entrada JSON inline ou um arquivo JSON:

SHELL
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

A maioria das ações de modelo é assíncrona. Por padrão, elas aguardam um resultado terminal; adicione --async para retornar a Task imediatamente e use wait posteriormente:

SHELL
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

Convenções de comandos

Cada comando emite JSON na saída padrão, a menos que uma opção solicite explicitamente um valor escalar, como files create --url-only ou listen --print-secret. Mensagens de progresso e diagnóstico ficam no erro padrão, para que o JSON possa ser encaminhado com segurança para jq:

SHELL
runapi nano-banana text-to-image --input-file request.json \
  | jq -r '.images[].url' \
  | xargs -I{} curl -OL {}

As ações de modelo aceitam exatamente uma fonte de entrada de requisição:

  • --input '<json object>' fornece JSON inline.
  • --input-file path/to/request.json carrega JSON a partir de um arquivo.
  • --input-file - lê JSON da entrada padrão.

Use runapi <service> <action> --help antes de construir uma requisição. A CLI instalada lista os campos atuais da ação, os identificadores de modelo aceitos e as restrições de validação.

Estas opções globais se aplicam a todos os comandos:

Opção Finalidade --api-key Usa uma Chave de API para esta invocação. Substitui RUNAPI_API_KEY. --base-url Usa uma origem de API diferente para esta invocação. --timeout Define o tempo limite geral do comando e o tempo máximo de espera de Tarefa. O padrão é 15 minutos. --poll-interval Define o intervalo de polling de Tarefa. O padrão é 3 segundos. --async Retorna imediatamente após enviar uma ação de modelo assíncrona. --quiet Suprime o progresso na saída de erro padrão sem alterar a saída JSON.

Ações de modelo

A forma do comando de modelo é runapi <service> <action>. Ações síncronas retornam a resposta imediatamente. Para ações assíncronas, o comportamento padrão é enviar, fazer polling e retornar o resultado terminal da Tarefa; --async retorna a resposta de criação em vez disso.

Para campos de URL de mídia de nível superior, um caminho de arquivo local legível é enviado por upload antes que a ação do modelo seja executada. URLs http:// e https:// existentes são enviadas sem alteração. Use files create quando precisar de uma URL temporária reutilizável, quando a origem for uma URL remota ou quando a origem for dados em Base64.

Ações de áudio e 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-phrase
  • producer: text-to-music
  • gemini-omni: create-audio, create-character, text-to-video
  • openai-tts: text-to-speech
  • fish-audio: text-to-speech
  • gemini-tts: text-to-speech
  • elevenlabs: isolate-audio, speech-to-text, text-to-dialogue, text-to-sound, text-to-speech

Ações de imagem

  • nano-banana: edit-image, text-to-image
  • imagen-4: remix-image, text-to-image
  • seedream: decompose-layers, edit-image, text-to-image
  • flux: remix-image, text-to-image
  • flux-2: remix-image, text-to-image
  • flux-kontext: text-to-image
  • qwen-2: edit-image, text-to-image
  • qwen-3: edit-image, text-to-image
  • qwen-image: edit-image, remix-image, text-to-image
  • recraft: remove-background, upscale-image
  • z-image: text-to-image
  • ideogram-v3: edit-image, reframe-image, remix-image, text-to-image
  • gpt-image: edit-image, text-to-image
  • gpt-image-2: edit-image, text-to-image
  • gpt-4o-image: text-to-image
  • midjourney: edit-image, get-seed, image-to-prompt, shorten-prompt, text-to-image

Ações de vídeo e animação

  • veo-3-1: extend-video, text-to-video, upscale-video
  • seedance: text-to-video
  • runway: extend-video, text-to-video
  • runway-aleph: edit-video
  • kling: avatar, edit-video, extend-video, image-to-video, motion-control, text-to-video
  • infinitetalk: audio-to-video
  • omnihuman: audio-to-video, human-identification, subject-detection
  • wan: animate, edit-video, image-to-video, speech-to-video, text-to-image, text-to-video
  • luma: modify-video
  • hailuo: image-to-video, text-to-video
  • volcengine-lip-sync: lip-sync-video
  • happyhorse: edit-video, image-to-video, text-to-video
  • grok-imagine: edit-image, extend, image-to-video, text-to-image, text-to-video, upscale-image
  • topaz: upscale-image, upscale-video
  • midjourney: extend-video, image-to-video

A lista acima é o inventário completo de ações nesta versão da CLI. O contrato exato de requisição e resposta de cada ação está disponível na Referência da API, e a ajuda do comando local é a fonte para os campos específicos da versão.

Ciclo de vida da tarefa

Use get para inspecionar o estado atual de uma Task assíncrona sem aguardar. Use wait para fazer polling até que ela seja concluída, falhe ou atinja o tempo limite do comando. Ambos os comandos exigem o serviço e a ação originais para que a CLI possa selecionar o formato correto do resultado da Task.

SHELL
runapi get "$TASK_ID" --service suno --action text-to-music
runapi wait "$TASK_ID" --service suno --action text-to-music --poll-interval 5s

Arquivos

runapi files create mantém o fluxo de URL de Upload de File temporário. Ele faz upload de um caminho local, URL remota ou fonte Base64 e retorna uma URL que expira após uma hora.

SHELL
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

As opções de fonte são mutuamente exclusivas. --url-only imprime somente a URL; omita-a para receber a resposta JSON completa.

Use o ciclo de vida de Arquivo persistente quando precisar de um file_id estável em vez de uma URL:

SHELL
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 requer --output; passe - para gravar os bytes exatos do File na saída padrão. Consulte Files and Uploads para limites, isolamento de conta e o ciclo de vida REST.

Uploads

Use Uploads para enviar uma ou mais Parts antes de compor o File final. Create declara a contagem final de bytes e os metadados; repita --part-id na ordem de composição ao completar:

SHELL
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

Conta e preços

Inspecione o usuário autenticado e a Conta selecionada, depois consulte o saldo e os contadores de gastos:

SHELL
runapi account info
runapi account balance

pricing list lê os Agendamentos de Preço atuais. Filtre por serviço, ação ou modelo. pricing quote estima a reserva de Task para um serviço e ação necessários; adicione --model quando a ação for específica de modelo e forneça Pricing Inputs com --params ou --params-file.

SHELL
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

Comandos de precificação não exigem credenciais, a menos que a cotação se refira a uma Tarefa de origem pertencente à Conta.

Autenticação e configuração

runapi login abre um fluxo de autorização pelo navegador e salva a credencial resultante. Para servidores e CI, auth import-token aceita uma Chave de API da entrada padrão, verifica-a por padrão e a salva sem expor o valor na lista de processos ou no histórico do shell:

SHELL
printf '%s' "$RUNAPI_API_KEY" | runapi auth import-token --token -
runapi auth status
runapi logout

auth import-token --skip-verify oferece suporte à configuração de imagem offline. Use-o somente quando a verificação não puder ser executada durante a configuração; auth status verifica a credencial ativa posteriormente.

A precedência da Chave de API é --api-key, depois RUNAPI_API_KEY, depois o arquivo de configuração local da CLI. A precedência da Base URL é --base-url, depois RUNAPI_BASE_URL, depois a URL base salva, depois https://runapi.ai. O arquivo de configuração é ~/.config/runapi/config.json, ou $XDG_CONFIG_HOME/runapi/config.json quando XDG_CONFIG_HOME estiver definido.

Listener de callback local

runapi listen recebe callbacks de Task para uma Chave de API selecionada e opcionalmente encaminha cada callback assinado para um endpoint HTTP local. O login pelo navegador é obrigatório antes de usar operações de listener.

SHELL
runapi login
runapi api-keys list --json
runapi listen http://localhost:3000/webhooks/runapi --callback-api-key-id token_abc123

A URL posicional e --forward-to são alternativas. O listener grava cada corpo de callback assinado na saída padrão. Uma Tarefa com callback_url continua a entregar para aquela URL e também é copiada para o listener local.

Após receber um evento de listener válido, a CLI o reconhece antes de tentar a requisição HTTP local. Cada evento é encaminhado localmente uma vez: respostas não-2xx e erros de conexão são reportados no terminal, mas não fazem o listener reenviar o evento. Esse comportamento de depuração local não altera as tentativas de entrega para o callback_url de uma Tarefa.

Cada Conta pode ter até 100 listeners ativos por Chave de Assinatura de Callback e 1.000 listeners ativos no total. Quando um limite for atingido, pare um listener ocioso ou aguarde e tente novamente. A resposta da API identifica se a chave selecionada, sua Conta ou a capacidade geral do serviço está esgotada.

Um listener ocioso verifica novos eventos aproximadamente a cada 15 a 30 segundos. Os eventos são normalmente encontrados em cerca de 15 segundos e são lidos imediatamente quando disponíveis. Se um limite for atingido, interrompa um listener ocioso ou aguarde e tente novamente. O comportamento existente de entrega e reconhecimento permanece inalterado.

A seleção da chave segue esta ordem: --callback-api-key-id para um único comando, callback_api_key_id no .runapi.toml do projeto e, em seguida, um seletor interativo. A configuração do projeto é salva na raiz do Git, ou no diretório atual fora de um repositório Git, e contém apenas o ID estável:

TOML
callback_api_key_id = "token_abc123"

Imprima o Segredo de Assinatura de Escuta de uma chave selecionada sem iniciar um listener, ou substitua-o após exposição:

SHELL
runapi listen --print-secret --callback-api-key-id token_abc123
runapi listen --rotate-secret --callback-api-key-id token_abc123

A rotação invalida os listeners ativos da chave selecionada. Atualize cada verificador local com o novo segredo gerado antes de reiniciar seu listener.

Harness

Instale a skill portátil da CLI do RunAPI em um Harness compatível, inspecione os alvos suportados ou remova uma skill instalada:

SHELL
runapi agent install-skill --target codex
runapi agent list-targets
runapi agent uninstall-skill --target codex

Os alvos integrados são claude, codex, gemini, openclaw e hermes. O comando install-skill aceita --version para fixar uma versão de skill, --target-dir para um destino personalizado, --source para um repositório de origem, e --force para sobrescrever um diretório de skill existente.

Completação de shell e versão

Gere scripts de conclusão para Bash, Zsh, Fish ou PowerShell. Por exemplo, carregue a conclusão do Bash no shell atual:

SHELL
source <(runapi completion bash)
runapi completion zsh
runapi completion fish
runapi completion powershell
runapi version

Use runapi --help para listar os comandos, runapi <command> --help para as opções de um comando e runapi <service> <action> --help para os campos de uma ação de modelo.

Códigos de saída

Os comandos encerram com um código diferente de zero que scripts podem tratar:

Código Significado 0 Sucesso 2 Falha de autenticação ou plataforma não suportada 3 Créditos insuficientes ou uma dependência local necessária está ausente 4 Erro de validação, não encontrado ou falha na análise do manifesto 5 Tempo limite excedido, falha no download ou incompatibilidade de checksum 6 Limite de taxa atingido 7 Tarefa falhou

Para campos de requisição, valores de status de Task, payloads de Callbacks, corpos de erro e tratamento de limite de taxa, continue com a Referência da API. Use SDKs quando o mesmo fluxo de trabalho pertencer a uma aplicação.