n8n, Make i Zapier
Kadraris API to klasyczne REST, więc dogada się z nim każde narzędzie do automatyzacji, które ma krok HTTP. Niżej masz gotowe ustawienia dla n8n, Make i Zapiera. Niemal każdy scenariusz da się sprowadzić do jednego z dwóch wzorców:
- Szybkie zadania (czat, obraz): wystarcza jedno zapytanie HTTP. Do obrazów dodaj
?wait=60w/v1/generatei wynik wraca w tej samej odpowiedzi. - Wolne zadania (wideo, muzyka): startujesz zadanie, a następnie w pętli sprawdzasz
/v1/tasks/{id}albo odbierasz webhook w osobnym scenariuszu.
Na początek załóż w panelu klucz przeznaczony tylko dla automatyzacji i nadaj mu miesięczny limit. Jeśli przez błąd w scenariuszu coś zacznie się kręcić w kółko, limit zatrzyma wydatki.
n8n
Dane logowania
Dodaj credential typu Header Auth. W polu Name wpisz Authorization, a jako Value podaj Bearer sk-kd-....
W każdym węźle HTTP Request ustaw Authentication na Generic Credential Type, wybierz Header Auth i wskaż ten credential.
Rozmowa z modelem przez węzły OpenAI
Credential OpenAI w n8n pozwala zmienić adres bazowy. Ustaw Base URL na https://kadraris.com/v1, a w API Key wklej sk-kd-....
Następnie użyj węzła OpenAI Chat Model (osobno albo wewnątrz AI Agent) i wybierz model opcją By ID, np. claude-sonnet-5, gpt-6-luna lub gemini-3.6-flash.
Obraz jednym węzłem
Konfiguracja HTTP Request:
- metoda
POSTna adreshttps://kadraris.com/v1/generate?wait=60, - uwierzytelnianie: credential Header Auth założony wyżej,
- wysyłanie ciała włączone (Send Body), typ JSON, tryb Using JSON,
- w opcjach limit czasu
130000ms, czyli więcej niżwait.
Treść JSON:
{
"model": "gpt-image-2.5",
"input": {
"prompt": "{{ $json.prompt }}",
"aspect_ratio": "1024x1024"
}
}Na wyjściu węzła są pola status i output. Zanim pobierzesz plik, dodaj węzeł IF, który przepuści dalej tylko {{ $json.status }} równe succeeded - zakończone zadanie może przecież mieć też failed. Potem adres {{ $json.output[0].url }} przekaż do kolejnego HTTP Request z Response Format File i zapisz obraz w wybranym miejscu (Google Drive, S3 i podobne).
Wideo i pętla sprawdzania
[Zlecenie] -> [Wait 30 s] -> [Stan zadania] -> [IF koniec?]
^ |
+------------ false --------------+
[IF koniec?] --true--> [Pobranie pliku]| Węzeł | Typ | Konfiguracja |
|---|---|---|
| Zlecenie | HTTP Request | POST https://kadraris.com/v1/generate, JSON z model: "seedance-2.5" i input |
| Wait 30 s | Wait | wznowienie po odczekaniu (After Time Interval) 30 s |
| Stan zadania | HTTP Request | GET {{ $('Zlecenie').item.json.poll_url }}, ten sam credential |
| IF koniec? | IF | {{ $json.status }} równe succeeded LUB równe failed |
| Pobranie pliku | HTTP Request | GET {{ $json.output[0].url }}, Response Format File |
Gałąź false z węzła IF wraca do Wait. Za gałęzią true wstaw kolejny IF, który zadania z failed przekieruje na osobną ścieżkę - np. do powiadomienia na Slacku z treścią {{ $json.error.message }}.
Wideo i webhook
Pierwszy workflow zleca zadanie:
{
"model": "kling-3.0",
"input": { "prompt": "{{ $json.prompt }}", "duration": 5 },
"webhook_url": "https://twoje-n8n.example.com/webhook/kadraris-done-7f3a9c"
}Drugi workflow czeka na wynik:
| Węzeł | Konfiguracja |
|---|---|
| Webhook | metoda POST, ścieżka kadraris-done-7f3a9c, odpowiedź od razu (Immediately); Production URL tego węzła wpisujesz jako webhook_url |
| HTTP Request | GET https://kadraris.com/v1/tasks/{{ $json.body.id }} z credentialem Header Auth |
| IF | {{ $json.status }} równe succeeded |
| HTTP Request | GET {{ $json.output[0].url }}, odpowiedź jako plik (File) |
Krok drugi pobiera zadanie jeszcze raz, twoim kluczem, więc nawet bez weryfikacji podpisu pracujesz wyłącznie na danych prosto z API. Gdy chcesz dodatkowo weryfikować x-kadraris-signature, każ węzłowi Webhook przekazywać surowe ciało (Raw Body), a skrót HMAC-SHA256 wylicz w węźle Code - kod znajdziesz w Webhookach. Pamiętaj, że Production URL działa tylko przy aktywnym workflow.
Make
Obraz lub czat: moduł HTTP "Make a request"
- Method:
POST, a URL:https://kadraris.com/v1/generate?wait=60. - W nagłówkach dodaj
Authorizationz wartościąBearer sk-kd-.... - Ciało ustaw jako Raw z typem JSON (application/json) i wklej do niego przykład poniżej.
- Włącz parsowanie odpowiedzi (Parse response: Yes).
- W ustawieniach zaawansowanych podnieś Timeout do
130.
{
"model": "flux-2-pro",
"input": { "prompt": "{{1.prompt}}", "aspect_ratio": "16:9" }
}Po sparsowaniu odpowiedź ląduje w data: masz {{2.data.status}} i {{2.data.output}}. Każdy obraz pobierzesz, wstawiając Iterator na {{2.data.output}}, a za nim moduł HTTP Get a file, któremu podasz url wyjęty przez iterator.
Do rozmowy z modelem użyjesz tego samego modułu, tylko z adresem https://kadraris.com/v1/chat/completions i taką treścią:
{
"model": "claude-sonnet-5",
"messages": [{ "role": "user",
"content": "Zrób z tego trzy hasła reklamowe: {{1.text}}" }]
}Tekst odpowiedzi znajdziesz w {{2.data.choices[1].message.content}} - Make liczy elementy tablic od jedynki.
Wideo i webhook
- Zacznij od scenariusza B: jego wyzwalaczem jest Webhooks > Custom webhook. Zanotuj adres, który Make mu przydzieli.
- Scenariusz A wysyła
POST /v1/generatebezwait, za to z"webhook_url": "<adres z punktu 1>". - W B tuż po wyzwalaczu wstaw moduł HTTP Make a request, który robi
GET https://kadraris.com/v1/tasks/{{1.id}}z nagłówkiemAuthorizationi parsowaniem odpowiedzi. - Na połączeniu dodaj filtr:
{{2.data.status}}równesucceeded. - Dalej Iterator na
{{2.data.output}}, HTTP Get a file zurli moduł, który zapisze plik.
Scenariusz B musi być włączony. Gdy Make nie odpowie kodem 2xx, Kadraris ponowi powiadomienie - jeśli powtórki mogłyby ci coś zepsuć, odsiewaj je np. przez Data Store z kluczem równym id zadania.
Zapier
Zlecenie zadania: Webhooks by Zapier, Custom Request
- Method
POST, URLhttps://kadraris.com/v1/generate. - Nagłówki:
AuthorizationzBearer sk-kd-...orazContent-Typezapplication/json. - W Data wklej JSON z przykładu.
{
"model": "seedance-2.5",
"input": { "prompt": "OPIS Z WCZEŚNIEJSZEGO KROKU",
"duration": 5, "aspect_ratio": "9:16" },
"webhook_url": "https://hooks.zapier.com/hooks/catch/..."
}Opis z poprzedniego kroku wstawiasz zwykłym wyborem pól w Zapierze. Przy obrazach możesz dopisać do adresu ?wait=20 i użyć wyniku od razu w następnej akcji. Zapier przerywa zbyt wolne zapytania, dlatego wait trzymaj krótkie, a wszystko, co trwa dłużej, obsługuj webhookiem.
Odbiór wyniku w drugim Zapie
| Krok | Aplikacja i zdarzenie | Konfiguracja |
|---|---|---|
| Trigger | Webhooks by Zapier, Catch Hook | Adres tego hooka wpisujesz jako webhook_url powyżej |
| Action | Webhooks by Zapier, GET | URL https://kadraris.com/v1/tasks/ z doklejonym polem id z triggera, nagłówek Authorization = Bearer sk-kd-... |
| Filter | Filter by Zapier | pole statusu (Text) exactly matches succeeded |
| Action | Google Drive (lub inna aplikacja), Upload File | File = pole z adresem wyniku z kroku GET |
Rozmowa z modelem
Custom Request na POST https://kadraris.com/v1/chat/completions, z tymi samymi nagłówkami:
{
"model": "gpt-6-luna",
"messages": [{ "role": "user",
"content": "Przygotuj uprzejmą odpowiedź na: TREŚĆ MAILA" }]
}Zapier rozkłada zagnieżdżony JSON na płaskie pola. Odpowiedź modelu szukaj w danych kroku, w polu content z gałęzi choices.
Ile kosztują automatyzacje
Każde uruchomienie płacisz jak zwykłe wywołanie API: czat od tokenów, media od jednostki (GPT Image 2.5 0,293 zł za obraz, Seedance 2.5 od 1,51 zł za sekundę). Za zadania, które się nie udały, nie płacisz nic. Polecam dołożyć cykliczny scenariusz, który odpytuje GET /v1/balance i wysyła alert, gdy low_balance zmieni się na true - wtedy automatyzacje nie zatrzymają się nagle na błędzie 402.























