spicyapiDokumentacja
Agenci i CLI
Treść główna

Narzędzie wiersza poleceń (CLI)

Polecenie spicyapi pozwala z terminala przeglądać modele, sprawdzać ceny, generować obrazy i wideo oraz pobierać wyniki – bez pisania kodu.

Czym jest CLI

spicyapi to niewielki program, który uruchamiasz w terminalu, czyli w oknie, gdzie zamiast klikać przyciski, wpisujesz polecenia. Każde polecenie wykonuje jedną czynność: wyświetla modele, z których może korzystać twoje konto, mówi, ile będzie kosztować generacja, uruchamia generowanie obrazu albo wideo, czeka, aż się zakończy, i daje ci link do pobrania wyniku.

Nie piszesz żadnego kodu. Wpisujesz polecenie, naciskasz Enter i czytasz odpowiedź.

CLI dobrze się sprawdzi, gdy chcesz:

  • wypróbować modele i porównać ceny, zanim ktokolwiek napisze integrację;
  • generować obrazy albo wideo na własnym komputerze i zapisywać pliki;
  • powtarzać ten sam rodzaj generacji bez przeklikiwania się za każdym razem przez stronę;
  • sprawdzić dokładne ustawienia modelu, zanim zbudujesz na nim coś własnego.

CLI obsługuje generowanie obrazów i wideo. Modele tekstowe i modele czatu wywołuje się przez endpointy zgodne z API czatu, opisane na stronie Tekst i streaming.

Są jeszcze trzy inne oficjalne narzędzia. Wybierz CLI, jeśli chcesz samodzielnie wpisywać polecenia:

NarzędzieWybierz je, gdy
SDKPiszesz program w JavaScripcie albo TypeScripcie, który wywołuje SpicyAPI
Serwer MCPChcesz, żeby asystent programistyczny AI wykonywał te same kroki za ciebie
Agent SkillChcesz nauczyć agenta AI bezpiecznego sposobu korzystania ze SpicyAPI

Piszesz w innym języku? Są też oficjalne SDK dla Pythona, Go, PHP i Javy.

Nic na tej stronie nie wyda pieniędzy przez przypadek

Kosztować mogą tylko dwa polecenia: tasks create i tasks retry. Oba zatrzymują się i pytają cię o zgodę, zanim cokolwiek zostanie pobrane. Wszystkie pozostałe możesz uruchamiać bezpłatnie tyle razy, ile chcesz.

Co możesz zrobić

Chcę…PoleceniePłatne?Wymaga klucza API?
Sprawdzić, czy SpicyAPI jest osiągalnespicyapi statusNieNie
Przeszukać tę dokumentacjęspicyapi docs search <words>NieNie
Zobaczyć, z których modeli mogę korzystać, i ile kosztująspicyapi models listNieTak
Zobaczyć, jakie ustawienia przyjmuje jeden modelspicyapi models get <model>NieTak
Sprawdzić saldospicyapi balanceNieTak
Zobaczyć, ile wydał dany kluczspicyapi usageNieTak
Poznać dokładną cenę generacji bez jej uruchamianiaspicyapi tasks quoteNieTak
Uruchomić generowanie obrazu albo wideospicyapi tasks createTak, po zapytaniu cię o zgodęTak
Poczekać, aż generacja się zakończyspicyapi tasks wait <task-id>NieTak
Obejrzeć jedną generację i linki do jej wynikówspicyapi tasks get <task-id>NieTak
Wyświetlić moje ostatnie generacjespicyapi tasks listNieTak
Uruchomić ponownie nieudaną generacjęspicyapi tasks retry <task-id>Tak, po zapytaniu cię o zgodęTak
Trwale usunąć pliki i prompt generacjispicyapi tasks purge <task-id>Nie, i nic nie zostaje zwróconeTak
Przesłać obraz, wideo albo plik dźwiękowy jako dane wejściowespicyapi files upload <path>NieTak
Dostać świeży link do pobrania wynikuspicyapi files download-url <task-id>NieTak
Sprawdzić, czy callback naprawdę przyszedł od SpicyAPIspicyapi webhooks verifyNieNie, korzysta z twojego klucza podpisującego webhooki

W poleceniach powyżej słowo w nawiasach ostrych, takie jak <task-id>, oznacza „wstaw tu własną wartość”, bez nawiasów.

Zanim zaczniesz

Potrzebujesz czterech rzeczy: terminala, Node.js, klucza API i sposobu na uruchamianie CLI. Za pierwszym razem zajmuje to około dziesięciu minut.

Otwórz terminal

Terminal to okno tekstowe do uruchamiania poleceń. Wszystko z tej strony wpisujesz albo wklejasz właśnie tam, a potem uruchamiasz klawiszem Enter.

Naciśnij Cmd + Spacja, wpisz Terminal i naciśnij Enter. Otworzy się okno z wierszem zakończonym znakiem % albo $: tam wpisujesz polecenia. Wklejasz skrótem Cmd + V.

Zainstaluj Node.js w wersji 22.13 lub nowszej

CLI działa na Node.js, bezpłatnym programie. Sprawdź, czy już go masz:

node -v

Jeśli polecenie wypisze v22.13.0 albo wyższy numer, na przykład v22.14.0 czy v24.4.1, wszystko gotowe. Jeśli wypisze niższy numer albo komunikat command not found lub is not recognized:

  1. Wejdź na nodejs.org, otwórz stronę pobierania i wybierz wersję LTS dla swojego systemu.
  2. Uruchom instalator i zaakceptuj domyślne opcje.
  3. Zamknij terminal i otwórz nowy, a potem ponownie uruchom node -v.

Razem z Node.js instalują się npm i npx, dwa pomocnicze programy używane w ostatnim kroku.

Utwórz klucz API

Po kluczu API SpicyAPI poznaje, że żądanie pochodzi z twojego konta.

  1. Załóż konto na spicyapi.ai/register. Konta mogą być otwierane partiami; jeśli rejestracja nie jest jeszcze dla ciebie dostępna, zapisz się na listę oczekujących.
  2. Dodaj środki w sekcji Rozliczenia w konsoli. Generacje są opłacane z twojego salda, w dolarach amerykańskich.
  3. Otwórz stronę Klucze API i kliknij Utwórz klucz. Nadaj mu nazwę, którą później rozpoznasz, na przykład my laptop. Wymagana jest tylko nazwa.
  4. Od razu skopiuj klucz. Zaczyna się od sk-spicy- i jest pokazywany tylko raz. Możesz też użyć przycisku Zapisz jako plik.

Nowe klucze nie mają limitu wydatków, dopóki go nie ustawisz. Limit dzienny sprawia, że pomyłka albo wyciek klucza nie wygenerują wysokiego rachunku, a zmienić go możesz później na tej samej stronie.

Traktuj klucz jak hasło

Każdy, kto ma twój klucz, może wydawać twoje saldo. Nie wysyłaj go na czacie ani mailem, nie pokazuj go na zrzucie ekranu ani w zgłoszeniu do wsparcia i nigdy nie zapisuj go w folderze projektu, który trafia do Gita albo na GitHub. Jeśli klucz wycieknie, unieważnij go na stronie Klucze API i utwórz nowy.

Zapisz klucz w SPICY_API_KEY

CLI nie ma polecenia logowania i nigdy nie przyjmuje klucza jako opcji polecenia. Odczytuje zmienną środowiskową o nazwie SPICY_API_KEY, czyli nazwaną wartość, którą terminal przekazuje uruchamianym przez siebie programom.

Tylko dla bieżącego okna (ustawienie przepada po jego zamknięciu):

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

Na stałe: dopisz tę samą linię z export na końcu pliku startowego swojej powłoki, który uruchamia się przy każdym otwarciu terminala. W macOS jest to ~/.zshrc; w większości systemów Linux – ~/.bashrc.

nano ~/.zshrc

Wklej linię z export na samym dole, naciśnij Ctrl + O, a potem Enter, żeby zapisać, i Ctrl + X, żeby wyjść. W Linuksie użyj zamiast tego nano ~/.bashrc. Zmiana zadziała w nowym oknie terminala.

Sprawdź ustawienie bez wypisywania całego klucza:

echo "${SPICY_API_KEY:0:9}"

Powinno się wypisać sk-spicy-.

Gdzie klucz może być zapisany, a gdzie nie

Plik startowy powłoki i ustawienia twojego konta Windows zostają na tym komputerze, co przy użytku osobistym jest w porządku. Nigdy nie wpisuj klucza do pliku w projekcie, nigdy nie zapisuj go w commicie i nigdy nie wklejaj go do współdzielonego dokumentu. Terminal zapamiętuje też wpisywane polecenia, więc na wspólnym komputerze zamiast wpisywać klucz w poleceniu, wybierz plik startowy albo okno ustawień Windows.

Wybierz sposób uruchamiania CLI

Są dwa sposoby, a polecenia w obu są takie same.

npx pobiera CLI, gdy jest potrzebne, i je uruchamia:

npx @spicyapi/cli status

Za pierwszym razem npm zapyta Need to install the following packages: @spicyapi/cli@… Ok to proceed? (y). Naciśnij y i Enter.

Przy tym sposobie wszędzie tam, gdzie ta strona pisze spicyapi, wpisuj npx @spicyapi/cli. Na przykład spicyapi models list zamienia się w npx @spicyapi/cli models list.

Twój pierwszy wynik

W tym przewodniku wygenerujesz jeden obraz i go pobierzesz. Przy każdym kroku jest polecenie, mniej więcej to, co zobaczysz, i wyjaśnienie, co właśnie się stało. Twoje kwoty, identyfikatory i czasy będą inne.

Zastąp MODEL_ID_FROM_CATALOG prawdziwym identyfikatorem modelu

MODEL_ID_FROM_CATALOG to symbol zastępczy, a nie model. Krok 3 pokazuje, jak wybrać prawdziwy identyfikator z katalogu na żywo (live catalog): spicyapi models list zwraca tę samą listę co GET /api/v1/models. Wklej swój identyfikator wszędzie tam, gdzie na tej stronie stoi symbol zastępczy. Wysłanie samego symbolu zastępczego zwróci tylko błąd „nie znaleziono”.

Sprawdź połączenie

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

Co się stało: CLI zapytało SpicyAPI, czy usługa działa. Nie wymaga to klucza i nic nie kosztuje. Jeśli widzisz „could not be reached”, sprawdź połączenie z internetem albo proxy; zobacz Rozwiązywanie problemów.

Sprawdź saldo

spicyapi balance
available: 12.34
held: 0.06
total: 12.40

Co się stało: to pierwsze polecenie, które używa twojego klucza. Kwoty są w dolarach amerykańskich. available to kwota, którą możesz teraz wydać, held to środki zablokowane na generacje, które jeszcze trwają, a total to suma obu. Możesz też zobaczyć linię funding, która rozbija saldo na środki przedpłacone i środki promocyjne.

Jeśli widzisz Error: SPICY_API_KEY is required for authenticated API operations, klucz nie jest ustawiony w tym oknie terminala. Linia Next: pod komunikatem pokazuje, jak go ustawić; zobacz też Zanim zaczniesz.

Wybierz model

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

To skrócony przykład: prawdziwa lista zawiera więcej modeli i więcej pól.

Co się stało: CLI pobrało modele, które twoje konto może dziś wywołać, razem z twoimi cenami. Wybierz model, w którym zarówno enabled, jak i available mają wartość true, i skopiuj jego wartość model, na przykład zaznaczając ją myszą. Ta wartość to identyfikator modelu. Identyfikatory mają postać maker/model/task.

  • price to cena w dolarach amerykańskich za unit: per_image (za obraz), per_second (za sekundę wideo), per_request (za żądanie) albo per_1k_tokens (za tysiąc tokenów).
  • Kilka pozycji w pricing oznacza, że cena zależy od twoich ustawień, na przykład od rozdzielczości.
  • Żeby znaleźć model po nazwie, dodaj --search i fragment jego nazwy.

--json wypisuje listę jako czytelny JSON z wcięciami. Bez tej opcji cała lista zostaje ściśnięta w jedną długą linię.

Sprawdź, jakie ustawienia przyjmuje ten model

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

Co się stało: inputSchema to lista ustawień modelu, którą dalej na tej stronie nazywamy danymi wejściowymi.

  • required wymienia ustawienia, które musisz wysłać. Tutaj tylko prompt.
  • properties wymienia każde ustawienie, które model przyjmuje, i nic poza nimi nie jest dozwolone: jedna nieznana albo błędnie wpisana nazwa sprawia, że całe żądanie zostaje odrzucone.
  • enum wymienia jedyne dozwolone wartości danego ustawienia.

Każdy model ma własne ustawienia, więc zawsze sprawdzaj je dla wybranego modelu. Gotowe dane wejściowe, które serwer już sprawdził, znajdziesz, uruchamiając spicyapi models list --search <name> --include-examples --json i zaglądając do examples.

Zapisz dane wejściowe w pliku

Umieść dane wejściowe w pliku o nazwie input.json, w folderze, w którym jest otwarty twój terminal. Plik pozwala uniknąć kłopotów z cudzysłowami, zwłaszcza w Windows.

Wklej wszystkie trzy linie naraz:

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

Co się stało: opisujesz, co ma zostać wygenerowane, używając nazw ustawień z poprzedniego kroku. Cudzysłowy muszą być zwykłe i proste ("), a nie drukarskie.

Sprawdź cenę

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

Co się stało: SpicyAPI wyceniło dokładnie to żądanie. Nic nie zostało uruchomione i nic nie zostało pobrane. estimatedCost to przewidywany koszt, a maxCharge to najwięcej, ile może to kosztować. Ten krok jest opcjonalny: kolejne polecenie samo pobiera cenę jeszcze raz i pokazuje ci ją, zanim cokolwiek wyda.

Uruchom generację i poczekaj na nią

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

CLI najpierw pokazuje cenę i prosi o potwierdzenie:

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]

Wpisz y i naciśnij Enter. Każda inna odpowiedź anuluje operację i nic nie zostaje pobrane. Odpowiedz w ciągu pięciu minut, zanim wycena wygaśnie.

Gdy tylko SpicyAPI przyjmie pracę, CLI wypisuje identyfikator zadania:

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

Obrazy powstają zwykle w kilka sekund, a wideo w kilka minut. Gdy generacja się zakończy, pojawia się wynik:

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

Co się stało: po twoim y SpicyAPI przyjęło generację, która od tej chwili nazywa się zadaniem, i zablokowało szacowaną kwotę na twoim saldzie. Potem CLI co kilka sekund sprawdzało zadanie, aż się zakończyło. W ostatniej linii poszukaj "state":"succeeded" i "url" wewnątrz output. cost to ostateczna opłata, gdy settled ma wartość true. Jeśli wolisz wynik rozłożony na kilka czytelnych linii, dodaj do polecenia --json.

Zamknięcie okna nie anuluje zadania

Przyjęte zadanie zawsze wykonuje się do końca i jest normalnie rozliczane. Naciśnięcie Ctrl + C albo zamknięcie terminala przerywa tylko czekanie. Zachowaj identyfikator zadania i wróć do niego poleceniem spicyapi tasks wait <task-id>; zobacz Wróć do zadania po przerwanym czekaniu.

Pobierz wynik

url to bezpośredni link do pobrania, który działa przez około 20 minut i nie wymaga klucza. Wklej go do przeglądarki i zapisz plik albo pobierz go z terminala (zachowaj cudzysłowy, bo link zawiera znaki &):

curl -L -o result.png "PASTE_THE_URL_HERE"

Użyj rozszerzenia pliku zgodnego z mime: .png dla image/png, .jpg dla image/jpeg, .mp4 dla video/mp4.

Jeśli link wygasł, pobierz nowy poleceniem spicyapi files download-url <task-id> albo uruchom spicyapi tasks get <task-id>, które zwraca świeże linki.

Co się stało: kopia wyniku trafiła na twój własny komputer. Zrób to szybko: SpicyAPI przechowuje wygenerowane pliki najwyżej przez około 14 dni (krócej, jeśli twoje konto ma ustawiony krótszy okres), a potem usuwa je na dobre. Zobacz Przechowywanie i usuwanie danych.

Jak czytać wynik polecenia

  • Zwykły wynik pokazuje jedną parę name: value w każdej linii. Wartości złożone z kilku części, takie jak output czy retention, są wypisywane jako JSON w jednej linii.
  • --json wypisuje całą odpowiedź jako JSON z wcięciami. Działa z każdym poleceniem, przed nazwą polecenia albo po niej: spicyapi --json balance i spicyapi balance --json robią to samo.
  • Wyniki trafiają na standardowe wyjście, a komunikaty na wyjście błędów. Ceny, klucz idempotentności, linie Accepted: i błędy to komunikaty. Dlatego spicyapi --json tasks get <task-id> > task.json zapisuje w task.json tylko wynik, a komunikaty nadal widać na ekranie.
  • Błędy wyglądają tak: Error: <what went wrong> (request req_…), zwykle z linią Next: poniżej, która mówi, co zrobić. Z --json błąd jest jednoliniowym obiektem JSON z polami error, type, status, code i requestId, bez linii Next:. Gdy klucz nie jest ustawiony, type ma wartość MissingApiKeyError. Kontaktując się ze wsparciem, podaj wartość req_….
  • Kwoty to sumy w dolarach amerykańskich zapisane zwykłym tekstem, bez znaku $, na przykład 0.03.
  • Czasy są w UTC. Z na końcu 2026-09-17T08:05:00Z oznacza UTC.
  • Kod wyjścia wynosi 0, gdy polecenie się powiedzie, i jest różny od 0, gdy się nie powiedzie – skrypty mogą to sprawdzać.

Opis poleceń

Każde polecenie ma też wbudowaną pomoc: dodaj --help, na przykład spicyapi tasks create --help.

Opcje globalne i zmienne środowiskowe

Te opcje działają z każdym poleceniem.

OpcjaCo robiDomyślnieWymagana
--jsonWypisuje cały wynik jako JSONWyłączonaNie
--timeout-ms <milliseconds>Jak długo czekać na jedną odpowiedź SpicyAPI, zanim CLI się podda, od 1 do 12000030000 (30 sekund)Nie
--max-retries <count>Ile razy automatycznie ponowić próbę po błędzie sieci, 429 albo błędzie serwera – tylko dla żądań, które można bezpiecznie powtórzyć – od 0 do 52Nie
--api-base-url <url>Wysyła żądania API pod inny adres. Zwykle nigdy nie jest potrzebnahttps://api.spicyapi.ai/api/v1Nie
--service-base-url <url>Adres, który sprawdza status. Zwykle nigdy nie jest potrzebnahttps://api.spicyapi.aiNie
-V, --versionWypisuje wersję CLI—Nie
-h, --helpPokazuje pomoc do polecenia—Nie
Zmienna środowiskowaDo czego służy
SPICY_API_KEYTwój klucz API. Potrzebny w każdym poleceniu oprócz status, docs search i webhooks verify
SPICY_WEBHOOK_SECRETTwój klucz podpisujący webhooki, odczytywany przez webhooks verify
SPICY_API_BASE_URL, SPICY_SERVICE_BASE_URLTo samo co dwie opcje adresów powyżej. Adresy muszą używać https://

status

Co robi: sprawdza, czy SpicyAPI działa i czy jest osiągalne z twojego komputera.

spicyapi status

Bez opcji. Nie wymaga klucza. Bezpłatne.

Wynik: jedno zdanie. SpicyAPI is reachable — … answered in … ms. oznacza, że wszystko jest w porządku. could not be reached oznacza, że twój komputer nie dostał żadnej odpowiedzi: sprawdź sieć albo proxy. is not healthy albo reports it is not ready oznacza problem po naszej stronie; bieżące incydenty są wymienione na status.spicyapi.ai.

Z --json widzisz surowe wyniki sprawdzeń. Liczy się odpowiedź operational: true; pozycja readiness ze statusem 404 jest na publicznym adresie normalna.

Co robi: znajduje stronę dokumentacji na dany temat. Przeszukuje mały indeks wbudowany w CLI, więc działa bez klucza i bez łączenia się ze SpicyAPI. Każdy wynik prowadzi do strony w tej dokumentacji, docs.spicyapi.ai.

spicyapi docs search [words] [--limit <count>]
Argument lub opcjaCo robiDomyślnieWymagany
wordsSłowa do wyszukania. Pomiń je, żeby wyświetlić listę stronPusteNie
--limit <count>Największa liczba wyników, od 1 do 2510Nie
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

Gdy wyników jest kilka, są wypisywane jeden po drugim, a każdy zaczyna się od slug:. Jeśli nic nie pasuje, polecenie o tym informuje i mimo to kończy się kodem wyjścia 0:

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

Z --json brak wyników daje pustą listę, []. Bezpłatne.

models list

Co robi: wyświetla modele, które twoje konto może dziś wywołać, z cenami, jakie płaci twoje konto.

spicyapi models list [options]
OpcjaCo robiDomyślnieWymagana
--modality <type>Tylko modele image, video albo text. Opcja przyjmuje też audio, ale obecnie nie ma w ofercie modeli audioWszystkieNie
--task <task>Tylko jeden rodzaj pracy, na przykład text-to-image, edit, image-to-video, text-to-video albo reference-to-videoWszystkieNie
--provider <name>Tylko modele jednego twórcy modelu, czyli firmy albo laboratorium, które zbudowało model. Musi dokładnie odpowiadać wartości providerWszystkieNie
--search <text>Tylko modele, których identyfikator albo wyświetlana nazwa zawiera ten tekst, bez względu na wielkość literBrakNie
--include-schemaDodaje pełne ustawienia każdego modelu (inputSchema). Wynik staje się dużo dłuższyWyłączonaNie
--include-examplesDodaje gotowe przykładowe dane wejściowe, które serwer już sprawdził (examples)WyłączonaNie
spicyapi models list --modality video --task image-to-video --json

Wynik: total i items. Używaj --json, bo bez tej opcji wszystkie pozycje są wypisywane w jednej linii. Najbardziej przydatne pola każdej pozycji:

PoleZnaczenie
modelIdentyfikator modelu do użycia w innych poleceniach
displayName, provider, modality, tasksNazwa, twórca modelu, rodzaj wyniku i rodzaj pracy
enabled, availableUżywaj modeli, w których oba mają wartość true
pricingJedna pozycja na każdy poziom cenowy: variant (na przykład rozdzielczość), unit, price w USD, a gdy obowiązuje zniżka, także regularPrice i offerLabel
taskTimeoutSecondsJak długo generacja może trwać, zanim zakończy się stanem expired
maxOutputDurationSecondsNajdłuższe wideo, na jakie pozwala ten model, jeśli ma taki limit

Bezpłatne. Pobieranie listy modeli wlicza się do limitu żądań twojego konta, więc nie ma potrzeby uruchamiać go przed każdą generacją.

models get

Co robi: pokazuje pełny opis jednego modelu, łącznie z ustawieniami, które przyjmuje.

spicyapi models get <model>
ArgumentCo robiDomyślnieWymagany
modelDokładny identyfikator modelu. Ukośniki w nim mogą zostać bez zmian—Tak
spicyapi models get MODEL_ID_FROM_CATALOG --json

Wynik: te same pola co w models list, a do tego inputSchema. W inputSchema przeczytaj required (ustawienia, które musisz wysłać), properties (każde dozwolone ustawienie i jego typ), enum (jedyne dozwolone wartości), minimum i maximum (granice liczb) oraz default (wartość używana, gdy pominiesz ustawienie). Pozycje o nazwie x-ui to wskazówki do budowania formularzy; możesz je zignorować. Bezpłatne.

balance

Co robi: pokazuje, ile pieniędzy jest dostępnych na twoim koncie.

spicyapi balance

Bez opcji. Bezpłatne.

Wynik: available (kwota, którą możesz teraz wydać), held (środki zablokowane na zadania, które jeszcze trwają) i total, wszystko w dolarach amerykańskich. Może też zawierać funding, które rozbija saldo na środki przedpłacone i środki promocyjne, łącznie z tym, kiedy środki promocyjne wygasają i za które modele płacą. Nie musisz sprawdzać salda przed każdą generacją: tasks create robi to za ciebie.

usage

Co robi: pokazuje, ile generacji uruchomił bieżący klucz API i ile kosztowały, w podziale na dni i modele.

spicyapi usage [--from <date>] [--to <date>]
OpcjaCo robiDomyślnieWymagana
--from <date>Pierwszy uwzględniany dzień, w formacie YYYY-MM-DD w UTCOstatnie siedem dni łącznie z dzisiejszymNie
--to <date>Dzień po ostatnim uwzględnianym dniu, w formacie YYYY-MM-DD w UTC. Zakres może obejmować najwyżej 92 dniOstatnie siedem dni łącznie z dzisiejszymNie
spicyapi usage --from 2026-09-01 --to 2026-10-01

To obejmuje cały wrzesień: --to to pierwszy dzień, który nie jest uwzględniany. Pomiń obie opcje, żeby zobaczyć ostatnie siedem dni łącznie z dzisiejszym.

Wynik: from, to, currency, totalCalls, totalSpend, a potem days (dla każdego dnia: calls, succeeded, failed, spend) i models (te same liczby dla każdego modelu). totalSpend liczy tylko ostateczne opłaty. days i models opisują te same zadania na dwa sposoby, więc ich nie sumuj. Dane dla całego konta, a nie jednego klucza, znajdziesz w konsoli na stronie Zużycie.

Bezpłatne. Polecenie jest ograniczone do 30 wywołań na minutę, więc używaj go do sprawdzania sum, a nie w pętli.

tasks quote

Co robi: mówi dokładnie, ile kosztowałaby jedna generacja, bez jej uruchamiania i bez blokowania jakichkolwiek środków.

spicyapi tasks quote --model <model> --input-file <path>
OpcjaCo robiDomyślnieWymagana
--model <model>Dokładny identyfikator modelu—Tak
--input-file <path>Odczytuje dane wejściowe z pliku JSON. Użyj -, żeby odczytać je z tego, co zostało przekazane do polecenia potokiem—Ta albo --input-json
--input-json <json>Podaje dane wejściowe bezpośrednio jako tekst JSON. Z cudzysłowami łatwiej sobie poradzić przy --input-file—Ta albo --input-file
--callback-url <url>Adres callbacku, którego zamierzasz użyć, bo należy on do wycenianego żądaniaBrakNie

Wynik: quoteId, model, estimatedCost, maxCharge, currency, quantity (na przykład liczba rozliczanych sekund), unit i expiresAt. Wycena jest ważna pięć minut.

Bezpłatne, bez potwierdzenia. Używaj tego polecenia, żeby porównywać modele albo ustawienia. Nie musisz uruchamiać go przed tasks create, które pobiera własną wycenę.

tasks create

Co robi: uruchamia generowanie obrazu albo wideo. To kosztuje. CLI zawsze najpierw pokazuje cenę i pyta o zgodę.

spicyapi tasks create --model <model> --input-file <path> [options]
OpcjaCo robiDomyślnieWymagana
--model <model>Dokładny identyfikator modelu—Tak
--input-file <path>Odczytuje dane wejściowe z pliku JSON. - odczytuje je z tego, co zostało przekazane do polecenia potokiem, i wtedy wymaga też --yes—Ta albo --input-json
--input-json <json>Podaje dane wejściowe bezpośrednio jako tekst JSON—Ta albo --input-file
--waitCzeka, aż zadanie się zakończy, i wypisuje wynikWyłączona: wypisuje identyfikator zadania i kończy działanieNie
--yesPomija pytanie o potwierdzenie. Używaj jej dopiero wtedy, gdy znasz cenę, zwykle w skryptachWyłączona: pytaNie
--idempotency-key <key>Nazwa dla „tej jednej generacji”. Ponowne uruchomienie polecenia z tym samym kluczem w ciągu 24 godzin zwraca to samo zadanie zamiast nowego. Do 128 znakówNowy losowy klucz przy każdym uruchomieniuNie
--retention <duration>Usuwa wygenerowane media, dane wyniku, prompt i inny tekst wejściowy tego zadania wcześniej niż zwykle: 30m, 1h, 7d albo liczba sekund. Może tylko skracać. 0 usuwa je, gdy tylko zadanie się zakończy. Zapisy rozliczeniowe są zawsze zachowywaneUstawienie twojego kontaNie
--callback-url <url>Publiczny adres zaczynający się od https://, który SpicyAPI wywoła, gdy zadanie się zakończy. Zwykłe http://, localhost i adresy sieci prywatnych są odrzucane. Przydaje się tylko, jeśli masz własny serwer; zobacz WebhookiBrakNie
--poll-interval-ms <milliseconds>Z --wait: sprawdza zadanie co tyle milisekund, od 100 do 60000Zaczyna od 2 sekund i zwalnia do 10 sekundNie
--wait-timeout-ms <milliseconds>Z --wait: przestaje czekać po takim czasie, od 1 do 86400000. Zadanie wykonuje się dalej600000 (10 minut)Nie

Co się dzieje, po kolei:

  1. CLI odczytuje twoje dane wejściowe i sprawdza, czy są obiektem JSON. Jeśli nie podano danych wejściowych, zatrzymuje się w tym miejscu.
  2. Jeśli nikt nie może odpowiedzieć na pytanie, na przykład w skrypcie, a nie przekazano --yes, zatrzymuje się w tym miejscu.
  3. Pobiera wycenę i wypisuje szacowaną opłatę, maksymalną opłatę, termin wygaśnięcia wyceny i klucz idempotentności.
  4. Pyta Continue? [y/N]. Dalej przechodzi tylko po y albo yes. Domyślna odpowiedź to nie.
  5. Tworzy zadanie po wycenionej cenie. Szacowana kwota zostaje zablokowana na twoim saldzie i jest zarazem najwyższą kwotą, jaką zadanie może kosztować.
  6. Bez --wait wypisuje idempotencyKey, taskId, state (queued), estimatedCost i deadlineAt, a potem kończy działanie. Z --wait od razu wypisuje Accepted: <task-id> i polecenie do odzyskania zadania, czeka, a potem wypisuje idempotencyKey, accepted i zakończone task.

deadlineAt to najpóźniejszy moment, w którym zadanie może się zakończyć, zanim przejdzie w stan expired. To nie jest termin wygaśnięcia linku do pobrania ani plików.

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

W macOS i Linuksie dane wejściowe możesz też podać bezpośrednio w poleceniu:

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

Jeśli czekanie się nie powiedzie, zadanie nadal trwa

Czekanie może skończyć się wcześniej z powodu limitu czasu, problemu z siecią albo Ctrl + C. Samo zadanie wykonuje się dalej i jest normalnie rozliczane. Linia Accepted: wypisana na początku zawiera jego identyfikator; kontynuuj poleceniem spicyapi tasks wait <task-id>. Nie uruchamiaj po prostu jeszcze raz tego samego polecenia tworzenia bez --idempotency-key: to uruchomi drugą generację i obciąży cię za nią.

Gdy czekanie kończy się błędem (a nie przez Ctrl + C), ostatnie linie powtarzają wszystko, czego potrzebujesz, więc nie musisz przewijać do linii 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.

Jeśli błąd ma znane rozwiązanie, na przykład 429 albo błąd serwera, pod spodem pojawia się jeszcze linia Next:. Z --json te same informacje są w obiekcie błędu jako taskId, idempotencyKey i recover.

tasks wait

Co robi: czeka na zadanie, które już zostało uruchomione, aż się zakończy.

spicyapi tasks wait <task-id> [options]
Argument lub opcjaCo robiDomyślnieWymagany
task-idIdentyfikator zadania, na przykład job_01k3m8x9q2z4v7n5p6r8s0t1w3—Tak
--poll-interval-ms <milliseconds>Sprawdza zadanie co tyle milisekund, od 100 do 60000Zaczyna od 2 sekund i zwalnia do 10 sekundNie
--wait-timeout-ms <milliseconds>Przestaje czekać po takim czasie, od 1 do 86400000600000 (10 minut)Nie
spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000

Wynik: zakończone zadanie, z tymi samymi polami co w tasks get, gdy jego stan to succeeded, failed albo expired. Jeśli zadanie się powiodło, ale jego pliki są jeszcze kopiowane, polecenie czeka jeszcze chwilę.

Jeśli limit czasu się skończy, zobaczysz Error: task … did not reach a terminal state within 600000ms. To nie jest niepowodzenie: zadanie wciąż trwa. Poczekaj ponownie, w razie potrzeby z dłuższym --wait-timeout-ms. Przerwanie czekania nigdy nie anuluje zadania. Bezpłatne.

tasks get

Co robi: pokazuje bieżący stan jednego zadania: jego stan, koszt, linki do wyników i to, kiedy jego treść zostanie usunięta.

spicyapi tasks get <task-id>
ArgumentCo robiDomyślnieWymagany
task-idIdentyfikator zadania—Tak

Użyj tego samego klucza API, którym utworzono zadanie: inny klucz dostanie odpowiedź „nie znaleziono”.

Pola wyniku:

PoleZnaczenie
statequeued (czeka na start), running, succeeded, failed albo expired (skończył się czas). Starsze zadania mogą też mieć stan canceled
output.assetsWyniki. Każdy ma url (link do pobrania ważny około 20 minut), expiresAt (kiedy ten link przestaje działać), mime (typ pliku), informacje o rozmiarze i key. pending: true oznacza, że plik jest jeszcze kopiowany, więc spróbuj ponownie za kilka sekund. unavailable: true oznacza, że pliku nie da się odzyskać
errorCode, errorMessageDlaczego zadanie się nie powiodło. Zobacz Błędy
cost, settledOpłata w USD. Jest ostateczna, gdy settled ma wartość true
inputUstawienia, które wysłano. Usuwane, gdy skończy się okres przechowywania twojego promptu
createdAt, completedAt, deadlineAtKiedy zadanie utworzono, kiedy się zakończyło i najpóźniejszy moment, w którym mogło się zakończyć
contentStatepresent (treść nadal jest przechowywana), expired (usunięta zgodnie z zasadami przechowywania) albo purged (trwale usunięta przez ciebie)
retentionoutputsExpireAt (kiedy pliki wyników zostaną usunięte), promptsExpireAt (kiedy tekst promptu zostanie wymazany) i source (które ustawienie o tym zdecydowało)
sourceTaskIdObecne, gdy to zadanie jest ponowieniem innego zadania

Zwykły wynik kończy się podsumowaniem prostym językiem, na przykład Outputs expire: … albo Content: Destroyed — you removed the outputs …. Każde wywołanie zwraca świeże linki do pobrania. Bezpłatne.

tasks list

Co robi: wyświetla zadania utworzone bieżącym kluczem API, po jednej stronie naraz.

spicyapi tasks list [options]
OpcjaCo robiDomyślnieWymagana
--from <date>Pierwszy uwzględniany dzień, YYYY-MM-DD w UTCSiedmiodniowe okno kończące się dzisiajNie
--to <date>Dzień po ostatnim uwzględnianym dniu, YYYY-MM-DD w UTC. Zakres może obejmować najwyżej 92 dniJak wyżejNie
--state <state>Tylko zadania w jednym stanie: queued, running, succeeded, failed, canceled albo expiredWszystkieNie
--model <model>Tylko zadania dla jednego, dokładnie podanego identyfikatora modeluWszystkieNie
--limit <count>Liczba zadań na stronie, od 1 do 10020Nie
--cursor <cursor>Kontynuuje od poprzedniej strony, na podstawie jej wartości nextCursorPierwsza stronaNie
spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --state failed

Wynik: items (każda pozycja z taskId, model, state, cost, settled, createdAt, deadlineAt i completedAt), hasMore i nextCursor. Jeśli hasMore ma wartość true, uruchom to samo polecenie jeszcze raz, z tymi samymi --from i --to, dodając --cursor z wartością nextCursor. Lista nie zawiera linków do pobrania; dla wybranego zadania użyj tasks get. Bezpłatne.

tasks retry

Co robi: uruchamia ponownie zadanie w stanie failed albo expired, jako nowe zadanie z nowym identyfikatorem. To kosztuje.

spicyapi tasks retry <task-id> [options]
Argument lub opcjaCo robiDomyślnieWymagany
task-idNieudane albo wygasłe zadanie do ponownego uruchomienia—Tak
--waitCzeka, aż nowe zadanie się zakończyWyłączonaNie
--yesPomija pytanie o potwierdzenieWyłączona: pytaNie
--idempotency-key <key>Ponowne uruchomienie ponowienia z tym samym kluczem zwraca to samo nowe zadanie zamiast kolejnegoNowy losowy klucz przy każdym uruchomieniuNie
--poll-interval-ms <milliseconds>Z --wait: jak często sprawdzać zadanieZaczyna od 2 sekund i zwalnia do 10 sekundNie
--wait-timeout-ms <milliseconds>Z --wait: przestaje czekać po takim czasie600000 (10 minut)Nie

Polecenie pyta Retry source task … Continue? [y/N]. W odróżnieniu od tasks create nie pokazuje ceny, zanim zapyta. Nowe zadanie jest rozliczane według aktualnej ceny modelu, więc jeśli cena ma dla ciebie znaczenie, najpierw sprawdź ją poleceniem spicyapi models get <model>.

Wynik: idempotencyKey, nowy taskId, sourceTaskId (zadanie pierwotne), state, estimatedCost (zablokowana kwota) i deadlineAt.

  • Ponowić można tylko zadania failed i expired, a także starsze zadania canceled. Żeby dostać inną wersję udanego wyniku, użyj tasks create.
  • Pierwotne dane wejściowe są używane bez zmian, więc ponowienie pomaga tylko wtedy, gdy niepowodzenie było przejściowe. Najpierw sprawdź errorCode; zobacz Ponów nieudane zadanie i Błędy.
  • Jeśli dane wejściowe wskazywały przesłany plik, który już wygasł, ponowienie się nie powiedzie; prześlij plik ponownie i użyj tasks create.
  • Ponowienie zachowuje ustawienie przechowywania z pierwotnego zadania.
  • Jeśli tasks create straciło połączenie, zanim pojawił się identyfikator zadania, to nie jest nieudane zadanie. Zamiast tego wykonaj kroki z sekcji Wróć do zadania po przerwanym czekaniu.

tasks purge

Co robi: trwale usuwa wygenerowane media zakończonego zadania, dane wyniku (zapisane dane, które zwróciło zadanie), prompt i inny tekst wejściowy – od razu, zamiast czekać, aż wygasną.

spicyapi tasks purge <task-id> [--yes]
Argument lub opcjaCo robiDomyślnieWymagany
task-idZakończone zadanie: succeeded, failed, expired albo canceled—Tak
--yesPomija pytanie o potwierdzenieWyłączona: pytaNie

Zadania, które jest jeszcze w stanie queued albo running, nie da się trwale usunąć. Nie da się go też anulować – nie ma polecenia ani API do anulowania – więc poczekaj, aż się zakończy, poleceniem spicyapi tasks wait <task-id>, a potem je usuń.

Polecenie wyjaśnia, co zostanie usunięte, i prosi o potwierdzenie, bo tej operacji nie da się cofnąć. Najpierw pobierz wszystko, co chcesz zachować.

Wynik: taskId, contentState (purged), purgedAt, contentRemovedBy (user), billingRetained (zawsze true) i mediaDeletionPending, a po nich linia, która wymienia, co zostało zniszczone, i mówi, że zapisane media znikną w ciągu mniej więcej minuty. Jeśli contentState nadal ma wartość present, tym razem nic nie zostało usunięte; spróbuj ponownie później.

Bezpłatne i nie jest zwrotem pieniędzy: wpis w księdze rozliczeń, pobrana kwota, model, stan, znaczniki czasu i identyfikator żądania pozostają w zapisach. Zobacz Przechowywanie i usuwanie danych.

files upload

Co robi: przesyła plik z twojego komputera, na przykład obraz startowy do generacji wideo z obrazu, i daje ci adres spicy://, który wpisujesz w dane wejściowe.

spicyapi files upload <path> [--content-type <type>]
Argument lub opcjaCo robiDomyślnieWymagany
pathPlik do przesłania—Tak
--content-type <type>Typ pliku, gdy nie da się go odczytać z nazwy pliku: image/jpeg, image/png, image/webp, image/gif, video/mp4, video/webm, audio/mpeg albo audio/wavRozpoznawany po rozszerzeniuNie

Obsługiwane są obrazy .jpg, .jpeg, .png, .webp i .gif do 10 MiB, wideo .mp4 i .webm oraz dźwięk .mp3 i .wav do 90 MiB i 600 sekund. Model może ustawić własne, niższe limity.

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

Wynik: skopiuj wartość uri dokładnie tak, jak została wypisana, do ustawienia pliku w modelu, często image_url. Można jej używać do expiresAt, zwykle przez jeden dzień. Potem prześlij plik ponownie. Przesyłanie jest bezpłatne.

files download-url

Co robi: tworzy nowy link do pobrania wyniku zakończonego zadania. Wypisuje link; nie zapisuje pliku.

spicyapi files download-url <task-id> [--key <key>]
Argument lub opcjaCo robiDomyślnieWymagany
task-idZadanie, które się powiodło—Tak
--key <key>Do którego wyniku ma prowadzić link, gdy zadanie wygenerowało kilka. Użyj wartości key z output.assets w wyniku tasks getPierwszy wynikNie

Wynik: key, url i expiresAt. Link działa około 20 minut; otwórz go w przeglądarce albo pobierz plik przez curl. Zadanie, które jeszcze się nie powiodło, daje odpowiedź „nie znaleziono”. Jeśli plik jest jeszcze kopiowany, dostajesz błąd konfliktu; poczekaj kilka sekund i spróbuj ponownie. Gdy pliki zadania zostały już usunięte, nowego linku nie da się utworzyć. Bezpłatne.

webhooks verify

Co robi: jeśli masz serwer, który odbiera callbacki SpicyAPI (zobacz --callback-url), to polecenie sprawdza, czy jeden zapisany callback jest prawdziwy i niezmieniony. Działa w całości na twoim komputerze i nie wymaga klucza API.

spicyapi webhooks verify --body-file <path> --timestamp <seconds> --signature <base64> --payload-version <version>
OpcjaCo robiDomyślnieWymagana
--body-file <path>Plik z treścią callbacku dokładnie w takiej postaci, w jakiej przyszła, bajt w bajt—Tak
--timestamp <seconds>Wartość nagłówka X-Webhook-Timestamp—Tak
--signature <base64>Wartość nagłówka X-Webhook-Signature—Tak
--payload-version <version>Wartość nagłówka X-Webhook-Payload-Version: 1 albo 2—Tak
--secret-env <name>Nazwa zmiennej środowiskowej, w której jest twój klucz podpisujący webhooki. Samego klucza nigdy nie wpisuje się w wierszu poleceńSPICY_WEBHOOK_SECRETNie
--tolerance-seconds <seconds>O ile znacznik czasu może się różnić od zegara twojego komputera300Nie

Wynik: po udanym sprawdzeniu payload (treść callbacku), payloadVersion, taskId, deliveryId (wersja 2) i timestamp. Jeśli cokolwiek się nie zgadza, polecenie wypisuje błąd i kończy się niezerowym kodem wyjścia. Bezpłatne.

Klucz podpisujący powstaje automatycznie przy rejestracji, ale jego wartość nigdy nie jest pokazywana. Żeby dostać klucz, który da się skopiować, otwórz w konsoli stronę Webhooki i kliknij Wygeneruj (albo Wymień, jeśli klucz jest już skonfigurowany). Nowy klucz jest pokazywany tylko raz. Wymiana działa natychmiast, bez okresu przejściowego: stary klucz od razu przestaje podpisywać. Zobacz Webhooki.

Gotowe przepisy

Wygeneruj obraz

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

Wybierz identyfikator z wyniku pierwszego polecenia, zbuduj input.json z ustawień pokazanych przez drugie, a potem uruchom trzecie i potwierdź, wpisując y. Każdy krok wyjaśnia przewodnik Twój pierwszy wynik.

Zamień obraz w wideo

Znajdź model wideo z obrazu i jego ustawienia

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

W inputSchema znajdź ustawienie obrazu startowego (zwykle image_url), ustawienie długości (zwykle duration_seconds) i wszystko, co jest w required.

Prześlij swój obraz

spicyapi files upload ./start-frame.jpg

Skopiuj wartość uri, która zaczyna się od spicy://.

Zapisz dane wejściowe

Utwórz input.json tak jak w przewodniku Twój pierwszy wynik, używając nazw ustawień z modelu i własnego uri:

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

Sprawdź cenę, a potem generuj

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

Wideo jest zwykle rozliczane za sekundę, więc wybrana długość zmienia cenę. Generowanie wideo może trwać kilka minut, dlatego ten przykład czeka do 30 minut zamiast domyślnych 10. Pobierz plik .mp4 z url tak jak w przewodniku Twój pierwszy wynik.

Przesłanego obrazu można używać przez jeden dzień. Potem prześlij go ponownie.

Wróć do zadania po przerwanym czekaniu

Zadanie wykonuje się dalej, nawet jeśli terminal zostanie zamknięty, sieć się rozłączy, komputer przejdzie w stan uśpienia albo skończy się czas czekania. To, jak do niego wrócisz, zależy od tego, co widać na ekranie:

  • Widać Accepted: job_… albo linię Recover: pod błędem. Masz identyfikator zadania. Poczekaj ponownie albo po prostu sprawdź zadanie:

    spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000
    spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3
  • Widać tylko linię Idempotency-Key:, na przykład dlatego, że połączenie zerwało się podczas tworzenia zadania. Uruchom to samo polecenie jeszcze raz, z tym samym modelem i tymi samymi danymi wejściowymi, i dodaj ten klucz:

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

    CLI znowu pokaże cenę i zapyta o zgodę, ale jeśli pierwsza próba została przyjęta, SpicyAPI zwróci to samo zadanie, zamiast uruchamiać drugie i za nie pobierać opłatę. Działa to przez 24 godziny z tym samym kluczem API. Jeśli pierwsza próba w ogóle nie dotarła, zadanie powstanie teraz, jeden raz.

  • Nie masz żadnej z tych informacji. Wyświetl ostatnie zadania i znajdź właściwe po czasie i modelu:

    spicyapi --json tasks list --limit 10

Ponów nieudane zadanie

Najpierw sprawdź, dlaczego zadanie się nie powiodło:

spicyapi tasks get job_01k3m8x9q2z4v7n5p6r8s0t1w3

Potem przeczytaj errorCode. Nieudane lub wygasłe zadania zwykle zwalniają całą blokadę. Niektóre odmowy dotyczące treści są płatne według zaakceptowanej wyceny, wyłącznie gdy strona modelu wyraźnie wskazuje ten wyjątek. Sprawdź settled i cost, aby poznać ostateczną kwotę. tasks retry wysyła te same dane wejściowe jeszcze raz, więc pomaga tylko wtedy, gdy przyczyna była przejściowa:

errorCodeCo zrobić
rate_limited, upstream_unavailable, timeout, upstream_failedOdczekaj chwilę, a potem ponów raz. Jeśli znowu się nie uda, przestań ponawiać: przy timeout spróbuj przez tasks create z krótszym czasem trwania albo niższą rozdzielczością
generation_failedNie ponawiaj. Zmień prompt albo obraz, a potem użyj tasks create: te same dane wejściowe zwykle zawodzą w ten sam sposób
invalid_assetNie ponawiaj, bo ponowienie używa starego pliku. Prześlij plik ponownie, a potem użyj tasks create z nowym uri
invalid_request, unsupported_combinationNie ponawiaj bez zmian. Zmień ustawienia, a potem użyj tasks create
content_rejectedNie ponawiaj bez zmian. Model odmówił wykonania tego żądania: zmień prompt albo wybierz inny model, a potem użyj tasks create

Pełna lista jest na stronie Błędy.

Gdy ponowienie ma sens, uruchom je. Tworzy ono nowe zadanie i pobiera za nie opłatę:

spicyapi tasks retry job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait

Wyeksportuj zużycie

Zapisz w pliku zużycie bieżącego klucza z jednego miesiąca:

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

Plik zawiera sumy dzienne i sumy dla poszczególnych modeli. Żeby dostać listę zadanie po zadaniu, zapisz w ten sam sposób wynik spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --limit 100, przechodząc do kolejnych stron za pomocą nextCursor, dopóki hasMore ma wartość true. Dane dla całego konta i faktury są w konsoli.

Uruchom CLI ze skryptu

W skrypcie nikt nie odpowie na Continue? [y/N], więc płatne polecenia odmawiają działania, jeśli nie dodasz --yes. Gdy go dodajesz:

  • najpierw pobierz wycenę i sprawdź cenę w skrypcie;
  • każdej generacji nadaj własny, stały --idempotency-key, na przykład poster-2026-09-17-v1, żeby dwukrotne uruchomienie skryptu nie obciążyło cię dwa razy;
  • dodaj --json i odczytaj state z wyniku: polecenie zakończone kodem wyjścia 0 nie musi oznaczać, że zadanie się powiodło;
  • ustaw limity wydatków klucza w konsoli.
spicyapi --json tasks create --model MODEL_ID_FROM_CATALOG --input-file input.json --idempotency-key poster-2026-09-17-v1 --yes --wait > result.json

Koszty, potwierdzenia i bezpieczeństwo

Które polecenia kosztują. Tylko tasks create i tasks retry. Ceny są w dolarach amerykańskich. Wycenianie, wyświetlanie list, sprawdzanie, przesyłanie, pobieranie i usuwanie są bezpłatne.

Najpierw cena. tasks quote wycenia żądanie, niczego nie uruchamiając. tasks create pobiera własną wycenę i pokazuje Estimated charge oraz maximum charge, zanim zapyta o zgodę. Gdy zadanie zostaje przyjęte, szacowana kwota zostaje zablokowana (held) i jest zarazem najwyższą kwotą, jaką możesz zapłacić. Gdy zadanie się powiedzie, płacisz za to, co faktycznie powstało, nigdy więcej niż wynosi ta kwota, a reszta wraca na twoje saldo.

Potwierdzenie. Continue? [y/N] oznacza, że odpowiedź brzmi nie, dopóki nie wpiszesz y. --yes odpowiada za ciebie, więc używaj tej opcji dopiero wtedy, gdy znasz cenę. Jeśli CLI działa w miejscu, gdzie nie może zapytać, na przykład w skrypcie albo z danymi przekazanymi potokiem, a --yes nie podano, odmawia działania, zamiast przyjąć, że odpowiedź brzmi „tak”. tasks purge pyta w ten sam sposób, bo usunięcia nie da się cofnąć. tasks retry też pyta, ale nie pokazuje wcześniej ceny.

Klucz idempotentności, prostymi słowami. To etykieta jednej generacji, coś jak numer zamówienia. Każde tasks create i tasks retry go wypisuje. Jeśli połączenie z internetem się zerwie i nie wiesz, czy generacja ruszyła, uruchom to samo polecenie jeszcze raz z --idempotency-key i wypisaną wartością: dostaniesz z powrotem pierwotne zadanie i nie zapłacisz dwa razy. Etykieta działa przez 24 godziny z tym samym kluczem API. Nie używaj jej ponownie do innej generacji: ten sam klucz z innymi danymi wejściowymi zostanie odrzucony.

Bez anulowania. Przyjętego zadania nie da się anulować. Ctrl + C, zamknięcie terminala albo unieważnienie klucza przerywają tylko czekanie; zadanie się kończy i jest normalnie rozliczane.

Nieudane lub wygasłe zadania zwykle zwalniają całą blokadę. Niektóre odmowy dotyczące treści są płatne według zaakceptowanej wyceny, wyłącznie gdy strona modelu wyraźnie wskazuje ten wyjątek. Sprawdź settled i cost, aby poznać ostateczną kwotę.

Pobierz to, co chcesz zachować. Pliki wyników są przechowywane najwyżej przez około 14 dni albo krócej, jeśli tak mówi ustawienie konta albo --retention, a potem są usuwane na dobre. Linki do pobrania działają około 20 minut, ale dopóki plik istnieje, zawsze możesz poprosić o nowy. Przesłanych plików można używać przez jeden dzień. Tekst promptu jest domyślnie wymazywany po 30 dniach. Zapisy rozliczeniowe są zachowywane. Zobacz Przechowywanie i usuwanie danych.

Limity wydatków. Każdy klucz może mieć dzienny, miesięczny i łączny limit wydatków, ustawiany na stronie Klucze API. Nowe klucze nie mają limitu, dopóki go nie ustawisz. Zadanie, które przekroczyłoby limit, jest odrzucane, zanim ruszy.

Twój klucz. CLI odczytuje klucz wyłącznie z SPICY_API_KEY, nigdy go nie wypisuje, a we wskazówkach przy błędach pokazuje najwyżej jego pierwsze dziewięć znaków (sk-spicy-).

Więcej szczegółów: Rozliczenia, Idempotentność, Nieodwracalność zadań i ponowienia.

Rozwiązywanie problemów

Znajdź komunikat, który widzisz. Błędy zwracane przez SpicyAPI kończą się na (request req_…); jeśli kontaktujesz się ze wsparciem, podaj tę wartość, ale nigdy nie wysyłaj swojego klucza.

Każdy kod błędu jest wyjaśniony na stronie Błędy, a kroki naprawcze – na stronie Rozwiązywanie problemów i przywracanie działania.

Kod źródłowy

Pakiet jest na licencji MIT i powstaje otwarcie pod adresem github.com/spicyapi-ai/spicy-cli. Tam przeczytasz kod każdego polecenia z tej strony, zgłosisz zachowanie inne niż opisane i zaproponujesz zmianę.

Co dalej

Na tej stronie