Package Information
Available Nodes
Documentation
n8n-nodes-taliware
TALIWARE CL2C biometric NFT mint node for n8n — manually execute mints or expose Mint Biometric NFT as an AI Agent tool.
The node is a thin gate to the CL2C API: resolve owner → create NFT → poll until MINTED or FAILED → return agent-readable JSON. Confida biometric approval happens on the owner's mobile device after create; this package does not embed the Confida SDK.
Requirements: n8n ≥ 1.79.0 (community AI Agent tools).
Quick Start
Goal: first successful testnet mint in under 30 minutes.
1. Install the community node
On your n8n host, set environment variables:
N8N_COMMUNITY_PACKAGES_ENABLED=true
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true # required for AI Agent tools
Restart n8n, then: Settings → Community Nodes → Install → enter n8n-nodes-taliware.
2. Create Taliware API credentials
In n8n: Credentials → New → Taliware API
| Field | Required | Notes |
|---|---|---|
| API Key | Yes | Sent as x-api-key on CL2C requests only — never logged |
| Default Smart Contract ID | No | UUID of a contract with env: TESTNET for testnet mints |
The CL2C API has a single production host (https://developer.taliware.com/api/v1) — there is no separate testnet host, so this node no longer exposes a Base URL field. Testnet: Pick a smart contract where env is TESTNET (via CL2C API or TALIWARE platform). Set that UUID in credentials or override it on the node.
List contracts (example):
curl -s -H "x-api-key: YOUR_KEY" \
"https://developer.taliware.com/api/v1/cl2c/contract?limit=50" | jq '.data[] | {id, name, env, network}'
3. Invite the NFT owner
The owner must exist on the TALIWARE platform before mint. Either:
- Platform UI — invite the user via the TALIWARE dashboard, or
- API —
POST /cl2c/userwith the owner's email:
curl -s -X POST "https://developer.taliware.com/api/v1/cl2c/user" \
-H "x-api-key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"owner@example.com"}'
The owner must complete Confida setup (see below) before mint can succeed.
Owner User ID: When resolving by email, the node uses the org entry id from GET /cl2c/user (UUID), not the nested user.id platform identifier. You can paste that UUID into Owner User ID to skip email lookup:
curl -s -H "x-api-key: YOUR_KEY" \
"https://developer.taliware.com/api/v1/cl2c/user?search=owner@example.com" | jq '.data[] | {id, email, status}'
Use the top-level id field in the mint request.
4. Run your first manual mint
- Add Mint Biometric NFT to a workflow.
- Select Taliware API credentials.
- Set parameters:
- Owner Email (or Owner User ID)
- Name (optional — leave empty to auto-generate a unique name like
Taliware NFT 3f9a1c2b) - Image Path — HTTPS URL, base64 (
data:image/...;base64,...or raw), or leave empty and pass binary on the input item (see Binary Property Name) - Smart Contract ID — leave empty to use credential default, or paste a TESTNET contract UUID
- Click Execute workflow.
- The owner receives a Confida mobile notification — complete fingerprint approval on device.
- The node polls until
statusisMINTEDorFAILED(default: 10 s interval, 20 min timeout).
On success, output includes status: "MINTED", mintedAt, and smartContract.contractAddress.
Mint from a local file: Import workflows/manual-mint-binary.example.json — Read Binary File (set filePath to your PNG/JPEG) → Mint Biometric NFT with Image Path empty and Binary Property Name data.
If Confida confirms but the node ends with status: FAILED and mintedAt: null, the create + IPFS + biometric steps succeeded; on-chain mint likely failed (e.g. unfunded org wallet / CRDB tokens). Retry after TALIWARE recharges testnet funds — no node change required.
Confida (biometric approval)
TALIWARE orchestrates Confida for biometric identity verification. This node does not embed the Confida SDK or capture biometrics inside n8n.
What happens:
- Owner is invited to the platform and completes Confida setup on mobile.
POST /cl2c/nftcreates the NFT withstatus: CREATEDand triggers Confida notifications.- Owner approves on mobile (fingerprint).
- This node polls
GET /cl2c/nft/{id}until terminal status.
If the owner ignores the notification, polling hits the timeout — see ConfidaTimeout in Error Reference.
Full Confida documentation: developer.taliware.com/docs/confida
AI Agent tool
Connect the tool
- Confirm env vars from Quick Start are set.
- Add an AI Agent node to your workflow.
- On the agent's Tools input, add Mint Biometric NFT Tool (the wrapped variant of this node).
- Select credentials and configure poll/debug settings on the tool node if needed.
Agent-supplied parameters (via $fromAI when the tool is connected):
| Parameter | Required | Notes |
|---|---|---|
description |
No | Photo or artwork description |
imagePath |
No | HTTPS URL or base64 image for MintRequest.imagePath |
ownerEmail |
One of email/userId | Platform user email |
ownerUserId |
One of email/userId | Org entry id from GET /cl2c/user; skips email lookup when set |
smartContractId |
No | Overrides credential default |
The NFT name is not requested from the agent: it is auto-generated per mint (or set the Name field to a fixed value).
Manual Execute and Tool invoke share the same execute() code path.
Tool output fields (for agent prompts)
On MINTED, the tool returns a single JSON item (under ~8 KB, no raw image bytes):
{
"id": "uuid",
"status": "MINTED",
"name": "My Photo NFT",
"description": "…",
"imagePath": "https://…",
"externalUrl": "https://…",
"mintedAt": "2026-05-30T12:00:00.000Z",
"smartContract": {
"id": "uuid",
"contractAddress": "0x…",
"env": "TESTNET",
"network": "cordoba"
},
"copyright": [
{
"email": "owner@example.com",
"status": "…",
"percentage": 100,
"walletAddress": "0x…"
}
]
}
Use id, status, mintedAt, smartContract.contractAddress, and copyright[] in agent system prompts so the model can confirm mint success to the user.
Workflow Tool workaround (n8n #26202)
Some n8n versions have a FIFO queue ordering bug where AI Agents receive an empty observation from usableAsTool community nodes even though the tool executed successfully.
Symptom: Agent says the tool returned nothing; execution log shows the mint node succeeded with JSON output.
Workaround: Wrap the mint in a sub-workflow and connect it via n8n's native Workflow Tool (uses supplyData, not the usableAsTool wrapper):
- Create a workflow with Execute Workflow Trigger (or When Executed by Another Workflow) → Mint Biometric NFT → return mapped JSON.
- In your agent workflow, add Workflow Tool pointing at that sub-workflow instead of Mint Biometric NFT Tool directly.
- Map tool inputs in the sub-workflow trigger to mint node parameters.
Upgrade n8n when a fix for #26202 is available in your release channel.
Taliware Agent (biometric-gated AI agent)
Taliware Agent is an AI agent node whose sensitive tools run only after the owner approves the exact action with their fingerprint in Confida. Enforcement is in the node's code, not in the LLM: the model can ask for a sensitive tool, but it never runs unless the TALIWARE API reports the approval.
Taliware Agent ── Chat Model (required)
── Memory (optional)
── Tools ── Search, Calendar → run freely
── Tools ── Taliware Auth → biometric gate
└─ Tool ── Pay invoice, Delete record
- Add Taliware Agent and connect a Chat Model (and optionally Memory).
- Connect normal tools directly to its Tools port.
- Add a Taliware Auth node, set the Approver Email (or User ID) and credentials, and connect it to the agent's Tools port.
- Connect every sensitive tool to Taliware Auth, never directly to the agent.
When the model calls a gated tool, Taliware Auth creates an approval request (a mint with no image) and waits for the approver's decision, 5 minutes by default. Approved: the tool runs once, with the exact arguments that were approved. Rejected, timed out or failed: the tool does not run and the model is told.
The node output contains output (the agent's reply) and approvals[]: tool, decision (APPROVED, REJECTED, TIMED_OUT, FAILED), actionHash, requestId, approvedBy, approvedAt, location.
Setup rules
- Never connect the same capability both through Taliware Auth and directly; the agent refuses to start if the same tool name appears on both.
- The approver is fixed in the node on purpose: the AI can never choose who approves.
- Each approval request is a real mint (CRDB and gas); Max Approvals Per Run caps them per execution.
- Approval requests are recorded publicly on IPFS like any mint, including the approver's identity and location.
Error Reference
All failures use NodeOperationError with a prefix in the execution log:
| Prefix | Likely cause | Remediation |
|---|---|---|
| Configuration: | Invalid or missing API key, bad base URL, missing default smart contract when node override is empty | Verify Taliware API credentials; set Default Smart Contract ID or node Smart Contract ID |
| Validation: | Missing name, missing owner email/userId, owner not found, invalid imagePath, CL2C 400/404 validation |
Fix parameters before retry; invite owner via platform or POST /cl2c/user |
| API: | CL2C request failed, NFT status: FAILED after poll |
Read message and API details; check contract env, owner Confida status, image data/URL |
| ConfidaTimeout: | Poll timeout — owner did not complete biometric approval in time | Ask owner to approve on mobile; increase Poll Timeout Minutes; node does not auto re-mint |
| n8nTool: | n8n tool-layer issues (e.g. empty observation from #26202) | Use Workflow Tool workaround; upgrade n8n |
Example messages:
Validation: Owner not found — user must be invited via TALIWARE platform or POST /cl2c/userValidation: imagePath must be an HTTPS URL, a data:image/...;base64,... URI, or raw base64 image dataConfidaTimeout: Mint approval timed out — Confida biometric approval may still be pending (id=…, status=CREATED). Do not retry this request — CL2C has no idempotency key, and a retry creates a new NFT and a new approval request instead of resuming this one. Ask the owner to approve on their phone; this mint may still complete on its own.
Reliability
Duplicate mint on agent retries
CL2C v1.0.0 has no idempotency key. If an AI Agent retries a failed or timed-out tool call, each attempt creates a new NFT via POST /cl2c/nft. Design agent prompts and error handling to avoid blind retries after partial success (e.g. after create but before poll completes).
HTTP 429 rate limits
The CL2C client retries up to 3 times with exponential backoff (1 s, 2 s, 4 s) on HTTP 429.
Poll behaviour
The node polls until NFT-level status is MINTED or FAILED. Success is determined by status === 'MINTED', not individual copyright[].status values. Defaults: 10 s interval, 20 min timeout (configurable on the node).
Debug mode
Enable Debug on the node to log NFT id, poll count, and last status only — never API keys or full email addresses.
Publishing
Version 0.1.0 is published to npm as n8n-nodes-taliware.
Local checks before release
npm run lint
npm run build
npm pack --dry-run # verify tarball: dist/, workflows/, README, LICENSE, CHANGELOG only
The package files field includes only dist/ and workflows/ — no BMad or planning artifacts are shipped.
Release to npm (with provenance)
Configure npm Trusted Publishing (OIDC) on npmjs.com for this repo's
publish.ymlworkflow, or setNPM_TOKENin GitHub secrets.Locally bump and tag (does not publish from your machine):
npm run releasePush the tag (e.g.
0.1.0) — GitHub Actions runs.github/workflows/publish.yml, which lint/builds and runsnpm publishwithNPM_CONFIG_PROVENANCE=true.
Example workflows for post-publish validation are in workflows/.
Development
Requirements: Node.js ≥ 22.16 (n8n engine), npm. For local npm run dev with bundled n8n, Node 22 LTS is recommended — Node 24 may fail on native isolated-vm builds.
cd n8n-nodes-taliware
npm install # uses .npmrc ignore-scripts=true for @n8n/node-cli
npm run build
npm run lint
npm run dev # symlinks to ~/.n8n-node-cli and starts n8n + tsc watch
Local n8n test (while testnet tokens recharge)
npm run build && npm run dev(ordocker compose upafter build).- Open http://localhost:5678 → Credentials → Taliware API:
- API Key: your
n8nplugin…CL2C key (x-api-key, not Bearer) - Default Smart Contract ID: TESTNET contract UUID
- API Key: your
- Import
workflows/manual-mint-binary.example.json. - Set Read Binary File → filePath to a local image (e.g.
scripts/fixtures/testest.pngduring dev). - Set Owner Email to a Confida-ready ACTIVE user; leave Image Path empty.
- Execute → approve Confida on mobile → node polls until
MINTEDorFAILED.
See scripts/README.md for curl smoke tests without n8n.
External n8n:
# Terminal 1
npm run dev -- --external-n8n
# Terminal 2
N8N_DEV_RELOAD=true N8N_USER_FOLDER=$HOME/.n8n-node-cli n8n start