Dla programistów i firm
Jedno API. Każdy model.
REST API do modeli czatu, obrazu, wideo i audio. Zgodne z OpenAI i Anthropic, zadania z podpisanymi webhookami, jawne ceny jednostkowe, faktura VAT.
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "seedance-2.5",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "seedance-2.5",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Jeden klucz do wszystkiego
Czat, obraz, wideo i audio z jednego salda i jednym kluczem API, z miesięcznymi limitami na klucz.
Zgodne z OpenAI i Anthropic
Podłączasz SDK OpenAI, SDK Anthropic, Claude Code, Cursora albo Cline przez zmianę base URL.
Zadania i webhooki
POST /v1/generate zwraca zadanie. Odpytujesz, czekasz z ?wait=60 albo dostajesz podpisany webhook.
Cena przed zleceniem
Każde zadanie ma estimated_cost. Blokujemy go, pobieramy faktyczny koszt, a nieudane generacje zwracamy w całości.
Faktura VAT na firmę
Rozliczenie w złotówkach, faktura VAT po każdym doładowaniu, odwrotne obciążenie dla firm z UE.
Dla zespołów
Wiele kluczy, limity wydatków, zużycie per model, pełna historia operacji na saldzie i faktury w panelu.
Czat, który wpinasz w swoje narzędzia
Claude Code, Cursor, Cline, Continue, LangChain, n8n, Make - wszystko, co mówi po OpenAI albo Anthropic, działa po zmianie base URL.
Claude Code →from openai import OpenAI
client = OpenAI(base_url="https://jantaris.com/v1", api_key="sk-jt-...")
resp = client.chat.completions.create(
model="claude-opus-5.5",
messages=[{"role": "user", "content": "Napisz haiku o bursztynie znad Bałtyku."}],
)
print(resp.choices[0].message.content)curl https://jantaris.com/v1/chat/completions \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "claude-opus-5.5", "messages": [{"role": "user", "content": "Napisz haiku o bursztynie znad Bałtyku."}]}'import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://jantaris.com/v1", apiKey: process.env.JANTARIS_API_KEY });
const resp = await client.chat.completions.create({
model: "claude-opus-5.5",
messages: [{ role: "user", content: "Napisz haiku o bursztynie znad Bałtyku." }],
});
console.log(resp.choices[0].message.content);export ANTHROPIC_BASE_URL=https://jantaris.com
export ANTHROPIC_AUTH_TOKEN=sk-jt-...
export ANTHROPIC_MODEL=claude-opus-5.5
claude









