spicyapiDocumentazione
Agenti e CLI
Contenuto principale

Strumento a riga di comando (CLI)

Usa il comando spicyapi per sfogliare i modelli, controllare i prezzi, generare immagini e video e scaricare i risultati da un terminale, senza scrivere codice.

Che cos’è la CLI

spicyapi è un piccolo programma che esegui in un terminale, la finestra in cui scrivi comandi invece di fare clic sui pulsanti. Ogni comando svolge un solo compito: elencare i modelli che il tuo account può usare, dirti quanto costerà una generazione, avviare la generazione di un’immagine o di un video, attendere che finisca e darti un link per scaricare il risultato.

Non scrivi alcun codice. Digiti un comando, premi Invio e leggi la risposta.

È la scelta giusta quando vuoi:

  • provare i modelli e confrontarne i prezzi prima che qualcuno scriva un’integrazione;
  • generare immagini o video dal tuo computer e salvare i file;
  • ripetere lo stesso tipo di generazione senza dover cliccare ogni volta attraverso una pagina;
  • controllare le impostazioni esatte di un modello prima di costruirci sopra qualcosa.

La CLI copre la generazione di immagini e video. I modelli di testo e di chat si chiamano tramite gli endpoint compatibili con la chat descritti in Testo e streaming.

Esistono altri tre strumenti ufficiali. Scegli la CLI se vuoi digitare i comandi tu stesso:

StrumentoSceglilo quando
SDKStai scrivendo un programma JavaScript o TypeScript che chiama SpicyAPI
Server MCPVuoi che un assistente di programmazione IA esegua questi stessi passaggi al posto tuo
Agent SkillVuoi insegnare a un agente IA il modo sicuro di usare SpicyAPI

Scrivi in un altro linguaggio? Ci sono SDK ufficiali anche per Python, Go, PHP e Java.

Niente in questa pagina spende denaro per sbaglio

Solo due comandi possono costare denaro: tasks create e tasks retry. Entrambi si fermano e ti chiedono conferma prima che venga addebitato qualsiasi importo. Tutti gli altri sono gratuiti e puoi eseguirli tutte le volte che vuoi.

Che cosa puoi fare

Voglio…ComandoCosta denaro?Serve una chiave API?
Verificare che SpicyAPI sia raggiungibilespicyapi statusNoNo
Cercare in questa documentazionespicyapi docs search <words>NoNo
Vedere quali modelli posso usare e i loro prezzispicyapi models listNoSì
Vedere quali impostazioni accetta un modellospicyapi models get <model>NoSì
Controllare il mio saldospicyapi balanceNoSì
Vedere quanto ha speso una chiavespicyapi usageNoSì
Conoscere il prezzo esatto di una generazione senza avviarlaspicyapi tasks quoteNoSì
Avviare la generazione di un’immagine o di un videospicyapi tasks createSì, dopo averti chiesto confermaSì
Attendere che una generazione finiscaspicyapi tasks wait <task-id>NoSì
Consultare una generazione e i link ai suoi risultatispicyapi tasks get <task-id>NoSì
Elencare le mie generazioni recentispicyapi tasks listNoSì
Ripetere una generazione fallitaspicyapi tasks retry <task-id>Sì, dopo averti chiesto confermaSì
Eliminare per sempre i file e il prompt di una generazionespicyapi tasks purge <task-id>No, e non viene rimborsato nullaSì
Caricare un’immagine, un video o un file audio da usare come inputspicyapi files upload <path>NoSì
Ottenere un nuovo link di download per un risultatospicyapi files download-url <task-id>NoSì
Verificare che una callback arrivi davvero da SpicyAPIspicyapi webhooks verifyNoNo, usa la tua chiave di firma dei webhook

Nei comandi qui sopra, una parola tra parentesi angolari come <task-id> significa «metti qui il tuo valore», senza le parentesi.

Prima di iniziare

Ti servono quattro cose: un terminale, Node.js, una chiave API e un modo per eseguire la CLI. La prima volta richiede una decina di minuti.

Apri un terminale

Un terminale è una finestra di testo in cui si eseguono comandi. Tutto ciò che trovi in questa pagina va digitato o incollato lì, poi eseguito con Invio.

Premi Cmd + Spazio, digita Terminal e premi Invio. Si apre una finestra con una riga che termina con % o $: è lì che scrivi. Per incollare usa Cmd + V.

Installa Node.js 22.13 o successivo

La CLI funziona con Node.js, un programma gratuito. Controlla se ce l’hai già:

node -v

Se stampa v22.13.0 o un numero più alto, come v22.14.0 o v24.4.1, sei pronto. Se stampa un numero più basso, oppure risponde command not found o is not recognized:

  1. Vai su nodejs.org, apri la pagina di download e scegli la versione LTS per il tuo sistema.
  2. Avvia l’installer e accetta le opzioni predefinite.
  3. Chiudi il terminale e aprine uno nuovo, poi esegui di nuovo node -v.

Node.js include npm e npx, i due strumenti usati nell’ultimo passaggio.

Crea una chiave API

La chiave API è il modo in cui SpicyAPI sa che la richiesta arriva dal tuo account.

  1. Crea un account su spicyapi.ai/register. Gli account possono essere aperti a scaglioni; se la registrazione per te non è ancora aperta, iscriviti alla lista d’attesa.
  2. Aggiungi fondi in Fatturazione nella console. Le generazioni vengono pagate con il tuo saldo, in dollari statunitensi.
  3. Apri Chiavi API e fai clic su Crea chiave. Dalle un nome che riconoscerai in seguito, come my laptop. Serve solo il nome.
  4. Copia subito la chiave. Inizia con sk-spicy- e viene mostrata una sola volta. Puoi anche usare Salva come file.

Le chiavi nuove non hanno alcun limite di spesa finché non ne imposti uno. Un limite giornaliero evita che un errore o una chiave trapelata generino una fattura salata, e puoi modificarlo in seguito nella stessa pagina.

Tratta la chiave come una password

Chiunque abbia la tua chiave può spendere il tuo saldo. Non inviarla in chat o via email, non mostrarla in uno screenshot o in una richiesta di assistenza e non salvarla mai in una cartella di progetto che finisce in Git o su GitHub. Se trapela, revocala nella pagina Chiavi API e creane una nuova.

Salva la chiave in SPICY_API_KEY

La CLI non ha un comando di login e non accetta mai la chiave come opzione di un comando. La legge da una variabile d’ambiente chiamata SPICY_API_KEY: un valore con un nome che il terminale passa ai programmi che avvia.

Solo per la finestra attuale (viene dimenticata quando chiudi la finestra):

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

In modo permanente, aggiungi la stessa riga export in fondo al file di avvio della tua shell, che viene eseguito ogni volta che apri un terminale. Su macOS il file è ~/.zshrc; sulla maggior parte dei sistemi Linux è ~/.bashrc.

nano ~/.zshrc

Incolla la riga export in fondo al file, premi Ctrl + O e poi Invio per salvare, e Ctrl + X per uscire. Su Linux usa invece nano ~/.bashrc. Apri una nuova finestra del terminale perché la modifica abbia effetto.

Verifica che sia impostata, senza stampare l’intera chiave:

echo "${SPICY_API_KEY:0:9}"

Dovrebbe stampare sk-spicy-.

Dove la chiave può stare e dove no

Il file di avvio della shell e le impostazioni del tuo account Windows restano su questo computer, e per un uso personale va bene. Non mettere mai la chiave in un file dentro un progetto, non includerla mai in un commit e non incollarla mai in un documento condiviso. I terminali ricordano anche i comandi che digiti, quindi su un computer condiviso preferisci il file di avvio o la finestra delle impostazioni di Windows invece di scrivere la chiave dentro un comando.

Scegli come eseguire la CLI

Ci sono due modi, e i comandi sono gli stessi.

npx scarica la CLI quando serve e la esegue:

npx @spicyapi/cli status

La prima volta npm chiede Need to install the following packages: @spicyapi/cli@… Ok to proceed? (y). Premi y e poi Invio.

Con questo metodo, scrivi npx @spicyapi/cli ovunque questa pagina scriva spicyapi. Per esempio, spicyapi models list diventa npx @spicyapi/cli models list.

Il tuo primo risultato

Questo percorso guidato genera un’immagine e la scarica. Ogni passaggio mostra il comando, più o meno che cosa vedrai e che cosa è appena successo. I tuoi numeri, ID e orari saranno diversi.

Sostituisci MODEL_ID_FROM_CATALOG con un ID del modello reale

MODEL_ID_FROM_CATALOG è un segnaposto, non un modello. Il passaggio 3 mostra come scegliere un ID reale dal catalogo in tempo reale (live catalog): spicyapi models list, lo stesso elenco di GET /api/v1/models. Incolla il tuo ID ovunque questa pagina mostri il segnaposto. Se invii il segnaposto così com’è, ottieni solo un errore «not found».

Controlla la connessione

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

Che cosa è successo: la CLI ha chiesto a SpicyAPI se è in funzione. Non serve la chiave e non costa nulla. Se leggi «could not be reached», controlla la connessione a internet o il proxy; vedi Risoluzione dei problemi.

Controlla il saldo

spicyapi balance
available: 12.34
held: 0.06
total: 12.40

Che cosa è successo: è il primo comando che usa la tua chiave. Gli importi sono in dollari statunitensi. available è quanto puoi spendere adesso, held è l’importo accantonato per le generazioni ancora in corso e total è la somma dei due. Potresti vedere anche una riga funding che suddivide il saldo tra fondi prepagati e bonus promozionali.

Se leggi Error: SPICY_API_KEY is required for authenticated API operations, la chiave non è impostata in questa finestra del terminale. La riga Next: subito sotto spiega come impostarla; vedi anche Prima di iniziare.

Scegli un modello

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" }
      ]
    }
  ]
}

Questo esempio è accorciato: l’elenco reale contiene più modelli e più campi.

Che cosa è successo: la CLI ha recuperato i modelli che il tuo account può chiamare oggi, con i tuoi prezzi. Scegline uno in cui enabled e available valgano entrambi true e copia il suo valore model, per esempio selezionandolo con il mouse. Quel valore è l’ID del modello. Gli ID hanno la forma maker/model/task.

  • price è in dollari statunitensi per unit: per_image, per_second di video, per_request oppure per_1k_tokens.
  • Più voci in pricing significano che il prezzo dipende dalle tue impostazioni, per esempio dalla risoluzione.
  • Per trovare un modello per nome, aggiungi --search e una parte del nome.

--json stampa l’elenco come JSON leggibile e indentato. Senza, l’intero elenco viene schiacciato su un’unica lunga riga.

Guarda quali impostazioni accetta quel modello

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
  }
}

Che cosa è successo: inputSchema è l’elenco delle impostazioni del modello, che nel resto di questa pagina chiamiamo input.

  • required elenca le impostazioni che devi inviare. Qui solo prompt.
  • properties elenca tutte le impostazioni che il modello accetta, e nient’altro è ammesso: basta un nome sconosciuto o scritto male perché l’intera richiesta venga rifiutata.
  • enum elenca gli unici valori ammessi per quell’impostazione.

Ogni modello ha le proprie impostazioni, quindi leggile sempre per il modello che hai scelto. Per avere input già pronti e già verificati dal server, esegui spicyapi models list --search <name> --include-examples --json e guarda examples.

Scrivi l’input in un file

Metti l’input in un file chiamato input.json, nella cartella in cui si trova il terminale. Un file evita i problemi con le virgolette, soprattutto su Windows.

Incolla tutte e tre le righe in una volta:

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

Che cosa è successo: hai descritto che cosa generare, usando i nomi delle impostazioni visti nel passaggio precedente. Le virgolette devono essere quelle dritte ("), non quelle tipografiche.

Controlla il prezzo

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

Che cosa è successo: SpicyAPI ha calcolato il prezzo di questa richiesta esatta. Non è stato avviato nulla e non è stato addebitato nulla. estimatedCost è il costo previsto e maxCharge è il massimo che può costare. Questo passaggio è facoltativo: il comando successivo richiede di nuovo il prezzo e te lo mostra prima di spendere qualsiasi cosa.

Avvia la generazione e attendila

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

Per prima cosa la CLI mostra il prezzo e ti chiede di confermare:

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]

Digita y e premi Invio. Qualsiasi altra risposta annulla, e non viene addebitato nulla. Rispondi entro cinque minuti, prima che il preventivo scada.

Non appena SpicyAPI accetta il lavoro, la CLI stampa il suo ID attività:

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

Di solito le immagini richiedono qualche secondo e i video qualche minuto. Quando la generazione finisce, compare il risultato:

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,…}

Che cosa è successo: dopo il tuo y, SpicyAPI ha accettato la generazione, che da quel momento si chiama attività, e ha accantonato dal tuo saldo l’importo stimato. La CLI ha poi controllato l’attività ogni pochi secondi finché non è finita. Nell’ultima riga cerca "state":"succeeded" e l’"url" dentro output. cost è l’addebito definitivo quando settled vale true. Se preferisci vedere il risultato distribuito su più righe leggibili, aggiungi --json al comando.

Chiudere la finestra non annulla l’attività

Una volta accettata, un’attività arriva sempre fino in fondo e viene addebitata normalmente. Premere Ctrl + C o chiudere il terminale interrompe soltanto l’attesa. Conserva l’ID attività e riprendila con spicyapi tasks wait <task-id>; vedi Riprendere un’attività dopo un’attesa interrotta.

Scarica il risultato

L’url è un link di download diretto che funziona per circa 20 minuti e non richiede la chiave. Incollalo in un browser e salva il file, oppure scaricalo dal terminale (lascia le virgolette, perché il link contiene caratteri &):

curl -L -o result.png "PASTE_THE_URL_HERE"

Usa l’estensione che corrisponde a mime: .png per image/png, .jpg per image/jpeg, .mp4 per video/mp4.

Se il link è scaduto, ottienine uno nuovo con spicyapi files download-url <task-id>, oppure esegui spicyapi tasks get <task-id>, che restituisce link nuovi.

Che cosa è successo: hai copiato il risultato sul tuo computer. Fallo presto: SpicyAPI conserva i file generati al massimo per circa 14 giorni (meno, se il tuo account ha un’impostazione più breve), poi li elimina per sempre. Vedi Conservazione e distruzione.

Come leggere l’output

  • L’output normale mostra una coppia name: value per riga. I valori composti da più parti, come output o retention, vengono stampati come JSON su un’unica riga.
  • --json stampa la risposta completa come JSON indentato. Funziona con ogni comando, prima o dopo il nome del comando: spicyapi --json balance e spicyapi balance --json sono equivalenti.
  • I risultati vanno sull’output normale dello schermo; i messaggi vanno sull’output degli errori. I prezzi, la chiave di idempotenza, le righe Accepted: e gli errori sono messaggi. Quindi spicyapi --json tasks get <task-id> > task.json salva in task.json solo il risultato, mentre i messaggi continuano a comparire sullo schermo.
  • Gli errori hanno la forma Error: <what went wrong> (request req_…), di solito seguiti da una riga Next: che dice che cosa fare. Con --json, un errore è un oggetto JSON su una riga con error, type, status, code e requestId, senza riga Next:. Quando non è impostata alcuna chiave, type vale MissingApiKeyError. Se contatti l’assistenza, riporta il valore req_….
  • Il denaro è un importo in dollari statunitensi scritto come semplice testo senza il simbolo $, per esempio 0.03.
  • Gli orari sono in UTC. La Z alla fine di 2026-09-17T08:05:00Z significa UTC.
  • Il codice di uscita è 0 quando un comando riesce e diverso da 0 quando fallisce, e gli script possono controllarlo.

Riferimento dei comandi

Ogni comando ha anche un aiuto integrato: aggiungi --help, per esempio spicyapi tasks create --help.

Opzioni globali e variabili d’ambiente

Queste opzioni funzionano con ogni comando.

OpzioneChe cosa faPredefinitoObbligatoria
--jsonStampa il risultato completo come JSONDisattivataNo
--timeout-ms <milliseconds>Quanto attendere una singola risposta di SpicyAPI prima di rinunciare, da 1 a 12000030000 (30 secondi)No
--max-retries <count>Quante volte riprovare automaticamente dopo un errore di rete, un 429 o un errore del server, per le richieste che si possono ripetere senza rischi, da 0 a 52No
--api-base-url <url>Invia le richieste API a un indirizzo diverso. Normalmente non ti serve maihttps://api.spicyapi.ai/api/v1No
--service-base-url <url>L’indirizzo controllato da status. Normalmente non ti serve maihttps://api.spicyapi.aiNo
-V, --versionStampa la versione della CLI—No
-h, --helpMostra l’aiuto del comando—No
Variabile d’ambienteA che cosa serve
SPICY_API_KEYLa tua chiave API. Serve a tutti i comandi tranne status, docs search e webhooks verify
SPICY_WEBHOOK_SECRETLa tua chiave di firma dei webhook, letta da webhooks verify
SPICY_API_BASE_URL, SPICY_SERVICE_BASE_URLEquivalenti alle due opzioni di indirizzo qui sopra. Gli indirizzi devono usare https://

status

Che cosa fa: verifica se SpicyAPI è in funzione e raggiungibile dal tuo computer.

spicyapi status

Nessuna opzione. Non serve la chiave. Gratuito.

Output: una frase. SpicyAPI is reachable — … answered in … ms. significa che è tutto a posto. could not be reached significa che il tuo computer non ha ricevuto risposta: controlla la rete o il proxy. is not healthy o reports it is not ready indicano un problema da parte nostra; gli incidenti in corso sono elencati su status.spicyapi.ai.

Con --json vedi i controlli grezzi. La risposta che conta è operational: true; una voce readiness con stato 404 è normale sull’indirizzo pubblico.

Che cosa fa: trova la pagina della documentazione su un argomento. Cerca in un piccolo indice incluso nella CLI, quindi funziona senza chiave e senza chiamare SpicyAPI. Ogni risultato rimanda alla pagina su questo sito di documentazione, docs.spicyapi.ai.

spicyapi docs search [words] [--limit <count>]
Argomento o opzioneChe cosa faPredefinitoObbligatorio
wordsLe parole da cercare. Omettilo per elencare le pagineVuotoNo
--limit <count>Numero massimo di risultati, da 1 a 2510No
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 ci sono più risultati, vengono stampati uno dopo l’altro e ciascuno inizia con slug:. Se non trova nulla, lo dice ed esce comunque con codice 0:

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

Con --json, quando non trova nulla stampa un elenco vuoto, []. Gratuito.

models list

Che cosa fa: elenca i modelli che il tuo account può chiamare oggi, con i prezzi che paga il tuo account.

spicyapi models list [options]
OpzioneChe cosa faPredefinitoObbligatoria
--modality <type>Solo modelli image, video o text. L’opzione accetta anche audio, ma oggi non viene offerto alcun modello audioTuttiNo
--task <task>Solo un tipo di lavoro, come text-to-image, edit, image-to-video, text-to-video o reference-to-videoTuttiNo
--provider <name>Solo i modelli di un certo produttore, cioè l’azienda o il laboratorio che ha creato il modello. Deve corrispondere esattamente al valore providerTuttiNo
--search <text>Solo i modelli il cui ID o nome visualizzato contiene questo testo, senza distinguere maiuscole e minuscoleNessunoNo
--include-schemaAggiunge le impostazioni complete di ogni modello (inputSchema). Rende l’output molto più lungoDisattivataNo
--include-examplesAggiunge input di esempio già pronti e già verificati dal server (examples)DisattivataNo
spicyapi models list --modality video --task image-to-video --json

Output: total e items. Usa --json, perché senza tutte le voci vengono stampate su una sola riga. I campi più utili di ogni voce:

CampoSignificato
modelL’ID del modello da usare negli altri comandi
displayName, provider, modality, tasksNome, produttore del modello, tipo di output e tipo di lavoro
enabled, availableUsa i modelli in cui valgono entrambi true
pricingUna voce per ogni livello di prezzo: variant (per esempio una risoluzione), unit, price in USD, più regularPrice e offerLabel quando si applica uno sconto
taskTimeoutSecondsQuanto può durare una generazione prima di terminare come expired
maxOutputDurationSecondsLa durata massima di video consentita da questo modello, quando ne ha una

Gratuito. La lettura dell’elenco dei modelli conta nel limite di richieste del tuo account, quindi non serve eseguirla prima di ogni generazione.

models get

Che cosa fa: mostra un modello per intero, comprese le impostazioni che accetta.

spicyapi models get <model>
ArgomentoChe cosa faPredefinitoObbligatorio
modelL’ID esatto del modello. Le barre che contiene vanno bene così come sono—Sì
spicyapi models get MODEL_ID_FROM_CATALOG --json

Output: gli stessi campi di models list, più inputSchema. In inputSchema leggi required (le impostazioni che devi inviare), properties (ogni impostazione ammessa e il suo tipo), enum (gli unici valori ammessi), minimum e maximum (i limiti numerici) e default (il valore usato quando ometti l’impostazione). Le voci chiamate x-ui sono suggerimenti per costruire moduli; puoi ignorarle. Gratuito.

balance

Che cosa fa: mostra quanto denaro è disponibile sul tuo account.

spicyapi balance

Nessuna opzione. Gratuito.

Output: available (quanto puoi spendere adesso), held (l’importo accantonato per le attività ancora in corso) e total, tutti in dollari statunitensi. Può includere anche funding, che suddivide il saldo tra fondi prepagati e bonus promozionali, indicando anche quando scadono i bonus e per quali modelli si possono usare. Non devi controllare il saldo prima di ogni generazione: tasks create lo controlla al posto tuo.

usage

Che cosa fa: mostra quante generazioni ha eseguito la chiave API attuale e quanto sono costate, raggruppate per giorno e per modello.

spicyapi usage [--from <date>] [--to <date>]
OpzioneChe cosa faPredefinitoObbligatoria
--from <date>Il primo giorno da includere, come YYYY-MM-DD in UTCGli ultimi sette giorni, oggi compresoNo
--to <date>Il giorno successivo all’ultimo da includere, come YYYY-MM-DD in UTC. L’intervallo può essere al massimo di 92 giorniGli ultimi sette giorni, oggi compresoNo
spicyapi usage --from 2026-09-01 --to 2026-10-01

Questo comando copre tutto settembre: --to è il primo giorno non incluso. Ometti entrambe le opzioni per vedere gli ultimi sette giorni, oggi compreso.

Output: from, to, currency, totalCalls, totalSpend, poi days (per ogni giorno: calls, succeeded, failed, spend) e models (gli stessi numeri per modello). totalSpend conta solo gli addebiti definitivi. days e models descrivono le stesse attività in due modi, quindi non sommarli tra loro. Per l’intero account invece che per una sola chiave, usa la pagina Consumi della console.

Gratuito. È limitato a 30 chiamate al minuto, quindi usalo per controllare i totali, non dentro un ciclo.

tasks quote

Che cosa fa: ti dice esattamente quanto costerebbe una generazione, senza avviarla e senza accantonare alcun importo.

spicyapi tasks quote --model <model> --input-file <path>
OpzioneChe cosa faPredefinitoObbligatoria
--model <model>L’ID esatto del modello—Sì
--input-file <path>Legge l’input da un file JSON. Usa - per leggerlo da ciò che viene passato al comando tramite pipe—Questa o --input-json
--input-json <json>Passa l’input direttamente come testo JSON. Con --input-file gestire le virgolette è più facile—Questa o --input-file
--callback-url <url>L’indirizzo di callback che intendi usare, perché fa parte della richiesta di cui si calcola il prezzoNessunoNo

Output: quoteId, model, estimatedCost, maxCharge, currency, quantity (per esempio il numero di secondi addebitati), unit e expiresAt. Un preventivo vale cinque minuti.

Gratuito, senza conferma. Usalo per confrontare modelli o impostazioni. Non è obbligatorio eseguirlo prima di tasks create, che chiede un proprio preventivo.

tasks create

Che cosa fa: avvia la generazione di un’immagine o di un video. Costa denaro. La CLI mostra sempre prima il prezzo e chiede conferma.

spicyapi tasks create --model <model> --input-file <path> [options]
OpzioneChe cosa faPredefinitoObbligatoria
--model <model>L’ID esatto del modello—Sì
--input-file <path>Legge l’input da un file JSON. - lo legge da ciò che viene passato al comando tramite pipe, e in quel caso serve anche --yes—Questa o --input-json
--input-json <json>Passa l’input direttamente come testo JSON—Questa o --input-file
--waitResta in attesa finché l’attività non finisce, poi stampa il risultatoDisattivata: stampa l’ID attività e ritornaNo
--yesSalta la domanda di conferma. Usalo solo quando conosci già il prezzo, di solito negli scriptDisattivata: chiedeNo
--idempotency-key <key>Un nome per «questa singola generazione». Se esegui di nuovo il comando con la stessa chiave entro 24 ore, ottieni la stessa attività invece di una nuova. Fino a 128 caratteriUna nuova chiave casuale a ogni esecuzioneNo
--retention <duration>Elimina prima del solito i media generati, il payload del risultato, il prompt e l’altro testo dell’input di questa attività: 30m, 1h, 7d o un numero di secondi. Può solo accorciare. 0 li elimina appena l’attività finisce. Le registrazioni di fatturazione vengono sempre conservateL’impostazione del tuo accountNo
--callback-url <url>Un indirizzo pubblico che inizia con https:// e che SpicyAPI chiama quando l’attività finisce. Vengono rifiutati il semplice http://, localhost e gli indirizzi di reti private. Serve solo se gestisci un server; vedi WebhookNessunoNo
--poll-interval-ms <milliseconds>Con --wait: controlla ogni tot millisecondi, da 100 a 60000Parte da 2 secondi e rallenta fino a 10 secondiNo
--wait-timeout-ms <milliseconds>Con --wait: smette di attendere dopo questo tempo, da 1 a 86400000. L’attività continua a girare600000 (10 minuti)No

Che cosa succede, nell’ordine:

  1. La CLI legge il tuo input e controlla che sia un oggetto JSON. Se non hai fornito alcun input, si ferma qui.
  2. Se nessuno può rispondere a una domanda, per esempio dentro uno script, e non hai passato --yes, si ferma qui.
  3. Chiede un preventivo e stampa l’addebito stimato, l’addebito massimo, la scadenza del preventivo e la chiave di idempotenza.
  4. Chiede Continue? [y/N]. Si prosegue solo con y o yes. La risposta predefinita è no.
  5. Crea l’attività al prezzo del preventivo. L’importo stimato viene accantonato dal tuo saldo, e quell’importo è anche il massimo che l’attività può costare.
  6. Senza --wait, stampa idempotencyKey, taskId, state (queued), estimatedCost e deadlineAt, poi ritorna. Con --wait, stampa subito Accepted: <task-id> e un comando di ripristino, attende, poi stampa idempotencyKey, accepted e l’attività finita in task.

deadlineAt è l’ora limite entro cui l’attività può finire prima di terminare come expired. Non indica quando scadono il link di download o i file.

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

Su macOS e Linux puoi anche passare l’input direttamente nel comando:

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

Se l’attesa fallisce, l’attività è ancora in corso

Un’attesa può finire prima del previsto per il limite di tempo, per un problema di rete o per Ctrl + C. L’attività invece prosegue e viene addebitata normalmente. La riga Accepted: stampata all’inizio contiene il suo ID; continua con spicyapi tasks wait <task-id>. Non limitarti a rieseguire lo stesso comando di creazione senza --idempotency-key: così avvii, e paghi, una seconda generazione.

Quando l’attesa fallisce con un errore (e non per Ctrl + C), le ultime righe ripetono tutto ciò che ti serve, così non devi scorrere indietro per ritrovare la riga 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 l’errore ha una soluzione nota, come un 429 o un errore del server, segue una riga Next:. Con --json, le stesse informazioni si trovano nell’oggetto di errore come taskId, idempotencyKey e recover.

tasks wait

Che cosa fa: attende un’attività che hai già avviato, finché non finisce.

spicyapi tasks wait <task-id> [options]
Argomento o opzioneChe cosa faPredefinitoObbligatorio
task-idL’ID attività, per esempio job_01k3m8x9q2z4v7n5p6r8s0t1w3—Sì
--poll-interval-ms <milliseconds>Controlla ogni tot millisecondi, da 100 a 60000Parte da 2 secondi e rallenta fino a 10 secondiNo
--wait-timeout-ms <milliseconds>Smette di attendere dopo questo tempo, da 1 a 86400000600000 (10 minuti)No
spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000

Output: l’attività finita, con gli stessi campi di tasks get, non appena il suo stato è succeeded, failed o expired. Se l’attività è riuscita ma i suoi file vengono ancora copiati, attende ancora un po’.

Se il tempo limite si esaurisce, vedi Error: task … did not reach a terminal state within 600000ms. Non è un fallimento: l’attività è ancora in corso. Attendi di nuovo, se serve con un --wait-timeout-ms più lungo. Interrompere un’attesa non annulla mai un’attività. Gratuito.

tasks get

Che cosa fa: mostra un’attività in questo momento: il suo stato, il costo, i link ai risultati e quando verranno eliminati i suoi contenuti.

spicyapi tasks get <task-id>
ArgomentoChe cosa faPredefinitoObbligatorio
task-idL’ID attività—Sì

Usa la stessa chiave API che ha creato l’attività: con un’altra chiave ottieni «not found».

Campi dell’output:

CampoSignificato
statequeued (in attesa di partire), running, succeeded, failed oppure expired (tempo esaurito). Le attività più vecchie possono mostrare anche canceled
output.assetsI risultati. Ciascuno ha un url (un link di download valido per circa 20 minuti), expiresAt (quando quel link smette di funzionare), mime (il tipo di file), i dettagli sulle dimensioni e una key. pending: true significa che il file viene ancora copiato, quindi riprova tra qualche secondo. unavailable: true significa che non può essere recuperato
errorCode, errorMessagePerché l’attività è fallita. Vedi Errori
cost, settledL’addebito in USD. È definitivo quando settled vale true
inputLe impostazioni che hai inviato. Vengono rimosse quando scade la conservazione del prompt
createdAt, completedAt, deadlineAtQuando è stata creata, quando è finita e l’ora limite entro cui poteva finire
contentStatepresent (contenuti ancora conservati), expired (rimossi dalle regole di conservazione) oppure purged (li hai eliminati tu)
retentionoutputsExpireAt (quando vengono eliminati i file del risultato), promptsExpireAt (quando viene cancellato il testo del prompt) e source (quale impostazione lo ha deciso)
sourceTaskIdPresente quando questa attività è un nuovo tentativo di un’altra attività

L’output normale termina con un riepilogo in linguaggio semplice, come Outputs expire: … o Content: Destroyed — you removed the outputs …. Ogni chiamata restituisce link di download nuovi. Gratuito.

tasks list

Che cosa fa: elenca le attività create con la chiave API attuale, una pagina alla volta.

spicyapi tasks list [options]
OpzioneChe cosa faPredefinitoObbligatoria
--from <date>Il primo giorno da includere, YYYY-MM-DD in UTCUna finestra di sette giorni che termina oggiNo
--to <date>Il giorno successivo all’ultimo da includere, YYYY-MM-DD in UTC. L’intervallo può essere al massimo di 92 giorniVedi sopraNo
--state <state>Solo le attività in un certo stato: queued, running, succeeded, failed, canceled o expiredTuttiNo
--model <model>Solo le attività di un ID del modello esattoTuttiNo
--limit <count>Attività per pagina, da 1 a 10020No
--cursor <cursor>Prosegue dalla pagina precedente, usando il suo valore nextCursorPrima paginaNo
spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --state failed

Output: items (ciascuna voce con taskId, model, state, cost, settled, createdAt, deadlineAt e completedAt), hasMore e nextCursor. Se hasMore vale true, esegui di nuovo lo stesso comando con gli stessi --from e --to, aggiungendo --cursor e il valore di nextCursor. L’elenco non contiene link di download; usa tasks get per l’attività che ti interessa. Gratuito.

tasks retry

Che cosa fa: esegue di nuovo un’attività failed o expired, come nuova attività con un nuovo ID. Costa denaro.

spicyapi tasks retry <task-id> [options]
Argomento o opzioneChe cosa faPredefinitoObbligatorio
task-idL’attività fallita o scaduta da eseguire di nuovo—Sì
--waitResta in attesa finché la nuova attività non finisceDisattivataNo
--yesSalta la domanda di confermaDisattivata: chiedeNo
--idempotency-key <key>Se esegui di nuovo il nuovo tentativo con la stessa chiave, ottieni la stessa nuova attività invece di un’altraUna nuova chiave casuale a ogni esecuzioneNo
--poll-interval-ms <milliseconds>Con --wait: ogni quanto controllareParte da 2 secondi e rallenta fino a 10 secondiNo
--wait-timeout-ms <milliseconds>Con --wait: smette di attendere dopo questo tempo600000 (10 minuti)No

Chiede Retry source task … Continue? [y/N]. A differenza di tasks create, non mostra un prezzo prima di chiedere. La nuova attività viene addebitata al prezzo attuale del modello, quindi, se il prezzo conta, controllalo prima con spicyapi models get <model>.

Output: idempotencyKey, il nuovo taskId, sourceTaskId (l’originale), state, estimatedCost (l’importo accantonato) e deadlineAt.

  • Si possono ripetere solo le attività failed ed expired, più quelle canceled più vecchie. Per un’altra versione di un risultato riuscito, usa tasks create.
  • L’input originale viene riutilizzato senza modifiche, quindi un nuovo tentativo aiuta solo quando il fallimento era temporaneo. Controlla prima errorCode; vedi Ripetere un’attività fallita ed Errori.
  • Se l’input puntava a un file caricato che nel frattempo è scaduto, il nuovo tentativo fallisce; carica di nuovo il file e usa tasks create.
  • Il nuovo tentativo mantiene l’impostazione di conservazione dell’attività originale.
  • Se tasks create ha perso la connessione prima che tu vedessi un ID attività, non si tratta di un’attività fallita. Segui invece i passaggi di ripristino in Riprendere un’attività dopo un’attesa interrotta.

tasks purge

Che cosa fa: elimina per sempre i media generati, il payload del risultato (i dati del risultato archiviati), il prompt e l’altro testo dell’input di un’attività conclusa, subito, invece di aspettare che scadano.

spicyapi tasks purge <task-id> [--yes]
Argomento o opzioneChe cosa faPredefinitoObbligatorio
task-idUn’attività conclusa: succeeded, failed, expired o canceled—Sì
--yesSalta la domanda di confermaDisattivata: chiedeNo

Un’attività ancora queued o running non può essere distrutta. Non può nemmeno essere annullata, perché non esiste alcun comando né alcuna API di annullamento: attendi che finisca con spicyapi tasks wait <task-id>, poi distruggine i contenuti.

Il comando spiega che cosa verrà eliminato e ti chiede conferma, perché l’operazione non si può annullare. Prima scarica tutto ciò che vuoi conservare.

Output: taskId, contentState (purged), purgedAt, contentRemovedBy (user), billingRetained (sempre true) e mediaDeletionPending, seguiti da una riga che indica che cosa è stato distrutto e che i media archiviati vengono rimossi entro circa un minuto. Se contentState è ancora present, questa volta non è stato rimosso nulla; riprova più tardi.

Gratuito, e non è un rimborso: la voce contabile, l’importo addebitato, il modello, lo stato, gli orari e l’ID della richiesta restano registrati. Vedi Conservazione e distruzione.

files upload

Che cosa fa: carica un file dal tuo computer, per esempio l’immagine di partenza per una generazione da immagine a video, e ti restituisce un indirizzo spicy:// da inserire nell’input.

spicyapi files upload <path> [--content-type <type>]
Argomento o opzioneChe cosa faPredefinitoObbligatorio
pathIl file da caricare—Sì
--content-type <type>Il tipo di file, quando non si deduce dal nome: image/jpeg, image/png, image/webp, image/gif, video/mp4, video/webm, audio/mpeg o audio/wavRilevato dall’estensioneNo

Sono supportate le immagini .jpg, .jpeg, .png, .webp e .gif fino a 10 MiB, i video .mp4 e .webm e l’audio .mp3 e .wav fino a 90 MiB e 600 secondi. Un modello può fissare limiti propri più bassi.

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

Output: copia il valore uri esattamente come viene stampato nell’impostazione del modello dedicata al file, spesso image_url. Si può usare fino a expiresAt, di norma un giorno. Dopo, carica di nuovo il file. Il caricamento è gratuito.

files download-url

Che cosa fa: crea un nuovo link di download per il risultato di un’attività conclusa. Stampa il link, ma non salva il file.

spicyapi files download-url <task-id> [--key <key>]
Argomento o opzioneChe cosa faPredefinitoObbligatorio
task-idUn’attività riuscita—Sì
--key <key>A quale risultato puntare, quando un’attività ne ha prodotti più di uno. Usa il valore key di output.assets in tasks getIl primo risultatoNo

Output: key, url ed expiresAt. Il link funziona per circa 20 minuti; aprilo in un browser o scaricalo con curl. Un’attività non ancora riuscita risponde «not found». Se il file viene ancora copiato ricevi un errore di conflitto; aspetta qualche secondo e riprova. Una volta eliminati i file dell’attività, non si può più creare alcun link. Gratuito.

webhooks verify

Che cosa fa: se gestisci un server che riceve le callback di SpicyAPI (vedi --callback-url), verifica che una callback salvata sia autentica e non modificata. Viene eseguito interamente sul tuo computer e non richiede alcuna chiave API.

spicyapi webhooks verify --body-file <path> --timestamp <seconds> --signature <base64> --payload-version <version>
OpzioneChe cosa faPredefinitoObbligatoria
--body-file <path>Un file con il corpo della callback esattamente come è stato ricevuto, byte per byte—Sì
--timestamp <seconds>Il valore dell’intestazione X-Webhook-Timestamp—Sì
--signature <base64>Il valore dell’intestazione X-Webhook-Signature—Sì
--payload-version <version>Il valore dell’intestazione X-Webhook-Payload-Version: 1 o 2—Sì
--secret-env <name>Il nome della variabile d’ambiente che contiene la tua chiave di firma dei webhook. La chiave stessa non viene mai digitata sulla riga di comandoSPICY_WEBHOOK_SECRETNo
--tolerance-seconds <seconds>Di quanto il timestamp può discostarsi dall’orologio del tuo computer300No

Output: in caso di successo, payload (il contenuto della callback), payloadVersion, taskId, deliveryId (versione 2) e timestamp. Se qualcosa non corrisponde, stampa un errore ed esce con un codice diverso da zero. Gratuito.

Al momento della registrazione viene creata automaticamente una chiave di firma, ma il suo valore non viene mai mostrato. Per averne una da copiare, apri Webhook nella console e fai clic su Genera (oppure su Ruota, se una chiave è già configurata). La nuova chiave viene mostrata una sola volta. La rotazione ha effetto immediato, senza periodo di sovrapposizione: la vecchia chiave smette subito di firmare. Vedi Webhook.

Ricette comuni

Generare un’immagine

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

Scegli un ID con il primo comando, costruisci input.json a partire dalle impostazioni mostrate dal secondo, poi esegui il terzo e conferma con y. Il percorso guidato in Il tuo primo risultato spiega ogni passaggio.

Trasformare un’immagine in un video

Trova un modello da immagine a video e le sue impostazioni

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

In inputSchema trova l’impostazione per l’immagine di partenza (di solito image_url), quella per la durata (di solito duration_seconds) e tutto ciò che compare in required.

Carica la tua immagine

spicyapi files upload ./start-frame.jpg

Copia il valore uri, che inizia con spicy://.

Scrivi l’input

Crea input.json come in Il tuo primo risultato, usando i nomi delle impostazioni del modello e il tuo uri:

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

Controlla il prezzo, poi genera

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

Di solito i video si pagano al secondo, quindi la durata che scegli cambia il prezzo. I video possono richiedere diversi minuti, perciò questo esempio attende fino a 30 minuti invece dei 10 predefiniti. Scarica il file .mp4 dall’url come in Il tuo primo risultato.

L’immagine caricata si può usare per un giorno. Dopo, caricala di nuovo.

Riprendere un’attività dopo un’attesa interrotta

Un’attività continua a girare anche se il terminale si chiude, la rete cade, il computer va in sospensione o l’attesa scade. Come ritrovarla dipende da che cosa hai visto:

  • Hai visto Accepted: job_…, oppure una riga Recover: sotto l’errore. Hai l’ID attività. Attendi di nuovo, oppure limitati a consultarla:

    spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000
    spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3
  • Hai visto solo la riga Idempotency-Key:, per esempio perché la connessione è caduta mentre l’attività veniva creata. Esegui di nuovo lo stesso comando, con lo stesso modello e lo stesso input, e aggiungi quella chiave:

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

    La CLI mostra il prezzo e chiede di nuovo conferma, ma se il primo tentativo era stato accettato, SpicyAPI ti restituisce quella stessa attività invece di avviarne, e addebitarne, una seconda. Funziona per 24 ore con la stessa chiave API. Se il primo tentativo non era mai arrivato, l’attività viene creata adesso, una sola volta.

  • Non hai né l’uno né l’altra. Elenca le tue attività recenti e ritrovala in base all’orario e al modello:

    spicyapi --json tasks list --limit 10

Ripetere un’attività fallita

Per prima cosa scopri perché è fallita:

spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3

Poi leggi errorCode. Le attività fallite o scadute normalmente liberano l’intero importo accantonato. Alcuni rifiuti di contenuto vengono addebitati al preventivo accettato, solo se la pagina del modello indica esplicitamente questa eccezione. Controlla settled e cost per conoscere l’importo finale. tasks retry invia di nuovo lo stesso input, quindi aiuta solo quando la causa era temporanea:

errorCodeChe cosa fare
rate_limited, upstream_unavailable, timeout, upstream_failedAspetta un po’, poi riprova una volta. Se fallisce di nuovo, smetti di riprovare: per timeout, prova con tasks create una durata più breve o una risoluzione più bassa
generation_failedNon riprovare. Cambia il prompt o l’immagine, poi usa tasks create: lo stesso input di solito fallisce nello stesso modo
invalid_assetNon riprovare, perché il nuovo tentativo riutilizza il vecchio file. Carica di nuovo il file, poi usa tasks create con il nuovo uri
invalid_request, unsupported_combinationNon riprovare senza modifiche. Cambia le impostazioni, poi usa tasks create
content_rejectedNon riprovare senza modifiche. Il modello ha rifiutato questa richiesta: cambia il prompt o scegli un altro modello, poi usa tasks create

L’elenco completo è in Errori.

Quando un nuovo tentativo ha senso, eseguilo. Crea, e addebita, una nuova attività:

spicyapi tasks retry job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait

Esportare i consumi

Salva in un file un mese di consumi della chiave attuale:

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

Il file contiene i totali giornalieri e per modello. Per un elenco attività per attività, salva allo stesso modo spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --limit 100, seguendo nextCursor finché hasMore vale true. I dati dell’intero account e le fatture si trovano nella console.

Eseguire la CLI da uno script

In uno script nessuno può rispondere a Continue? [y/N], quindi i comandi a pagamento si rifiutano di partire se non aggiungi --yes. Quando lo fai:

  • chiedi prima un preventivo e controlla il prezzo nello script;
  • assegna a ogni generazione una propria --idempotency-key fissa, come poster-2026-09-17-v1, così eseguire lo script due volte non addebita due volte;
  • aggiungi --json e leggi state dal risultato: un comando che esce con codice 0 non ha necessariamente prodotto un’attività riuscita;
  • imposta limiti di spesa sulla chiave nella 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

Costi, conferme e sicurezza

Quali comandi costano denaro. Solo tasks create e tasks retry. I prezzi sono in dollari statunitensi. Chiedere preventivi, elencare, controllare, caricare, scaricare ed eliminare è gratuito.

Vedere prima il prezzo. tasks quote calcola il prezzo di una richiesta senza avviare nulla. tasks create chiede un proprio preventivo e mostra Estimated charge e maximum charge prima di chiedere conferma. Quando l’attività viene accettata, l’importo stimato viene accantonato (held) ed è anche il massimo che ti può essere addebitato. Quando l’attività riesce paghi ciò che è stato effettivamente prodotto, mai più di quell’importo, e l’eventuale differenza torna sul tuo saldo.

La conferma. Continue? [y/N] significa che la risposta è no, a meno che tu non digiti y. --yes risponde al posto tuo, quindi usalo solo quando conosci il prezzo. Se la CLI gira dove non può fare domande, come in uno script o con un input passato tramite pipe, e manca --yes, si rifiuta di procedere invece di dare per scontato un sì. tasks purge chiede conferma allo stesso modo, perché l’eliminazione non si può annullare. Anche tasks retry chiede conferma, ma senza mostrare prima un prezzo.

La chiave di idempotenza, in parole semplici. È un’etichetta per una generazione, come un numero d’ordine. Ogni tasks create e tasks retry ne stampa una. Se la connessione a internet cade e non sai se la generazione è partita, esegui di nuovo lo stesso comando con --idempotency-key e il valore stampato: riottieni l’attività originale e non paghi due volte. L’etichetta vale per 24 ore con la stessa chiave API. Non riutilizzarla per una generazione diversa: la stessa chiave con un input diverso viene rifiutata.

Nessun annullamento. Una volta accettata, un’attività non può essere annullata. Ctrl + C, la chiusura del terminale o la revoca della chiave fermano soltanto l’attesa; l’attività arriva alla fine e viene addebitata normalmente.

Le attività fallite o scadute normalmente liberano l’intero importo accantonato. Alcuni rifiuti di contenuto vengono addebitati al preventivo accettato, solo se la pagina del modello indica esplicitamente questa eccezione. Controlla settled e cost per conoscere l’importo finale.

Scarica ciò che vuoi conservare. I file dei risultati vengono conservati al massimo per circa 14 giorni, o meno se lo prevedono il tuo account o --retention, poi vengono eliminati per sempre. I link di download durano circa 20 minuti, ma finché il file esiste puoi sempre chiederne uno nuovo. I file caricati si possono usare per un giorno. Il testo dei prompt viene cancellato dopo 30 giorni per impostazione predefinita. Le registrazioni di fatturazione vengono conservate. Vedi Conservazione e distruzione.

Limiti di spesa. Ogni chiave può avere limiti giornalieri, mensili e complessivi, da impostare nella pagina Chiavi API. Le chiavi nuove non hanno alcun limite finché non ne imposti uno. Un’attività che supererebbe un limite viene rifiutata prima di partire.

La tua chiave. La CLI legge la chiave solo da SPICY_API_KEY, non la stampa mai e nei suggerimenti degli errori ne mostra al massimo i primi nove caratteri (sk-spicy-).

Per approfondire: Fatturazione, Idempotenza, Impegno dell’attività e nuovi tentativi.

Risoluzione dei problemi

Cerca il messaggio che vedi. Gli errori di SpicyAPI terminano con (request req_…); se contatti l’assistenza, includi quel valore, ma non inviare mai la tua chiave.

Ogni codice di errore è spiegato in Errori, e i passaggi di ripristino sono in Diagnosi e ripristino.

Codice sorgente

Il pacchetto ha licenza MIT ed è sviluppato in modo aperto su github.com/spicyapi-ai/spicy-cli. È lì che si legge il codice dietro a ogni comando di questa pagina, si segnala un comportamento diverso da quello descritto e si propone una modifica.

Prossimi passi

In questa pagina