Outil en ligne de commande (CLI)
Utilisez la commande spicyapi pour parcourir les modèles, vérifier les prix, générer des images et des vidéos et télécharger les résultats depuis un terminal, sans écrire de code.
Ce qu’est la CLI
spicyapi est un petit programme qui s’exécute dans un terminal, la fenêtre où l’on tape des commandes au lieu de cliquer sur des boutons. Chaque commande remplit une seule fonction : lister les modèles que votre compte peut utiliser, vous dire ce que coûtera une génération, lancer une génération d’image ou de vidéo, attendre qu’elle se termine et vous donner un lien pour télécharger le résultat.
Vous n’écrivez aucun code. Vous tapez une commande, vous appuyez sur Entrée et vous lisez la réponse.
Elle est tout indiquée quand vous voulez :
- essayer des modèles et comparer les prix avant que quiconque écrive une intégration ;
- générer des images ou des vidéos depuis votre propre ordinateur et enregistrer les fichiers ;
- répéter le même type de génération sans refaire tous les clics sur une page à chaque fois ;
- vérifier les réglages exacts d’un modèle avant de construire quelque chose par-dessus.
La CLI couvre la génération d’images et de vidéos. Les modèles de texte et de chat s’appellent via les points de terminaison compatibles chat décrits dans Texte et streaming.
Il existe trois autres outils officiels. Choisissez la CLI si vous voulez taper les commandes vous-même :
| Outil | Choisissez-le quand |
|---|---|
| SDK | Vous écrivez un programme JavaScript ou TypeScript qui appelle SpicyAPI |
| Serveur MCP | Vous voulez qu’un assistant de code IA exécute ces mêmes étapes pour vous |
| Agent Skill | Vous voulez apprendre à un agent IA la manière sûre d’utiliser SpicyAPI |
Vous écrivez dans un autre langage ? Il existe aussi des SDK officiels pour Python, Go, PHP et Java.
Rien sur cette page ne dépense d’argent par accident
Seules deux commandes peuvent coûter de l’argent : tasks create et tasks retry. Toutes deux s’arrêtent et vous demandent votre accord avant la moindre facturation. Tout le reste est gratuit, aussi souvent que vous le voulez.
Ce que vous pouvez faire
| Je veux… | Commande | Payant ? | Clé API nécessaire ? |
|---|---|---|---|
| Vérifier que SpicyAPI est joignable | spicyapi status | Non | Non |
| Chercher dans cette documentation | spicyapi docs search <words> | Non | Non |
| Voir les modèles que je peux utiliser, et leurs prix | spicyapi models list | Non | Oui |
| Voir les réglages qu’accepte un modèle | spicyapi models get <model> | Non | Oui |
| Consulter mon solde | spicyapi balance | Non | Oui |
| Voir combien une clé a dépensé | spicyapi usage | Non | Oui |
| Connaître le prix exact d’une génération sans la lancer | spicyapi tasks quote | Non | Oui |
| Lancer une génération d’image ou de vidéo | spicyapi tasks create | Oui, après vous avoir demandé | Oui |
| Attendre qu’une génération se termine | spicyapi tasks wait <task-id> | Non | Oui |
| Consulter une génération et ses liens de résultat | spicyapi tasks get <task-id> | Non | Oui |
| Lister mes générations récentes | spicyapi tasks list | Non | Oui |
| Relancer une génération échouée | spicyapi tasks retry <task-id> | Oui, après vous avoir demandé | Oui |
| Supprimer définitivement les fichiers et le prompt d’une génération | spicyapi tasks purge <task-id> | Non, et rien n’est remboursé | Oui |
| Téléverser une image, une vidéo ou un fichier audio à utiliser comme entrée | spicyapi files upload <path> | Non | Oui |
| Obtenir un nouveau lien de téléchargement pour un résultat | spicyapi files download-url <task-id> | Non | Oui |
| Vérifier qu’un callback vient vraiment de SpicyAPI | spicyapi webhooks verify | Non | Non, elle utilise votre clé de signature des webhooks |
Dans les commandes ci-dessus, un mot entre chevrons comme <task-id> signifie « mettez ici votre propre valeur », sans les chevrons.
Avant de commencer
Il vous faut quatre choses : un terminal, Node.js, une clé API et un moyen de lancer la CLI. Comptez une dizaine de minutes la première fois.
Ouvrir un terminal
Un terminal est une fenêtre de texte qui sert à exécuter des commandes. Tout ce qui figure sur cette page se tape ou se colle là, puis s’exécute avec Entrée.
Appuyez sur Cmd + Espace, tapez Terminal et appuyez sur Entrée. Une fenêtre s’ouvre avec une ligne qui se termine par % ou $ : c’est là que vous tapez. Collez avec Cmd + V.
Installer Node.js 22.13 ou plus récent
La CLI fonctionne grâce à Node.js, un programme gratuit. Vérifiez s’il est déjà installé :
node -vSi la commande affiche v22.13.0 ou un numéro plus élevé, comme v22.14.0 ou v24.4.1, vous êtes prêt. Si elle affiche un numéro inférieur, ou indique command not found ou is not recognized :
- Allez sur nodejs.org, ouvrez la page de téléchargement et choisissez la version LTS pour votre système.
- Lancez l’installeur et acceptez les options par défaut.
- Fermez le terminal et ouvrez-en un nouveau, puis relancez
node -v.
Node.js est fourni avec npm et npx, les deux utilitaires dont se sert la dernière étape.
Créer une clé API
La clé API permet à SpicyAPI de savoir que la requête vient de votre compte.
- Créez un compte sur spicyapi.ai/register. Les comptes peuvent être ouverts par vagues ; si l’inscription n’est pas encore ouverte pour vous, rejoignez la liste d’attente.
- Approvisionnez votre solde dans Facturation, dans la console. Les générations sont payées sur votre solde, en dollars américains.
- Ouvrez Clés API et cliquez sur Créer une clé. Donnez-lui un nom que vous reconnaîtrez plus tard, comme
my laptop. Seul le nom est obligatoire. - Copiez la clé immédiatement. Elle commence par
sk-spicy-et n’est affichée qu’une seule fois. Vous pouvez aussi utiliser Enregistrer dans un fichier.
Les nouvelles clés n’ont aucun plafond de dépense tant que vous n’en réglez pas un. Un plafond quotidien évite qu’une erreur ou une clé divulguée fasse grimper la facture, et vous pourrez le modifier plus tard sur la même page.
Traitez la clé comme un mot de passe
Quiconque possède votre clé peut dépenser votre solde. Ne l’envoyez ni par messagerie ni par e-mail, ne la montrez ni sur une capture d’écran ni dans une demande d’assistance, et ne l’enregistrez jamais dans un dossier de projet destiné à Git ou à GitHub. Si elle a fuité, révoquez-la sur la page Clés API et créez-en une nouvelle.
Placer la clé dans SPICY_API_KEY
La CLI n’a pas de commande de connexion et n’accepte jamais la clé comme option de commande. Elle lit une variable d’environnement nommée SPICY_API_KEY : une valeur nommée que votre terminal transmet aux programmes qu’il lance.
Pour la fenêtre actuelle uniquement (la valeur est oubliée quand vous fermez la fenêtre) :
export SPICY_API_KEY="sk-spicy-paste-your-key-here"De façon permanente, ajoutez cette même ligne export à la fin du fichier de démarrage de votre shell, qui s’exécute à chaque ouverture d’un terminal. Sur macOS, ce fichier est ~/.zshrc ; sur la plupart des systèmes Linux, c’est ~/.bashrc.
nano ~/.zshrcCollez la ligne export tout en bas, appuyez sur Ctrl + O puis sur Entrée pour enregistrer, et sur Ctrl + X pour quitter. Sous Linux, utilisez plutôt nano ~/.bashrc. Ouvrez une nouvelle fenêtre de terminal pour que la modification prenne effet.
Vérifiez que la variable est définie, sans afficher la clé entière :
echo "${SPICY_API_KEY:0:9}"La commande doit afficher sk-spicy-.
Où la clé peut se trouver, et où elle ne doit jamais aller
Le fichier de démarrage de votre shell et les réglages de votre compte Windows restent sur cet ordinateur, ce qui convient pour un usage personnel. Ne mettez jamais la clé dans un fichier à l’intérieur d’un projet, ne la versionnez jamais et ne la collez jamais dans un document partagé. Les terminaux gardent aussi en mémoire les commandes que vous tapez : sur un ordinateur partagé, préférez le fichier de démarrage ou la boîte de dialogue des réglages Windows plutôt que de taper la clé dans une commande.
Choisir comment lancer la CLI
Il y a deux façons de faire, et les commandes sont les mêmes.
npx télécharge la CLI quand c’est nécessaire et l’exécute :
npx @spicyapi/cli statusLa première fois, npm demande Need to install the following packages: @spicyapi/cli@… Ok to proceed? (y). Appuyez sur y puis sur Entrée.
Avec cette méthode, écrivez npx @spicyapi/cli partout où cette page écrit spicyapi. Par exemple, spicyapi models list devient npx @spicyapi/cli models list.
Votre premier résultat
Ce parcours génère une image et la télécharge. Chaque étape montre la commande, à peu près ce que vous verrez, et ce qui vient de se passer. Vos chiffres, vos identifiants et vos horaires seront différents.
Remplacez MODEL_ID_FROM_CATALOG par un vrai identifiant de modèle
MODEL_ID_FROM_CATALOG est un emplacement réservé, pas un modèle. L’étape 3 montre comment choisir un vrai identifiant dans le catalogue en direct (live catalog) avec spicyapi models list, qui renvoie la même liste que GET /api/v1/models. Collez votre identifiant partout où cette page affiche l’emplacement réservé. Envoyer l’emplacement réservé lui-même ne renvoie qu’une erreur « not found ».
Vérifier la connexion
spicyapi statusSpicyAPI is reachable — api.spicyapi.ai answered in 523 ms.Ce qui s’est passé : la CLI a demandé à SpicyAPI s’il fonctionne. Cela ne demande aucune clé et ne coûte rien. Si vous voyez « could not be reached », vérifiez votre connexion internet ou votre proxy ; voir Dépannage.
Consulter votre solde
spicyapi balanceavailable: 12.34
held: 0.06
total: 12.40Ce qui s’est passé : c’est la première commande qui utilise votre clé. Les montants sont en dollars américains. available est ce que vous pouvez dépenser maintenant, held est mis de côté pour des générations encore en cours, et total est la somme des deux. Vous pouvez aussi voir une ligne funding qui répartit le solde entre fonds prépayés et dotations promotionnelles.
Si vous voyez Error: SPICY_API_KEY is required for authenticated API operations, la clé n’est pas définie dans cette fenêtre de terminal. La ligne Next: juste en dessous indique comment la définir ; voir aussi Avant de commencer.
Choisir un modèle
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" }
]
}
]
}Cet exemple est raccourci : la vraie liste contient davantage de modèles et de champs.
Ce qui s’est passé : la CLI a récupéré les modèles que votre compte peut appeler aujourd’hui, à vos prix. Choisissez-en un dont enabled et available valent tous deux true, et copiez sa valeur model, par exemple en la sélectionnant à la souris. Cette valeur est l’identifiant de modèle. Les identifiants ont la forme maker/model/task.
priceest en dollars américains parunit:per_image,per_secondde vidéo,per_requestouper_1k_tokens.- Plusieurs entrées dans
pricingsignifient que le prix dépend de vos réglages, comme la résolution. - Pour trouver un modèle par son nom, ajoutez
--searchsuivi d’une partie de son nom.
--json affiche la liste sous forme de JSON lisible et indenté. Sans cette option, toute la liste est tassée sur une seule longue ligne.
Voir les réglages qu’accepte ce modèle
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
}
}Ce qui s’est passé : inputSchema est la liste des réglages du modèle, que la suite de cette page appelle l’entrée.
requiredliste les réglages que vous devez envoyer. Ici, uniquementprompt.propertiesliste tous les réglages que le modèle accepte, et rien d’autre n’est autorisé : un seul nom inconnu ou mal orthographié suffit à faire refuser toute la requête.enumliste les seules valeurs autorisées pour ce réglage.
Chaque modèle a ses propres réglages : lisez-les donc toujours pour le modèle que vous avez choisi. Pour obtenir des entrées toutes prêtes, déjà validées par le serveur, lancez spicyapi models list --search <name> --include-examples --json et regardez examples.
Écrire votre entrée dans un fichier
Placez l’entrée dans un fichier nommé input.json, dans le dossier où se trouve votre terminal. Un fichier évite les problèmes de guillemets, surtout sous Windows.
Collez les trois lignes d’un coup :
cat > input.json <<'EOF'
{"prompt": "A paper lantern glowing on a rainy street at night, cinematic light"}
EOFCe qui s’est passé : vous avez décrit ce qu’il faut générer, avec les noms de réglages de l’étape précédente. Les guillemets doivent être des guillemets droits ordinaires ("), pas des guillemets courbes.
Vérifier le prix
spicyapi tasks quote --model MODEL_ID_FROM_CATALOG --input-file input.jsonquoteId: eyJ2IjoxLCJtIjoi…
model: MODEL_ID_FROM_CATALOG
estimatedCost: 0.03
maxCharge: 0.03
currency: USD
quantity: 1
unit: per_image
expiresAt: 2026-09-17T08:05:00ZCe qui s’est passé : SpicyAPI a calculé le prix de cette requête précise. Rien n’a été lancé et rien n’a été facturé. estimatedCost est ce que la génération devrait coûter, et maxCharge le maximum qu’elle peut coûter. Cette étape est facultative : la commande suivante redemande le prix et vous l’affiche avant de dépenser quoi que ce soit.
Lancer la génération et l’attendre
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --waitLa CLI affiche d’abord le prix et vous demande de confirmer :
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]Tapez y et appuyez sur Entrée. Toute autre réponse annule, et rien n’est facturé. Répondez dans les cinq minutes, avant que le devis expire.
Dès que SpicyAPI accepte le travail, la CLI affiche son identifiant de tâche :
Accepted: job_01k3m8x9q2z4v7n5p6r8s0t1w3
If waiting is interrupted: spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3Une image prend généralement quelques secondes, une vidéo quelques minutes. Quand la génération est terminée, le résultat s’affiche :
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,…}Ce qui s’est passé : après votre y, SpicyAPI a accepté la génération, que l’on appelle désormais une tâche, et a mis de côté le montant estimé sur votre solde. La CLI a ensuite consulté la tâche toutes les quelques secondes jusqu’à ce qu’elle se termine. Sur la dernière ligne, cherchez "state":"succeeded" et l’"url" à l’intérieur de output. cost est le montant facturé définitif une fois que settled vaut true. Ajoutez --json à la commande si vous préférez un résultat réparti sur plusieurs lignes lisibles.
Fermer la fenêtre n’annule pas la tâche
Une fois acceptée, une tâche va toujours jusqu’au bout et est facturée normalement. Appuyer sur Ctrl + C ou fermer le terminal n’arrête que l’attente. Gardez l’identifiant de la tâche et reprenez le suivi avec spicyapi tasks wait <task-id> ; voir Reprendre une tâche après une attente interrompue.
Télécharger le résultat
L’url est un lien de téléchargement direct qui fonctionne pendant environ 20 minutes et ne demande aucune clé. Collez-le dans un navigateur et enregistrez le fichier, ou téléchargez-le depuis le terminal (gardez les guillemets, car le lien contient des caractères &) :
curl -L -o result.png "PASTE_THE_URL_HERE"Utilisez l’extension de fichier qui correspond à mime : .png pour image/png, .jpg pour image/jpeg, .mp4 pour video/mp4.
Si le lien a expiré, obtenez-en un nouveau avec spicyapi files download-url <task-id>, ou lancez spicyapi tasks get <task-id>, qui renvoie des liens neufs.
Ce qui s’est passé : vous avez copié le résultat sur votre propre ordinateur. Ne tardez pas : SpicyAPI conserve les fichiers générés environ 14 jours au plus (moins si votre compte est réglé sur une durée plus courte), puis les supprime définitivement. Voir Conservation et destruction.
Lire ce qu’affiche la CLI
- L’affichage normal montre une paire
name: valuepar ligne. Les valeurs composées de plusieurs parties, commeoutputouretention, sont affichées en JSON sur une seule ligne. --jsonaffiche la réponse complète en JSON indenté. L’option fonctionne avec toutes les commandes, avant ou après le nom de la commande :spicyapi --json balanceetspicyapi balance --jsonreviennent au même.- Les résultats vont sur la sortie normale de l’écran ; les messages vont sur la sortie d’erreur. Les prix, la clé d’idempotence, les lignes
Accepted:et les erreurs sont des messages. Ainsi,spicyapi --json tasks get <task-id> > task.jsonn’enregistre que le résultat danstask.json, tandis que les messages continuent de s’afficher à l’écran. - Les erreurs ressemblent à
Error: <what went wrong> (request req_…), généralement suivies d’une ligneNext:qui indique quoi faire. Avec--json, une erreur est un objet JSON sur une seule ligne avecerror,type,status,codeetrequestId, sans ligneNext:. Quand aucune clé n’est définie,typevautMissingApiKeyError. Citez la valeurreq_…si vous contactez l’assistance. - Les montants sont des dollars américains écrits en texte simple, sans signe
$, comme0.03. - Les heures sont en UTC. Le
Zà la fin de2026-09-17T08:05:00Zsignifie UTC. - Le code de sortie vaut
0quand une commande réussit et une autre valeur quand elle échoue, ce que les scripts peuvent vérifier.
Référence des commandes
Chaque commande a aussi une aide intégrée : ajoutez --help, par exemple spicyapi tasks create --help.
Options globales et variables d’environnement
Ces options fonctionnent avec toutes les commandes.
| Option | Ce qu’elle fait | Par défaut | Obligatoire |
|---|---|---|---|
--json | Affiche le résultat complet en JSON | Désactivée | Non |
--timeout-ms <milliseconds> | Combien de temps attendre une réponse de SpicyAPI avant d’abandonner, de 1 à 120000 | 30000 (30 secondes) | Non |
--max-retries <count> | Combien de fois réessayer automatiquement après une erreur réseau, un 429 ou une erreur serveur, pour les requêtes qui peuvent être répétées sans risque, de 0 à 5 | 2 | Non |
--api-base-url <url> | Envoie les requêtes API à une autre adresse. Normalement, vous n’en avez jamais besoin | https://api.spicyapi.ai/api/v1 | Non |
--service-base-url <url> | L’adresse que vérifie status. Normalement, vous n’en avez jamais besoin | https://api.spicyapi.ai | Non |
-V, --version | Affiche la version de la CLI | — | Non |
-h, --help | Affiche l’aide de la commande | — | Non |
| Variable d’environnement | À quoi elle sert |
|---|---|
SPICY_API_KEY | Votre clé API. Nécessaire pour toutes les commandes sauf status, docs search et webhooks verify |
SPICY_WEBHOOK_SECRET | Votre clé de signature des webhooks, lue par webhooks verify |
SPICY_API_BASE_URL, SPICY_SERVICE_BASE_URL | Équivalents des deux options d’adresse ci-dessus. Les adresses doivent utiliser https:// |
status
Ce qu’elle fait : vérifie que SpicyAPI fonctionne et qu’il est joignable depuis votre ordinateur.
spicyapi statusAucune option. Aucune clé nécessaire. Gratuit.
Ce qui s’affiche : une phrase. SpicyAPI is reachable — … answered in … ms. signifie que tout va bien. could not be reached signifie que votre ordinateur n’a obtenu aucune réponse : vérifiez votre réseau ou votre proxy. is not healthy ou reports it is not ready signalent un problème de notre côté ; les incidents en cours sont listés sur status.spicyapi.ai.
Avec --json, vous voyez les vérifications brutes. operational: true est la réponse qui compte ; une entrée readiness avec le statut 404 est normale sur l’adresse publique.
docs search
Ce qu’elle fait : trouve la page de documentation qui traite d’un sujet. Elle cherche dans un petit index intégré à la CLI : elle fonctionne donc sans clé et sans appeler SpicyAPI. Chaque résultat renvoie vers la page correspondante de ce site de documentation, docs.spicyapi.ai.
spicyapi docs search [words] [--limit <count>]| Argument ou option | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
words | Les mots à chercher. Omettez-les pour lister les pages | Vide | Non |
--limit <count> | Nombre maximal de résultats, de 1 à 25 | 10 | Non |
spicyapi docs search retentionslug: 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/retentionQuand il y a plusieurs résultats, ils s’affichent les uns après les autres, et chacun commence par slug:. Si rien ne correspond, la commande le dit et se termine quand même avec le code 0 :
No documentation matched "refnd". Try fewer or different words, or run `spicyapi docs search` without words to browse pages.Avec --json, l’absence de résultat affiche une liste vide, []. Gratuit.
models list
Ce qu’elle fait : liste les modèles que votre compte peut appeler aujourd’hui, aux prix que paie votre compte.
spicyapi models list [options]| Option | Ce qu’elle fait | Par défaut | Obligatoire |
|---|---|---|---|
--modality <type> | Uniquement les modèles image, video ou text. L’option accepte aussi audio, mais aucun modèle audio n’est proposé aujourd’hui | Tous | Non |
--task <task> | Uniquement un type de travail, comme text-to-image, edit, image-to-video, text-to-video ou reference-to-video | Tous | Non |
--provider <name> | Uniquement les modèles d’un créateur de modèles, c’est-à-dire l’entreprise ou le laboratoire qui a conçu le modèle. Doit correspondre exactement à la valeur provider | Tous | Non |
--search <text> | Uniquement les modèles dont l’identifiant ou le nom affiché contient ce texte, sans tenir compte des majuscules et des minuscules | Aucun | Non |
--include-schema | Ajoute les réglages complets de chaque modèle (inputSchema). Rend l’affichage beaucoup plus volumineux | Désactivée | Non |
--include-examples | Ajoute des exemples d’entrées tout prêts, déjà validés par le serveur (examples) | Désactivée | Non |
spicyapi models list --modality video --task image-to-video --jsonCe qui s’affiche : total et items. Utilisez --json, car sans cette option tous les éléments s’affichent sur une seule ligne. Les champs les plus utiles de chaque élément :
| Champ | Signification |
|---|---|
model | L’identifiant de modèle à utiliser dans les autres commandes |
displayName, provider, modality, tasks | Le nom, le créateur du modèle, le type de résultat produit et le type de travail |
enabled, available | Utilisez les modèles pour lesquels les deux valent true |
pricing | Une entrée par niveau de prix : variant (par exemple une résolution), unit, price en USD, plus regularPrice et offerLabel quand une remise s’applique |
taskTimeoutSeconds | Combien de temps une génération peut durer avant de se terminer en expired |
maxOutputDurationSeconds | La durée de vidéo maximale que ce modèle autorise, quand il en fixe une |
Gratuit. La liste des modèles compte dans le débit de requêtes de votre compte : inutile de la lancer avant chaque génération.
models get
Ce qu’elle fait : affiche un modèle en détail, y compris les réglages qu’il accepte.
spicyapi models get <model>| Argument | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
model | L’identifiant de modèle exact. Les barres obliques qu’il contient s’écrivent telles quelles | — | Oui |
spicyapi models get MODEL_ID_FROM_CATALOG --jsonCe qui s’affiche : les mêmes champs que models list, plus inputSchema. Dans inputSchema, lisez required (les réglages à envoyer obligatoirement), properties (chaque réglage autorisé et son type), enum (les seules valeurs autorisées), minimum et maximum (les bornes des nombres) et default (la valeur utilisée si vous omettez le réglage). Les entrées nommées x-ui sont des indications pour construire des formulaires ; vous pouvez les ignorer. Gratuit.
balance
Ce qu’elle fait : indique combien d’argent est disponible sur votre compte.
spicyapi balanceAucune option. Gratuit.
Ce qui s’affiche : available (ce que vous pouvez dépenser maintenant), held (mis de côté pour des tâches encore en cours) et total, le tout en dollars américains. L’affichage peut aussi inclure funding, qui répartit le solde entre fonds prépayés et dotations promotionnelles, avec la date d’expiration des dotations et les modèles qu’elles financent. Inutile de vérifier le solde avant chaque génération : tasks create le fait pour vous.
usage
Ce qu’elle fait : indique combien de générations la clé API actuelle a exécutées et ce qu’elles ont coûté, regroupées par jour et par modèle.
spicyapi usage [--from <date>] [--to <date>]| Option | Ce qu’elle fait | Par défaut | Obligatoire |
|---|---|---|---|
--from <date> | Premier jour à inclure, au format YYYY-MM-DD en UTC | Les sept derniers jours, aujourd’hui compris | Non |
--to <date> | Le jour qui suit le dernier jour à inclure, au format YYYY-MM-DD en UTC. La plage peut couvrir 92 jours au plus | Les sept derniers jours, aujourd’hui compris | Non |
spicyapi usage --from 2026-09-01 --to 2026-10-01Cette commande couvre tout le mois de septembre : --to est le premier jour non inclus. Omettez les deux options pour voir les sept derniers jours, aujourd’hui compris.
Ce qui s’affiche : from, to, currency, totalCalls, totalSpend, puis days (par jour : calls, succeeded, failed, spend) et models (les mêmes chiffres par modèle). totalSpend ne compte que les montants définitivement facturés. days et models décrivent les mêmes tâches de deux façons : ne les additionnez donc pas. Pour votre compte entier plutôt que pour une seule clé, utilisez la page Consommation de la console.
Gratuit. La commande est limitée à 30 appels par minute : servez-vous-en pour vérifier des totaux, pas dans une boucle.
tasks quote
Ce qu’elle fait : vous dit exactement ce que coûterait une génération, sans la lancer et sans mettre d’argent de côté.
spicyapi tasks quote --model <model> --input-file <path>| Option | Ce qu’elle fait | Par défaut | Obligatoire |
|---|---|---|---|
--model <model> | L’identifiant de modèle exact | — | Oui |
--input-file <path> | Lit l’entrée dans un fichier JSON. Utilisez - pour la lire depuis ce qui est redirigé vers la commande | — | Celle-ci ou --input-json |
--input-json <json> | Fournit l’entrée directement sous forme de texte JSON. Les guillemets sont plus simples à gérer avec --input-file | — | Celle-ci ou --input-file |
--callback-url <url> | L’adresse de callback que vous comptez utiliser, puisqu’elle fait partie de la requête dont le prix est calculé | Aucune | Non |
Ce qui s’affiche : quoteId, model, estimatedCost, maxCharge, currency, quantity (par exemple le nombre de secondes facturées), unit et expiresAt. Un devis est valable cinq minutes.
Gratuit, sans confirmation. Servez-vous-en pour comparer des modèles ou des réglages. Vous n’êtes pas obligé de la lancer avant tasks create, qui obtient son propre devis.
tasks create
Ce qu’elle fait : lance une génération d’image ou de vidéo. Elle coûte de l’argent. La CLI affiche toujours le prix et demande d’abord votre accord.
spicyapi tasks create --model <model> --input-file <path> [options]| Option | Ce qu’elle fait | Par défaut | Obligatoire |
|---|---|---|---|
--model <model> | L’identifiant de modèle exact | — | Oui |
--input-file <path> | Lit l’entrée dans un fichier JSON. - la lit depuis ce qui est redirigé vers la commande, ce qui exige aussi --yes | — | Celle-ci ou --input-json |
--input-json <json> | Fournit l’entrée directement sous forme de texte JSON | — | Celle-ci ou --input-file |
--wait | Reste jusqu’à la fin de la tâche, puis affiche le résultat | Désactivée : affiche l’identifiant de la tâche et rend la main | Non |
--yes | Saute la question de confirmation. À n’utiliser qu’une fois le prix connu, en général dans des scripts | Désactivée : la question est posée | Non |
--idempotency-key <key> | Un nom pour « cette génération-là ». Relancer la commande avec la même clé dans les 24 heures vous rend la même tâche au lieu d’en créer une nouvelle. Jusqu’à 128 caractères | Une nouvelle clé aléatoire à chaque exécution | Non |
--retention <duration> | Supprime plus tôt que d’habitude les médias générés, le résultat, le prompt et les autres textes d’entrée de cette tâche : 30m, 1h, 7d ou un nombre de secondes. Ne peut que raccourcir. 0 les supprime dès que la tâche se termine. Les enregistrements de facturation sont toujours conservés | Le réglage de votre compte | Non |
--callback-url <url> | Une adresse publique commençant par https:// que SpicyAPI appelle quand la tâche se termine. Les adresses en http:// simple, localhost et les adresses de réseau privé sont refusées. Utile uniquement si vous gérez un serveur ; voir Webhooks | Aucune | Non |
--poll-interval-ms <milliseconds> | Avec --wait : intervalle entre deux vérifications, en millisecondes, de 100 à 60000 | Commence à 2 secondes et ralentit jusqu’à 10 secondes | Non |
--wait-timeout-ms <milliseconds> | Avec --wait : arrête d’attendre au bout de cette durée, de 1 à 86400000. La tâche continue de s’exécuter | 600000 (10 minutes) | Non |
Ce qui se passe, dans l’ordre :
- La CLI lit votre entrée et vérifie qu’il s’agit d’un objet JSON. Si vous n’avez fourni aucune entrée, elle s’arrête ici.
- Si personne ne peut répondre à une question, par exemple dans un script, et que vous n’avez pas passé
--yes, elle s’arrête ici. - Elle obtient un devis et affiche le montant estimé, le montant maximal, l’heure d’expiration du devis et la clé d’idempotence.
- Elle demande
Continue? [y/N]. Seulsyouyespermettent de continuer. La réponse par défaut est non. - Elle crée la tâche au prix du devis. Le montant estimé est mis de côté sur votre solde, et ce montant est aussi le maximum que la tâche peut coûter.
- Sans
--wait, elle afficheidempotencyKey,taskId,state(queued),estimatedCostetdeadlineAt, puis rend la main. Avec--wait, elle affiche aussitôtAccepted: <task-id>et une commande de reprise, attend, puis afficheidempotencyKey,acceptedet lataskterminée.
deadlineAt est l’heure limite à laquelle la tâche peut se terminer avant de passer en expired. Ce n’est pas l’heure d’expiration de votre lien de téléchargement ni de vos fichiers.
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --waitSur macOS et Linux, vous pouvez aussi fournir l’entrée directement dans la commande :
spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-json '{"prompt": "A paper lantern on a rainy street"}'Si l’attente échoue, la tâche continue
Une attente peut se terminer prématurément à cause de la limite de temps, d’un problème réseau ou d’un Ctrl + C. La tâche elle-même continue et est facturée normalement. La ligne Accepted: affichée au début contient son identifiant ; poursuivez avec spicyapi tasks wait <task-id>. Ne relancez pas simplement la même commande de création sans --idempotency-key : cela lancerait, et facturerait, une seconde génération.
Quand l’attente échoue sur une erreur (et non sur un Ctrl + C), les dernières lignes répètent tout ce dont vous avez besoin : inutile de remonter chercher la ligne 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.Si l’erreur fait partie de celles qui ont une solution connue, comme un 429 ou une erreur serveur, une ligne Next: suit. Avec --json, les mêmes informations se trouvent dans l’objet d’erreur, sous taskId, idempotencyKey et recover.
tasks wait
Ce qu’elle fait : attend qu’une tâche déjà lancée se termine.
spicyapi tasks wait <task-id> [options]| Argument ou option | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
task-id | L’identifiant de la tâche, comme job_01k3m8x9q2z4v7n5p6r8s0t1w3 | — | Oui |
--poll-interval-ms <milliseconds> | Intervalle entre deux vérifications, en millisecondes, de 100 à 60000 | Commence à 2 secondes et ralentit jusqu’à 10 secondes | Non |
--wait-timeout-ms <milliseconds> | Arrête d’attendre au bout de cette durée, de 1 à 86400000 | 600000 (10 minutes) | Non |
spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000Ce qui s’affiche : la tâche terminée, avec les mêmes champs que tasks get, une fois que son état est succeeded, failed ou expired. Si la tâche a réussi mais que ses fichiers sont encore en cours de copie, la commande attend encore un peu.
Si la limite de temps est atteinte, vous voyez Error: task … did not reach a terminal state within 600000ms. Ce n’est pas un échec : la tâche est toujours en cours. Attendez de nouveau, avec un --wait-timeout-ms plus long si nécessaire. Arrêter une attente n’annule jamais une tâche. Gratuit.
tasks get
Ce qu’elle fait : montre une tâche à l’instant présent : son état, son coût, ses liens de résultat et la date à laquelle son contenu sera supprimé.
spicyapi tasks get <task-id>| Argument | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
task-id | L’identifiant de la tâche | — | Oui |
Utilisez la même clé API que celle qui a créé la tâche : une autre clé obtient « not found ».
Champs affichés :
| Champ | Signification |
|---|---|
state | queued (en attente de démarrage), running, succeeded, failed ou expired (temps écoulé). Les tâches plus anciennes peuvent aussi afficher canceled |
output.assets | Les résultats. Chacun a une url (un lien de téléchargement valable environ 20 minutes), expiresAt (le moment où ce lien cesse de fonctionner), mime (le type de fichier), des informations de taille et une key. pending: true signifie que le fichier est encore en cours de copie : réessayez dans quelques secondes. unavailable: true signifie qu’il ne peut pas être récupéré |
errorCode, errorMessage | Pourquoi la tâche a échoué. Voir Erreurs |
cost, settled | Le montant facturé en USD. Il est définitif une fois que settled vaut true |
input | Les réglages que vous avez envoyés. Supprimés quand la durée de conservation de votre prompt arrive à son terme |
createdAt, completedAt, deadlineAt | Quand elle a été créée, quand elle s’est terminée, et l’heure limite à laquelle elle pouvait se terminer |
contentState | present (contenu toujours stocké), expired (supprimé par les règles de conservation) ou purged (vous l’avez détruit) |
retention | outputsExpireAt (quand les fichiers de résultat sont supprimés), promptsExpireAt (quand le texte de votre prompt est effacé) et source (le réglage qui en a décidé) |
sourceTaskId | Présent quand cette tâche est la relance d’une autre tâche |
L’affichage normal se termine par un résumé en langage courant, comme Outputs expire: … ou Content: Destroyed — you removed the outputs …. Chaque appel renvoie des liens de téléchargement neufs. Gratuit.
tasks list
Ce qu’elle fait : liste les tâches créées avec la clé API actuelle, une page à la fois.
spicyapi tasks list [options]| Option | Ce qu’elle fait | Par défaut | Obligatoire |
|---|---|---|---|
--from <date> | Premier jour à inclure, YYYY-MM-DD en UTC | Une fenêtre de sept jours qui se termine aujourd’hui | Non |
--to <date> | Le jour qui suit le dernier jour à inclure, YYYY-MM-DD en UTC. La plage peut couvrir 92 jours au plus | Voir ci-dessus | Non |
--state <state> | Uniquement les tâches dans un état donné : queued, running, succeeded, failed, canceled ou expired | Tous | Non |
--model <model> | Uniquement les tâches d’un identifiant de modèle exact | Tous | Non |
--limit <count> | Nombre de tâches par page, de 1 à 100 | 20 | Non |
--cursor <cursor> | Reprend à la suite de la page précédente, à l’aide de sa valeur nextCursor | Première page | Non |
spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --state failedCe qui s’affiche : items (chacun avec taskId, model, state, cost, settled, createdAt, deadlineAt et completedAt), hasMore et nextCursor. Si hasMore vaut true, relancez la même commande avec les mêmes --from et --to, en ajoutant --cursor suivi de la valeur nextCursor. La liste ne contient aucun lien de téléchargement ; utilisez tasks get pour la tâche qui vous intéresse. Gratuit.
tasks retry
Ce qu’elle fait : relance une tâche failed ou expired, sous la forme d’une nouvelle tâche avec un nouvel identifiant. Elle coûte de l’argent.
spicyapi tasks retry <task-id> [options]| Argument ou option | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
task-id | La tâche échouée ou expirée à relancer | — | Oui |
--wait | Reste jusqu’à la fin de la nouvelle tâche | Désactivée | Non |
--yes | Saute la question de confirmation | Désactivée : la question est posée | Non |
--idempotency-key <key> | Relancer la relance avec la même clé vous rend la même nouvelle tâche au lieu d’en créer une autre | Une nouvelle clé aléatoire à chaque exécution | Non |
--poll-interval-ms <milliseconds> | Avec --wait : la fréquence des vérifications | Commence à 2 secondes et ralentit jusqu’à 10 secondes | Non |
--wait-timeout-ms <milliseconds> | Avec --wait : arrête d’attendre au bout de cette durée | 600000 (10 minutes) | Non |
La commande demande Retry source task … Continue? [y/N]. Contrairement à tasks create, elle n’affiche aucun prix avant de poser la question. La nouvelle tâche est facturée au prix actuel du modèle : si le prix compte pour vous, vérifiez-le d’abord avec spicyapi models get <model>.
Ce qui s’affiche : idempotencyKey, le nouveau taskId, sourceTaskId (la tâche d’origine), state, estimatedCost (le montant mis de côté) et deadlineAt.
- Seules les tâches
failedetexpiredpeuvent être relancées, ainsi que les anciennes tâchescanceled. Pour obtenir une autre version d’un résultat réussi, utiliseztasks create. - L’entrée d’origine est réutilisée telle quelle : une relance n’aide donc que si l’échec était temporaire. Vérifiez d’abord
errorCode; voir Relancer une tâche échouée et Erreurs. - Si l’entrée pointait vers un fichier téléversé qui a expiré depuis, la relance échoue ; téléversez de nouveau le fichier et utilisez
tasks create. - La relance conserve le réglage de conservation de la tâche d’origine.
- Si
tasks createa perdu la connexion avant que vous voyiez un identifiant de tâche, il ne s’agit pas d’une tâche échouée. Suivez plutôt les étapes de Reprendre une tâche après une attente interrompue.
tasks purge
Ce qu’elle fait : supprime définitivement les médias générés, le résultat (les données de résultat stockées), le prompt et les autres textes d’entrée d’une tâche terminée, immédiatement, au lieu d’attendre qu’ils expirent.
spicyapi tasks purge <task-id> [--yes]| Argument ou option | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
task-id | Une tâche terminée : succeeded, failed, expired ou canceled | — | Oui |
--yes | Saute la question de confirmation | Désactivée : la question est posée | Non |
Le contenu d’une tâche encore queued ou running ne peut pas être détruit. Une telle tâche ne peut pas non plus être annulée, car il n’existe ni commande ni API d’annulation : attendez qu’elle se termine avec spicyapi tasks wait <task-id>, puis détruisez son contenu.
La commande explique ce qui va être supprimé et vous demande de confirmer, car l’opération est irréversible. Téléchargez d’abord tout ce que vous voulez garder.
Ce qui s’affiche : taskId, contentState (purged), purgedAt, contentRemovedBy (user), billingRetained (toujours true) et mediaDeletionPending, puis une ligne qui nomme ce qui a été détruit et indique que les médias stockés sont supprimés en une minute environ. Si contentState vaut encore present, rien n’a été supprimé cette fois-ci ; réessayez plus tard.
Gratuit, et ce n’est pas un remboursement : l’écriture comptable, le montant facturé, le modèle, l’état, les horodatages et l’identifiant de requête restent enregistrés. Voir Conservation et destruction.
files upload
Ce qu’elle fait : téléverse un fichier depuis votre ordinateur, comme l’image de départ d’une génération image-vers-vidéo, et vous donne une adresse spicy:// à placer dans votre entrée.
spicyapi files upload <path> [--content-type <type>]| Argument ou option | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
path | Le fichier à téléverser | — | Oui |
--content-type <type> | Le type du fichier, quand il ne peut pas être déduit de son nom : image/jpeg, image/png, image/webp, image/gif, video/mp4, video/webm, audio/mpeg ou audio/wav | Déduit de l’extension | Non |
Les fichiers acceptés sont les images .jpg, .jpeg, .png, .webp et .gif jusqu’à 10 MiB, les vidéos .mp4 et .webm et les fichiers audio .mp3 et .wav jusqu’à 90 MiB et 600 secondes. Un modèle peut fixer ses propres limites, plus basses.
spicyapi files upload ./start-frame.jpgfileId: 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: 720Ce qui s’affiche : copiez la valeur uri exactement telle qu’elle est affichée dans le réglage de fichier du modèle, souvent image_url. Elle est utilisable jusqu’à expiresAt, normalement pendant un jour. Passé ce délai, téléversez de nouveau le fichier. Le téléversement est gratuit.
files download-url
Ce qu’elle fait : crée un nouveau lien de téléchargement pour le résultat d’une tâche terminée. Elle affiche le lien ; elle n’enregistre pas le fichier.
spicyapi files download-url <task-id> [--key <key>]| Argument ou option | Ce qu’il fait | Par défaut | Obligatoire |
|---|---|---|---|
task-id | Une tâche qui a réussi | — | Oui |
--key <key> | Le résultat visé, quand une tâche en a produit plusieurs. Utilisez la valeur key de output.assets dans tasks get | Le premier résultat | Non |
Ce qui s’affiche : key, url et expiresAt. Le lien fonctionne pendant environ 20 minutes ; ouvrez-le dans un navigateur ou téléchargez-le avec curl. Une tâche qui n’a pas encore réussi répond « not found ». Si le fichier est encore en cours de copie, vous obtenez une erreur de conflit ; attendez quelques secondes et réessayez. Une fois les fichiers de la tâche supprimés, plus aucun lien ne peut être créé. Gratuit.
webhooks verify
Ce qu’elle fait : si vous gérez un serveur qui reçoit les callbacks de SpicyAPI (voir --callback-url), elle vérifie qu’un callback enregistré est authentique et n’a pas été modifié. Elle s’exécute entièrement sur votre ordinateur et ne demande aucune clé API.
spicyapi webhooks verify --body-file <path> --timestamp <seconds> --signature <base64> --payload-version <version>| Option | Ce qu’elle fait | Par défaut | Obligatoire |
|---|---|---|---|
--body-file <path> | Un fichier contenant le corps du callback exactement tel qu’il a été reçu, octet pour octet | — | Oui |
--timestamp <seconds> | La valeur de l’en-tête X-Webhook-Timestamp | — | Oui |
--signature <base64> | La valeur de l’en-tête X-Webhook-Signature | — | Oui |
--payload-version <version> | La valeur de l’en-tête X-Webhook-Payload-Version : 1 ou 2 | — | Oui |
--secret-env <name> | Le nom de la variable d’environnement qui contient votre clé de signature des webhooks. La clé elle-même n’est jamais tapée dans la ligne de commande | SPICY_WEBHOOK_SECRET | Non |
--tolerance-seconds <seconds> | L’écart autorisé entre l’horodatage et l’horloge de votre ordinateur | 300 | Non |
Ce qui s’affiche : en cas de succès, payload (le contenu du callback), payloadVersion, taskId, deliveryId (version 2) et timestamp. Si quoi que ce soit ne correspond pas, la commande affiche une erreur et se termine avec un code différent de zéro. Gratuit.
Une clé de signature est créée automatiquement à l’inscription, mais sa valeur n’est jamais affichée. Pour en obtenir une que vous pouvez copier, ouvrez Webhooks dans la console et cliquez sur Générer (ou sur Renouveler si une clé est déjà configurée). La nouvelle clé n’est affichée qu’une seule fois. Le renouvellement prend effet immédiatement, sans période de chevauchement : l’ancienne clé cesse aussitôt de signer. Voir Webhooks.
Recettes courantes
Générer une image
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 --waitChoisissez un identifiant avec la première commande, construisez input.json à partir des réglages affichés par la deuxième, puis lancez la troisième et confirmez avec y. Le parcours Votre premier résultat explique chaque étape.
Transformer une image en vidéo
Trouver un modèle image-vers-vidéo et ses réglages
spicyapi models list --modality video --task image-to-video --json
spicyapi models get MODEL_ID_FROM_CATALOG --jsonDans inputSchema, repérez le réglage de l’image de départ (généralement image_url), le réglage de durée (généralement duration_seconds) et tout ce qui figure dans required.
Téléverser votre image
spicyapi files upload ./start-frame.jpgCopiez la valeur uri, qui commence par spicy://.
Écrire l’entrée
Créez input.json comme dans Votre premier résultat, avec les noms de réglages du modèle et votre propre uri :
{
"prompt": "Slow push-in, rain running down the window",
"image_url": "spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3",
"duration_seconds": 5
}Vérifier le prix, puis générer
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 1800000Les vidéos sont généralement facturées à la seconde : la durée que vous choisissez modifie donc le prix. Une vidéo peut prendre plusieurs minutes, c’est pourquoi cet exemple attend jusqu’à 30 minutes au lieu des 10 par défaut. Téléchargez le .mp4 depuis l’url comme dans Votre premier résultat.
L’image téléversée est utilisable pendant un jour. Passé ce délai, téléversez-la de nouveau.
Reprendre une tâche après une attente interrompue
Une tâche continue de s’exécuter même si le terminal se ferme, si le réseau coupe, si votre ordinateur se met en veille ou si l’attente arrive à son terme. La façon de la retrouver dépend de ce que vous avez vu :
-
Vous avez vu
Accepted: job_…, ou une ligneRecover:sous l’erreur. Vous avez l’identifiant de la tâche. Attendez de nouveau, ou consultez-la simplement :spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000 spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3 -
Vous n’avez vu que la ligne
Idempotency-Key:, par exemple parce que la connexion a coupé pendant la création de la tâche. Relancez la même commande, avec le même modèle et la même entrée, et ajoutez cette clé :spicyapi tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --idempotency-key 4f6755a5-0d72-4420-9f6b-9faf0e2b0241 --waitLa CLI affiche le prix et redemande votre accord, mais si la première tentative a été acceptée, SpicyAPI vous rend cette même tâche au lieu d’en lancer et d’en facturer une seconde. Cela fonctionne pendant 24 heures avec la même clé API. Si la première tentative n’est jamais arrivée, la tâche est créée maintenant, une seule fois.
-
Vous n’avez ni l’un ni l’autre. Listez vos tâches récentes et retrouvez la bonne d’après l’heure et le modèle :
spicyapi --json tasks list --limit 10
Relancer une tâche échouée
Commencez par savoir pourquoi elle a échoué :
spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3Lisez ensuite errorCode. Les tâches échouées ou expirées libèrent normalement toute la réservation. Certains refus de contenu sont facturés au devis accepté, uniquement si la page du modèle indique explicitement cette exception. Consultez settled et cost pour connaître le montant final. tasks retry renvoie la même entrée : elle n’aide donc que si la cause était temporaire.
errorCode | Que faire |
|---|---|
rate_limited, upstream_unavailable, timeout, upstream_failed | Attendez un peu, puis relancez une fois. Si la tâche échoue de nouveau, arrêtez les relances : pour timeout, essayez une durée plus courte ou une résolution plus basse avec tasks create |
generation_failed | Ne relancez pas. Modifiez le prompt ou l’image, puis utilisez tasks create : la même entrée échoue généralement de la même façon |
invalid_asset | Ne relancez pas, car une relance réutilise l’ancien fichier. Téléversez de nouveau le fichier, puis utilisez tasks create avec la nouvelle uri |
invalid_request, unsupported_combination | Ne relancez pas sans modification. Changez les réglages, puis utilisez tasks create |
content_rejected | Ne relancez pas sans modification. Le modèle a refusé cette requête : changez le prompt ou choisissez un autre modèle, puis utilisez tasks create |
La liste complète se trouve dans Erreurs.
Quand une relance a du sens, lancez-la. Elle crée, et facture, une nouvelle tâche :
spicyapi tasks retry job_01k3m8x9q2z4v7n5p6r8s0t1w3 --waitExporter votre consommation
Enregistrez dans un fichier un mois de consommation de la clé actuelle :
spicyapi --json usage --from 2026-09-01 --to 2026-10-01 > usage-2026-09.jsonLe fichier contient les totaux par jour et par modèle. Pour une liste tâche par tâche, enregistrez de la même façon spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --limit 100, en suivant nextCursor tant que hasMore vaut true. Les chiffres à l’échelle du compte et les factures se trouvent dans la console.
Lancer la CLI depuis un script
Dans un script, personne ne peut répondre à Continue? [y/N] : les commandes payantes refusent donc de s’exécuter sans --yes. Si vous l’ajoutez :
- demandez d’abord un devis et vérifiez le prix dans le script ;
- donnez à chaque génération sa propre
--idempotency-keyfixe, commeposter-2026-09-17-v1, pour qu’exécuter le script deux fois ne facture pas deux fois ; - ajoutez
--jsonet lisezstatedans le résultat : une commande qui se termine avec le code0n’a pas forcément produit une tâche réussie ; - fixez des plafonds de dépense sur la clé dans la console.
spicyapi --json tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --idempotency-key poster-2026-09-17-v1 --yes --wait > result.jsonCoûts, confirmation et sécurité
Quelles commandes coûtent de l’argent. Uniquement tasks create et tasks retry. Les prix sont en dollars américains. Demander un devis, lister, consulter, téléverser, télécharger et supprimer sont des opérations gratuites.
Voir le prix d’abord. tasks quote calcule le prix d’une requête sans rien lancer. tasks create obtient son propre devis et affiche Estimated charge et maximum charge avant de poser la question. Quand la tâche est acceptée, le montant estimé est mis de côté (held) et c’est aussi le maximum qui peut vous être facturé. Quand la tâche réussit, vous payez ce qui a réellement été produit, jamais plus que ce montant, et le reliquat revient sur votre solde.
La confirmation. Continue? [y/N] signifie que la réponse est non tant que vous ne tapez pas y. --yes répond à votre place : ne l’utilisez donc qu’une fois le prix connu. Si la CLI s’exécute dans un contexte où elle ne peut pas poser la question, comme un script ou une entrée redirigée, et qu’il n’y a pas de --yes, elle refuse au lieu de supposer un oui. tasks purge demande confirmation de la même façon, car une suppression est irréversible. tasks retry la demande aussi, mais sans afficher de prix au préalable.
La clé d’idempotence, en termes simples. C’est une étiquette pour une génération, comme un numéro de commande. Chaque tasks create et chaque tasks retry en affiche une. Si votre connexion internet coupe et que vous ne savez pas si la génération a démarré, relancez la même commande avec --idempotency-key et la valeur affichée : vous récupérez la tâche d’origine et vous n’êtes pas facturé deux fois. L’étiquette fonctionne pendant 24 heures avec la même clé API. Ne la réutilisez pas pour une autre génération : la même clé avec une entrée différente est refusée.
Pas d’annulation. Une fois acceptée, une tâche ne peut pas être annulée. Ctrl + C, la fermeture du terminal ou la révocation de la clé n’arrêtent que l’attente ; la tâche se termine et est facturée normalement.
Les tâches échouées ou expirées libèrent normalement toute la réservation. Certains refus de contenu sont facturés au devis accepté, uniquement si la page du modèle indique explicitement cette exception. Consultez settled et cost pour connaître le montant final.
Téléchargez ce que vous voulez garder. Les fichiers de résultat sont conservés environ 14 jours au plus, ou moins si votre compte ou --retention le prévoit, puis supprimés définitivement. Les liens de téléchargement durent environ 20 minutes, mais vous pouvez toujours en demander un nouveau tant que le fichier existe. Les fichiers téléversés sont utilisables pendant un jour. Le texte des prompts est effacé au bout de 30 jours par défaut. Les enregistrements de facturation sont conservés. Voir Conservation et destruction.
Plafonds de dépense. Chaque clé peut avoir un plafond quotidien, mensuel et cumulé, à régler sur la page Clés API. Les nouvelles clés n’ont aucun plafond tant que vous n’en réglez pas un. Une tâche qui dépasserait un plafond est refusée avant de démarrer.
Votre clé. La CLI lit la clé uniquement dans SPICY_API_KEY, ne l’affiche jamais et, dans les indications d’erreur, n’en montre au plus que les neuf premiers caractères (sk-spicy-).
Pour aller plus loin : Facturation, Idempotence, Engagement et relance.
Dépannage
Cherchez le message que vous voyez. Les erreurs renvoyées par SpicyAPI se terminent par (request req_…) ; indiquez cette valeur si vous contactez l’assistance, mais n’envoyez jamais votre clé.
Tous les codes d’erreur sont expliqués dans Erreurs, et les étapes de reprise dans Dépannage et reprise.
Le code source
Le paquet est sous licence MIT et développé au grand jour sur github.com/spicyapi-ai/spicy-cli. C’est là qu’on lit le code derrière chaque commande de cette page, qu’on signale un comportement qui s’écarte de ce qui est décrit ici et qu’on propose une modification.
Étapes suivantes
Catalogue des modèles et schémas
Comment fonctionnent le catalogue en direct et les réglages de chaque modèle
Facturation
Prix, montants mis de côté, plafonds de dépense et factures
Conservation et destruction
Combien de temps les fichiers et les prompts sont conservés, et comment les supprimer plus tôt
Erreurs
Chaque code d’erreur, et s’il vaut la peine de réessayer
SDK TypeScript
Faire la même chose depuis votre propre code JavaScript ou TypeScript
SDK Python
Faire la même chose depuis votre propre code Python
SDK Go
Faire la même chose depuis votre propre code Go
Serveur MCP
Laisser un assistant de code IA exécuter ces étapes, avec une confirmation avant toute dépense
Agent Skill
Apprendre à un agent IA la méthode sûre pour utiliser SpicyAPI
Démarrage rapide
Le même parcours, directement avec l’API HTTP
Agents et automatisation
Quel outil officiel choisir, et un guide d’exploitation en production pour les agents IA, les workers backend et les chaînes de production de médias reproductibles.
Serveur MCP
Connectez Claude, Cursor, VS Code et d’autres assistants IA à SpicyAPI, puis parcourez les modèles, comparez les prix, générez des médias et récupérez les résultats en discutant, chaque étape payante étant confirmée par vous.

