n8n-nodes-niiko
v0.1.1
Published
The niiko node for n8n: every action open to the outside, as an operation. English and Spanish. Generated from the same plan as the SDKs.
Maintainers
Readme
n8n-nodes-niiko
The niiko node for n8n. Every public action as an operation, three outcomes as data, English and Spanish.
A node that knows the actions it was written for is stale the day a new one opens. This one is generated
from the same plan as the SDKs, the CLI and the MCP server (plan 6c3240a7b22d): every action niiko opens to the
outside is an operation of this node, with its fields — and nothing in this repository is edited by hand.
Install
In n8n: Settings → Community Nodes → Install and type:
n8n-nodes-niikoOr, on a self-hosted instance:
npm install n8n-nodes-niikoCredentials: an nk_… key created in Administration → Security → API keys of your niiko workspace, with
the scopes of the actions the workflow will exercise.
Use
Pick an operation, fill its fields, run. Scalars are fields; lists and objects (the lines of an invoice, the
clients of a broadcast) are JSON fields with the shape the reference describes.
Every item produces one object with a status that is one of three:
| status | Meaning | What the workflow does |
|---|---|---|
| done | The action happened. output carries the result. | Continue. |
| refused | It did not happen. reason names why; detail.message says what to do. | Branch with an IF — a refusal is data, not a node error. |
| pending_approval | It is waiting for a human signature and may complete hours later. | Stop here; the result arrives by webhook. |
[!NOTE] Every item sends its own
Idempotency-Key, echoed in the output. Re-running the workflow does not repeat the effect: the server answersduplicatewith what happened the first time. Only broken transport throws.
[!TIP] The node is marked
usableAsTool: attach it to an AI Agent node and each operation becomes a tool with the same purpose text Claude reads on niiko's MCP server. Self-hosted instances needN8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true.
English and Spanish
The node ships its labels in English and a full Spanish translation (translations/es/niiko.json, in n8n's
own format: operations, descriptions and the credentials dialog). n8n shows the Spanish set on instances whose
locale is es (N8N_DEFAULT_LOCALE=es); field names are the contract's identifiers and stay as they are.
The operations today (13)
| Operation | Action | What it does |
|---|---|---|
| Lead create (miira) | miira.lead_create | Creates a new lead in the workspace CRM from its contact details. If a matching one already exists it is not duplicated: the reply is ambiguous with the candidates. |
| Call logged (crm) | crm.call_logged | Logs what was discussed in a call on a client's record, naming the client; optionally creates the follow-up with its date. Reads nothing and calls no one. |
| Owner assigned (crm) | crm.owner_assigned | Changes who owns a client, naming the client and the team member (by name or email). If either is ambiguous it refuses with the list. |
| Stage moved (crm) | crm.stage_moved | Moves a client's open deal to another pipeline stage, naming the client and the stage. Creates no deals: with no open deal it refuses, and with several it refuses with the list. |
| Invoice proposed (kiipu) | kiipu.invoice_proposed | Prepares an invoice as a DRAFT for a client named by name, with its lines and taxes. Does NOT issue it, does NOT number it and does NOT count as debt: a person reviews and issues it in Kiipu. Does not create the client if it does not exist. |
| Task created (crm) | crm.task_created | Creates a reminder (a task with date and time) on a client named by name. Does not log a call: that is crm.call_logged. Does not create the client if it does not exist. |
| Deal created (crm) | crm.deal_created | Opens a new deal in the pipeline for a client named by name, with a title, an optional value in USD, an optional stage (by name; without it, the first one) and an optional owner. Does not check for other open deals: it returns how many remain so a duplicate is visible. Does not win or lose it: that is crm.stage_moved. |
| Note added (crm) | crm.note_added | Saves a note on a client's record, naming the client: something to know next time, with no call and no date. For a call use crm.call_logged; for a dated reminder, crm.task_created. |
| Contact added (crm) | crm.contact_added | Adds a person (name, and optionally email, phone and role) to a client's record, naming the client. Does not make them the primary contact and does not create the client. If someone with that email or phone already existed, the reply says so but does not block it. |
| Broadcast quoted (miira) | miira.broadcast_quoted | Quotes sending the SAME WhatsApp message to several clients named by name (up to 50). Sends NOTHING: per client, it says whether the text goes as-is (24-hour window open, free), whether an approved template is needed and what it costs, or why that client cannot be messaged. Returns a signed quote valid for 15 minutes; to send, call miira.broadcast_sent with it. Show the quote to the person first. |
| Broadcast sent (miira) | miira.broadcast_sent | Sends the WhatsApp broadcast quoted by miira.broadcast_quoted, exactly to whom and how the quote said. If anything changed (window, consent, rate) it refuses with a new quote to confirm again. Costs money when templates are involved: do not call it without the person having seen the cost. |
| Draft voided (kiipu) | kiipu.draft_voided | Voids a DRAFT invoice (one created with kiipu.invoice_proposed and not yet issued), by its id or by the client's name when it is their only draft. Does not void issued invoices: that is for a person in Kiipu. |
| Payment reported (kiipu) | kiipu.payment_reported | Leaves in the Kiipu approval queue the notice that a client (by name) paid a given amount of an open invoice. Does NOT apply the payment and touches no balances: a person checks it against the bank and applies it. If the client has several open invoices the number must be given. |
[!IMPORTANT] Each one needs two permissions: a key with that action's scope, and the workspace owner having switched the permission on (Administration → Permissions). Holding the key is not enough — they are two decisions made by different people.
What it does not do
| Not included | Why | |---|---| | Triggers | niiko notifies through signed webhooks; use n8n's Webhook node to receive them. | | Reads | This API exposes verbs, not rows. There is nothing to list. | | Client-side validation | The server validates, and its refusal travels with a name. What the node gives you is the fields, in the editor, before sending anything. |
Support
| | |
|---|---|
| Versioning | Semantic. Every visible change is in the changelog of the API reference. |
| Regeneration | This repository is generated from the niiko action manifest. When an action opens or a contract changes, a new version is published — nothing here is edited by hand. |
| Issues | vorluno/n8n-nodes-niiko/issues — a fault of the API itself starts at developers.niiko.org. |
| Security | [email protected] — first response within 48 hours, patch or plan within 7 days. |
Related
- @vorluno/niiko-sdk — the TypeScript client, same plan.
- niiko (Python) — the Python client, same plan.
- niiko-cli — the same actions from the terminal, with the outcome in the exit code.
- niiko-mcp-server — the same actions as MCP tools, for Claude and other AI clients.
- developers.niiko.org — the API reference this is generated alongside.
Built and maintained by Vorluno, a software studio in Panama, and generated from niiko's production action manifest — the same one the server enforces. MIT.
