modele

sora-2

Markdown · JSON

sora-2

Sora 2 tworzy wideo z synchronizowanymi dialogami, efektami dźwiękowymi i dźwiękiem tła na podstawie tekstu lub obrazu referencyjnego. Profil standardowy służy do poszukiwań wizualnych i klipów koncepcyjnych, a producent udostępnia osobne procesy dla wielokrotnego użycia postaci innych niż ludzie, kontynuacji i precyzyjnych edycji wideo.

O modelu

Ten opis przedstawia możliwości modelu. Dane wejściowe, wyniki i opcje dostępne w Ailoot podano poniżej dla wybranej metody.

Sora 2 to model OpenAI do generowania obrazu i dźwięku w dynamicznych klipach na podstawie pisemnego opisu sceny lub obrazu referencyjnego. Tworzy sekwencję wizualną wraz z synchronizowaną mową, efektami i dźwiękiem tła. Standardowy profil Sora 2 jest przeznaczony do poszukiwań wizualnych, rozwijania koncepcji, prototypów i wstępnych montaży. Sora 2 Pro to osobne wydanie nastawione na większą wierność obrazu i wykończenie w wyższej rozdzielczości.

Opisz ujęcie, które można zobaczyć i usłyszeć

Poradnik producenta dotyczący promptów porządkuje przydatny brief wokół kadrowania, głównego obiektu, akcji, otoczenia i światła. Nadaj scenie spójny styl wizualny, a następnie opisz ruch w wyraźnych etapach. Autorska koncepcja produktu może pokazywać mały mechaniczny przedmiot wykonujący jeden obrót na stole warsztatowym, podczas gdy kamera powoli się zbliża, przy miękkim świetle z okna i subtelnym odgłosie silnika. Określ, na co widz ma zwrócić uwagę i jak kończy się akcja.

Zadbaj o zrozumiały ruch kamery i działanie głównego obiektu w każdym ujęciu. Złożoną sekwencję można podzielić na osobne bloki ujęć, każdy z własnym kadrowaniem, akcją i oświetleniem. Zachowaj te same szczegóły obiektu i paletę, gdy kilka klipów ma tworzyć jedną sekwencję. Poradnik podkreśla, że krótsze ujęcia zwykle wierniej realizują polecenia, a wielokrotne generowanie z tego samego promptu daje różne wersje.

Opis premiery modelu wskazuje na lepsze odwzorowanie zjawisk fizycznych i ciągłość między ujęciami, także w stylu realistycznym, filmowym i anime. Są to możliwości, które należy świadomie ukierunkować i sprawdzić. Oceń ruch, kontakt między obiektami, proporcje i ciągłość, zamiast zakładać, że wiarygodna pierwsza klatka gwarantuje spójną sekwencję. Jeśli działanie jest niejasne, uprość je i nadaj mu widoczny początek oraz koniec.

Osobno poprowadź dialog i dźwięk

Podaj wypowiadane kwestie oddzielnie od opisu wizualnego i konsekwentnie oznaczaj rozmówców. Dialog powinien być na tyle krótki, by mieścił się w akcji i planowanej długości klipu. W animacji z dwiema postaciami użyj naprzemiennie krótkiego pytania i odpowiedzi, zamiast próbować zmieścić długą przemowę w krótkim ujęciu. Poradnik ostrzega, że złożone, długie dialogi mogą zaburzać tempo i synchronizację.

Opisz warstwę dźwiękową właściwą dla sceny: odgłos drobnego ruchu, atmosferę pomieszczenia lub rytm efektu otoczenia. Wyjaśnij, który dźwięk ma zbiegać się z działaniem. Odsłuchaj uzyskaną mowę i efekty razem z obrazem, sprawdzając przypisanie rozmówców, treść i czas. Synchronizowane audio stanowi część wygenerowanego klipu, a nie osobną odpowiedź tekstową.

Rozmiar, długość i początek oparty na obrazie

Udokumentowane rozmiary wyjściowe standardowego modelu to pionowe 720×1280 i poziome 1280×720. Rozmiarów o wyższej rozdzielczości dostępnych w profilu Pro nie należy przypisywać standardowej Sora 2. Rozmiar i długość są jawnymi ustawieniami żądania; wpisanie innego rozmiaru lub prośby o dłuższy film w prompcie nie zmienia tych ustawień. Dokumentacja tworzenia podaje długości klipów 4, 8 i 12 sekund, więc przygotowując ujęcie, wybierz krótki, jasno określony etap akcji. Rozszerzony proces producenta dokumentuje również ustawienia 16 i 20 sekund.

Obraz referencyjny wyznacza pierwszą klatkę, a tekst opisuje dalszy przebieg. Producent obsługuje referencje JPEG, PNG i WebP oraz wymaga zgodności obrazu z docelowym rozmiarem wideo. Przygotuj główny obiekt, otoczenie i kompozycję na tym obrazie początkowym, a następnie poproś o konkretny ruch. Jest to referencja pierwszej klatki, a nie gwarancja zachowania każdego szczegółu przez cały klip.

Postacie inne niż ludzie do wielokrotnego użycia

Rozszerzony proces producenta pozwala utworzyć zasób postaci do wielokrotnego użycia na podstawie krótkiego wideo referencyjnego zwierzęcia, maskotki lub przedmiotu. Wskazówki przygotowania zalecają klip MP4 trwający około dwóch do czterech sekund, w rozdzielczości od 720p do 1080p i proporcjach 16:9 lub 9:16. Dopasowanie proporcji źródła i wyniku pomaga uniknąć rozciągnięcia obrazu. Generowanie może odwoływać się do maksymalnie dwóch postaci.

Zachowaj identyfikator postaci i wymień jej nazwę w prompcie; samo przekazanie identyfikatora nie wyczerpuje przygotowania opisanego w poradniku. Zasoby postaci mogą towarzyszyć generowaniu na podstawie obrazu, ale rozszerzanie wideo ich nie przyjmuje. Producent domyślnie blokuje przesyłanie postaci o ludzkim wyglądzie i w udokumentowanym procesie API odrzuca obrazy referencyjne zawierające ludzkie twarze. Funkcje postaci osobistych w aplikacji Sora stanowią osobny proces produktowy.

Kontynuuj lub edytuj ukończony klip

Rozszerzenie przyjmuje ukończone wideo źródłowe i prompt kontynuacji, wykorzystując cały klip jako kontekst ruchu, kierunku kamery i ciągłości sceny. Poradnik opisuje dodawanie do 20 sekund w jednym rozszerzeniu. Udokumentowanymi danymi wejściowymi tego trybu są wideo źródłowe i tekst; dodatkowe referencje postaci lub obrazów są wyłączone. Opisz dalszy ciąg istniejącej akcji, zamiast wprowadzać niepowiązaną scenę bez przejścia.

Edycja wideo służy do wprowadzenia jasno określonej zmiany w istniejącym klipie. Precyzyjna poprawka może zmienić kolor przedmiotu lub paletę sceny, zachowując pozostałe elementy ujęcia. Poradnik producenta zaleca jedną dobrze określoną zmianę naraz i odróżnia edycję wygenerowanego wideo od przesyłania dowolnego materiału, dla którego obowiązuje osobny warunek dopuszczenia. Zachowaj ukończone źródło i wskaż dokładną potrzebną poprawkę przed kolejną edycją.

Zadania renderowania i gotowe wideo

Udokumentowany proces wideo producenta jest asynchroniczny: przesłane zadanie może oczekiwać w kolejce lub być w toku, zanim zakończy się powodzeniem albo błędem. Ukończone zadanie daje wideo MP4; miniatury i arkusze klatek wspierają podgląd i przeglądanie. Zachowaj powiązanie identyfikatora zadania z promptem, referencjami i zwróconymi zasobami. Pierwsza odpowiedź na zadanie nie jest jeszcze gotowym wideo do odtworzenia.

Zwykły proces pobierania określa godzinny czas ważności adresu URL pobierania. Rozszerzony proces wsadowy przygotowuje niezależne żądania renderowania JSON ze stałymi identyfikatorami elementów, przesłanymi referencjami i wynikiem przypisanym do każdego ujęcia; gotowe zasoby mają osobny okres pobierania wynoszący do 24 godzin. Niezwłocznie zapisz gotowy klip i sprawdź rzeczywisty obraz oraz dźwięk, zanim uznasz go za wybrane ujęcie.

Udokumentowane ograniczenia treści w API producenta wymagają materiału odpowiedniego dla odbiorców poniżej 18 lat oraz wykluczają postacie lub muzykę chronione prawem autorskim i generowanie rzeczywistych osób. Przygotuj scenę i referencje zgodnie z tymi zasadami. Bezpośrednim wynikiem modelu jest wideo z dźwiękiem, a nie wygenerowane nieruchome obrazy, konwersacyjna odpowiedź narzędzia czy film o nieograniczonej długości. Kontynuując koncepcję wizualną, zachowaj dokładną tożsamość modelu standardowego i zaakceptowany klip źródłowy.

Ailoot Ultra · Chat Completions POST /v1/chat/completions sora-2

sora-2

Inne /sora-2

Start

Sora 2 tworzy wideo z synchronizowanymi dialogami, efektami dźwiękowymi i dźwiękiem tła na podstawie tekstu lub obrazu referencyjnego. Profil standardowy służy do poszukiwań wizualnych i klipów koncepcyjnych, a producent udostępnia osobne procesy dla wielokrotnego użycia postaci innych niż ludzie, kontynuacji i precyzyjnych edycji wideo.

Akceptowane dane wejściowe
Tekst
Wyniki
json · sse

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Chat Completions POST /v1/chat/completions
Wejście
text
Wyjście
json, sse
Format wyjściowy
JSON lub text/event-stream
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
sora-2
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limityDomyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limityDomyślnie—
Polemessages[].contentTypstringWymaganieWymaganeWartości i limityDomyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

owned_text_messages

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages
Parametrmaterial_typesKontrakttext
ParametrmessagesKontrakttablica wiadomości z role i dosłowną treścią content w postaci ciągu znaków
Parametrfile_materialKontraktRzeczywistą treść UTF-8 można wstawić jako dosłowny ciąg znaków content; nie zakłada się odwołania do pliku.
Parametroptional_controlsKontraktstream

Cykl życia: synchronous_json_or_sse

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.2 / 1K tokenów
Wejście · Odczyt cache $0 / 1K tokenów
Wejście · Zapis do cache $0 / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Chat Completions

curl · kompletna odpowiedź JSONPython SDK · kompletna odpowiedź JSONcurl · zachowaj strumień SSE
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"sora-2","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
from pathlib import Path
print(Path("result.json").read_text(encoding="utf-8"))
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="sora-2", messages=[{"role":"user","content":"hello"}], stream=False)
import json
from pathlib import Path

data = result.to_dict(mode="json")
Path("result.json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"sora-2","messages":[{"role":"user","content":"hello"}],"stream":true}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.sse

Odbieranie i zapisywanie wyników

Ailoot Ultra · Chat Completions

JSON lub text/event-stream

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj kompletne bajty JSON lub SSE, nagłówki odpowiedzi, zwrócone dane użycia i wszystkie dostarczone pola wyników. Nie określa się rodziny wyników właściwej dla danego modelu.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj oryginalną odpowiedź i tożsamość próby; nie zakłada się odpytywania nowego zadania ani ponownego wysyłania.

Pola odpowiedzi
PoleTypZnaczenie
Polecomplete response JSONTypobjectZnaczenieZachowaj każde zwrócone pole bez zakładania rodziny wyników właściwej dla modelu.
PoleSSE data eventsTypstreamZnaczenieZachowaj każde zwrócone zdarzenie i znacznik końcowy bez wybierania wyłącznie pól tekstowych.

Aliasy

Aliasy modelu

Ailoot Ultra sora-2

Aliasy ścieżek metod

Użyj ścieżek metod podanych powyżej.

Powiązane ID modeli

sora-2

Ailoot Ultra · Anthropic Messages POST /v1/messages sora-2

sora-2

Inne /sora-2

Start

Sora 2 tworzy wideo z synchronizowanymi dialogami, efektami dźwiękowymi i dźwiękiem tła na podstawie tekstu lub obrazu referencyjnego. Profil standardowy służy do poszukiwań wizualnych i klipów koncepcyjnych, a producent udostępnia osobne procesy dla wielokrotnego użycia postaci innych niż ludzie, kontynuacji i precyzyjnych edycji wideo.

Akceptowane dane wejściowe
Tekst
Wyniki
json · sse

Dostępne w Ailoot · dane wejściowe i metody

Ailoot Ultra · Anthropic Messages POST /v1/messages
Wejście
text
Wyjście
json, sse
Format wyjściowy
JSON lub SSE
PoleTypWymaganieWartości i limityDomyślnie
PolemodelTypstringWymaganieWymaganeWartości i limity
sora-2
Domyślnie—
PolemessagesTypmessage[]WymaganieWymaganeWartości i limityDomyślnie—
Polemessages[].roleTypstringWymaganieWymaganeWartości i limity
user, assistant
Domyślnie—
Polemessages[].contentTypstringWymaganieWymaganeWartości i limityDomyślnie—
Polemax_tokensTypintegerWymaganieWymaganeWartości i limityDomyślnie—
PolestreamTypbooleanWymaganieOpcjonalneWartości i limityDomyślniefalse
Kombinacje materiałów wejściowych

Tekst · tekst UTF-8

ciąg messages[].content

Parametry i cykl życia metody
ParametrKontrakt
Parametrcontent_typeKontraktapplication/json
ParametrrequiredKontraktmodel, messages, max_tokens
Parametroptional_controlsKontraktstream
Parametrmaterial_typesKontrakttext
Parametrtext_file_materialKontraktOdczytaj rzeczywisty dokument UTF-8 i umieść jego tekst we wskazanym polu input lub w ciągu treści wiadomości.

Cykl życia: synchronous_or_streamed

Cennik

Informacje taryfowe nie dodają opcji żądania. Obsługiwane parametry podano przy wybranej metodzie.

Tryb szybki
Nie określono Gdy wybrany jest tryb szybki
Tryb flex
Nie określono Gdy wybrany jest tryb flex
Maksymalna intensywność rozumowania
Nie określono Gdy dla maksymalnej intensywności rozumowania stosowana jest domyślna korekta (default)

Stawki Ailoot

Ceny według konfiguracji

KonfiguracjaTabela stawekOpłata
KonfiguracjaPodstawowe stawki za tokenyTabela stawekStawka podstawowaOpłata
Wejście · Tokeny wejściowe $0 / 1K tokenów
Wyjście · Tokeny wyjściowe $0.2 / 1K tokenów
Wejście · Odczyt cache $0 / 1K tokenów
Wejście · Zapis do cache $0 / 1K tokenów
Wejście · Zapis do cache, 1 godz. — / 1K tokenów

Ailoot rezerwuje szacowaną kwotę przed żądaniem. Po otrzymaniu wyniku rozlicza ostateczną opłatę według zmierzonego użycia. Rozliczenie strumieniowania korzysta z końcowego rekordu użycia. Jak działają rezerwacja i rozliczenie →

Przykładowe żądania

Ailoot Ultra · Anthropic Messages

Kompletna minimalna treść żądania JSONcurl · użyj swojego dokumentu UTF-8Python · zapisz kompletny wynik
{
  "model": "sora-2",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Odbieranie i zapisywanie wyników

Ailoot Ultra · Anthropic Messages

JSON lub SSE

Zachowaj wszystkie ukończone wyniki

Zachowaj każdą kompletną zwróconą odpowiedź, plik i część treści.

Zachowaj wszystkie bloki treści, sygnatury myślenia i rzeczywiste ID użycia narzędzi. Złóż wszystkie przyrosty bloków SSE; pierwszy blok tekstowy nie jest pełnym wyjściem.

Jeśli trzeba sprawdzić pierwotną odpowiedź

Zachowaj ID i nagłówki żądań/odpowiedzi. Nie udostępniono ogólnego URL pobierania zadania tekstowego.

Pola odpowiedzi
PoleTyp
PoleidTypstring
PolemodelTypstring
Polecontent[]Typtext|thinking|tool_use|other content block
Polestop_reasonTypstring|null
PoleusageTypobject
Błędy i dalsze kroki
OdpowiedźWarunekNastępny krok
Odpowiedź400 · invalid_request_errorWarunekNieprawidłowe wymagane pola, sposób reprezentacji materiału lub wartość parametruNastępny krokPopraw wskazane pola przed nowym żądaniem utworzenia.

Aliasy

Aliasy modelu

Ailoot Ultra sora-2

Aliasy ścieżek metod

Użyj ścieżek metod podanych powyżej.

Powiązane ID modeli

sora-2

FAQ · sora-2
Jakie dane wejściowe i wyniki są dostępne?

POST /v1/chat/completions · sora-2: text → json, sse

POST /v1/messages · sora-2: text → json, sse

Jakich pól używa żądanie?

POST /v1/chat/completions · sora-2: model, messages, stream

POST /v1/messages · sora-2: model, messages, max_tokens, stream

Więcej szczegółów

Połącz Ailoot z Claude Code, OpenCode, Hermes albo własną aplikacją.

Firma i jej portfel projektów

Firma i jej portfel projektów: miliony klientów; miesięczna sprzedaż liczona w miliardach.

Kupuj tokeny z rabatem.

Rabat subskrypcji do regularnej pracy. Kody promocyjne — do 50% na tokeny.

Subskrypcja
Wybierz plan z rabatem do regularnych żądań.
Kod promocyjny do 50%
Wpisz kod przy zakupie. Cena zostanie przeliczona według aktualnej promocji.
Koszty w historii
Model, tokeny i kwota są zapisywane dla każdego żądania.

Wybierz subskrypcję · Sprawdź ceny modeli

Połącz API z produktem, który sprzedajesz.

SaaS, aplikacje i boty na warunkach oferty i umowy licencyjnej Ailoot. Do odsprzedaży poproś o licencję resellerską.

Aplikacja komercyjna
Wbuduj generowanie tekstu, obrazów, wideo i dźwięku w płatne funkcje usługi.
Licencja resellerska
Prześlij opis projektu i schemat dostępu. Poproś o pisemne warunki używania i odsprzedaży.
Dokumenty na stronie
Oferta, umowa licencyjna i polityka przetwarzania danych są dostępne przed połączeniem.

Poproś o licencję resellerską · Oferta i umowa licencyjna