Dokumentacja
Twórz z API Seevio
Dodaj generowanie wideo do swojego produktu. Wybierz model, wyślij żądanie i pobierz wynik za pomocą odpytywania (polling) lub webhooka.
Wybierz model
Dokumentacja każdego modelu zawiera pełną listę parametrów, cennik oraz przykłady. Integrację możesz przeprowadzić w całości z poziomu strony wybranego modelu.
Uwierzytelnianie
Utwórz klucz API w panelu użytkownika. Pełny klucz zostanie wyświetlony tylko raz. Przechowuj go bezpiecznie na swoim serwerze i przesyłaj w nagłówku jako token Bearer przy każdym żądaniu.
Bazowy adres URL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonPrzed uruchomieniem poniższych przykładów ustaw zmienną środowiskową SEEVIO_API_KEY. Przykłady w JavaScript należy uruchamiać na serwerze przy użyciu Node.js; przykłady w Pythonie korzystają z pakietu requests.
Szybki start
Ten przykład generuje 5-sekundowe wideo w rozdzielczości 720p przy użyciu modelu Seedance 2.5. Otwórz dokumentację konkretnego modelu, aby poznać wszystkie tryby generowania i limity parametrów.
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
}
}'Przykładowa odpowiedź na utworzenie zadania
Po zaakceptowaniu powyższego żądania interfejs API zwraca tę odpowiedź JSON. taskId to identyfikator zadania służący do późniejszego sprawdzania jego statusu, a credits określa liczbę kredytów zarezerwowanych na poczet tego zadania. Ta odpowiedź potwierdza jedynie utworzenie zadania, a nie gotowość wideo. Aby otrzymać gotowy plik wideo, należy odpytywać API o status zadania lub skorzystać z Webhooka.
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 100
}Sprawdź stan zadania
GET https://api.seevio.ai/v1/tasks/{taskId}Zastąp przykładowy identyfikator wartością taskId otrzymaną przy tworzeniu zadania. Zapytania zwracają wyłącznie zadania należące do użytkownika powiązanego z danym kluczem API; nieznane lub niedostępne identyfikatory zwracają HTTP 404.
Na początek odpytuj o stan co 10–20 sekund, wydłużaj odstępy w przypadku błędu HTTP 429 i przerwij, gdy status zmieni się na completed lub failed. W środowisku produkcyjnym zalecamy korzystanie z webhooków. Każdy poniższy przykład kodu wykonuje jedno zapytanie.
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| Status | Opis i ograniczenia |
|---|---|
queued | Zaakceptowano i oczekuje na uruchomienie. |
generating | Trwa generowanie wideo. |
completed | Zakończono sukcesem. Pobierz pliki z data.results przed upływem limitu czasu. |
failed | Zakończono błędem. Sprawdź failed_reason oraz billing_status. |
| Pole | Typ | Opis i ograniczenia |
|---|---|---|
id | string | Identyfikator zadania. Jest to wartość taskId z odpowiedzi na utworzenie. |
created_at | number | Czas utworzenia zadania jako znacznik czasu Unix (w sekundach). |
model | string | Publiczny identyfikator modelu użyty do tego zadania. |
billing_status | string | Status rozliczenia: reserved (zarezerwowane), charged (pobrane), refunded (zwrócone) lub refund_failed (błąd zwrotu). |
credits | number | Kredyty zarezerwowane dla tego zadania. Wartość ta jest widoczna również po zwrocie; sprawdź billing_status, aby poznać ostateczny wynik rozliczenia. |
failed_reason | string | null | Powód błędu dla zadań zakończonych niepowodzeniem; w przeciwnym razie null. Odpowiedzi na zapytania o błędne zadania nie zawierają obiektu data. |
data | object | Obecne w zapytaniach o zadania, które nie zakończyły się błędem. Zawiera szczegóły dotyczące wyniku i przetwarzania. |
data.results | string[] | Tablica adresów URL wygenerowanych wideo. Pusta do momentu zakończenia zadania lub po wygaśnięciu plików wideo. |
data.video_expires_at | string | null | Czas wygaśnięcia plików wideo jako znacznik czasu ISO 8601 (lub null, zanim plik będzie dostępny). Zapisz wynik przed tym czasem. |
data.last_frame_url | string | null | Adres URL ostatniej klatki (jeśli o nią wnioskowano i jest dostępna); w przeciwnym razie null. |
data.processing_time | number | null | Czas przetwarzania po stronie dostawcy w sekundach (jeśli jest dostępny); w przeciwnym razie null. |
Zakończone zadanie: odpowiedź na zapytanie z wynikowym wideo
Gdy zapytanie zwróci status=completed, oznacza to, że generowanie wideo zostało zakończone. Pobierz adresy URL materiałów wideo z pola data.results i zapisz pliki przed upływem czasu wskazanego w data.video_expires_at. Wartość billing_status=charged oznacza, że zarezerwowane kredyty zostały pobrane.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Nieudane zadanie: odpowiedź na zapytanie ze szczegółami błędu i rozliczenia
Gdy zapytanie zwróci status=failed, oznacza to, że generowanie zakończyło się niepowodzeniem. Przyczynę błędu znajdziesz w polu failed_reason, a wynik zwrotu środków w billing_status. W tym przykładzie status refunded oznacza, że kredyty zostały zwrócone. Pole credits zachowuje pierwotnie zarezerwowaną wartość, a odpowiedź nie zawiera obiektu data.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}Webhooki
W przypadku integracji produkcyjnych podaj parametr callback_url podczas tworzenia zadania. Dokumentacja każdego modelu zawiera przykłady danych wysyłanych w webhooku oraz kod przykładowego odbiorcy.
Ustaw parametr callback_url w żądaniu utworzenia, aby otrzymać żądanie POST z formatem JSON, gdy zadanie zostanie zakończone sukcesem lub błędem. Zwróć odpowiedź z kodem 2xx w ciągu 15 sekund. Nieudane doręczenia są ponawiane; powtarzające się wywołania należy przetwarzać idempotentnie na podstawie identyfikatora zadania.
Twój punkt końcowy (callback endpoint) musi akceptować żądania POST z treścią w formacie JSON (Content-Type: application/json).
Utwórz zadanie z wywołaniem zwrotnym (callback)
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "seedance-2-5",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video",
"aspect_ratio": "16:9",
"generate_audio": true
},
"callback_url": "https://example.com/webhooks/seevio"
}'Zawartość webhooka różni się od odpowiedzi na zapytanie o stan zadania: nie zawiera parametrów billing_status i credits; szczegóły błędu znajdują się w data.failed_reason oraz data.credits_refunded. Pole created_at w webhooku to czas utworzenia zdarzenia (Unix timestamp).
Zadanie zakończone: struktura danych pomyślnego wywołania zwrotnego
Gdy generowanie zakończy się sukcesem, wywołanie zwrotne zawiera status=completed. Użyj parametru id do identyfikacji zadania, a data.results do pobrania adresów URL wideo. Pobierz i zapisz wyniki przed upływem czasu określonego w data.video_expires_at.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "completed",
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Zadanie nie powiodło się: struktura danych błędu wywołania zwrotnego
Gdy generowanie nie powiedzie się, wywołanie zwrotne zawiera status=failed. Użyj parametru id do identyfikacji zadania, data.failed_reason, aby poznać przyczynę błędu, oraz data.credits_refunded, aby sprawdzić liczbę zwróconych kredytów.
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "seedance-2-5",
"status": "failed",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}Przykładowy odbiorca
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrls = callbackData.data.results;
// Save the video URLs and mark this task as completed in your application.
console.log(callbackData.id, videoUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData.data;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}Ten przykład dla Next.js odczytuje treść wywołania zwrotnego JSON i bezpośrednio obsługuje zakończone oraz nieudane zadania. W swojej aplikacji dodaj mechanizm trwałości danych oraz deduplikację identyfikatorów zadań (task-ID). Przed potwierdzeniem odbioru wywołania zwrotnego dodaj czasochłonne operacje do kolejki.
Błędy
Błędy HTTP zawierają obiekt error z polami code i message. Pomyślnie przyjęte zadanie może nadal zakończyć się błędem na późniejszym etapie – sprawdzaj stan zadania lub obsłuż wywołanie zwrotne (callback) informujące o błędzie.
{
"error": {
"code": "invalid_request",
"message": "input.prompt is required."
}
}| HTTP | Pole | Co zrobić |
|---|---|---|
| 400 | invalid_request | Przed ponownym wysłaniem popraw strukturę JSON, brakujący prompt, zakresy parametrów lub adresy URL multimediów. |
| 401 | invalid_api_key | Sprawdź poprawność tokenu Bearer oraz czy klucz API jest aktywny. |
| 402 | insufficient_credits | Doładuj konto lub zmniejsz koszt zadania. Odpowiedź może zawierać informacje o wymaganej i dostępnej liczbie kredytów. |
| 403 | forbidden | Sprawdź ograniczenia na poziomie konta opisane w komunikacie o błędzie. |
| 404 | not_found | Sprawdź identyfikator zadania oraz czy klucz API należy do właściciela zadania. |
| 429 | rate_limited | Odczekaj czas wskazany w nagłówku Retry-After przed ponowną próbą. |
| 500 | internal_error | Sprawdź treść błędu oraz logi API. Ponawiaj próby ostrożnie – ponowne wysłanie żądania utworzenia może wygenerować kolejne płatne zadanie. |