n8n, Make i Zapier
Jantaris to zwykłe REST API, więc obsłuży je każde narzędzie do automatyzacji z krokiem HTTP. Poniżej konkretne ustawienia dla n8n, Make i Zapiera. Prawie wszystko sprowadza się do dwóch schematów:
- Krótkie zadania (czat, obrazy): jedno zapytanie HTTP. Przy obrazach dopisz
?wait=60do/v1/generate, a odpowiedź od razu zawiera wynik. - Długie zadania (wideo, muzyka): uruchamiasz zadanie, a potem albo odpytujesz
/v1/tasks/{id}w pętli, albo odbierasz webhook w drugim scenariuszu.
Zanim zaczniesz, utwórz w panelu osobny klucz API z miesięcznym limitem wydatków. Jeśli automatyzacja przez pomyłkę się zapętli, limit ją zatrzyma.
n8n
Poświadczenie
Utwórz poświadczenie typu Header Auth:
| Pole | Wartość |
|---|---|
| Name | Authorization |
| Value | Bearer sk-jt-... |
W węzłach HTTP Request wybierz Authentication: Generic Credential Type, potem Header Auth i to poświadczenie.
Czat przez węzły OpenAI
Poświadczenie OpenAI w n8n ma pole Base URL. Utwórz poświadczenie OpenAI z wartościami:
| Pole | Wartość |
|---|---|
| API Key | sk-jt-... |
| Base URL | https://jantaris.com/v1 |
Potem użyj węzła OpenAI Chat Model (samodzielnie albo w AI Agent) i wybierz model By ID, np. claude-sonnet-5, gpt-6-luna albo gemini-3.8-flash.
Obraz w jednym węźle
Węzeł HTTP Request:
| Ustawienie | Wartość |
|---|---|
| Method | POST |
| URL | https://jantaris.com/v1/generate?wait=60 |
| Authentication | poświadczenie Header Auth z góry |
| Send Body | włączone |
| Body Content Type | JSON |
| Specify Body | Using JSON |
| Options, Timeout | 130000 (ms, więcej niż wait) |
Ciało JSON:
{
"model": "gpt-image-2.5",
"input": {
"prompt": "{{ $json.prompt }}",
"aspect_ratio": "1024x1024"
}
}Element wyjściowy ma status i output. Podepnij {{ $json.output[0].url }} do drugiego węzła HTTP Request z Response Format File, żeby pobrać obraz, a potem zapisz go, gdzie chcesz (Google Drive, S3 itd.). Przed pobieraniem wstaw węzeł IF sprawdzający, czy {{ $json.status }} równa się succeeded, bo zakończone zadanie może też mieć status failed.
Wideo z pętlą odpytywania
[Start generacji] -> [Wait 30 s] -> [Sprawdź zadanie] -> [IF gotowe?] --true--> [Pobierz]
^ |
+--------------- false --------------+| Węzeł | Typ | Ustawienia |
|---|---|---|
| Start generacji | HTTP Request | POST https://jantaris.com/v1/generate, ciało JSON z model: "seedance-2.5" i input |
| Wait 30 s | Wait | Resume: After Time Interval, 30 sekund |
| Sprawdź zadanie | HTTP Request | GET {{ $('Start generacji').item.json.poll_url }}, to samo poświadczenie |
| IF gotowe? | IF | {{ $json.status }} równe succeeded LUB równe failed |
| Pobierz | HTTP Request | GET {{ $json.output[0].url }}, Response Format File |
Wyjście false węzła IF podłącz z powrotem do Wait. Za gałęzią true dodaj drugi IF, który kieruje zadania failed na ścieżkę błędu (np. wiadomość na Slacku z {{ $json.error.message }}).
Wideo z webhookiem
Workflow A uruchamia zadanie:
{
"model": "kling-3.0",
"input": { "prompt": "{{ $json.prompt }}", "duration": 5 },
"webhook_url": "https://twoje-n8n.example.com/webhook/jantaris-done-7f3a9c"
}Workflow B odbiera wynik:
| Węzeł | Ustawienia |
|---|---|
| Webhook | HTTP Method POST, Path jantaris-done-7f3a9c, Respond: Immediately. Production URL wklej jako webhook_url |
| HTTP Request | GET https://jantaris.com/v1/tasks/{{ $json.body.id }} z poświadczeniem Header Auth |
| IF | {{ $json.status }} równe succeeded |
| HTTP Request | GET {{ $json.output[0].url }}, Response Format File |
Drugi krok czyta zadanie ponownie twoim kluczem, więc działasz tylko na danych z API, nawet bez sprawdzania podpisu. Jeśli chcesz weryfikować x-jantaris-signature, włącz w węźle Webhook opcję Raw Body i policz HMAC-SHA256 w węźle Code, jak w Webhookach. Workflow B musi być aktywny, żeby Production URL działał.
Make
Obraz albo czat: HTTP "Make a request"
| Pole | Wartość |
|---|---|
| URL | https://jantaris.com/v1/generate?wait=60 |
| Method | POST |
| Headers | Authorization = Bearer sk-jt-... |
| Body type | Raw |
| Content type | JSON (application/json) |
| Request content | JSON poniżej |
| Parse response | Yes |
| Timeout (ustawienia zaawansowane) | 130 |
{
"model": "flux-2-pro",
"input": { "prompt": "{{1.prompt}}", "aspect_ratio": "16:9" }
}Sparsowane ciało trafia do data: {{2.data.status}}, {{2.data.output}}. Dodaj Iterator na {{2.data.output}} i moduł HTTP Get a file z polem url z iteratora, żeby pobrać każdy obraz.
Do czatu ten sam moduł z URL https://jantaris.com/v1/chat/completions i ciałem:
{
"model": "claude-sonnet-5",
"messages": [{ "role": "user", "content": "Streść: {{1.text}}" }]
}Odpowiedź jest w {{2.data.choices[1].message.content}} (Make numeruje elementy tablic od 1).
Wideo z webhookiem
- Utwórz scenariusz B z wyzwalaczem Webhooks > Custom webhook. Skopiuj jego adres.
- W scenariuszu A wyślij
POST /v1/generatez"webhook_url": "<ten adres>", bezwait. - W scenariuszu B po wyzwalaczu dodaj HTTP Make a request:
GET https://jantaris.com/v1/tasks/{{1.id}}z nagłówkiemAuthorization, Parse response Yes. - Na ścieżce ustaw filtr:
{{2.data.status}}równesucceeded. - Iterator na
{{2.data.output}}, potem HTTP Get a file zurl, potem moduł zapisu plików.
Scenariusz B musi być włączony. Jantaris ponawia webhook, jeśli Make nie odpowie kodem 2xx, więc jeśli duplikaty coś psują, dodaj odsiewanie (np. Data Store z kluczem po id zadania).
Zapier
Start zadania: Webhooks by Zapier, Custom Request
| Pole | Wartość |
|---|---|
| Method | POST |
| URL | https://jantaris.com/v1/generate |
| Data | JSON poniżej |
| Headers | Authorization = Bearer sk-jt-..., Content-Type = application/json |
{
"model": "seedance-2.5",
"input": { "prompt": "PROMPT Z POPRZEDNIEGO KROKU", "duration": 5, "aspect_ratio": "9:16" },
"webhook_url": "https://hooks.zapier.com/hooks/catch/..."
}Prompt z wcześniejszego kroku wstawiasz selektorem pól Zapiera. Przy obrazach możesz dopisać ?wait=20 do URL i od razu użyć wyniku w następnym kroku. Zapier ucina wolne zapytania, więc trzymaj wait krótko, a do wszystkiego dłuższego używaj webhooka.
Odbiór wyniku: drugi Zap
| Krok | Aplikacja i zdarzenie | Ustawienia |
|---|---|---|
| Trigger | Webhooks by Zapier, Catch Hook | Adres hooka wklej jako webhook_url wyżej |
| Action | Webhooks by Zapier, GET | URL https://jantaris.com/v1/tasks/ + pole id z triggera, nagłówek Authorization = Bearer sk-jt-... |
| Filter | Filter by Zapier | pole statusu (Text) exactly matches succeeded |
| Action | Google Drive (albo inna) Upload File | File = pole z adresem wyniku z kroku GET |
Czat
Custom Request z POST https://jantaris.com/v1/chat/completions i tymi samymi nagłówkami:
{
"model": "gpt-6-luna",
"messages": [{ "role": "user", "content": "Napisz odpowiedź na tego maila: TREŚĆ MAILA" }]
}Zapier spłaszcza zagnieżdżony JSON, więc odpowiedź znajdziesz w wyniku kroku jako pole z treścią wiadomości pod choices.
Koszty w automatyzacjach
Każde uruchomienie rozlicza się jak zwykłe wywołanie API: czat za tokeny, media za jednostkę (GPT Image 2.5 0,254 zł za obraz, Seedance 2.5 od 1,51 zł za sekundę). Nieudane zadania kosztują 0. Dodaj cykliczne sprawdzanie GET /v1/balance z powiadomieniem, gdy low_balance ma wartość true, żeby scenariusze nie stanęły na 402.









