Funktion

Zuuna und n8n verbinden: in beide Richtungen

n8n liest und schreibt Zuuna über die REST-API, Zuuna schickt signierte Webhooks zurück. Drei echte Richtungen, kein fertiger Node nötig.

Zuletzt aktualisiert:

n8n und Zuuna reden in beide Richtungen miteinander, über offene HTTP-Bausteine statt über einen fertigen Connector. Für die eine Richtung reicht ein API-Token, für die andere ein Webhook-Node in deinem Workflow.

Drei Richtungen, und alle drei sind echt

n8n zu Zuuna

Mit einem scoped Token legt dein Workflow Karten an, postet Kommentare und bucht Zeit, alles über den HTTP-Request-Node. Ein Bearer-Token im Header reicht, kein OAuth-Tanz.

POST https://app.zuuna.de/api/v1/boards/BOARD_ID/cards
Authorization: Bearer zk_live_...
Content-Type: application/json

{ "title": "New task", "idempotencyKey": "order-4711-card" }

idempotencyKey ist frei wählbar. Läuft derselbe Workflow zweimal mit demselben Wert, kommt beim zweiten Mal die zuerst angelegte Karte zurück statt einer zweiten. Ein Retry im Workflow wird dadurch ungefährlich.

Zuuna zu n8n

Zuuna sendet signierte Webhooks an einen Webhook-Node in deinem Workflow. Jede Zustellung trägt den Header X-Zuuna-Signature, eine HMAC-SHA256-Prüfsumme des rohen Bodys mit dem Secret deines Endpoints.

import { createHmac, timingSafeEqual } from "crypto";

function verify(rawBody, header, secret) {
  const expected = "sha256=" +
    createHmac("sha256", secret).update(rawBody).digest("hex");
  const a = Buffer.from(header || "");
  const b = Buffer.from(expected);
  return a.length === b.length && timingSafeEqual(a, b);
}

Wichtig: Die Prüfsumme läuft über die rohen Bytes, wie sie ankommen, nicht über ein zuerst geparstes und neu serialisiertes JSON. Ein Code-Node, der die Bytes vor der Prüfung anfasst, verschiebt Reihenfolge oder Escapes, und jede Signatur schlägt fehl.

Zuuna zu n8n als Deploy-Ziel

Ein Release, das du veröffentlichst, kann direkt deinen n8n-Workflow anstoßen. n8n ist eines der Ziele, die ein Deploy-Target ansteuern kann, neben GitHub, GitLab, Jenkins oder einem eigenen Webhook.

Drei Rezepte zum Kopieren

  • Formular oder Mail wird zur Karte. Formular- oder Mail-Trigger in n8n, dahinter ein HTTP-Request-Node, der die Karte anlegt.
  • Karte verschoben wird zur Nachricht im Team-Tool. Zuuna schickt card.moved, n8n formt daraus eine Nachricht für Slack, Discord, Teams oder was du sonst benutzt.
  • Jede gebuchte Stunde wird zur Zeile in deiner Tabelle. time.logged als Trigger, ein Node, der die Zeile in Google Sheets, Airtable oder deiner eigenen Datenbank anlegt.

Plan

Die REST-API und ausgehende Webhooks gehören zum Developer-Tarif. Willst du nur bei einer einzelnen Aktion an einen Endpoint posten, etwa bei jeder Kartenbewegung, geht das auch ohne API-Token: Automatisierungen können das schon ab dem Plus-Tarif.

Häufige Fragen

Brauche ich einen fertigen n8n-Node?

Nein. Der HTTP-Request-Node reicht für alles, was n8n bei Zuuna auslösen kann, wie in den Beispielen oben.

Wie prüfe ich die Signatur?

HMAC-SHA256 über den rohen Body mit dem Secret deines Endpoints, verglichen mit dem Header X-Zuuna-Signature im Format sha256=hex. Das Code-Beispiel oben läuft unverändert in einem n8n Code-Node. Prüfe die Bytes, wie sie ankommen, nie ein neu serialisiertes JSON.

Kann n8n Boards anlegen?

Ja, mit dem Scope boards:write, sofern wer das Token erstellt hat, selbst die Berechtigung dazu hat. Eine neue Gruppe legt die API nicht an, die muss schon bestehen.

Welcher Plan?

REST-API und Webhooks gehören zum Developer-Tarif. An einen Endpoint posten geht schon ab dem Plus-Tarif über Automatisierungen.

Sieh es an deinem eigenen Board.

Lege ein Board an und probier die Funktion mit echten Karten aus (14 Tage voller Zugriff, ohne Kreditkarte).