n8n

Building a content pipeline with Jaina + n8n

Webhook → n8n → Slack, Discord, GitHub Issues, anywhere. A simple recipe for content automation.

Jaina Team

The pattern

Jaina fires webhooks on record.created, record.updated, and record.deleted. n8n receives them on an HTTP webhook node and routes them anywhere — Slack, Discord, GitHub Issues, a Google Sheet, a downstream API, your phone.

This is the cheapest possible "content management triggers a workflow" pipeline.

Step 1: an n8n webhook

In n8n, drag a Webhook node onto the canvas. Set:

  • HTTP method: POST
  • Path: jaina-records (or whatever you like)
  • Response mode: Last Node

Activate the workflow and copy the production URL — something like https://n8n.example.com/webhook/jaina-records.

Step 2: register the webhook in Jaina

In your project settings → Webhooks → New webhook:

  • URL: paste your n8n URL
  • Events: record.created, record.updated
  • Signing secret: leave the auto-generated value (we'll use it in step 3)

Jaina will start delivering signed POST requests on every matching event.

Step 3: verify the signature in n8n

Add a Function node after the webhook with this code:

const crypto = require('crypto');
const secret = $env.JAINA_WEBHOOK_SECRET;
const signature = $request.headers['x-jaina-signature'];
const body = JSON.stringify($json);

const expected = 'sha256=' + crypto
  .createHmac('sha256', secret)
  .update(body)
  .digest('hex');

if (signature !== expected) {
  throw new Error('Invalid signature');
}

return $json;

If the signature is valid, the event continues. If not, n8n fails the run.

Step 4: route to wherever

Now do anything with the event. Examples:

  • Slack — Slack node → post a message to a channel when a record is created.
  • GitHub Issues — GitHub node → open an issue for any record matching a tag.
  • Google Sheets — append a row to a tracking sheet.
  • Webhook back to your app — call your own backend to invalidate a cache.

Full payload shape

{
  "id": "evt_01HXYZ...",
  "type": "record.created",
  "data": {
    "project": { "id": "...", "slug": "my-game" },
    "schema":  { "id": "...", "slug": "enemy" },
    "record":  {
      "id":   "rec_01HXYZ...",
      "data": { "name": "Goblin", "hp": 20, "attack": 3 }
    }
  },
  "created_at": "2026-05-04T12:34:56.789Z"
}

What we ship by default

  • HMAC-signed payloads (rotatable secrets).
  • Exponential backoff retry on 5xx and timeouts, up to 5 attempts over ~15 minutes.
  • A delivery log in the dashboard for debugging.
  • Per-webhook event filters so you can scope subscriptions.

Whether n8n is the right tool for your shop is a different question. But if it is, this pipeline is roughly an evening of work for a useful "content changes trigger downstream effects" capability.