exia

n8n community node for Exia — execute ActionNodes, read/write records, and discover companies over the Exia /api/v1 integration API.

Documentation

n8n-nodes-exia

An n8n community node for Exia. It talks to the Exia third-party
integration API (/api/v1) using a scoped API key, so n8n workflows can drive Exia
without touching the database directly.

This is the recommended integration path (a first-party community node, like the HubSpot
or Google nodes) — not a fork of n8n. Your workflows stay maintainable across n8n
upgrades, and the licensing is clean: this package is your own code under its own license,
it merely consumes n8n's public node API.

Operations

Action Node (the main use case — invoke any Exia ActionNode by name):

  • Execute — run an ActionNode with parameters. Synchronous nodes return their rows;
    background nodes return a job, and the node can poll until it finishes (Wait for Background Job).
  • List — list the ActionNodes the key may execute.
  • Get Schema — inputs/outputs for one ActionNode.
  • Get Job — read a background job's status.

Record (menu-backed CRUD):

  • Get Many / Get / Create / Update / Delete against a menu's data source by Menu ID.

Company:

  • Get Many — list visible companies.

Backup:

  • Get Many — list available database backups.
  • Download — pull a completed dump as binary data (into an output field, default data),
    ready to send offsite (S3, FTP, email, …). Requires the backups:read scope.

Triggers

Three trigger nodes start workflows from Exia.

Exia Menu Save Trigger (push)

Fires when a record is saved on a menu — through the Exia back-office UI or the
integration API. On activation it registers its webhook URL with Exia; Exia POSTs the event
fire-and-forget, so it never slows a save. Filters:

  • Menu ID — only saves on that menu (0 = any).
  • Operation — any / created / updated.
  • Only If These Columns Changed — comma-separated columns; fire only when one of them was
    written by the save (leave empty for any column).

Payload: { event, menuId, recordId, operation, columns }.

Exia Node Executed Trigger (push)

Fires when an ActionNode finishes (UI button, API call, or background job). Same
register/fire-and-forget model. Filters: a specific ActionNode (or any) and Status
(any / success only / failure only). Payload: { event, node, ok, durationMs, source }.

Both push triggers need the webhooks:manage scope, and Exia must be able to reach n8n's
webhook URL on the network.

Exia Trigger (polling)

Polls a synchronous ActionNode on n8n's schedule and emits its rows — useful when you want
to pull on an interval rather than receive a push. Detect "new" either by leaving
Deduplicate By Field empty (the node returns only-new rows) or by setting it to a monotonic
column (the trigger tracks the highest value seen). Background ActionNodes can't be polled.

Credentials

Create an Exia API credential:

  • Base URL — your Exia host, e.g. https://exia.example.com (no /api/v1 suffix).
  • API Key — a scoped key from Exia → Admin → Integration Keys. Sent as the
    X-API-Key header.
  • Ignore SSL Issues — for local/dev instances with self-signed certs.

The key's scopes (nodes:execute, records:read, records:write, records:delete,
backups:read, webhooks:manage) and optional node/menu allowlists are enforced
server-side; give each key only what its workflow needs.

Install

Self-hosted, this instance (no verification needed):

# in your n8n install / custom-extensions dir
npm install n8n-nodes-exia

Or build and point N8N_CUSTOM_EXTENSIONS at the package:

npm install
npm run build
# then set N8N_CUSTOM_EXTENSIONS=/path/to/n8n-nodes-exia in n8n's env

GUI install / public registry: optional — see n8n's
community node verification (verified
nodes need zero runtime deps, a README, and GitHub Actions provenance publishing).

Development

npm install
npm run build   # tsc + copies the icon into dist/
npm run dev     # tsc --watch

Notes

  • /api/v1 is plain JSON (it is exempt from Exia's SPA CBOR wire format), so this is a
    straightforward JSON client.
  • Credential test calls GET /api/v1/companies, which only requires a live, non-revoked key.

Discussion