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

n8n, Make i Zapier

Dokumentacja: spis stron

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=60 w /v1/generate i 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 POST na adres https://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 130000 ms, czyli więcej niż wait.

Treść JSON:

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

text
[Zlecenie] -> [Wait 30 s] -> [Stan zadania] -> [IF koniec?]
                  ^                                 |
                  +------------ false --------------+
[IF koniec?] --true--> [Pobranie pliku]
WęzełTypKonfiguracja
ZlecenieHTTP RequestPOST https://kadraris.com/v1/generate, JSON z model: "seedance-2.5" i input
Wait 30 sWaitwznowienie po odczekaniu (After Time Interval) 30 s
Stan zadaniaHTTP RequestGET {{ $('Zlecenie').item.json.poll_url }}, ten sam credential
IF koniec?IF{{ $json.status }} równe succeeded LUB równe failed
Pobranie plikuHTTP RequestGET {{ $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:

json
{
  "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
Webhookmetoda POST, ścieżka kadraris-done-7f3a9c, odpowiedź od razu (Immediately); Production URL tego węzła wpisujesz jako webhook_url
HTTP RequestGET https://kadraris.com/v1/tasks/{{ $json.body.id }} z credentialem Header Auth
IF{{ $json.status }} równe succeeded
HTTP RequestGET {{ $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 Authorization z 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.
json
{
  "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ą:

json
{
  "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

  1. Zacznij od scenariusza B: jego wyzwalaczem jest Webhooks > Custom webhook. Zanotuj adres, który Make mu przydzieli.
  2. Scenariusz A wysyła POST /v1/generate bez wait, za to z "webhook_url": "<adres z punktu 1>".
  3. W B tuż po wyzwalaczu wstaw moduł HTTP Make a request, który robi GET https://kadraris.com/v1/tasks/{{1.id}} z nagłówkiem Authorization i parsowaniem odpowiedzi.
  4. Na połączeniu dodaj filtr: {{2.data.status}} równe succeeded.
  5. Dalej Iterator na {{2.data.output}}, HTTP Get a file z url i 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, URL https://kadraris.com/v1/generate.
  • Nagłówki: Authorization z Bearer sk-kd-... oraz Content-Type z application/json.
  • W Data wklej JSON z przykładu.
json
{
  "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

KrokAplikacja i zdarzenieKonfiguracja
TriggerWebhooks by Zapier, Catch HookAdres tego hooka wpisujesz jako webhook_url powyżej
ActionWebhooks by Zapier, GETURL https://kadraris.com/v1/tasks/ z doklejonym polem id z triggera, nagłówek Authorization = Bearer sk-kd-...
FilterFilter by Zapierpole statusu (Text) exactly matches succeeded
ActionGoogle Drive (lub inna aplikacja), Upload FileFile = 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:

json
{
  "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.