EN ZalogujOtwórz Studio
Wersja podglądowa. Katalog modeli, ceny, kalkulator i dokumentacja działają. Generowanie uruchomimy po starcie serwisu.

Modele

Dokumentacja: spis stron

Do katalogu modeli nie potrzebujesz klucza: GET /v1/models i GET /v1/models/{id} są otwarte dla każdego. Stąd bierzesz identyfikatory, bieżące ceny i opis pól, które przyjmuje /v1/generate. Z tych samych danych zbudowana jest strona z modelami.

Cała lista

http
GET https://kadraris.com/v1/models
Parametr w adresieMożliwe wartościDziałanie
categoryimage, video, audio, chat, toolZawęża wynik do jednej kategorii
currencyUSD, PLNWaluta, w której przyjdą ceny
bash
curl "https://kadraris.com/v1/models?category=video&currency=PLN"
python
import requests

models = requests.get(
    "https://kadraris.com/v1/models",
    params={"category": "video", "currency": "PLN"},
    timeout=30,
).json()["data"]

for m in models:
    print(m["id"], m["pricing"]["display"])
javascript
const url =
  "https://kadraris.com/v1/models?category=video&currency=PLN";
const { data } = await (await fetch(url)).json();
for (const m of data) console.log(m.id, m.pricing.display);

Fragment odpowiedzi (kwoty według cennika z 2 października 2026; aktualne zawsze podaje API):

json
{
  "object": "list",
  "data": [
    {
      "id": "seedance-2.5",
      "object": "model",
      "name": "Seedance 2.5",
      "vendor": "ByteDance",
      "category": "video",
      "modes": ["text-to-video", "image-to-video",
        "first-last-frame", "reference-to-video",
        "video-edit", "video-extend"],
      "pricing": {
        "unit": "second",
        "amount": "3.38408",
        "currency": "PLN",
        "display": "3,38 zł / second",
        "variants": [
          { "resolution": "480p", "amount": "1.50404" },
          { "resolution": "720p", "amount": "3.38408" },
          { "resolution": "1080p", "amount": "5.85764" }
        ],
        "vat_included": true
      }
    }
  ]
}

W liście nie ma input_schema - ten opis pól dostaniesz dopiero z zapytania o pojedynczy model (sekcja niżej).

Pola obiektu modelu

PoleTypZawartość
idstringNiezmienny identyfikator, który wpisujesz w model
namestringNazwa do wyświetlenia
vendorstringProducent modelu
categorystringimage, video, audio, chat lub tool
objectstringZawsze model
modesarrayTryby pracy, opisane poniżej
pricingobjectCennik; jego kształt zależy od kategorii
input_schemaobjectPola dozwolone w input (modele mediów, tylko w GET /v1/models/{id})
context_window, max_output_tokens, anthropic_compatiblenumber, number, booleanWyłącznie modele czatu

Tryby w modes

Lista modes mówi, do czego model się nadaje - pomaga zawęzić wybór, zanim zaczniesz czytać schemat. Spotkasz m.in.:

  • text-to-image, text-to-video - wynik z samego opisu,
  • image-to-image, image-edit, inpainting - przeróbka obrazu z image_urls,
  • image-to-video - ruch dodany do zdjęcia podanego jako klatka otwierająca (image_url),
  • first-last-frame - klip łączący klatkę początkową z końcową,
  • reference-to-video, multi-image-reference - generacja na bazie obrazów lub klipów wzorcowych,
  • video-edit, video-extend - zmiana albo wydłużenie gotowego klipu,
  • lyrics-to-music - utwór z tekstu piosenki,
  • stem-separation, vocal-isolation - rozbicie nagrania na ścieżki,
  • chat - model językowy.

Trybu nie podajesz w zapytaniu. Wynika on z tego, co wyślesz w input: jeśli model ma image-to-video i dostanie image_url, ożywi to zdjęcie.

Cennik modelu mediów

PoleZawartość
unitJednostka rozliczenia, np. pojedynczy obraz albo sekunda wideo
amountCena jednostki zapisana jako tekst dziesiętny
currencyPLN lub USD
displayTekst gotowy do pokazania użytkownikowi, np. 3,38 zł / second
variantsCeny jednostki dla każdej wartości parametru, który wpływa na cenę (np. resolution); pusta tablica, gdy stawka jest jedna
vat_includedtrue dla cen w PLN, które zawierają 23% VAT; przy USD pole nie występuje

Cennik modelu czatu

PoleZawartość
input_per_mtokStawka za milion tokenów wejściowych
output_per_mtokStawka za milion tokenów wyjściowych
currencyPLN lub USD
vat_includedtrue dla cen w PLN

Złotówkowe ceny są brutto (23% VAT) i przeliczane po kursie NBP. Kilka bieżących stawek: GPT Image 2.5 0,293 zł za obraz, FLUX.2 [pro] od 0,403 zł za obraz, Veo 3.1 (Quality) od 14,61 zł za film, Claude Opus 5.5 20,53 zł / 102,64 zł za 1 mln tokenów.

Szczegóły jednego modelu

bash
curl https://kadraris.com/v1/models/seedance-2.5
python
url = "https://kadraris.com/v1/models/seedance-2.5"
model = requests.get(url, timeout=30).json()
print(model["input_schema"])
javascript
const url = "https://kadraris.com/v1/models/seedance-2.5";
const model = await (await fetch(url)).json();
console.log(model.input_schema);

Na id, którego nie ma w katalogu, serwer odpowie 404 not_found.

Jak czytać input_schema

Schemat opisuje, co /v1/generate zaakceptuje w polu input, w konwencji JSON Schema. Poniżej uproszczony przykład - rzeczywiste zakresy i listy wartości bierz zawsze z aktualnej odpowiedzi:

json
{
  "type": "object",
  "properties": {
    "prompt":         { "type": "string" },
    "duration":       { "type": "integer", "minimum": 4,
                        "maximum": 10, "default": 5 },
    "resolution":     { "type": "string",
                        "enum": ["480p", "720p"], "default": "720p" },
    "aspect_ratio":   { "type": "string",
                        "enum": ["16:9", "9:16", "1:1"],
                        "default": "16:9" },
    "image_url":      { "type": "string" },
    "generate_audio": { "type": "boolean", "default": false }
  },
  "required": ["prompt"]
}
AtrybutCo oznacza
typestring, integer, number, boolean, array
enumLista jedynych dopuszczalnych wartości
minimum, maximumGranice liczbowe, obie włącznie
defaultCo trafi do modelu, jeśli pole pominiesz
requiredPola, bez których zapytanie nie przejdzie

Serwer sprawdza dane bez taryfy ulgowej. Nieznane pole, zły typ, wartość spoza enum lub poza zakresem kończą się 422 invalid_request. Zadanie wtedy w ogóle nie powstaje, więc nic nie zostaje zablokowane na saldzie.

Walidacja po twojej stronie

python
def build_input(schema, **values):
    props = schema.get("properties", {})
    unknown = set(values) - set(props)
    if unknown:
        raise ValueError(f"pola spoza schematu: {unknown}")
    required = schema.get("required", [])
    missing = [f for f in required if f not in values]
    if missing:
        raise ValueError(f"brak wymaganych pól: {missing}")
    for name, value in values.items():
        rule = props[name]
        if "enum" in rule and value not in rule["enum"]:
            raise ValueError(f"{name}: dozwolone {rule['enum']}")
        if "minimum" in rule and value < rule["minimum"]:
            raise ValueError(f"{name}: co najmniej {rule['minimum']}")
        if "maximum" in rule and value > rule["maximum"]:
            raise ValueError(f"{name}: najwyżej {rule['maximum']}")
    return values

url = "https://kadraris.com/v1/models/seedance-2.5"
schema = requests.get(url, timeout=30).json()["input_schema"]
payload = {
    "model": "seedance-2.5",
    "input": build_input(schema, prompt="Waves at dusk",
                         duration=5),
}

Serwer zweryfikuje dane tak czy inaczej. Własne sprawdzenie przydaje się, gdy chcesz pokazać użytkownikowi zrozumiały komunikat, zanim zapytanie w ogóle opuści twoją aplikację.

Ile zapłacisz, zanim wyślesz

  • Media: stawka jednostki razy liczba jednostek, np. sekundy klipu razy cena sekundy. Dokładną kwotę poda /v1/generate w estimated_cost i właśnie ją zablokuje do końca zadania.
  • Czat: tokeny z usage pomnożone przez input_per_mtok i output_per_mtok, a potem podzielone przez 1 000 000.

Szczegóły w Rozliczeniach.