Aninaya · Integrations · Pro
Integrations & Webhooks
Aninaya Pro connects to your own automation stack — n8n, Zapier, Make, or anything that can serve JSON over HTTPS. Two directions, both under your control: an inbound inbox the app pulls transactions from, and outbound webhooks the app signs and sends to your endpoint.
How it works — pull, never push
Nothing can push data into Aninaya. The app polls a URL you configure (Settings → Integrations → Inbound webhook inbox URL) with an HTTPS GET, parses the JSON it returns into proposals, and queues them in the review inbox — every imported transaction still needs your tap to commit. You can also trigger a poll manually with Pull now.
- HTTPS only, public hosts only — localhost, RFC 1918 / private ranges, and
.localare rejected by the app. - Optional shared secret: the app sends
X-Kaiju-Webhook-Secreton every poll; your endpoint should verify it. - Deduplication is automatic — items are hashed on
source + id + amount + type + merchant + created_at, so re-serving the same item is always safe.
Inbound payload contract
Your endpoint answers GET with this shape (the same sample shown in-app):
{
"schema_version": "1",
"items": [
{
"id": "gmail-bill-2026-05-03-001",
"source": "n8n:gmail-bills",
"type": "outflow",
"amount": 1299.50,
"merchant": "Meralco",
"account_id": "bpi-savings",
"title": "May electric bill",
"notes": "Parsed from Gmail bill via n8n",
"created_at": "2026-05-03T10:45:00+08:00"
}
]
} | Field | Required | Notes |
|---|---|---|
amount | Yes | Peso value with centavos as a number, e.g. 1299.50. |
type | Yes | inflow · outflow · transfer (income/credit normalize to inflow). |
id | Recommended | Stable external id — the dedup key. Use the source message/transaction id. |
merchant | Recommended | Vendor / payee name. |
created_at | Recommended | ISO 8601 with timezone; defaults to poll time when absent. |
source | Optional | Free-form origin tag, e.g. n8n:gmail-bills. |
account_id | Optional | Your Aninaya account id (list them from the in-app contract dialog). |
title / notes | Optional | Context shown on the proposal card. |
The body may also be a bare array, or an object with an
items, transactions, or data array.
Outbound webhooks
Aninaya can POST events to your endpoint (test events and chat-driven triggers today). Every request body is:
{
"event": "aninaya.test",
"sentAt": "2026-06-11T10:45:00.000Z",
"payload": { "message": "Webhook test from Aninaya" }
} When you set a secret, two headers are added so your workflow can verify authenticity and reject replays:
X-Kaiju-Webhook-Timestamp— ISO 8601 UTC signing time.X-Kaiju-Webhook-Signature—sha256=HEX(HMAC_SHA256(secret, timestamp + "." + body)).
Verification in an n8n Code node:
const crypto = require('crypto');
const ts = $request.headers['x-kaiju-webhook-timestamp'];
const sig = $request.headers['x-kaiju-webhook-signature'];
const expected = 'sha256=' + crypto
.createHmac('sha256', $env.KAIJU_WEBHOOK_SECRET)
.update(ts + '.' + JSON.stringify($request.body))
.digest('hex');
if (sig !== expected) throw new Error('Bad signature'); n8n in 6 steps — Gmail bills → Aninaya
- Download the sample workflow and import it in n8n (Workflows → Import from File).
- Connect your Gmail credential on the Gmail Trigger node and adjust the search filter to match your bill emails.
- Set a long random secret in the workflow's Check secret node (or an n8n env var) — this is the value your phone will send.
- Activate the workflow and copy the production URL of its Webhook node.
- In Aninaya: Settings → Integrations → Inbound webhook inbox URL → paste the URL; set the same secret; enable the secret header.
- Tap Pull now. Parsed bills appear as proposals in the review inbox — nothing commits without your approval.
Aninaya Desktop
Aninaya Desktop (requires Pro) is the Windows companion app — pair it with the Aninaya app on your phone over your own Wi-Fi to view and edit your finances on a PC. LAN-only, opt-in pairing, no telemetry, and the same bring-your-own-AI posture as the phone app.
← Back to Aninaya