spicyapiDocumentação
Agentes e CLI
Conteúdo principal

Ferramenta de linha de comando (CLI)

Use o comando spicyapi para explorar modelos, conferir preços, gerar imagens e vídeos e baixar os resultados pelo terminal, sem escrever código.

O que é a CLI

spicyapi é um pequeno programa que você roda num terminal, a janela em que você digita comandos em vez de clicar em botões. Cada comando faz uma coisa só: listar os modelos que a sua conta pode usar, dizer quanto uma geração vai custar, iniciar a geração de uma imagem ou de um vídeo, esperar que ela termine e entregar um link para baixar o resultado.

Você não escreve código nenhum. Digita um comando, aperta Enter e lê a resposta.

Ela é uma boa escolha quando você quer:

  • testar modelos e comparar preços antes que alguém escreva uma integração;
  • gerar imagens ou vídeos a partir do seu próprio computador e salvar os arquivos;
  • repetir o mesmo tipo de geração sem precisar clicar numa página toda vez;
  • conferir as configurações exatas de um modelo antes de construir algo em cima dele.

A CLI cobre geração de imagem e de vídeo. Modelos de texto e de conversa são chamados pelos endpoints compatíveis com chat descritos em Texto e streaming.

Existem outras três ferramentas oficiais. Escolha a CLI se você quer digitar os comandos por conta própria:

FerramentaEscolha quando
SDKVocê está escrevendo um programa em JavaScript ou TypeScript que chama a SpicyAPI
Servidor MCPVocê quer que um assistente de programação com IA faça esses mesmos passos por você
Agent SkillVocê quer ensinar a um agente de IA o jeito seguro de usar a SpicyAPI

Escrevendo em outra linguagem? Também existem SDKs oficiais para Python, Go, PHP e Java.

Nada nesta página gasta dinheiro por acidente

Só dois comandos podem custar dinheiro: tasks create e tasks retry. Os dois param e perguntam a você antes de qualquer cobrança. Todos os outros são gratuitos e podem ser rodados quantas vezes você quiser.

O que você pode fazer

Eu quero…ComandoCusta dinheiro?Precisa de chave de API?
Conferir se a SpicyAPI está acessívelspicyapi statusNãoNão
Pesquisar nesta documentaçãospicyapi docs search <words>NãoNão
Ver quais modelos posso usar, e os preços delesspicyapi models listNãoSim
Ver quais configurações um modelo aceitaspicyapi models get <model>NãoSim
Conferir o meu saldospicyapi balanceNãoSim
Ver quanto uma chave gastouspicyapi usageNãoSim
Saber o preço exato de uma geração sem iniciá-laspicyapi tasks quoteNãoSim
Iniciar uma geração de imagem ou vídeospicyapi tasks createSim, depois de perguntar a vocêSim
Esperar uma geração terminarspicyapi tasks wait <task-id>NãoSim
Ver uma geração e os links do resultado delaspicyapi tasks get <task-id>NãoSim
Listar as minhas gerações recentesspicyapi tasks listNãoSim
Rodar de novo uma geração que falhouspicyapi tasks retry <task-id>Sim, depois de perguntar a vocêSim
Apagar de forma permanente os arquivos e o prompt de uma geraçãospicyapi tasks purge <task-id>Não, e nada é reembolsadoSim
Enviar uma imagem, um vídeo ou um áudio para usar como entradaspicyapi files upload <path>NãoSim
Obter um novo link de download para um resultadospicyapi files download-url <task-id>NãoSim
Conferir se um callback veio mesmo da SpicyAPIspicyapi webhooks verifyNãoNão, ele usa a sua chave de assinatura de webhook

Nos comandos acima, uma palavra entre os sinais de menor e maior, como <task-id>, quer dizer "coloque aqui o seu próprio valor", sem os sinais.

Antes de começar

Você precisa de quatro coisas: um terminal, o Node.js, uma chave de API e um jeito de rodar a CLI. Na primeira vez, isso leva uns dez minutos.

Abra um terminal

Um terminal é uma janela de texto para rodar comandos. Tudo nesta página é digitado ou colado ali e executado com Enter.

Aperte Cmd + Espaço, digite Terminal e aperte Enter. Abre uma janela com uma linha que termina em % ou $: é ali que você digita. Cole com Cmd + V.

Instale o Node.js 22.13 ou mais recente

A CLI roda sobre o Node.js, um programa gratuito. Confira se você já o tem:

node -v

Se aparecer v22.13.0 ou um número maior, como v22.14.0 ou v24.4.1, está tudo pronto. Se aparecer um número menor, ou uma mensagem como command not found ou is not recognized:

  1. Acesse nodejs.org, abra a página de download e escolha a versão LTS para o seu sistema.
  2. Rode o instalador e aceite as opções padrão.
  3. Feche o terminal e abra um novo, depois rode node -v de novo.

O Node.js já vem com o npm e o npx, os dois auxiliares usados no último passo.

Crie uma chave de API

A chave de API é o que permite à SpicyAPI saber que a requisição vem da sua conta.

  1. Crie uma conta em spicyapi.ai/register. As contas podem ser liberadas em lotes; se o cadastro ainda não estiver aberto para você, entre na lista de espera.
  2. Adicione saldo em Faturamento, no console. As gerações são pagas com o seu saldo, em dólares americanos.
  3. Abra Chaves de API e clique em Criar chave. Dê a ela um nome que você vá reconhecer depois, como my laptop. Só o nome é obrigatório.
  4. Copie a chave na hora. Ela começa com sk-spicy- e aparece uma única vez. Você também pode usar Salvar como arquivo.

Chaves novas não têm limite de gasto a menos que você defina um. Um limite diário evita que um erro ou uma chave vazada gerem uma conta alta, e você pode mudá-lo depois, na mesma página.

Trate a chave como uma senha

Qualquer pessoa que tenha a sua chave pode gastar o seu saldo. Não a envie por chat nem por e-mail, não a mostre em capturas de tela nem em chamados de suporte e nunca a salve numa pasta de projeto que vá para o Git ou para o GitHub. Se ela vazar, revogue-a na página Chaves de API e crie outra.

Guarde a chave em SPICY_API_KEY

A CLI não tem comando de login e nunca recebe a chave como opção de comando. Ela lê uma variável de ambiente chamada SPICY_API_KEY: um valor com nome que o seu terminal entrega aos programas que ele roda.

Só para a janela atual (esquecida quando você fecha a janela):

export SPICY_API_KEY="sk-spicy-paste-your-key-here"

De forma permanente: adicione essa mesma linha export ao final do arquivo de inicialização do seu shell, que roda toda vez que você abre um terminal. No macOS, o arquivo é ~/.zshrc; na maioria dos sistemas Linux, é ~/.bashrc.

nano ~/.zshrc

Cole a linha export no final, aperte Ctrl + O e depois Enter para salvar, e Ctrl + X para sair. No Linux, use nano ~/.bashrc. Abra uma nova janela de terminal para que a mudança valha.

Confira se ela está definida, sem imprimir a chave inteira:

echo "${SPICY_API_KEY:0:9}"

Deve aparecer sk-spicy-.

Onde a chave pode e não pode ficar

O arquivo de inicialização do seu shell e as configurações da sua conta do Windows ficam neste computador, o que não é problema para uso pessoal. Nunca coloque a chave num arquivo dentro de um projeto, nunca faça commit dela e nunca a cole num documento compartilhado. Os terminais também guardam os comandos que você digita, então, num computador compartilhado, prefira o arquivo de inicialização ou a janela de configurações do Windows a digitar a chave num comando.

Escolha como rodar a CLI

Há dois jeitos, e os comandos são os mesmos.

O npx baixa a CLI quando é preciso e a executa:

npx @spicyapi/cli status

Na primeira vez, o npm pergunta Need to install the following packages: @spicyapi/cli@… Ok to proceed? (y). Aperte y e Enter.

Com este método, escreva npx @spicyapi/cli onde esta página escreve spicyapi. Por exemplo, spicyapi models list vira npx @spicyapi/cli models list.

Seu primeiro resultado

Este passo a passo gera uma imagem e faz o download dela. Cada passo mostra o comando, mais ou menos o que você vai ver e o que acabou de acontecer. Os seus números, IDs e horários vão ser diferentes.

Troque MODEL_ID_FROM_CATALOG por um ID de modelo real

MODEL_ID_FROM_CATALOG é um marcador, não um modelo. O passo 3 mostra como escolher um ID real no catálogo atual (live catalog): spicyapi models list, a mesma lista de GET /api/v1/models. Cole o seu ID em todos os lugares em que esta página mostra o marcador. Enviar o próprio marcador só devolve um erro de "não encontrado".

Confira a conexão

spicyapi status
SpicyAPI is reachable — api.spicyapi.ai answered in 523 ms.

O que aconteceu: a CLI perguntou à SpicyAPI se ela está no ar. Isso não precisa de chave e não custa nada. Se aparecer "could not be reached", confira a sua conexão com a internet ou o seu proxy; veja Solução de problemas.

Confira o seu saldo

spicyapi balance
available: 12.34
held: 0.06
total: 12.40

O que aconteceu: este é o primeiro comando que usa a sua chave. Os valores estão em dólares americanos. available é o que você pode gastar agora, held é o que está reservado para gerações que ainda estão rodando e total é a soma dos dois. Também pode aparecer uma linha funding, que divide o saldo entre fundos pré-pagos e verbas promocionais.

Se aparecer Error: SPICY_API_KEY is required for authenticated API operations, a chave não está definida nesta janela de terminal. A linha Next: logo abaixo mostra como defini-la; veja também Antes de começar.

Escolha um modelo

spicyapi models list --modality image --json
{
  "total": 1,
  "items": [
    {
      "model": "MODEL_ID_FROM_CATALOG",
      "displayName": "Example image model",
      "modality": "image",
      "tasks": ["text-to-image"],
      "enabled": true,
      "available": true,
      "pricing": [
        { "variant": "", "unit": "per_image", "price": "0.03", "currency": "USD" }
      ]
    }
  ]
}

Este exemplo está resumido: a lista real tem mais modelos e mais campos.

O que aconteceu: a CLI buscou os modelos que a sua conta pode chamar hoje, pelos seus preços. Escolha um que tenha enabled e available iguais a true e copie o valor de model, por exemplo selecionando-o com o mouse. Esse valor é o ID do modelo. Os IDs têm o formato maker/model/task.

  • price está em dólares americanos por unit: per_image, per_second (por segundo de vídeo), per_request ou per_1k_tokens.
  • Vários itens em pricing significam que o preço depende das suas configurações, como a resolução.
  • Para achar um modelo pelo nome, acrescente --search e parte do nome dele.

--json mostra a lista como JSON indentado e fácil de ler. Sem ele, a lista inteira sai espremida numa única linha comprida.

Veja quais configurações esse modelo aceita

spicyapi models get MODEL_ID_FROM_CATALOG --json
{
  "model": "MODEL_ID_FROM_CATALOG",
  "enabled": true,
  "available": true,
  "inputSchema": {
    "type": "object",
    "required": ["prompt"],
    "properties": {
      "prompt": { "type": "string" },
      "aspect_ratio": { "type": "string", "enum": ["1:1", "16:9", "9:16"] }
    },
    "additionalProperties": false
  }
}

O que aconteceu: inputSchema é a lista de configurações do modelo, que o restante desta página chama de entrada (input).

  • required lista as configurações que você precisa enviar. Aqui, só prompt.
  • properties lista todas as configurações que o modelo aceita, e nada além delas é permitido: basta um nome desconhecido ou digitado errado para a requisição inteira ser recusada.
  • enum lista os únicos valores permitidos para aquela configuração.

Cada modelo tem as suas próprias configurações, então leia sempre as do modelo que você escolheu. Para ver entradas prontas que o servidor já conferiu, rode spicyapi models list --search <name> --include-examples --json e olhe examples.

Escreva a sua entrada num arquivo

Coloque a entrada num arquivo chamado input.json, na pasta em que o seu terminal está. Um arquivo evita problemas com aspas, principalmente no Windows.

Cole as três linhas de uma vez:

cat > input.json <<'EOF'
{"prompt": "A paper lantern glowing on a rainy street at night, cinematic light"}
EOF

O que aconteceu: você descreveu o que gerar, usando os nomes de configuração do passo anterior. As aspas precisam ser aspas retas comuns ("), não aspas curvas.

Confira o preço

spicyapi tasks quote --model MODEL_ID_FROM_CATALOG --input-file input.json
quoteId: eyJ2IjoxLCJtIjoi…
model: MODEL_ID_FROM_CATALOG
estimatedCost: 0.03
maxCharge: 0.03
currency: USD
quantity: 1
unit: per_image
expiresAt: 2026-09-17T08:05:00Z

O que aconteceu: a SpicyAPI calculou o preço desta requisição exata. Nada foi iniciado e nada foi cobrado. estimatedCost é quanto se espera que custe, e maxCharge é o máximo que pode custar. Este passo é opcional: o próximo comando busca o preço de novo e o mostra a você antes de gastar qualquer coisa.

Inicie a geração e espere por ela

spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --wait

Primeiro, a CLI mostra o preço e pede a sua confirmação:

Estimated charge: USD 0.03; maximum charge: USD 0.03. Quote expires: 2026-09-17T08:05:00Z.
Idempotency-Key: 4f6755a5-0d72-4420-9f6b-9faf0e2b0241
Create a billable task with model MODEL_ID_FROM_CATALOG? Estimated charge: USD 0.03; maximum charge: USD 0.03. Quote expires: 2026-09-17T08:05:00Z. Idempotency-Key: 4f6755a5-0d72-4420-9f6b-9faf0e2b0241. Continue? [y/N]

Digite y e aperte Enter. Qualquer outra resposta cancela, e nada é cobrado. Responda em até cinco minutos, antes que a cotação expire.

Assim que a SpicyAPI aceita o trabalho, a CLI mostra o ID da tarefa:

Accepted: job_01k3m8x9q2z4v7n5p6r8s0t1w3
If waiting is interrupted: spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3

Imagens costumam levar segundos, e vídeos, minutos. Quando termina, o resultado aparece:

idempotencyKey: 4f6755a5-0d72-4420-9f6b-9faf0e2b0241
accepted: {"taskId":"job_01k3m8x9q2z4v7n5p6r8s0t1w3","state":"queued","estimatedCost":"0.03","deadlineAt":"2026-09-17T08:30:00Z"}
task: {"taskId":"job_01k3m8x9q2z4v7n5p6r8s0t1w3","model":"MODEL_ID_FROM_CATALOG","state":"succeeded","output":{"assets":[{"key":"tasks/…/result.png","url":"https://…","expiresAt":"2026-09-17T08:20:00Z","mime":"image/png","width":1024,"height":1024}]},"cost":"0.03","settled":true,…}

O que aconteceu: depois do seu y, a SpicyAPI aceitou a geração, que a partir daí se chama tarefa, e reservou o valor estimado do seu saldo. Em seguida, a CLI consultou a tarefa a cada poucos segundos até ela terminar. Na última linha, procure "state":"succeeded" e a "url" dentro de output. cost é a cobrança final quando settled é true. Acrescente --json ao comando se preferir o resultado distribuído em várias linhas fáceis de ler.

Fechar a janela não cancela a tarefa

Depois de aceita, uma tarefa sempre roda até o fim e é cobrada normalmente. Apertar Ctrl + C ou fechar o terminal só interrompe a espera. Guarde o ID da tarefa e retome com spicyapi tasks wait <task-id>; veja Retomar uma tarefa depois que a espera foi interrompida.

Baixe o resultado

A url é um link de download direto que funciona por cerca de 20 minutos e não exige chave. Cole-a num navegador e salve o arquivo, ou baixe pelo terminal (mantenha as aspas, porque o link contém caracteres &):

curl -L -o result.png "PASTE_THE_URL_HERE"

Use a extensão de arquivo que corresponde ao mime: .png para image/png, .jpg para image/jpeg, .mp4 para video/mp4.

Se o link tiver expirado, peça um novo com spicyapi files download-url <task-id> ou rode spicyapi tasks get <task-id>, que devolve links novos.

O que aconteceu: você copiou o resultado para o seu próprio computador. Faça isso logo: a SpicyAPI guarda os arquivos gerados por no máximo cerca de 14 dias (menos, se a sua conta estiver configurada com um prazo menor) e depois os apaga para sempre. Veja Retenção e destruição.

Como ler a saída

  • A saída normal mostra um name: value por linha. Valores com várias partes, como output ou retention, são impressos como JSON numa única linha.
  • --json imprime a resposta completa como JSON indentado. Funciona com todos os comandos, antes ou depois do nome do comando: spicyapi --json balance e spicyapi balance --json dão no mesmo.
  • Os resultados vão para a saída normal da tela; as mensagens vão para a saída de erros. Os preços, a chave de idempotência, as linhas Accepted: e os erros são mensagens. Por isso, spicyapi --json tasks get <task-id> > task.json salva só o resultado em task.json, enquanto as mensagens continuam aparecendo na tela.
  • Os erros têm a forma Error: <what went wrong> (request req_…), normalmente seguidos de uma linha Next: que diz o que fazer. Com --json, um erro é um objeto JSON de uma linha com error, type, status, code e requestId, sem linha Next:. Quando nenhuma chave está definida, type é MissingApiKeyError. Informe o valor req_… se falar com o suporte.
  • Dinheiro é um valor em dólares americanos escrito como texto simples, sem o sinal $, como 0.03.
  • Horários estão em UTC. O Z no final de 2026-09-17T08:05:00Z significa UTC.
  • O código de saída é 0 quando um comando dá certo e diferente de 0 quando ele falha, o que os scripts podem conferir.

Referência de comandos

Todo comando também tem ajuda embutida: acrescente --help, por exemplo spicyapi tasks create --help.

Opções globais e variáveis de ambiente

Estas opções funcionam com todos os comandos.

OpçãoO que fazPadrãoObrigatório
--jsonImprime o resultado completo como JSONDesligadaNão
--timeout-ms <milliseconds>Quanto tempo esperar por uma resposta da SpicyAPI antes de desistir, de 1 a 12000030000 (30 segundos)Não
--max-retries <count>Quantas vezes tentar de novo automaticamente depois de um erro de rede, de um 429 ou de um erro do servidor, nas requisições que podem ser repetidas com segurança, de 0 a 52Não
--api-base-url <url>Envia as requisições da API para outro endereço. Normalmente você nunca precisa distohttps://api.spicyapi.ai/api/v1Não
--service-base-url <url>O endereço que o status confere. Normalmente você nunca precisa distohttps://api.spicyapi.aiNão
-V, --versionMostra a versão da CLI—Não
-h, --helpMostra a ajuda do comando—Não
Variável de ambientePara que serve
SPICY_API_KEYA sua chave de API. Necessária para todos os comandos, exceto status, docs search e webhooks verify
SPICY_WEBHOOK_SECRETA sua chave de assinatura de webhook, lida por webhooks verify
SPICY_API_BASE_URL, SPICY_SERVICE_BASE_URLO mesmo que as duas opções de endereço acima. Os endereços precisam usar https://

status

O que faz: confere se a SpicyAPI está no ar e acessível a partir do seu computador.

spicyapi status

Sem opções. Não precisa de chave. Gratuito.

Saída: uma frase. SpicyAPI is reachable — … answered in … ms. quer dizer que está tudo certo. could not be reached quer dizer que o seu computador não recebeu resposta: confira a sua rede ou o seu proxy. is not healthy ou reports it is not ready indica um problema do nosso lado; os incidentes em andamento aparecem em status.spicyapi.ai.

Com --json, você vê as verificações brutas. operational: true é a resposta que importa; um item readiness com status 404 é normal no endereço público.

O que faz: encontra a página da documentação sobre um assunto. Ele pesquisa num pequeno índice embutido na CLI, então funciona sem chave e sem chamar a SpicyAPI. Cada resultado aponta para a página neste site de documentação, docs.spicyapi.ai.

spicyapi docs search [words] [--limit <count>]
Argumento ou opçãoO que fazPadrãoObrigatório
wordsAs palavras a procurar. Deixe de fora para listar as páginasVazioNão
--limit <count>Número máximo de resultados, de 1 a 2510Não
spicyapi docs search retention
slug: retention
title: Retention and destruction
summary: What the platform caps are, how far down you can dial them, how to destroy a task's content, and what we cannot promise.
keywords: ["privacy","delete","storage","retention","per-request retention","purge","destroy"]
url: https://docs.spicyapi.ai/docs/retention

Quando há vários resultados, eles são impressos um depois do outro, e cada um começa com slug:. Se nada corresponder, ele avisa e mesmo assim termina com código de saída 0:

No documentation matched "refnd". Try fewer or different words, or run `spicyapi docs search` without words to browse pages.

Com --json, quando nada corresponde, aparece uma lista vazia, []. Gratuito.

models list

O que faz: lista os modelos que a sua conta pode chamar hoje, com os preços que a sua conta paga.

spicyapi models list [options]
OpçãoO que fazPadrãoObrigatório
--modality <type>Só modelos image, video ou text. A opção também aceita audio, mas hoje não há nenhum modelo de áudioTodasNão
--task <task>Só um tipo de trabalho, como text-to-image, edit, image-to-video, text-to-video ou reference-to-videoTodosNão
--provider <name>Só modelos de um fabricante, a empresa ou o laboratório que criou o modelo. Precisa corresponder exatamente ao valor de providerTodosNão
--search <text>Só modelos cujo ID ou nome de exibição contenha este texto, sem diferenciar maiúsculas de minúsculasNenhumNão
--include-schemaAcrescenta as configurações completas de cada modelo (inputSchema). Deixa a saída bem maiorDesligadaNão
--include-examplesAcrescenta entradas de exemplo prontas que o servidor já conferiu (examples)DesligadaNão
spicyapi models list --modality video --task image-to-video --json

Saída: total e items. Use --json, porque sem ele todos os itens saem numa linha só. Os campos mais úteis de cada item:

CampoSignificado
modelO ID do modelo para usar nos outros comandos
displayName, provider, modality, tasksNome, fabricante do modelo, tipo de saída e tipo de trabalho
enabled, availableUse modelos em que os dois sejam true
pricingUm item por nível de preço: variant (por exemplo, uma resolução), unit, price em USD, mais regularPrice e offerLabel quando há desconto
taskTimeoutSecondsQuanto tempo uma geração pode rodar antes de terminar como expired
maxOutputDurationSecondsA duração máxima de vídeo que este modelo permite, quando ele tem uma

Gratuito. A lista de modelos conta para o limite de requisições da sua conta, então não é preciso rodá-la antes de cada geração.

models get

O que faz: mostra um modelo por completo, incluindo as configurações que ele aceita.

spicyapi models get <model>
ArgumentoO que fazPadrãoObrigatório
modelO ID exato do modelo. As barras dentro dele podem ficar como estão—Sim
spicyapi models get MODEL_ID_FROM_CATALOG --json

Saída: os mesmos campos de models list, mais inputSchema. Em inputSchema, leia required (as configurações que você precisa enviar), properties (todas as configurações permitidas e o tipo de cada uma), enum (os únicos valores permitidos), minimum e maximum (limites numéricos) e default (usado quando você deixa a configuração de fora). Os itens chamados x-ui são dicas para montar formulários; você pode ignorá-los. Gratuito.

balance

O que faz: mostra quanto dinheiro está disponível na sua conta.

spicyapi balance

Sem opções. Gratuito.

Saída: available (o que você pode gastar agora), held (reservado para tarefas que ainda estão rodando) e total, todos em dólares americanos. Também pode incluir funding, que divide o saldo entre fundos pré-pagos e verbas promocionais, inclusive quando as verbas expiram e quais modelos elas pagam. Não é preciso conferir o saldo antes de cada geração: o tasks create confere por você.

usage

O que faz: mostra quantas gerações a chave de API atual rodou e quanto elas custaram, agrupadas por dia e por modelo.

spicyapi usage [--from <date>] [--to <date>]
OpçãoO que fazPadrãoObrigatório
--from <date>O primeiro dia a incluir, no formato YYYY-MM-DD, em UTCOs últimos sete dias, incluindo hojeNão
--to <date>O dia seguinte ao último dia a incluir, no formato YYYY-MM-DD, em UTC. O intervalo pode ter no máximo 92 diasOs últimos sete dias, incluindo hojeNão
spicyapi usage --from 2026-09-01 --to 2026-10-01

Isso cobre setembro inteiro: --to é o primeiro dia que não entra. Deixe as duas opções de fora para ver os últimos sete dias, incluindo hoje.

Saída: from, to, currency, totalCalls, totalSpend, depois days (por dia: calls, succeeded, failed, spend) e models (os mesmos números por modelo). totalSpend só conta cobranças finais. days e models descrevem as mesmas tarefas de dois jeitos, então não some um com o outro. Para a conta inteira, e não só para uma chave, use a página Consumo do console.

Gratuito. Ele tem um limite de 30 chamadas por minuto, então use-o para conferir totais, não dentro de um loop.

tasks quote

O que faz: diz exatamente quanto uma geração custaria, sem iniciá-la e sem reservar dinheiro nenhum.

spicyapi tasks quote --model <model> --input-file <path>
OpçãoO que fazPadrãoObrigatório
--model <model>O ID exato do modelo—Sim
--input-file <path>Lê a entrada de um arquivo JSON. Use - para ler o que chegar ao comando por pipe—Esta ou --input-json
--input-json <json>Passa a entrada diretamente como texto JSON. Com --input-file, lidar com as aspas é mais fácil—Esta ou --input-file
--callback-url <url>O endereço de callback que você pretende usar, já que ele faz parte da requisição cotadaNenhumNão

Saída: quoteId, model, estimatedCost, maxCharge, currency, quantity (por exemplo, o número de segundos cobrados), unit e expiresAt. Uma cotação vale por cinco minutos.

Gratuito e sem confirmação. Use-o para comparar modelos ou configurações. Você não precisa rodá-lo antes do tasks create, que pede a própria cotação.

tasks create

O que faz: inicia uma geração de imagem ou vídeo. Isto custa dinheiro. A CLI sempre mostra o preço e pergunta antes.

spicyapi tasks create --model <model> --input-file <path> [options]
OpçãoO que fazPadrãoObrigatório
--model <model>O ID exato do modelo—Sim
--input-file <path>Lê a entrada de um arquivo JSON. - lê o que chegar ao comando por pipe, o que também exige --yes—Esta ou --input-json
--input-json <json>Passa a entrada diretamente como texto JSON—Esta ou --input-file
--waitFica esperando até a tarefa terminar e depois mostra o resultadoDesligada: mostra o ID da tarefa e retornaNão
--yesPula a pergunta de confirmação. Use só quando já souber o preço, normalmente em scriptsDesligada: perguntaNão
--idempotency-key <key>Um nome para "esta geração específica". Rodar o comando de novo com a mesma chave em até 24 horas devolve a mesma tarefa em vez de criar outra. Até 128 caracteresUma chave aleatória nova a cada execuçãoNão
--retention <duration>Apaga a mídia gerada, o resultado armazenado, o prompt e os demais textos de entrada desta tarefa antes do prazo normal: 30m, 1h, 7d ou um número de segundos. Só serve para encurtar. 0 apaga tudo assim que a tarefa termina. Os registros de cobrança são sempre mantidosA configuração da sua contaNão
--callback-url <url>Um endereço público que começa com https:// e que a SpicyAPI chama quando a tarefa termina. http:// simples, localhost e endereços de rede privada são recusados. Só é útil se você tem um servidor; veja WebhooksNenhumNão
--poll-interval-ms <milliseconds>Com --wait: confere a cada tantos milissegundos, de 100 a 60000Começa em 2 segundos e vai desacelerando até 10 segundosNão
--wait-timeout-ms <milliseconds>Com --wait: para de esperar depois desse tempo, de 1 a 86400000. A tarefa continua rodando600000 (10 minutos)Não

O que acontece, em ordem:

  1. A CLI lê a sua entrada e confere se ela é um objeto JSON. Se você não informou nenhuma entrada, ela para aqui.
  2. Se ninguém puder responder a uma pergunta, por exemplo num script, e você não tiver passado --yes, ela para aqui.
  3. Ela pede uma cotação e mostra o custo estimado, a cobrança máxima, quando a cotação expira e a chave de idempotência.
  4. Ela pergunta Continue? [y/N]. Só y ou yes continua. A resposta padrão é não.
  5. Ela cria a tarefa pelo preço cotado. O valor estimado é reservado do seu saldo, e esse valor é também o máximo que a tarefa pode custar.
  6. Sem --wait, ela mostra idempotencyKey, taskId, state (queued), estimatedCost e deadlineAt e retorna. Com --wait, ela mostra na hora Accepted: <task-id> e um comando de recuperação, espera e depois mostra idempotencyKey, accepted e a task concluída.

deadlineAt é o horário limite para a tarefa terminar antes de acabar como expired. Não é quando o seu link de download ou os seus arquivos expiram.

spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --wait

No macOS e no Linux, você também pode passar a entrada direto no comando:

spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-json '{"prompt": "A paper lantern on a rainy street"}'

Se a espera falhar, a tarefa continua rodando

Uma espera pode acabar antes da hora por causa do limite de tempo, de um problema de rede ou de um Ctrl + C. A tarefa em si segue em frente e é cobrada normalmente. A linha Accepted: impressa no início traz o ID dela; continue com spicyapi tasks wait <task-id>. Não rode simplesmente o mesmo comando de criação de novo sem --idempotency-key: isso inicia, e cobra, uma segunda geração.

Quando a espera falha com um erro (e não por um Ctrl + C), as últimas linhas repetem tudo o que você precisa, para que você não tenha que rolar a tela de volta até a linha Accepted::

Error: task job_01k3m8x9q2z4v7n5p6r8s0t1w3 did not reach a terminal state within 600000ms
Task job_01k3m8x9q2z4v7n5p6r8s0t1w3 was accepted and may still be running; only the wait stopped.
Recover: spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3
To replay the same request without creating a second task, reuse --idempotency-key 4f6755a5-0d72-4420-9f6b-9faf0e2b0241.

Se o erro for de um tipo com solução conhecida, como 429 ou um erro do servidor, vem em seguida uma linha Next:. Com --json, as mesmas informações ficam no objeto de erro, como taskId, idempotencyKey e recover.

tasks wait

O que faz: espera uma tarefa que você já iniciou, até ela terminar.

spicyapi tasks wait <task-id> [options]
Argumento ou opçãoO que fazPadrãoObrigatório
task-idO ID da tarefa, como job_01k3m8x9q2z4v7n5p6r8s0t1w3—Sim
--poll-interval-ms <milliseconds>Confere a cada tantos milissegundos, de 100 a 60000Começa em 2 segundos e vai desacelerando até 10 segundosNão
--wait-timeout-ms <milliseconds>Para de esperar depois desse tempo, de 1 a 86400000600000 (10 minutos)Não
spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000

Saída: a tarefa concluída, com os mesmos campos de tasks get, assim que o estado dela for succeeded, failed ou expired. Se a tarefa deu certo mas os arquivos ainda estão sendo copiados, ele espera mais um pouco.

Se o limite de tempo acabar, aparece Error: task … did not reach a terminal state within 600000ms. Isso não é uma falha: a tarefa continua rodando. Espere de novo, com um --wait-timeout-ms maior se precisar. Interromper uma espera nunca cancela uma tarefa. Gratuito.

tasks get

O que faz: mostra uma tarefa neste momento: o estado, o custo, os links do resultado e quando o conteúdo dela vai ser apagado.

spicyapi tasks get <task-id>
ArgumentoO que fazPadrãoObrigatório
task-idO ID da tarefa—Sim

Use a mesma chave de API que criou a tarefa: outra chave recebe "não encontrado".

Campos da saída:

CampoSignificado
statequeued (esperando para começar), running, succeeded, failed ou expired (o tempo acabou). Tarefas mais antigas também podem mostrar canceled
output.assetsOs resultados. Cada um tem uma url (um link de download válido por cerca de 20 minutos), expiresAt (quando esse link para de funcionar), mime (o tipo do arquivo), informações de tamanho e uma key. pending: true quer dizer que o arquivo ainda está sendo copiado, então tente de novo em alguns segundos. unavailable: true quer dizer que ele não pode ser recuperado
errorCode, errorMessagePor que a tarefa falhou. Veja Erros
cost, settledA cobrança em USD. É definitiva quando settled é true
inputAs configurações que você enviou. Removidas quando acaba o prazo de retenção do seu prompt
createdAt, completedAt, deadlineAtQuando foi criada, quando terminou e o horário limite para terminar
contentStatepresent (o conteúdo ainda está guardado), expired (removido pelas regras de retenção) ou purged (você apagou)
retentionoutputsExpireAt (quando os arquivos de resultado são apagados), promptsExpireAt (quando o texto do seu prompt é apagado) e source (qual configuração decidiu)
sourceTaskIdAparece quando esta tarefa é uma nova tentativa de outra tarefa

A saída normal termina com um resumo em linguagem simples, como Outputs expire: … ou Content: Destroyed — you removed the outputs …. Cada chamada devolve links de download novos. Gratuito.

tasks list

O que faz: lista as tarefas criadas com a chave de API atual, uma página por vez.

spicyapi tasks list [options]
OpçãoO que fazPadrãoObrigatório
--from <date>O primeiro dia a incluir, YYYY-MM-DD em UTCUma janela de sete dias que termina hojeNão
--to <date>O dia seguinte ao último dia a incluir, YYYY-MM-DD em UTC. O intervalo pode ter no máximo 92 diasVeja acimaNão
--state <state>Só tarefas num estado: queued, running, succeeded, failed, canceled ou expiredTodosNão
--model <model>Só tarefas de um ID de modelo exatoTodosNão
--limit <count>Tarefas por página, de 1 a 10020Não
--cursor <cursor>Continua a partir da página anterior, usando o valor nextCursor delaPrimeira páginaNão
spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --state failed

Saída: items (cada um com taskId, model, state, cost, settled, createdAt, deadlineAt e completedAt), hasMore e nextCursor. Se hasMore for true, rode o mesmo comando de novo, com os mesmos --from e --to, acrescentando --cursor com o valor de nextCursor. A lista não traz links de download; use tasks get na tarefa que você quer. Gratuito.

tasks retry

O que faz: roda de novo uma tarefa failed ou expired, como uma tarefa nova, com um ID novo. Isto custa dinheiro.

spicyapi tasks retry <task-id> [options]
Argumento ou opçãoO que fazPadrãoObrigatório
task-idA tarefa que falhou ou expirou e que vai rodar de novo—Sim
--waitFica esperando até a tarefa nova terminarDesligadaNão
--yesPula a pergunta de confirmaçãoDesligada: perguntaNão
--idempotency-key <key>Rodar a nova tentativa de novo com a mesma chave devolve a mesma tarefa nova em vez de criar mais umaUma chave aleatória nova a cada execuçãoNão
--poll-interval-ms <milliseconds>Com --wait: com que frequência conferirComeça em 2 segundos e vai desacelerando até 10 segundosNão
--wait-timeout-ms <milliseconds>Com --wait: para de esperar depois desse tempo600000 (10 minutos)Não

Ele pergunta Retry source task … Continue? [y/N]. Ao contrário do tasks create, ele não mostra o preço antes de perguntar. A tarefa nova é cobrada pelo preço atual do modelo, então, se o preço importa, confira antes com spicyapi models get <model>.

Saída: idempotencyKey, o novo taskId, sourceTaskId (a original), state, estimatedCost (o valor reservado) e deadlineAt.

  • Só tarefas failed e expired podem ser repetidas, além das canceled mais antigas. Para ter outra versão de um resultado que deu certo, use tasks create.
  • A entrada original é reaproveitada sem mudança, então uma nova tentativa só ajuda quando a falha foi temporária. Confira antes o errorCode; veja Repetir uma tarefa que falhou e Erros.
  • Se a entrada apontava para um arquivo enviado que já expirou, a nova tentativa falha; envie o arquivo de novo e use tasks create.
  • A nova tentativa mantém a configuração de retenção da tarefa original.
  • Se o tasks create perdeu a conexão antes de você ver um ID de tarefa, isso não é uma tarefa que falhou. Nesse caso, siga os passos de recuperação de Retomar uma tarefa depois que a espera foi interrompida.

tasks purge

O que faz: apaga de forma permanente a mídia gerada, o resultado armazenado (os dados do resultado que ficam guardados), o prompt e os demais textos de entrada de uma tarefa concluída, na hora, em vez de esperar que eles expirem.

spicyapi tasks purge <task-id> [--yes]
Argumento ou opçãoO que fazPadrãoObrigatório
task-idUma tarefa concluída: succeeded, failed, expired ou canceled—Sim
--yesPula a pergunta de confirmaçãoDesligada: perguntaNão

Uma tarefa que ainda está queued ou running não pode passar por purge. Ela também não pode ser cancelada — não existe comando nem API de cancelamento —, então espere que ela termine com spicyapi tasks wait <task-id> e depois faça o purge.

Ele explica o que vai ser apagado e pede a sua confirmação, porque isso não pode ser desfeito. Baixe antes tudo o que quiser guardar.

Saída: taskId, contentState (purged), purgedAt, contentRemovedBy (user), billingRetained (sempre true) e mediaDeletionPending, seguidos de uma linha que diz o que foi destruído e avisa que a mídia armazenada é removida em cerca de um minuto. Se contentState ainda for present, nada foi removido desta vez; tente de novo mais tarde.

Gratuito, e não é reembolso: o lançamento no registro de cobrança, o valor cobrado, o modelo, o estado, os horários e o ID da requisição continuam registrados. Veja Retenção e destruição.

files upload

O que faz: envia um arquivo do seu computador, como a imagem inicial de uma geração de imagem para vídeo, e devolve um endereço spicy:// para colocar na sua entrada.

spicyapi files upload <path> [--content-type <type>]
Argumento ou opçãoO que fazPadrãoObrigatório
pathO arquivo a enviar—Sim
--content-type <type>O tipo do arquivo, quando não dá para descobri-lo pelo nome: image/jpeg, image/png, image/webp, image/gif, video/mp4, video/webm, audio/mpeg ou audio/wavDetectado pela extensãoNão

São aceitos imagens .jpg, .jpeg, .png, .webp e .gif de até 10 MiB, vídeos .mp4 e .webm e áudios .mp3 e .wav de até 90 MiB e 600 segundos. Um modelo pode definir limites próprios mais baixos.

spicyapi files upload ./start-frame.jpg
fileId: fil_01k3m8x9q2z4v7n5p6r8s0t1w3
status: ready
bytes: 402118
contentType: image/jpeg
sha256: a91f4c2e5b7d16809e3f2a4c8d0b61e7c4a890e5d2f71b3c609ae8427d15f0c6
uri: spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3
expiresAt: 2026-09-18T09:12:11Z
width: 1280
height: 720

Saída: copie o valor de uri, exatamente como aparece, para a configuração de arquivo do modelo, muitas vezes image_url. Ele pode ser usado até expiresAt, normalmente um dia. Depois disso, envie o arquivo de novo. O upload é gratuito.

files download-url

O que faz: cria um novo link de download para o resultado de uma tarefa concluída. Ele mostra o link; não salva o arquivo.

spicyapi files download-url <task-id> [--key <key>]
Argumento ou opçãoO que fazPadrãoObrigatório
task-idUma tarefa que deu certo—Sim
--key <key>Para qual resultado gerar o link, quando a tarefa produziu vários. Use o valor key de output.assets em tasks getO primeiro resultadoNão

Saída: key, url e expiresAt. O link funciona por cerca de 20 minutos; abra-o num navegador ou baixe com curl. Uma tarefa que ainda não deu certo responde "não encontrado". Se o arquivo ainda estiver sendo copiado, você recebe um erro de conflito; espere alguns segundos e tente de novo. Depois que os arquivos da tarefa foram apagados, não dá para gerar um link novo. Gratuito.

webhooks verify

O que faz: se você tem um servidor que recebe callbacks da SpicyAPI (veja --callback-url), este comando confere se um callback salvo é autêntico e não foi alterado. Ele roda inteiramente no seu computador e não precisa de chave de API.

spicyapi webhooks verify --body-file <path> --timestamp <seconds> --signature <base64> --payload-version <version>
OpçãoO que fazPadrãoObrigatório
--body-file <path>Um arquivo com o corpo do callback exatamente como foi recebido, byte a byte—Sim
--timestamp <seconds>O valor do cabeçalho X-Webhook-Timestamp—Sim
--signature <base64>O valor do cabeçalho X-Webhook-Signature—Sim
--payload-version <version>O valor do cabeçalho X-Webhook-Payload-Version: 1 ou 2—Sim
--secret-env <name>O nome da variável de ambiente que guarda a sua chave de assinatura de webhook. A chave em si nunca é digitada na linha de comandoSPICY_WEBHOOK_SECRETNão
--tolerance-seconds <seconds>Quanto o horário pode se afastar do relógio do seu computador300Não

Saída: em caso de sucesso, payload (o conteúdo do callback), payloadVersion, taskId, deliveryId (versão 2) e timestamp. Se algo não bater, ele mostra um erro e termina com código de saída diferente de zero. Gratuito.

Uma chave de assinatura é criada automaticamente quando você se cadastra, mas o valor dela nunca é mostrado. Para ter uma que você possa copiar, abra Webhooks no console e clique em Gerar (ou em Trocar, se já houver uma configurada). A chave nova aparece uma única vez. A troca vale na hora, sem período de transição: a chave antiga para de assinar imediatamente. Veja Webhooks.

Receitas comuns

Gerar uma imagem

spicyapi models list --modality image --json
spicyapi models get MODEL_ID_FROM_CATALOG --json
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --wait

Escolha um ID no resultado do primeiro comando, monte o input.json com as configurações mostradas pelo segundo, depois rode o terceiro e confirme com y. O passo a passo em Seu primeiro resultado explica cada etapa.

Transformar uma imagem em vídeo

Encontre um modelo de imagem para vídeo e as configurações dele

spicyapi models list --modality video --task image-to-video --json
spicyapi models get MODEL_ID_FROM_CATALOG --json

Em inputSchema, encontre a configuração da imagem inicial (normalmente image_url), a da duração (normalmente duration_seconds) e o que estiver em required.

Envie a sua imagem

spicyapi files upload ./start-frame.jpg

Copie o valor de uri, que começa com spicy://.

Escreva a entrada

Crie o input.json como em Seu primeiro resultado, usando os nomes de configuração do modelo e o seu próprio uri:

{
  "prompt": "Slow push-in, rain running down the window",
  "image_url": "spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3",
  "duration_seconds": 5
}

Confira o preço e depois gere

spicyapi tasks quote --model MODEL_ID_FROM_CATALOG --input-file input.json
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --wait --wait-timeout-ms 1800000

Vídeos costumam ser cobrados por segundo, então a duração que você escolhe muda o preço. Vídeos podem levar vários minutos, por isso este exemplo espera até 30 minutos em vez dos 10 padrão. Baixe o .mp4 pela url, como em Seu primeiro resultado.

A imagem enviada pode ser usada por um dia. Depois disso, envie-a de novo.

Retomar uma tarefa depois que a espera foi interrompida

Uma tarefa continua rodando mesmo que o terminal feche, a rede caia, o computador entre em repouso ou a espera estoure o tempo. O jeito de voltar a ela depende do que você viu:

  • Você viu Accepted: job_…, ou uma linha Recover: abaixo do erro. Você tem o ID da tarefa. Espere de novo, ou só dê uma olhada nela:

    spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000
    spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3
  • Você só viu a linha Idempotency-Key:, por exemplo porque a conexão caiu enquanto a tarefa estava sendo criada. Rode o mesmo comando de novo, com o mesmo modelo e a mesma entrada, e acrescente essa chave:

    spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --idempotency-key 4f6755a5-0d72-4420-9f6b-9faf0e2b0241 --wait

    A CLI mostra o preço e pergunta de novo, mas, se a primeira tentativa tiver sido aceita, a SpicyAPI devolve essa mesma tarefa em vez de iniciar e cobrar uma segunda. Isso funciona por 24 horas com a mesma chave de API. Se a primeira tentativa nunca chegou, a tarefa é criada agora, uma única vez.

  • Você não tem nenhum dos dois. Liste as suas tarefas recentes e encontre a certa pelo horário e pelo modelo:

    spicyapi --json tasks list --limit 10

Repetir uma tarefa que falhou

Primeiro, descubra por que ela falhou:

spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3

Depois leia o errorCode. Tarefas que falham ou expiram normalmente liberam toda a reserva. Algumas recusas de conteúdo são cobradas pelo orçamento aceito, somente quando a página do modelo informa explicitamente essa exceção. Confira settled e cost para saber o valor final. O tasks retry envia a mesma entrada de novo, então só ajuda quando a causa foi temporária:

errorCodeO que fazer
rate_limited, upstream_unavailable, timeout, upstream_failedEspere um pouco e tente de novo uma vez. Se falhar de novo, pare de tentar: no caso de timeout, experimente uma duração menor ou uma resolução mais baixa com tasks create
generation_failedNão repita. Mude o prompt ou a imagem e use tasks create: a mesma entrada costuma falhar do mesmo jeito
invalid_assetNão repita, porque a nova tentativa reaproveita o arquivo antigo. Envie o arquivo de novo e use tasks create com o uri novo
invalid_request, unsupported_combinationNão repita sem mudar nada. Mude as configurações e use tasks create
content_rejectedNão repita sem mudar nada. O modelo recusou esta requisição: mude o prompt ou escolha outro modelo e use tasks create

A lista completa está em Erros.

Quando fizer sentido tentar de novo, rode a nova tentativa. Ela cria, e cobra, uma tarefa nova:

spicyapi tasks retry job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait

Exportar o seu consumo

Salve num arquivo um mês de consumo da chave atual:

spicyapi --json usage --from 2026-09-01 --to 2026-10-01 > usage-2026-09.json

O arquivo traz os totais por dia e por modelo. Para uma lista tarefa por tarefa, salve spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --limit 100 do mesmo jeito, seguindo o nextCursor enquanto hasMore for true. Os números da conta inteira e as faturas ficam no console.

Rodar a CLI a partir de um script

Num script, ninguém pode responder a Continue? [y/N], então os comandos que cobram se recusam a rodar, a não ser que você acrescente --yes. Quando fizer isso:

  • peça a cotação antes e confira o preço no script;
  • dê a cada geração a sua própria --idempotency-key fixa, como poster-2026-09-17-v1, para que rodar o script duas vezes não cobre duas vezes;
  • acrescente --json e leia o state no resultado: um comando que termina com código de saída 0 não produziu necessariamente uma tarefa bem-sucedida;
  • defina limites de gasto na chave, no console.
spicyapi --json tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --idempotency-key poster-2026-09-17-v1 --yes --wait > result.json

Custos, confirmação e segurança

Quais comandos custam dinheiro. Só tasks create e tasks retry. Os preços são em dólares americanos. Pedir cotação, listar, conferir, enviar, baixar e apagar são gratuitos.

Ver o preço antes. O tasks quote calcula o preço de uma requisição sem iniciar nada. O tasks create pede a própria cotação e mostra Estimated charge e maximum charge antes de perguntar. Quando a tarefa é aceita, o valor estimado fica reservado (held) e é também o máximo que pode ser cobrado de você. Quando a tarefa dá certo, você paga pelo que foi realmente produzido, nunca acima desse valor, e o que sobrar volta para o seu saldo.

A confirmação. Continue? [y/N] quer dizer que a resposta é não, a menos que você digite y. O --yes responde por você, então use-o só quando já souber o preço. Se a CLI rodar num lugar em que não consegue perguntar, como um script ou com uma entrada recebida por pipe, e não houver --yes, ela se recusa em vez de presumir um sim. O tasks purge pergunta do mesmo jeito, porque apagar não pode ser desfeito. O tasks retry também pergunta, mas não mostra o preço antes.

A chave de idempotência, em palavras simples. É um rótulo para uma geração, como um número de pedido. Todo tasks create e todo tasks retry mostram uma. Se a sua internet cair e você não tiver certeza de que a geração começou, rode o mesmo comando de novo com --idempotency-key e o valor mostrado: você recebe de volta a tarefa original e não é cobrado duas vezes. O rótulo vale por 24 horas com a mesma chave de API. Não o reaproveite para outra geração: a mesma chave com uma entrada diferente é recusada.

Sem cancelamento. Depois de aceita, uma tarefa não pode ser cancelada. Ctrl + C, fechar o terminal ou revogar a chave só interrompe a espera; a tarefa termina e é cobrada normalmente.

Tarefas que falham ou expiram normalmente liberam toda a reserva. Algumas recusas de conteúdo são cobradas pelo orçamento aceito, somente quando a página do modelo informa explicitamente essa exceção. Confira settled e cost para saber o valor final.

Baixe o que quiser guardar. Os arquivos de resultado ficam guardados por no máximo cerca de 14 dias, ou menos, se a sua conta ou o --retention definirem assim, e depois são apagados para sempre. Os links de download duram cerca de 20 minutos, mas você sempre pode pedir um novo enquanto o arquivo existir. Os arquivos enviados podem ser usados por um dia. Por padrão, o texto do prompt é apagado depois de 30 dias. Os registros de cobrança são mantidos. Veja Retenção e destruição.

Limites de gasto. Cada chave pode ter limites diário, mensal e acumulado, definidos na página Chaves de API. Chaves novas não têm limite até que você defina um. Uma tarefa que ultrapassaria um limite é recusada antes de começar.

A sua chave. A CLI só lê a chave de SPICY_API_KEY, nunca a imprime e, nas dicas de erro, mostra no máximo os nove primeiros caracteres dela (sk-spicy-).

Mais detalhes: Cobrança, Idempotência, Execução e novas tentativas.

Solução de problemas

Procure a mensagem que você está vendo. Os erros da SpicyAPI terminam com (request req_…); informe esse valor se falar com o suporte, mas nunca envie a sua chave.

Todos os códigos de erro são explicados em Erros, e os passos de recuperação estão em Solução de problemas e recuperação.

Código-fonte

O pacote tem licença MIT e é desenvolvido abertamente em github.com/spicyapi-ai/spicy-cli. É lá que você lê o código por trás de qualquer comando desta página, relata um comportamento diferente do descrito aqui ou propõe uma mudança.

Próximos passos

Nesta página