Szybki start
Tworzenie asynchronicznego zadania oraz obsługa odpytywania, ukończenia, niepowodzenia i wywołań zwrotnych.
RunAPI używa zadań (Tasks) do asynchronicznego generowania obrazów, wideo, dźwięku i muzyki. Żądanie tworzenia zwraca wynik szybko; Twoja aplikacja następnie sonduje zadanie lub odbiera zdarzenia wywołania zwrotnego wymienione w dokumentacji interfejsu API danego punktu końcowego.
Tworzenie zadania
Wybierz model i endpoint w Katalogu, a następnie wyślij wymagane dane wejściowe tego endpointu. Ten przykład uruchamia zadanie generowania obrazu z tekstu Flux 2:
curl -X POST "https://runapi.ai/api/v1/flux_2/text_to_image" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Idempotency-Key: 8c8ba3c9-0ce0-4bbd-a9a7-bf59ab639286" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-2-pro-text-to-image",
"prompt": "A product photograph on a clean studio background"
}'
Zaakceptowane żądanie asynchroniczne zwraca 202 Accepted z identyfikatorem
zadania (Task):
{
"id": "task_id",
"status": "processing"
}
Przechowaj id razem z rekordem aplikacji. Jest to stabilny identyfikator używany do sondowania, obsługi technicznej i uzgadniania wywołań zwrotnych.
Wysyłanie danych multimedialnych
Media Input Fields to pola żądania zawierające adresy URL multimediów: pola najwyższego poziomu, których nazwy kończą się na _url lub _urls, np. image_url lub image_urls, pole url każdego elementu video_list oraz pola element_input_urls, element_input_video_urls i element_input_audio_urls każdego elementu kling_elements. callback_url to endpoint dostarczania, a nie Media Input Field. Każda wartość Media Input Field może być publicznym adresem URL HTTPS lub data URI w formacie data:<mime>;base64,<data>, do 10 MB na jeden data URI. RunAPI zapisuje każdy data URI jako tymczasowy File Upload, który wygasa po godzinie, i używa go w Task. Data URI, którego nie można zapisać, zwraca 422 z kodem błędu invalid_media_input.
Endpointy edycji GPT Image akceptują w source_image_urls wyłącznie adresy URL HTTPS. Aby wysłać lokalny obraz do tych endpointów, najpierw utwórz File Upload i przekaż zwrócony adres URL.
W przypadku plików większych niż 10 MB najpierw utwórz File Upload za pomocą POST /api/v1/files i przekaż zwrócony adres URL. File Upload typu multipart lub ze źródła URL akceptuje pliki do 50 MB. Adresy URL File Upload również wygasają po godzinie, więc dla każdego Task uruchamianego po tym czasie utwórz nowy File Upload.
# For this model, non-PNG/JPEG input may return 409 depending on the selected service.
# If rejected, convert WebP/BMP/TIFF/GIF to PNG/JPEG or select a compatible service.
# Actual MIME determines support, even for a .png URL. Rejection happens before task creation or charging.
# This is not a format limit for every service. Existing Task queries remain available.
curl -X POST "https://runapi.ai/api/v1/seedream/decompose_layers" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"model":"seedream-5-pro-layer-decomposition","image_url":"https://cdn.runapi.ai/public/samples/image.png"}'
Zapobieganie duplikowaniu tworzonych zadań
Punkty końcowe tworzenia zadań przyjmują opcjonalny nagłówek Idempotency-Key z nieprzezroczystą wartością do 512 znaków. Wygeneruj jedną wartość dla każdego zadania logicznego i przechowuj ją wraz z żądaniem, dopóki nie wiesz, czy zostało przyjęte.
Jeśli przekroczenie limitu czasu lub awaria połączenia pozostawia wynik nieznany, ponów
dokładnie to samo żądanie utworzenia zadania z tym samym kluczem. RunAPI zwraca
oryginalne zadanie zamiast tworzyć i naliczać opłatę za drugie. Użycie
klucza z innym żądaniem utworzenia zadania zwraca 409 Conflict.
Wygeneruj nowy klucz dla celowo nowego zadania i nie używaj
X-Client-Request-Id jako tego klucza.
Odtwórz przerwane żądanie synchroniczne
Powolne synchroniczne punkty końcowe zazwyczaj utrzymują połączenie otwarte i zwracają tę samą terminalową odpowiedź co dotychczas. Żadne zmiany sondowania nie są wymagane w istniejących integracjach.
Aby celowo skrócić budżet czasu połączenia, wyślij nagłówek Prefer: wait=N.
Jeśli zadanie (Task) nadal działa po upływie tego jawnego budżetu, RunAPI zwraca
202 Accepted z tym samym id zadania, nieprzejrzystym adresem URL Location do
odzyskania oraz Retry-After sugerującym opóźnienie kolejnego zapytania. Podążaj
dokładnie za Location zamiast samodzielnie konstruować adres URL wyniku. Ukończony
wynik zadania (Task Result) zachowuje terminalny status HTTP, dozwolone nagłówki, typ
treści i treść; dekoduj response.body zgodnie z response.content_type, który nie
zawsze jest JSON.
Odpytaj zadanie
Dołącz identyfikator zadania (Task) do tej samej ścieżki punktu końcowego:
curl "https://runapi.ai/api/v1/flux_2/text_to_image/task_id" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Kontynuuj, dopóki status ma wartość processing. Używaj ograniczonego wycofywania między
żądaniami zamiast ciągłego odpytywania. Zadanie staje się końcowe, gdy
jego status wynosi completed lub failed.
Obsługa ukończenia
Odpowiedź completed zawiera id zadania (Task), terminalny status, pola wynikowe specyficzne dla danego punktu końcowego oraz usage.cost jako kwotę float USD dla tego Task. Zachowaj potrzebny wynik i zatrzymaj odpytywanie. Zapoznaj się z dokumentacją interfejsu API danego punktu końcowego, aby poznać dokładny kształt wyniku — nie zakładaj, że każdy punkt końcowy dla mediów zwraca te same pola.
Envelopy Task dla utworzenia, processing i failed pomijają usage.
Zadania wymagające końcowego rozliczenia na podstawie multimediów pozostają w stanie processing
do czasu zarejestrowania ostatecznej opłaty. Wywołanie zwrotne informujące o ukończeniu jest wysyłane
dopiero po tym rozliczeniu; jego usage.cost odpowiada wartości zwracanej przez kolejne
zapytania o zadanie. Brakujące dane księgowe nie są przedstawiane jako zero: zadanie
pozostaje w stanie processing podczas uzgadniania tych danych. Potwierdzona opłata zerowa
jest zwracana jako usage.cost: 0.
Obsługa błędów
Odpowiedź failed zawiera id zadania (Task), terminalny status oraz
autorski komunikat error RunAPI, jeśli jest dostępny. Zatrzymaj odpytywanie,
zapisz identyfikator i błąd, a ponowną próbę podejmuj tylko wtedy, gdy aplikacja
zakwalifikowała błąd jako przejściowy. Ponowna próba powoduje utworzenie nowego
identyfikatora zadania (Task).
Odbierz wywołanie zwrotne
Dodaj publiczny adres HTTPS callback_url do żądania tworzenia, jeśli chcesz,
aby RunAPI wysyłał zdarzenia wywołania zwrotnego opisane dla danego punktu
końcowego:
{
"model": "flux-2-pro-text-to-image",
"prompt": "A product photograph on a clean studio background",
"callback_url": "https://your-domain.com/webhooks/runapi"
}
Każde wywołanie zwrotne odpowiada jednemu zdarzeniu cyklu życia w dokumentacji API danego endpointu. Completed callback współdzieli usage.cost z completed odpowiedzią odpytywania; callbacki utworzenia, processing i failed pomijają usage. Terminalne wywołania zwrotne zawierają te same pola wynikowe co terminalne odpowiedzi odpytywania; niektóre endpointy wysyłają również udokumentowane wywołania zwrotne processing. Szybko zwróć pomyślną odpowiedź HTTP i utrzymuj dostępność odpytywania na potrzeby uzgadniania w przypadku opóźnionego dostarczenia lub niedostępności obsługi wywołań zwrotnych.
Przeczytaj artykuł Wywołania zwrotne, aby dowiedzieć się, jak utworzyć sekret wywołania zwrotnego, weryfikować podpisy i bezpiecznie obsługiwać ponowne próby.
Generuj filmy Vidu Q4
Użyj POST /api/v1/vidu/image_to_video z model:
"vidu-q4-image-to-video" i first_frame_image_url. Użyj POST
/api/v1/vidu/reference_to_video z model:
"vidu-q4-reference-to-video", niepustym prompt i uporządkowanymi 1–15
reference_image_urls. Pobierz każde zadanie za pomocą GET po jego utworzeniu
ścieżka, po której następuje /:id. Ukończone zadania zawierają tablicę videos
wynikowe adresy URL. Do kompletacji możesz także dostarczyć callback_url
powiadomienia.
Obydwa punkty końcowe akceptują domyślnie liczbę całkowitą duration_seconds od 3 do 16
5 i output_resolution z 540p, 720p, 1080p, 2k lub 4k,
domyślny 720p. audio to wartość logiczna JSON, domyślnie true; wyraźne
false wyłącza generowany dźwięk. Podpowiedzi akceptują do 20 000
postacie. Monit o zamianę obrazu na wideo jest opcjonalny i dotyczy pierwszej klatki
określa jego proporcje. Odniesienie do wideo akceptuje aspect_ratio
z 16:9, 9:16, 1:1, 4:3 lub 3:4, domyślny 16:9 i do 3
reference_audio_urls.
Użyj publicznych adresów URL multimediów HTTP(S). Obrazy muszą mieć format JPG/JPEG, PNG lub WEBP; obraz pierwszej klatki nie może być większy niż 50 MB. Każdy dźwięk referencyjny plik musi mieć format MP3, mieć długość 3–12 sekund i nie być większy niż 50 MB. RunAPI sprawdza typy pól, schematy adresów URL i liczbę odwołań. Pokolenie dostawca sprawdza zdalny format multimediów, rozmiar i czas trwania dźwięku asynchronicznie. Nieprawidłowy nośnik może spowodować niepowodzenie zadania normalna awaria i zwrot pieniędzy.