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ędzie | Wybierz je, gdy |
|---|---|
| SDK | Piszesz program w JavaScripcie albo TypeScripcie, który wywołuje SpicyAPI |
| Serwer MCP | Chcesz, żeby asystent programistyczny AI wykonywał te same kroki za ciebie |
| Agent Skill | Chcesz 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ę… | Polecenie | Płatne? | Wymaga klucza API? |
|---|---|---|---|
| Sprawdzić, czy SpicyAPI jest osiągalne | spicyapi status | Nie | Nie |
| Przeszukać tę dokumentację | spicyapi docs search <words> | Nie | Nie |
| Zobaczyć, z których modeli mogę korzystać, i ile kosztują | spicyapi models list | Nie | Tak |
| Zobaczyć, jakie ustawienia przyjmuje jeden model | spicyapi models get <model> | Nie | Tak |
| Sprawdzić saldo | spicyapi balance | Nie | Tak |
| Zobaczyć, ile wydał dany klucz | spicyapi usage | Nie | Tak |
| Poznać dokładną cenę generacji bez jej uruchamiania | spicyapi tasks quote | Nie | Tak |
| Uruchomić generowanie obrazu albo wideo | spicyapi tasks create | Tak, po zapytaniu cię o zgodę | Tak |
| Poczekać, aż generacja się zakończy | spicyapi tasks wait <task-id> | Nie | Tak |
| Obejrzeć jedną generację i linki do jej wyników | spicyapi tasks get <task-id> | Nie | Tak |
| Wyświetlić moje ostatnie generacje | spicyapi tasks list | Nie | Tak |
| Uruchomić ponownie nieudaną generację | spicyapi tasks retry <task-id> | Tak, po zapytaniu cię o zgodę | Tak |
| Trwale usunąć pliki i prompt generacji | spicyapi tasks purge <task-id> | Nie, i nic nie zostaje zwrócone | Tak |
| Przesłać obraz, wideo albo plik dźwiękowy jako dane wejściowe | spicyapi files upload <path> | Nie | Tak |
| Dostać świeży link do pobrania wyniku | spicyapi files download-url <task-id> | Nie | Tak |
| Sprawdzić, czy callback naprawdę przyszedł od SpicyAPI | spicyapi webhooks verify | Nie | Nie, 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 -vJeś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:
- Wejdź na nodejs.org, otwórz stronę pobierania i wybierz wersję LTS dla swojego systemu.
- Uruchom instalator i zaakceptuj domyślne opcje.
- 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.
- 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.
- Dodaj środki w sekcji Rozliczenia w konsoli. Generacje są opłacane z twojego salda, w dolarach amerykańskich.
- 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. - 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 ~/.zshrcWklej 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 statusZa 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 statusSpicyAPI 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 balanceavailable: 12.34
held: 0.06
total: 12.40Co 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.
priceto cena w dolarach amerykańskich zaunit:per_image(za obraz),per_second(za sekundę wideo),per_request(za żądanie) alboper_1k_tokens(za tysiąc tokenów).- Kilka pozycji w
pricingoznacza, że cena zależy od twoich ustawień, na przykład od rozdzielczości. - Żeby znaleźć model po nazwie, dodaj
--searchi 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.
requiredwymienia ustawienia, które musisz wysłać. Tutaj tylkoprompt.propertieswymienia 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.enumwymienia 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"}
EOFCo 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.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:00ZCo 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 --waitCLI 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_01k3m8x9q2z4v7n5p6r8s0t1w3Obrazy 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: valuew każdej linii. Wartości złożone z kilku części, takie jakoutputczyretention, są wypisywane jako JSON w jednej linii. --jsonwypisuje całą odpowiedź jako JSON z wcięciami. Działa z każdym poleceniem, przed nazwą polecenia albo po niej:spicyapi --json balanceispicyapi balance --jsonrobią 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. Dlategospicyapi --json tasks get <task-id> > task.jsonzapisuje wtask.jsontylko 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--jsonbłąd jest jednoliniowym obiektem JSON z polamierror,type,status,codeirequestId, bez liniiNext:. Gdy klucz nie jest ustawiony,typema 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ład0.03. - Czasy są w UTC.
Zna końcu2026-09-17T08:05:00Zoznacza UTC. - Kod wyjścia wynosi
0, gdy polecenie się powiedzie, i jest różny od0, 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.
| Opcja | Co robi | Domyślnie | Wymagana |
|---|---|---|---|
--json | Wypisuje cały wynik jako JSON | Wyłączona | Nie |
--timeout-ms <milliseconds> | Jak długo czekać na jedną odpowiedź SpicyAPI, zanim CLI się podda, od 1 do 120000 | 30000 (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 5 | 2 | Nie |
--api-base-url <url> | Wysyła żądania API pod inny adres. Zwykle nigdy nie jest potrzebna | https://api.spicyapi.ai/api/v1 | Nie |
--service-base-url <url> | Adres, który sprawdza status. Zwykle nigdy nie jest potrzebna | https://api.spicyapi.ai | Nie |
-V, --version | Wypisuje wersję CLI | — | Nie |
-h, --help | Pokazuje pomoc do polecenia | — | Nie |
| Zmienna środowiskowa | Do czego służy |
|---|---|
SPICY_API_KEY | Twój klucz API. Potrzebny w każdym poleceniu oprócz status, docs search i webhooks verify |
SPICY_WEBHOOK_SECRET | Twój klucz podpisujący webhooki, odczytywany przez webhooks verify |
SPICY_API_BASE_URL, SPICY_SERVICE_BASE_URL | To 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 statusBez 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.
docs search
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 opcja | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
words | Słowa do wyszukania. Pomiń je, żeby wyświetlić listę stron | Puste | Nie |
--limit <count> | Największa liczba wyników, od 1 do 25 | 10 | Nie |
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/retentionGdy 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]| Opcja | Co robi | Domyślnie | Wymagana |
|---|---|---|---|
--modality <type> | Tylko modele image, video albo text. Opcja przyjmuje też audio, ale obecnie nie ma w ofercie modeli audio | Wszystkie | Nie |
--task <task> | Tylko jeden rodzaj pracy, na przykład text-to-image, edit, image-to-video, text-to-video albo reference-to-video | Wszystkie | Nie |
--provider <name> | Tylko modele jednego twórcy modelu, czyli firmy albo laboratorium, które zbudowało model. Musi dokładnie odpowiadać wartości provider | Wszystkie | Nie |
--search <text> | Tylko modele, których identyfikator albo wyświetlana nazwa zawiera ten tekst, bez względu na wielkość liter | Brak | Nie |
--include-schema | Dodaje pełne ustawienia każdego modelu (inputSchema). Wynik staje się dużo dłuższy | Wyłączona | Nie |
--include-examples | Dodaje gotowe przykładowe dane wejściowe, które serwer już sprawdził (examples) | Wyłączona | Nie |
spicyapi models list --modality video --task image-to-video --jsonWynik: total i items. Używaj --json, bo bez tej opcji wszystkie pozycje są wypisywane w jednej linii. Najbardziej przydatne pola każdej pozycji:
| Pole | Znaczenie |
|---|---|
model | Identyfikator modelu do użycia w innych poleceniach |
displayName, provider, modality, tasks | Nazwa, twórca modelu, rodzaj wyniku i rodzaj pracy |
enabled, available | Używaj modeli, w których oba mają wartość true |
pricing | Jedna 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 |
taskTimeoutSeconds | Jak długo generacja może trwać, zanim zakończy się stanem expired |
maxOutputDurationSeconds | Najdł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>| Argument | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
model | Dokładny identyfikator modelu. Ukośniki w nim mogą zostać bez zmian | — | Tak |
spicyapi models get MODEL_ID_FROM_CATALOG --jsonWynik: 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 balanceBez 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>]| Opcja | Co robi | Domyślnie | Wymagana |
|---|---|---|---|
--from <date> | Pierwszy uwzględniany dzień, w formacie YYYY-MM-DD w UTC | Ostatnie siedem dni łącznie z dzisiejszym | Nie |
--to <date> | Dzień po ostatnim uwzględnianym dniu, w formacie YYYY-MM-DD w UTC. Zakres może obejmować najwyżej 92 dni | Ostatnie siedem dni łącznie z dzisiejszym | Nie |
spicyapi usage --from 2026-09-01 --to 2026-10-01To 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>| Opcja | Co robi | Domyślnie | Wymagana |
|---|---|---|---|
--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 żądania | Brak | Nie |
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]| Opcja | Co robi | Domyślnie | Wymagana |
|---|---|---|---|
--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 |
--wait | Czeka, aż zadanie się zakończy, i wypisuje wynik | Wyłączona: wypisuje identyfikator zadania i kończy działanie | Nie |
--yes | Pomija pytanie o potwierdzenie. Używaj jej dopiero wtedy, gdy znasz cenę, zwykle w skryptach | Wyłączona: pyta | Nie |
--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ów | Nowy losowy klucz przy każdym uruchomieniu | Nie |
--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 zachowywane | Ustawienie twojego konta | Nie |
--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 Webhooki | Brak | Nie |
--poll-interval-ms <milliseconds> | Z --wait: sprawdza zadanie co tyle milisekund, od 100 do 60000 | Zaczyna od 2 sekund i zwalnia do 10 sekund | Nie |
--wait-timeout-ms <milliseconds> | Z --wait: przestaje czekać po takim czasie, od 1 do 86400000. Zadanie wykonuje się dalej | 600000 (10 minut) | Nie |
Co się dzieje, po kolei:
- CLI odczytuje twoje dane wejściowe i sprawdza, czy są obiektem JSON. Jeśli nie podano danych wejściowych, zatrzymuje się w tym miejscu.
- Jeśli nikt nie może odpowiedzieć na pytanie, na przykład w skrypcie, a nie przekazano
--yes, zatrzymuje się w tym miejscu. - Pobiera wycenę i wypisuje szacowaną opłatę, maksymalną opłatę, termin wygaśnięcia wyceny i klucz idempotentności.
- Pyta
Continue? [y/N]. Dalej przechodzi tylko poyalboyes. Domyślna odpowiedź to nie. - Tworzy zadanie po wycenionej cenie. Szacowana kwota zostaje zablokowana na twoim saldzie i jest zarazem najwyższą kwotą, jaką zadanie może kosztować.
- Bez
--waitwypisujeidempotencyKey,taskId,state(queued),estimatedCostideadlineAt, a potem kończy działanie. Z--waitod razu wypisujeAccepted: <task-id>i polecenie do odzyskania zadania, czeka, a potem wypisujeidempotencyKey,acceptedi zakończonetask.
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 --waitW 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 opcja | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
task-id | Identyfikator zadania, na przykład job_01k3m8x9q2z4v7n5p6r8s0t1w3 | — | Tak |
--poll-interval-ms <milliseconds> | Sprawdza zadanie co tyle milisekund, od 100 do 60000 | Zaczyna od 2 sekund i zwalnia do 10 sekund | Nie |
--wait-timeout-ms <milliseconds> | Przestaje czekać po takim czasie, od 1 do 86400000 | 600000 (10 minut) | Nie |
spicyapi tasks wait job_01k3m8x9q2z4v7n5p6r8s0t1w3 --wait-timeout-ms 1800000Wynik: 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>| Argument | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
task-id | Identyfikator zadania | — | Tak |
Użyj tego samego klucza API, którym utworzono zadanie: inny klucz dostanie odpowiedź „nie znaleziono”.
Pola wyniku:
| Pole | Znaczenie |
|---|---|
state | queued (czeka na start), running, succeeded, failed albo expired (skończył się czas). Starsze zadania mogą też mieć stan canceled |
output.assets | Wyniki. 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, errorMessage | Dlaczego zadanie się nie powiodło. Zobacz Błędy |
cost, settled | Opłata w USD. Jest ostateczna, gdy settled ma wartość true |
input | Ustawienia, które wysłano. Usuwane, gdy skończy się okres przechowywania twojego promptu |
createdAt, completedAt, deadlineAt | Kiedy zadanie utworzono, kiedy się zakończyło i najpóźniejszy moment, w którym mogło się zakończyć |
contentState | present (treść nadal jest przechowywana), expired (usunięta zgodnie z zasadami przechowywania) albo purged (trwale usunięta przez ciebie) |
retention | outputsExpireAt (kiedy pliki wyników zostaną usunięte), promptsExpireAt (kiedy tekst promptu zostanie wymazany) i source (które ustawienie o tym zdecydowało) |
sourceTaskId | Obecne, 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]| Opcja | Co robi | Domyślnie | Wymagana |
|---|---|---|---|
--from <date> | Pierwszy uwzględniany dzień, YYYY-MM-DD w UTC | Siedmiodniowe okno kończące się dzisiaj | Nie |
--to <date> | Dzień po ostatnim uwzględnianym dniu, YYYY-MM-DD w UTC. Zakres może obejmować najwyżej 92 dni | Jak wyżej | Nie |
--state <state> | Tylko zadania w jednym stanie: queued, running, succeeded, failed, canceled albo expired | Wszystkie | Nie |
--model <model> | Tylko zadania dla jednego, dokładnie podanego identyfikatora modelu | Wszystkie | Nie |
--limit <count> | Liczba zadań na stronie, od 1 do 100 | 20 | Nie |
--cursor <cursor> | Kontynuuje od poprzedniej strony, na podstawie jej wartości nextCursor | Pierwsza strona | Nie |
spicyapi --json tasks list --from 2026-09-01 --to 2026-09-08 --state failedWynik: 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 opcja | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
task-id | Nieudane albo wygasłe zadanie do ponownego uruchomienia | — | Tak |
--wait | Czeka, aż nowe zadanie się zakończy | Wyłączona | Nie |
--yes | Pomija pytanie o potwierdzenie | Wyłączona: pyta | Nie |
--idempotency-key <key> | Ponowne uruchomienie ponowienia z tym samym kluczem zwraca to samo nowe zadanie zamiast kolejnego | Nowy losowy klucz przy każdym uruchomieniu | Nie |
--poll-interval-ms <milliseconds> | Z --wait: jak często sprawdzać zadanie | Zaczyna od 2 sekund i zwalnia do 10 sekund | Nie |
--wait-timeout-ms <milliseconds> | Z --wait: przestaje czekać po takim czasie | 600000 (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
failediexpired, a także starsze zadaniacanceled. Żeby dostać inną wersję udanego wyniku, użyjtasks 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 createstracił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 opcja | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
task-id | Zakończone zadanie: succeeded, failed, expired albo canceled | — | Tak |
--yes | Pomija pytanie o potwierdzenie | Wyłączona: pyta | Nie |
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 opcja | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
path | Plik 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/wav | Rozpoznawany po rozszerzeniu | Nie |
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.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: 720Wynik: 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 opcja | Co robi | Domyślnie | Wymagany |
|---|---|---|---|
task-id | Zadanie, 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 get | Pierwszy wynik | Nie |
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>| Opcja | Co robi | Domyślnie | Wymagana |
|---|---|---|---|
--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_SECRET | Nie |
--tolerance-seconds <seconds> | O ile znacznik czasu może się różnić od zegara twojego komputera | 300 | Nie |
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 --waitWybierz 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 --jsonW 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.jpgSkopiuj 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 1800000Wideo 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 --waitCLI 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_01k3m8x9q2z4v7n5p6r8s0t1w3Potem 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:
errorCode | Co zrobić |
|---|---|
rate_limited, upstream_unavailable, timeout, upstream_failed | Odczekaj 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_failed | Nie ponawiaj. Zmień prompt albo obraz, a potem użyj tasks create: te same dane wejściowe zwykle zawodzą w ten sam sposób |
invalid_asset | Nie ponawiaj, bo ponowienie używa starego pliku. Prześlij plik ponownie, a potem użyj tasks create z nowym uri |
invalid_request, unsupported_combination | Nie ponawiaj bez zmian. Zmień ustawienia, a potem użyj tasks create |
content_rejected | Nie 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 --waitWyeksportuj 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.jsonPlik 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ładposter-2026-09-17-v1, żeby dwukrotne uruchomienie skryptu nie obciążyło cię dwa razy; - dodaj
--jsoni odczytajstatez wyniku: polecenie zakończone kodem wyjścia0nie 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.jsonKoszty, 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
Katalog modeli i schematy
Jak działa katalog na żywo i ustawienia każdego modelu
Rozliczenia
Ceny, blokady środków, limity wydatków i faktury
Przechowywanie i usuwanie danych
Jak długo są przechowywane pliki i prompty oraz jak je usunąć wcześniej
Błędy
Każdy kod błędu i to, czy warto ponawiać
SDK dla TypeScriptu
To samo z poziomu własnego kodu w JavaScripcie albo TypeScripcie
SDK dla Pythona
To samo z poziomu własnego kodu w Pythonie
SDK dla Go
To samo z poziomu własnego kodu w Go
Serwer MCP
Niech asystent programistyczny AI wykonuje te kroki, z potwierdzeniem przed wydaniem pieniędzy
Agent Skill
Naucz agenta AI bezpiecznego sposobu pracy ze SpicyAPI
Szybki start
Ten sam przebieg bezpośrednio przez HTTP API
Agenci i automatyzacja
Które oficjalne narzędzie wybrać oraz produkcyjna instrukcja postępowania dla agentów AI, workerów backendu i powtarzalnych potoków generowania mediów.
Serwer MCP
Podłącz Claude, Cursor, VS Code i innych asystentów AI do SpicyAPI, a potem w rozmowie przeglądaj modele, porównuj ceny, generuj media i odbieraj wyniki – każdy płatny krok potwierdzasz ty.

