Integracja produkcyjna
Lista kontrolna przed startem integracji, która przetrwa awarie – właściwy model, chronione klucze i saldo, potwierdzone koszty, trwałe śledzenie zadań, niezawodne callbacki i testy do wykonania przed uruchomieniem.
Przejdź przez tę stronę jak przez listę kontrolną, zanim na twojej integracji zaczną polegać prawdziwi użytkownicy albo prawdziwe pieniądze. Każda sekcja mówi, co zrobić, dlaczego to ważne i gdzie znaleźć szczegóły. Jeśli pierwsze wywołanie masz jeszcze przed sobą, zacznij od strony Przygotuj konto i szybkiego startu.
Wybierz model i protokół
- Wybierz model, który twój klucz naprawdę może wywołać. Wywołaj
GET /api/v1/modelsze swoim kluczem API i korzystaj tylko z modeli, w których zarównoenabled, jak iavailablemają wartośćtrue. Z tej samej odpowiedzi odczytajinputSchemamodelu (listę przyjmowanych pól) orazexamples. Strona modelu w serwisie mówi, co model potrafi, ale nie dowodzi, że twój klucz może go wywołać w tej chwili. Zobacz Modele. - Korzystaj z właściwego punktu wejścia. Zadania obrazu, wideo i innych mediów idą przez API zadań pod
/api/v1(createTask, a potemrecordInfoalbo callback). Modele tekstowe możesz też wywoływać klientami zgodnymi z OpenAI lub Anthropic pod/v1albo klientami zgodnymi z Gemini pod/v1beta. Zobacz Tekst i streaming. - Uwierzytelniaj się wyłącznie kluczem API. Plik cookie z logowania do konsoli nie jest poświadczeniem API i nigdy nie wolno kopiować go do kodu.
Chroń klucze i saldo
- Trzymaj klucz na swoim serwerze. Umieść go w zmiennej środowiskowej (
SPICY_API_KEY) na backendzie – nigdy w kodzie przeglądarki, w aplikacji mobilnej ani w publicznym repozytorium. Zobacz Uwierzytelnianie. - Osobny klucz dla każdego środowiska i każdej usługi. Nazwij każdy klucz po tym, co z niego korzysta (na przykład „production-worker”), żeby móc unieważnić jeden bez zatrzymywania pozostałych.
- Ustaw limity na kluczu produkcyjnym: limit dzienny na poziomie, który zniesiesz w wyjątkowo złym dniu, budżet miesięczny, dozwolone modele oraz – przy wywołaniach z serwera – listę dozwolonych IP. Zobacz ograniczenia pojedynczego klucza. Przy edycji klucza pamiętaj, że puste pole limitu oznacza brak limitu.
- Pilnuj dat wygaśnięcia. Klucz z datą wygaśnięcia przestaje działać z końcem tego dnia (UTC) i zwraca ten sam
401co klucz unieważniony. Wpisz tę datę do kalendarza albo w ogóle jej nie ustawiaj dla backendu, który ma działać latami. - Nie dopuść, żeby środki skończyły się w połowie serii. Zadanie odrzucone z powodu salda zwraca
40201i nigdy nie trafia do kolejki. Włącz Alert o niskim saldzie w sekcji Powiadomienia i rozważ automatyczne doładowanie. - Limity zespołu też obowiązują. Jeśli twój klucz należy do zespołu, dzienne i miesięczne limity zespołu mogą zatrzymywać zadania z kodem
40202, nawet gdy własne limity klucza nie zostały osiągnięte. Każde zadanie jest wtedy opłacane z salda właściciela zespołu. Zobacz Limity wydatków. - Zaplanuj wymianę klucza podpisującego webhooki. Wymiana klucza w konsoli nie ma okresu przejściowego: stary klucz natychmiast przestaje podpisywać. Dostarczenia, które są jeszcze ponawiane, dostają podpis nowym kluczem. Wymieniaj klucz w spokojnym okresie, od razu wdróż nowy klucz w swoim odbiorniku, a wszystko, co przepadło w międzyczasie, odzyskaj przez
recordInfo. Zobacz Webhooki.
Przygotuj dane wejściowe na serwerze
- Sprawdzaj dane względem aktualnego schematu. Trzymaj się typów pól, dozwolonych wartości i wymagań warunkowych z
inputSchema, a po zmianie modelu sprawdź dane jeszcze raz – każdy model ma własny schemat. - Przekazuj media w obsługiwany sposób. Użyj publicznie dostępnego adresu
https://albo obsługiwanego wejścia w Base64. Dla plików lokalnych poproś o adres do przesyłania, wyślij bajty metodąPUT, wywołajfiles/{fileId}/commit, a zwrócony adresspicy://wpisz w pole wejściowe modelu. Zobacz Media. - Wykorzystaj każdy przesłany plik, zanim wygaśnie. Adres
spicy://działa do chwiliexpiresAtpodanej w odpowiedzi na zatwierdzenie (domyślnie 1 dzień). Nie pobieraj hurtowo adresów do przesyłania, których potem nie użyjesz – niewykorzystane liczą się do limitu. Zobacz Limity żądań.
Wyceniaj, zanim przyjmiesz opłatę
- Pokaż cenę, zanim wydasz pieniądze. Wyślij kompletne
model,inputicallBackUrlnaPOST /api/v1/jobs/quote. Osobie, która płaci, pokażestimatedCost,maxCharge, walutę (USD) iexpiresAt. Wycena jest bezpłatna: nie tworzy zadania i nie blokuje środków. - Wysyłaj dokładnie to, co zostało potwierdzone. Wycena jest ważna pięć minut. Po potwierdzeniu wyślij to samo żądanie do
createTask, dodającquoteIdiexpectedCost. - Obsłuż
40901. Ten kod oznacza, że od chwili wyceny wycena wygasła, dane wejściowe się zmieniły albo zmieniła się cena. Pobierz nową wycenę i pokaż nową kwotę; nigdy nie akceptuj po cichu wyższej. Zobacz Wyceny. - Licz pieniądze dokładnie. Kwoty to liczby dziesiętne zapisane jako tekst, na przykład
"0.008". Przechowuj je i dodawaj arytmetyką dziesiętną, a nie zmiennoprzecinkową. Zobacz Rozliczenia.
Zapisuj operację biznesową
To twoje własne zapisy pozwalają wrócić do porządku, gdy wywołanie sieciowe urwie się w połowie.
- Zapisz przed wysłaniem: własny identyfikator zamówienia lub operacji, krótki opis żądania bez sekretów i bez pełnych promptów (wystarczający, żeby je potem rozpoznać) oraz
Idempotency-Key, który zamierzasz wysłać. - Zapisz po przyjęciu:
taskIdirequest_idz odpowiedzi. - Używaj tego samego klucza dla tego samego zgłoszenia. W ciągu 24 godzin wyślij pierwotny
Idempotency-Keyponownie z tego samego konta, tym samym kluczem API i z tym samym żądaniem; dostaniesz z powrotem pierwotne zadanie zamiast drugiej opłaty. Zobacz Idempotentność. - Traktuj przekroczenie czasu jako „nie wiadomo”, a nie „nie powiodło się”. Zanim zdecydujesz się utworzyć nowe zadanie, odzyskaj pierwotne zgłoszenie jego kluczem. Zobacz Rozwiązywanie problemów.
- Wiedz, ile kosztuje ponowienie. Ponowienie zadania, które już się nie powiodło, tworzy nowe zadanie na aktualnych warunkach i po aktualnych cenach.
Niezawodnie obsługuj callbacki i wyniki
- Weryfikuj każdy callback. Zanim sparsujesz treść, sprawdź podpis i znacznik czasu względem oryginalnych bajtów żądania, a potem odfiltruj duplikaty i zapisz zdarzenie. Zobacz Webhooki.
- Potwierdzaj szybko. Od razu odpowiedz statusem
2xx, a powolną pracę wykonaj we własnej kolejce. - Spodziewaj się duplikatów i opóźnień. O tym, co zrobić, decyduj na podstawie
statezadania, a nie kolejności, w jakiej przychodzą callbacki. - Zostaw odpytywanie jako plan awaryjny. Jeśli callback się spóźnia, odczytuj
recordInfoz coraz dłuższymi przerwami, a nie co sekundę. - Czytaj właściwy sygnał. HTTP
202zcreateTaskoznacza, że zadanie zostało przyjęte.state: "succeeded"oznacza, że generacja się zakończyła.settled: trueoznacza, że opłata jest ostateczna.
Ogranicz współbieżność i zachowuj wyniki
- Ogranicz liczbę trwających zadań na konto i wyznaczaj własnym żądaniom terminy. Każde przyjęte zadanie blokuje środki aż do rozliczenia.
- Przy
429stosuj się doRetry-Afteri unikaj sytuacji, w której wielu klientów odpytuje co sekundę w tym samym rytmie. Zobacz Limity żądań. - Buforuj dane katalogu krótko i prywatnie i nigdy nie traktuj wyceny jak stałego cennika.
- Archiwizuj wyniki, które chcesz zachować. Linki do pobrania działają 20 minut; wygenerowane media przechowujemy najwyżej około 14 dni, a przesłane pliki – jeden dzień. Możesz te okresy skrócić albo wcześniej usunąć treść zadania przez
POST /api/v1/jobs/purge. Skrócenie okresu przechowywania może też usunąć wyniki zadań wykonanych już wcześniej – zobacz Przechowywanie i usuwanie danych. - Nie licz na to, że rozłączenie zatrzyma pracę. Przyjęte zadanie działa dalej i nie da się go anulować.
Sprawdź przed uruchomieniem
Zacznij od bezpłatnych wywołań: katalogu (GET /api/v1/models), salda (GET /api/v1/chat/credit) i wyceny. Potem przepuść jedną małą, prawdziwą generację przez własny proces potwierdzania kosztu – jest rozliczana jak każde inne zadanie. Sprawdź, czy twoja integracja radzi sobie z każdą z tych sytuacji:
| Scenariusz | Jak go wywołać | Co powinna zrobić integracja |
|---|---|---|
| Powodzenie | Zwykłe małe zadanie | Zapisać wynik i pokazać ostateczny cost, gdy settled ma wartość true |
| Nieprawidłowe dane wejściowe | Wyślij wartość spoza schematu | Pokazać problem; bez ponawiania (400) |
| Nieobsługiwana kombinacja | Ustawienie, którego model nie obsłuży (jeśli takie istnieje) | Poprosić o inną wartość; bez ponawiania (40004) |
| Za niskie saldo | Klucz konta ze zbyt niskim saldem | Poprosić użytkownika o doładowanie; bez ponawiania (40201) |
| Osiągnięty limit wydatków | Klucz z bardzo niskim limitem dziennym | Pokazać, który limit zadziałał; bez ponawiania (40202) |
| Unieważniony lub wygasły klucz | Unieważnij klucz testowy i wywołaj nim API | Zaalarmować operatora; bez ponawiania (401) |
| Przekroczenie czasu po wysłaniu | Zerwij połączenie tuż po createTask | Wysłać ponownie z tym samym Idempotency-Key i odzyskać pierwotne zadanie |
| Model odrzuca treść | Trudno to wywołać na żądanie: w testach zasymuluj odpowiedź recordInfo ze state: "failed" i errorCode: "content_rejected" | Pokazać powód z errorMessage; bez automatycznego ponawiania |
| Zdublowany callback | Odtwórz callback, który już dotarł | Przetworzyć go tylko raz |
| Wygasły link do pobrania | Odczekaj ponad 20 minut | Poprosić o nowy link |
Zapisuj w logach request_id, taskId, czas, state i kwoty. Klucze API i pełne prompty trzymaj z dala od ogólnych logów.
Powiązane strony
Wyceny i zgodność protokołów · Katalog modeli i schematy · Media · Webhooki · Błędy · Rozwiązywanie problemów i odzyskiwanie · Rozliczenia · Przechowywanie i usuwanie danych
Podmiana osoby
Jeden zestaw narzędzi, dwie postaci. Modele jednowywołaniowe podmieniają twarz albo głowę w pojedynczym żądaniu; modele dwuwywołaniowe najpierw analizują klip, żebyś to ty wskazał, kto ma się zmienić.
SDK dla TypeScriptu
Przewodnik krok po kroku po SDK dla TypeScriptu @spicyapi/sdk – instalacja, pierwszy wynik i opis każdej metody, opcji i błędu prostym językiem. SDK dla Pythona, Go, PHP i Javy mają własne strony.

