EN ZalogujZałóż konto
Startujemy w październiku 2026. Działają konta, katalog modeli, kalkulator i dokumentacja. Studio jest dostępne w podglądzie; generowanie czeka na uruchomienie.

Modele

Wszystkie strony dokumentacji

Katalog modeli jest publiczny: GET /v1/models i GET /v1/models/{id} działają bez klucza API. Z nich weźmiesz identyfikatory modeli, aktualne ceny i schemat wejścia do /v1/generate. Na tych samych danych działa strona z modelami.

Lista modeli

http
GET https://jantaris.com/v1/models
Parametr zapytaniaWartościOpis
categoryimage, video, audio, chat, toolFiltr po kategorii
currencyUSD, PLNWaluta cen w odpowiedzi
bash
curl "https://jantaris.com/v1/models?category=video&currency=PLN"
python
import requests

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

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

Odpowiedź (skrócona, kwoty z cennika z dnia 2 października 2026, aktualne zwraca 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
      }
    }
  ]
}

Lista nie zawiera input_schema. Schemat zwraca tylko GET /v1/models/{id}.

Obiekt modelu

PoleTypOpis
idstringStały identyfikator, który podajesz jako model
namestringNazwa wyświetlana
vendorstringFirma, która zrobiła model
categorystringimage, video, audio, chat albo tool
objectstringZawsze model
modesarrayTryby pracy modelu, opis niżej
pricingobjectCena, kształt zależy od kategorii (niżej)
input_schemaobjectParametry przyjmowane w input (tylko modele mediów i tylko w GET /v1/models/{id})
context_window, max_output_tokens, anthropic_compatiblenumber, number, booleanTylko modele czatu

Pole modes

modes to lista trybów, w których model działa. Pomaga wybrać model, zanim zajrzysz do input_schema. Przykładowe wartości:

  • text-to-image, text-to-video - generowanie z samego promptu;
  • image-to-image, image-edit, inpainting - edycja obrazu podanego w image_urls;
  • image-to-video - ożywienie zdjęcia podanego jako pierwsza klatka (image_url);
  • first-last-frame - wideo między pierwszą i ostatnią klatką;
  • reference-to-video, multi-image-reference - generowanie z obrazów albo klipów referencyjnych;
  • video-edit, video-extend - edycja albo przedłużenie istniejącego klipu;
  • lyrics-to-music - piosenka z tekstu;
  • stem-separation, vocal-isolation - rozdzielanie nagrania na ścieżki;
  • chat - model czatu.

Tryb mówi, co model potrafi, ale nie jest parametrem zapytania. Tryb wybierasz polami input, np. podanie image_url w modelu z image-to-video uruchamia ożywianie zdjęcia.

Ceny modeli mediów

PoleOpis
unitCzym jest jednostka, np. jeden obraz albo sekunda wideo
amountCena za jednostkę jako string dziesiętny
currencyPLN albo USD
displayGotowy tekst do pokazania, np. 3,38 zł / second
variantsCeny za jednostkę dla każdej wartości parametru, od którego zależy cena (np. resolution). Pusta lista, gdy cena jest jedna
vat_includedtrue przy cenach w PLN (zawierają 23% VAT); w USD pola nie ma

Ceny modeli czatu

PoleOpis
input_per_mtokCena za 1M tokenów wejścia
output_per_mtokCena za 1M tokenów wyjścia
currencyPLN albo USD
vat_includedtrue przy cenach w PLN

Ceny w PLN zawierają 23% VAT i są przeliczane po kursie NBP. Aktualne ceny popularnych modeli: GPT Image 2.5 0,254 zł za obraz, FLUX.2 [pro] od 0,404 zł za obraz, Veo 3.1 (Quality) od 14,64 zł za film, Claude Opus 5.5 29,37 zł / 146,87 zł za 1 mln tokenów.

Jeden model

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

Nieznane id zwraca 404 not_found.

Schemat wejścia

input_schema opisuje, co /v1/generate przyjmie w input. Trzyma się konwencji JSON Schema. Skrócony przykład (prawdziwe wartości czytaj z aktualnego schematu):

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"]
}
AtrybutZnaczenie
typestring, integer, number, boolean, array
enumDozwolone są tylko te wartości
minimum, maximumZakres liczbowy, włącznie z granicami
defaultWartość użyta, gdy pominiesz pole
requiredPola, które muszą się pojawić

Walidacja jest ścisła. Pole spoza properties, zły typ, wartość spoza enum albo poza zakresem dają 422 invalid_request. Zadanie wtedy nie powstaje, więc żadne środki nie są blokowane.

Budowanie poprawnego input w kodzie

python
def build_input(schema: dict, **values) -> dict:
    props = schema.get("properties", {})
    unknown = set(values) - set(props)
    if unknown:
        raise ValueError(f"nieznane pola: {unknown}")
    missing = [f for f in schema.get("required", []) if f not in values]
    if missing:
        raise ValueError(f"brakujące pola: {missing}")
    for name, value in values.items():
        rule = props[name]
        if "enum" in rule and value not in rule["enum"]:
            raise ValueError(f"{name} musi być jednym z {rule['enum']}")
        if "minimum" in rule and value < rule["minimum"]:
            raise ValueError(f"{name} musi być >= {rule['minimum']}")
        if "maximum" in rule and value > rule["maximum"]:
            raise ValueError(f"{name} musi być <= {rule['maximum']}")
    return values

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

Serwer i tak waliduje. Sprawdzenie po twojej stronie daje użytkownikom czytelne komunikaty, zanim zapytanie wyjdzie z aplikacji.

Koszt przed wywołaniem

  • Media: cena za jednostkę razy liczba jednostek, np. sekundy wideo razy cena za sekundę. Dokładną kwotę zwraca /v1/generate w polu estimated_cost i ta kwota jest blokowana do końca zadania.
  • Czat: tokeny z pola usage razy input_per_mtok i output_per_mtok, podzielone przez 1 000 000.

Więcej w Rozliczeniach.