Jeśli budujesz produkt do obrazów lub wideo AI bez cenzury, trzy fakty decydują o projekcie przechowywania danych. Przesłane pliki referencyjne pozostają dostępne przez 1 dzień. Media wygenerowane przez zadania API, SDK i Playground są przechowywane przez około 14 dni (media krótkich filmów Studio mają osobny limit około 60 dni), a każdy otrzymany link do pobrania działa tylko przez około 20 minut. Wszystkie te okresy są limitami maksymalnymi: możesz je jedynie skracać, dla całego konta albo pojedynczego żądania, i na żądanie niszczyć treść zakończonego zadania. Żadne ustawienie ich nie wydłuży.
Niezawodny schemat to zatem: prześlij plik bezpośrednio za pomocą krótkotrwałego biletu, zatwierdź plik, wyślij zadanie asynchroniczne z prywatną referencją spicy://, odbierz link do wyniku po zakończeniu zadania, a następnie skopiuj wynik do kontrolowanego przez siebie magazynu lub świadomie pozwól mu wygasnąć. Nie umieszczaj pliku klienta w publicznym buckecie i nie zapisuj zwróconego adresu pobierania tak, jakby był trwały.
Przesłanie referencji do SpicyAPI jest bezpłatne; zadanie generowania, które jej używa, jest rozliczane osobno. Odświeżenie linku pobierania istniejącego wyniku nie uruchamia ani nie kupuje generowania ponownie. Nowa próba generowania ma własną opłatę za model, natomiast przechowywanie, żądania i transfer kopii w Twoim buckecie podlegają cenom Twojego dostawcy magazynu.
Sprawdź zaakceptowane terminy retencji, zanim obiecasz klientom okres przechowywania; dokumentacja retencji wyjaśnia ustawienia. Praktyczny przykład lokalnej kopii znajdziesz w artykule zamiana tymczasowych mediów AI w trwałe zasoby produktu.
Najpierw wypróbuj w Playground
- Otwórz stronę z-image do generowania obrazów z tekstu, pozostań w Workbench, w Form, wpisz Prompt, wybierz Aspect ratio i kliknij Run model (najpierw się zaloguj; ten obraz to zwykłe płatne generowanie). Sprawdź go w Preview i zapisz przez Download.
- W Console otwórz Logs i znajdź to zadanie, aby sprawdzić, jak długo jego wynik jest przechowywany.
- Otwórz Data protection, a następnie Retention, aby zobaczyć cztery okresy i dowolny z nich skrócić.
- Gdy masz już własną kopię, wybierz Destroy outputs na zakończonym zadaniu, aby usunąć jego treść.
Co SpicyAPI przechowuje i jak długo
| Dane | Okres przechowywania | Co dzieje się po wygaśnięciu |
|---|---|---|
| Przesłane pliki referencyjne | 1 dzień po udanym zatwierdzeniu | URI spicy:// przestaje działać dla nowych zadań, w tym ponowień; obiekt jest następnie usuwany, a sprzątanie może opóźnić się o maksymalnie 24 godziny |
| Wygenerowane obrazy, wideo i audio | Około 14 dni dla wyników API, SDK i Playground; około 60 dni w projekcie krótkiego filmu Spicy Studio, z opóźnieniem sprzątania do 24 godzin | Usuwane z magazynu obiektowego; nie można wydać linku do pobrania |
Tekst promptu i ścieżki plików wynikowych w zadaniu (input, output) | 30 dni | Oba pola są czyszczone; wiersz zadania pozostaje |
| Rekord zadania (ID, model, stan, kwota, znaczniki czasu) | Bezterminowo | Zachowany jako dowód rozliczenia; pola treści są czyszczone według osobnych harmonogramów |
| Rejestr rozliczeń | Tak długo, jak wymaga amerykańskie prawo podatkowe i rachunkowe (okres liczony w latach) | Zachowany; usunięcie treści nie ma na niego wpływu |
| Logi zadań i rekordy dostarczenia webhooków | Co najmniej 60 dni | Usuwane |
| Kopie zapasowe bazy danych | 35 dni | Zastępowane rotacyjnie; usunięcie treści nie usuwa kopii zapasowych natychmiast |
Skróć okres lub samodzielnie zniszcz treść
1. Okresy retencji konta. W Retention na stronie Data protection w konsoli dostępne są cztery oddzielne okresy:
| Okres | Obejmuje | Domyślnie | Krótsze opcje |
|---|---|---|---|
| Generated results | Obrazy, wideo, audio i dane wyniku | Około 14 dni | 1 godzina, 6 godzin, 24 godziny, 7 dni |
| Short-film media | Media krótkich filmów Studio i wyeksportowane filmy | Około 60 dni | Od 1 godziny do 30 dni |
| Prompt text | Pola tekstowe żądania | 30 dni | Tak jak wyniki, 1 godzina, 24 godziny, 7 dni |
| Uploaded files | Pliki referencyjne | 1 dzień | Delete when the job ends |
Okres przechowywania przesłanych plików ma trzy ważne ograniczenia:
- Delete when the job ends: upload jest usuwany, gdy każde używające go zadanie osiągnie stan końcowy, zwykle w ciągu minuty. Nowe generowanie z tą usuniętą referencją wymaga ponownego przesłania pliku.
- Tylko istniejące pliki: przełącznik dotyczy plików obecnych w chwili zapisania ustawienia. Późniejsze uploady zachowują obecnie standardowy termin wygaśnięcia po 1 dniu, podany w odpowiedzi zatwierdzenia.
- Opcje 1 godziny i 24 godzin: obecnie niczego nie zmieniają; upload pozostaje użyteczny do zwróconego
expiresAt.
Uwaga przed skróceniem okresu: krótsze ustawienie może objąć zadania już wykonane. Na przykład ustawienie Prompt text na 1 lub 24 godziny usuwa tekst promptu i wygenerowane wyniki wszystkich zadań zakończonych ponad dzień temu, nawet jeśli Generated results nadal wynosi 14 dni. Usuniętej treści nie można przywrócić. Najpierw pobierz to, co chcesz zachować; wydłużenie ustawienia dotyczy tylko przyszłości.
2. Osobno dla każdego żądania. Podczas tworzenia zadania wyślij nagłówek X-Spicy-Retention (w sekundach); dokumentacja retencji pokazuje żądanie. Efektywny okres to najkrótszy z okresu żądania, ustawienia konta i limitu platformy. Odczytaj zaakceptowane terminy z zadania, zamiast obiecywać żądany czas.
Nie używaj natychmiastowego usuwania w produkcie, który obiecuje dostarczenie wyniku lub zapisaną bibliotekę. Może ono usunąć wynik, zanim kopiowanie się zakończy. Zostaw po dostarczeniu margines na odzyskanie.
3. Zniszczenie treści zakończonego zadania. Po skopiowaniu potrzebnych danych lub gdy klient zażąda usunięcia, usuń twórczą treść tego zadania.
Konsola udostępnia tę samą akcję jako Destroy outputs przy zadaniu w Logs. Obowiązują trzy zasady:
- Tylko zakończone zadania. Purge jest idempotentny względem
taskId; nie wymagaIdempotency-Key. Nie anuluje generowania ani nie zwraca opłaty, abillingRetainedpozostaje true. - Usunięcie jest planowane.
contentStatezmienia się napurged, amediaDeletionPendingpozostaje true do zakończenia sprzątania, zwykle w ciągu minuty. Potwierdź zakończenie, zanim powiesz klientowi, że dane zostały usunięte. - Odpowiedź
presentniczego nie usunęła. Zbadaj odpowiedź i ustawienia zachowania danych, zamiast zgłaszać zakończenie usuwania.
contentState ma wartość expired, gdy treść usunęła retencja, i purged, gdy została zniszczona na Twoje żądanie. Stan zadania expired znaczy zupełnie co innego: generowanie przekroczyło limit czasu i niczego nie wytworzyło. Ponowienie pomaga tylko w tym drugim przypadku.
Wysyłanie plików referencyjnych
Obraz, wideo lub plik audio będący referencją może trafić do zadania na trzy sposoby. Publiczny adres HTTPS musi zwracać sam plik: link do strony udostępniania (dysk chmurowy, album zdjęć, post społecznościowy) zwraca stronę internetową i zadanie kończy się błędem invalid_asset, więc pobierz plik i prześlij go zamiast tego. Mały obraz (do 1 MiB) można przesłać bezpośrednio jako URI danych base64. Pliki prywatne lub duże należy przesyłać przez SDK, CLI lub Playground, które zwracają prywatną referencję spicy:// dla zadania.
Limity uploadu: JPEG, PNG, WebP i GIF do 10 MiB; WAV, MP3, WebM, MP4 i MOV do 90 MiB i 600 sekund, przy czym model może akceptować mniej. Zachowaj oryginał, jeśli wejście będzie potrzebne ponownie po jednodniowym okresie. Backend musi tylko autoryzować upload i odnotować właściciela; klient może wysłać bajty bezpośrednio. Upload jest bezpłatny; generowanie to osobny zakup. Dokumentacja mediów opisuje przebieg.
Wyniki: odbierz, następnie skopiuj lub pozwól wygasnąć

Manuskrypt i kadry krajobrazowe zbiegają się w jedną wyświetlaną scenę.
Każde nowe żądanie wysyłaj z własnym kluczem idempotencji, zachowuj ID zadania i odbieraj wynik przez odpytywanie lub callback. Gotowe zasoby mają podpisany url; pobieraj go bez klucza API i wysyłaj User-Agent, na przykład Mozilla/5.0, ponieważ CDN odrzuca domyślnego agenta Pythonowego urllib kodem 403, który nie oznacza wygaśnięcia linku. Zadanie succeeded może nadal zawierać zasób pending, więc sprawdzaj dalej, aż adres URL będzie gotowy. Wygasły link można odświeżyć w okresie retencji; dokumentacja mediów pokazuje jak.
Warto jawnie obsłużyć trzy stany zasobu:
| Co widzisz | Znaczenie | Działanie |
|---|---|---|
pending: true, jeszcze bez url | Plik jest nadal kopiowany do magazynu | Zapytaj ponownie za kilka sekund |
unavailable: true, bez key | Brak zasobu platformy możliwego do pobrania: początkowe zapisanie nie powiodło się, retencja się skończyła lub Purge go usunął | Odzyskaj zweryfikowaną, wcześniej zapisaną kopię; jeśli jej nie ma, świadomie zdecyduj o nowym generowaniu |
HTTP 410 z download-url | Kopia platformy przekroczyła retencję albo została zniszczona | Kopii platformy nie można przywrócić; użyj własnego archiwum, jeśli istnieje |
Model wyłącznie tekstowy w ogóle nie ma assets, a jego tekst w output.text jest usuwany według tego samego harmonogramu, więc odczytaj go, zanim założysz, że istnieje plik.
Wyjątek bez naliczania opłaty za nieudane przechowywanie obowiązuje, gdy żadnego wyjścia zadania nie udało się początkowo zapisać. Sam stary zasób unavailable nie dowodzi prawa do zwrotu; sprawdź pierwotne rozliczenie zadania.
Callbacki zawierają Twój prompt i podpisane linki do wyników. Twój endpoint, odwrotny proxy, narzędzie śledzenia błędów i system logowania otrzymują więc materiał, który SpicyAPI samo usuwa według harmonogramu. Ukrywaj treść callbacków w logach dostępu i kopiuj w workerze. Sprawdzanie podpisów, deduplikacja i ponowienia opisane są w dokumentacji webhooków.
- Produkt obiecuje bibliotekę, udostępnianie lub późniejszą edycję: przesyłaj wynik strumieniowo do prywatnego magazynu pod Twoją kontrolą natychmiast po stwierdzeniu sukcesu, zapisuj własne ID zasobu i wywołuj potem Purge, jeśli chcesz usunąć kopię platformy. Duże wideo przesyłaj strumieniowo, zamiast buforować całość, i zapewnij idempotentny zapis docelowy względem zadania oraz zasobu.
- Jednorazowe dostarczenie: nie kopiuj. Pokaż wynik, poinformuj klienta, jak długo jest dostępny, i pozwól retencji lub krótkiemu
X-Spicy-Retentiongo usunąć.
Referencja przesłana przez użytkownika nie jest materiałem marketingowym, a udany wynik nie oznacza zgody na publikację. Oznaczaj coś jako „zapisane przez klienta” dopiero po potwierdzeniu własnej kopii.
Gdy coś się nie powiedzie
| Etap | Objaw | Właściwe odzyskanie |
|---|---|---|
| Tworzenie zadania | Utracona odpowiedź | Wyślij ponownie zapisany korpus z tym samym kluczem idempotencji w 24-godzinnym oknie deduplikacji; zatrzymaj się w celu uzgodnienia stanu, jeśli to okno mogło minąć. Nowy klucz może utworzyć drugie zadanie i opłatę |
| Callback | Zduplikowany, opóźniony lub brakujący | Deduplikuj według request_id; odpytuj recordInfo, gdy oczekiwane zdarzenie końcowe nie nadchodzi |
| Kopia wyniku | Link wygasł przed zakolejkowanym pobraniem lub ponownym połączeniem | Pobierz świeży adres URL i ponownie przesyłaj strumieniowo do tego samego klucza docelowego |
| Po terminie | 410 albo unavailable | Najpierw sprawdź zweryfikowane archiwum; oznacz jako niedostępne, jeśli nie pozostała zapisana kopia |
Użyteczne logi bez zachowywania twórczych materiałów
Sprawdź te miejsca pod kątem przypadkowych kopii:
- Raporty błędów i logi dostępu: ukrywaj prompty, bilety i podpisane linki; unikaj logowania korpusów tras mediów.
- Analityka i kolejki: używaj ID operacji, zadań i zasobów, które nie ujawniają treści, zamiast adresów URL lub nazw plików, także w magazynie niedostarczonych wiadomości.
- Eksporty wsparcia i publiczne dostarczanie: sprawdzaj zrzuty ekranu, metadane stron i e-maile. Kieruj klientów do strony wymagającej uwierzytelnienia, która po sprawdzeniu dostępu wydaje świeży link.
- Twój magazyn i kopie zapasowe: stosuj własną politykę usuwania. Wygasły link nie może odebrać pliku, który ktoś już pobrał.
Czego ustawienia retencji nie mogą obiecać
- Model widzi prompt. Model wykonujący żądanie otrzymuje go w postaci jawnej, więc ustawienia SpicyAPI kontrolują wyłącznie czas przechowywania przez samo SpicyAPI. Nie wysyłaj materiału, którego nie trzeba wysyłać.
- Purge jest asynchronicznym żądaniem usunięcia. Potwierdź zwrócony stan treści i zakończenie usuwania mediów. Sprzątanie cyklu życia magazynu i rotacja backupów mają osobne okresy; Twoje skopiowane pliki i backupy również wymagają własnych operacji usunięcia. Rekordy rozliczeniowe pozostają w każdym przypadku.
Jeśli potrzebujesz innego okresu retencji zapisanego w umowie, zgłoś to przed podpisaniem zamiast wyciągać taki wniosek ze strony dokumentacji.
Często zadawane pytania
Czy mogę użyć tymczasowego adresu uploadu jako adresu obrazu w żądaniu generowania?
Nie. Adres uploadu autoryzuje tylko bezpośredni zapis. Prześlij plik, zatwierdź go i wpisz zatwierdzone URI spicy:// w pole, które aktualny schemat modelu oznacza jako pole uploadu.
Czy mogę przechowywać wygenerowane wideo w SpicyAPI dłużej niż 14 dni?
Dla wyników API, SDK i Playground nie: ich limit wynosi około 14 dni. Media krótkich filmów Studio mają osobny limit około 60 dni. Po sukcesie skopiuj plik do własnego magazynu, aby mieć dostęp dłużej.
Czy Purge zwraca opłatę za zadanie?
Nie. Purge usuwa tylko treść; opłata i rekord zadania pozostają.
Czy webhook może całkowicie zastąpić odpytywanie?
Może być główną ścieżką, z ograniczoną kontrolą uzgodnienia dla niedostarczonych wiadomości. Za klucz obsługi przyjmij request_id dostarczenia i ID zadania.
Czy mogę umieścić link do wyniku w e-mailu?
Unikaj tego. E-maile są przekazywane dalej i archiwizowane długo po wygaśnięciu krótkotrwałego linku. Kieruj klientów do uwierzytelnionej strony, która sprawdza dostęp i wydaje świeży link.
Co powinno się stać, gdy klient usuwa zapisany wynik?
Usuń lub unieważnij własną kopię i jej ścieżkę dostarczania oraz zachowaj zapis tej operacji. Kopia platformy podlega własnemu harmonogramowi; użyj Destroy outputs, jeśli ma zniknąć wcześniej.
Sprawdzenie istniejącego zadania w kodzie
Zainstaluj spicyapi, ustaw SPICY_API_KEY i TASK_ID, a następnie uruchom to sprawdzenie tylko do odczytu. Nie tworzy generowania ani nie usuwa treści.
import json
import os
from spicyapi import SpicyClient
client = SpicyClient()
task = client.get_task(os.environ["TASK_ID"])
print(json.dumps({"taskId": task["taskId"], "state": task["state"],
"contentState": task.get("contentState"), "retention": task.get("retention"),
"mediaDeletionPending": task.get("mediaDeletionPending")}, indent=2))Dokumentacja retencji opisuje ustawienia żądania i kontrakt usuwania.
Zleć wywołanie Agentowi
Zleć sprawdzenie magazynu, jeśli masz już ID zadania; nowe generowanie nie jest potrzebne.
- CLI:
npx @spicyapi/cli tasks get "$TASK_ID"odczytuje aktualne terminy. Zobacz przewodnik CLI. - MCP: poproś
spicyapi_task_geto sprawdzenie zadania. Używajspicyapi_task_purgedopiero po wyraźnym zatwierdzeniu zniszczenia jego treści; przewodnik MCP opisuje potwierdzenie. - Skill: po
npx skills add spicyapi-ai/spicy-skillpoproś$spicyapio sprawdzenie retencji zadania i wyjaśnienie, co wygaśnie. Zobacz przewodnik Skill.





