n8n integration
Receive Jaina webhooks in n8n and trigger downstream automations.
The pattern
Jaina fires webhooks on record.created, record.updated, and record.deleted. n8n receives them and routes them to anywhere — Slack, Discord, GitHub Issues, Google Sheets, your custom HTTP service.
Step 1: an n8n webhook
In n8n, add a Webhook node:
- HTTP method:
POST - Path:
jaina-records - Response:
Last Node
Activate and copy the production URL (e.g., https://n8n.example.com/webhook/jaina-records).
Step 2: register the webhook in Jaina
Your project → Webhooks → New webhook:
- URL: paste your n8n URL
- Events:
record.created,record.updated - Description: optional
- Secret: auto-generated; copy it
Step 3: verify the signature
Add a Function node:
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;
Set JAINA_WEBHOOK_SECRET in n8n's env to the secret from step 2.
Step 4: route to anywhere
Common patterns:
- Slack — post to a channel when a record is created with a specific tag.
- GitHub Issues — open an issue when a record fails validation.
- Google Sheets — append a row to a tracking sheet.
- Custom HTTP — call your application backend to invalidate a cache.
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 }
}
},
"created_at": "2026-05-13T12:34:56.789Z"
}
Retries
Jaina retries failed deliveries up to 5 times with exponential backoff over ~15 minutes. Delivery attempts and outcomes are logged in your project's Webhooks → Delivery log.
