exado

n8n community node for the Exado AI API (RAG chat, OpenAI-compatible completions/embeddings, document ingestion, conversations).

Documentation

@exado/n8n-nodes-exado

n8n community node for the Exado AI API — RAG chat, OpenAI-compatible completions/embeddings, document ingestion, conversations, FAQ.

Installation

From the n8n UI (recommended)

Self-hosted n8n only — n8n Cloud does not yet support community nodes installed at runtime.

  1. Make sure N8N_COMMUNITY_PACKAGES_ENABLED=true is set on the n8n container (it is by default in recent n8n versions).

  2. Open n8n → Settings → Community Nodes → Install.

  3. Enter the package name:

    @exado/n8n-nodes-exado
    
  4. Tick "I understand the risks" → Install. The Exado and Exado Trigger nodes appear in the palette after ~30s.

Manually (CLI)

cd ~/.n8n/custom        # or wherever your n8n custom dir is
npm install @exado/n8n-nodes-exado
# then restart n8n

Local development (npm link)

git clone https://github.com/vado-innovation-tech/n8n-nodes-exado.git
cd n8n-nodes-exado
npm install && npm run build
npm link

cd ~/.n8n/custom
npm link @exado/n8n-nodes-exado

Credentials

Two pieces of information are needed:

  1. Base URL — the root of your Exado API, e.g. https://api.exado.example.com. No trailing slash.
  2. API Key — a long-lived key with the exado_ prefix.

To issue a key:

  1. Log into the Exado web UI as any user that owns the workflows you want to drive.
  2. Open Settings → API Keys (or call POST /api/admin/api-keys once with a Keycloak JWT).
  3. Copy the generated key the moment it is shown — it cannot be retrieved later.

The server's UnifiedAuth dependency accepts the same exado_ key on both the public OpenAI-compat surface and the internal endpoints. One credential covers every operation this node exposes.

After saving the credential, click Test — the node hits GET /api/users/me and returns the key owner.

Supported resources & operations

Resource Operations
Chat Send Message (streaming or non-streaming)
Chat Completion Create Chat Completion, Create Completion (both streaming)
Embedding Create
Model List Available, List OpenAI-Compatible
Document Upload, Get, Get Content, Get Status, Get Many, Update, Delete, Bulk Delete, Translate, Get Translation Status, Get Translation Result
Conversation Get Many, Get, Ask (streaming), Get Status, Cancel Generation
Conversation Config Create, Get Many
Conversation Template Create, Create Conversation From Template
Metadata Create, Get, Get Many, Update, Delete, Pending Status, Generate
Folder Create, List Children, Rename
Group Get Many, Get
FAQ Topic Create, Get, Get Many, Update, Delete
Quick Quick Ask

Trigger node

Exado Trigger is a polling trigger with four modes:

  • Document Ingestion Complete — emits when a previously unseen document reaches status: "success".
  • Translation Complete — emits when a translation transitions to completed.
  • New Conversation — emits for each new conversation visible to the API key.
  • New FAQ Topic — emits for each new FAQ topic.

The first poll silently primes dedupe state, so the workflow does not flood-fire on existing items. Subsequent polls emit only what is new. In Test Step (manual) mode the trigger ignores dedupe state and emits the latest items so you can wire downstream nodes.

Streaming usage

For Chat, Chat Completion, and Conversation → Ask, set Stream Response to true. By default the node consumes the full SSE stream and returns a single item:

{
  "content": "Hello, world!",
  "chunks": 12,
  "model": "gpt-4o-mini",
  "finishReason": "stop"
}

Toggle Emit Each Chunk to produce one output item per parsed frame. This is useful for live-streaming downstream consumers but breaks single-item nodes like Set / Merge.

Mid-stream [ERROR] frames are surfaced as NodeApiError, with the partial buffered content attached on the error context.

Document upload example

  1. Add a Read Binary File (or any node that produces a binary item with binary.data).
  2. Wire it into an Exado node configured as Resource = Document, Operation = Upload.
  3. In the node's Options, set Folder Path and Parsing Mode as desired.
  4. Downstream, poll Get Status until status === "success" (or use the Exado Trigger with mode = Document Ingestion Complete).

Known limitations

  • Exado does not emit Retry-After or X-RateLimit-* headers — failed requests surface as NodeApiError with the raw HTTP status.
  • The buffered streaming mode loads the full response into memory before returning. For very long completions use Emit Each Chunk.
  • loadOptions dropdowns for models / groups / folders cache the first page (up to 100 items). For larger libraries enter the ID manually.

Development

npm install
npm run dev        # tsc --watch
npm test           # jest
npm run lint
npm run build      # tsc + gulp icons

Tests use Jest with ts-jest. The HTTP layer is mocked at this.helpers.httpRequestWithAuthentication — see tests/resources/chat.test.ts for the standard stub.

License

MIT — see LICENSE.

Discussion