One existing n8n workflow · one named defect · 5 days · $60Book the fix — $60
WorkflowErrors
Parameters & expressionsExpression / item linking✓ Checked 15 September 2026 · n8n 2.39.5 (source read on master @ 2.40.0)

Paired item data for item from node is unavailable. Ensure node is providing the required output.

Your expression used .item to reach back to an earlier node, and somewhere in the chain between that node and this one, a node produced output without attaching pairedItem metadata — so n8n has no way to know which of the earlier node's items produced the item you're currently on.

If you just want it working: replace .item with .first(), .last() or .all()[index]. That skips item tracing entirely. The rest of this page is for deciding which of those is actually correct, and for the case where you need .item to work.

The exact string, and why yours looks different

n8n builds this message from a template, so the wording varies with what you wrote:

Paired item data for <method> from node '<NodeName>' is unavailable.
Ensure '<NodeName>' is providing the required output.

<method> is whichever of these you used — and it is the literal text that appears:

In the message What you wrote
item $('Node').item
itemMatching $('Node').itemMatching(i)
pairedItem the default, when n8n resolves linking internally
$getPairedItem internal resolution from a Code node

The item index is attached to the error as context rather than being part of the message itself, so depending on where you read the error — the node's red banner, the execution log, a forum paste — you may or may not see a trailing item number. Don't treat its absence as a different error.

Check this first: is the referenced node pinned?

If the node you're reaching back to has pinned data, n8n throws a completely different message for the same underlying problem:

Using the item method doesn't work with pinned data in this scenario.
Please unpin '<NodeName>' and try again.

and in some paths simply Unpin '<NodeName>' to execute.

This is worth checking before anything else, because it's the version that hits people mid-build — you pin some test data to stop re-hitting an API, and an expression that worked five minutes ago stops working. Unpin the node and the error goes. Nothing is wrong with your expression.

Fix 1 — use a method that doesn't need item linking

This is n8n's own recommendation and it's right most of the time. Which one you want depends on what the referenced node actually returns:

{{ $('Get Customer').first().json.email }}

If none of those is honest — if you genuinely need the item that corresponds to this one — then you need Fix 2.

Fix 2 — make the offending node supply the link

The culprit is almost always a Code node in "Run Once for All Items" mode. In that mode you build the output array yourself, and if you don't set pairedItem, nothing downstream can trace through your node.

Two things worth knowing, both from n8n's source:

So in "Run Once for All Items":

const items = $input.all();

return items.map((item, i) => ({
  json: { ...item.json, domain: item.json.email.split('@')[1] },
  pairedItem: { item: i },
}));

If your node fans out — one input item becoming several output items — point each output at the input it came from:

const out = [];
$input.all().forEach((item, i) => {
  for (const line of item.json.lines) {
    out.push({ json: line, pairedItem: { item: i } });
  }
});
return out;

n8n will also nudge you about this on its own: when a Code node returns a different number of items than it received, or any item without pairedItem, the output panel shows a hint reading "To make sure expressions after this node work, return the input items that produced each output item." That hint is not an error and is easy to scroll past, which is why most people meet it as this error instead, three nodes later.

Fix 3 — accept that some nodes can't supply it

A node that aggregates, merges, summarises or splits has genuinely destroyed the one-to-one relationship. There is no correct pairedItem for a row that was computed from forty input items. For anything downstream of such a node, .item is the wrong tool and Fix 1 is the answer, permanently.

The same failure, four other messages

This is the part that makes searching for it so frustrating: n8n's item-linking code throws five distinct messages, and it rewrites the message when the failure happens inside a Code node rather than in an expression field. So the same root cause reaches you under different text depending on where you hit it.

Expression field Inside a Code node What it means
Paired item data for … is unavailable (same) a node in the chain didn't supply pairedItem
Invalid expression / No path back to referenced node (same) the referenced node isn't wired to this one at all. Wire it up — intermediate nodes are fine
Branch not found / Paired item references non-existent branch Invalid branch reference a node pointed at an output branch that doesn't exist
Paired item resolution failed / Unable to find paired item source Data not found traversal ran out of chain before reaching the node
Multiple matches found / Multiple matching items for item [N] Multiple matches more than one item could be the source — genuinely ambiguous

Two neighbours that look similar but aren't item-linking problems at all:

Why this happens at all

n8n items don't carry their history inside them. Instead every node is expected to stamp each output item with a pointer to the input item that produced it, and .item resolves by walking that chain of pointers backwards, node by node, until it reaches the node you named. One node that doesn't stamp its output breaks the chain — and the error surfaces at the node doing the reading, which may be well downstream of the node actually at fault.

That's the practical lesson: the node named in the error is the node that failed to supply the data, not the node you need to edit. Read the node name in the message and go look at that node, not at the expression in front of you.

A worked example

A lead-reply workflow I built sidesteps this error rather than fixing it. Each branch — invalid address, unusable draft, mail-server rejection, successful send — writes its own outcome row with a reason at the point the outcome is known, instead of leaving an expression further downstream to trace back which lead a given result belonged to.

Nothing in it uses .item, so nothing in it can fail to resolve .item. That is usually the cheaper answer: when a workflow needs item linking in several places, the shape of the workflow is often what's wrong, not the expression.


Sources: packages/workflow/src/workflow-data-proxy.ts and the editor's English string table in n8n's repository, read directly. n8n documents item linking in general but does not have a page for this error string.

Last verified 15 September 2026 against n8n 2.39.5 (source read on master @ 2.40.0). n8n changes these messages between releases; if the wording you see differs, the version above is what this page was checked against.

Related reading

Every error on this site, as one self-contained HTML file you can keep open while your instance is down — no signup, no email, just the file.

Download the offline error reference ↓
One file · works offline · no signup required

More free things →

Want me to fix it instead?

The paid step is one bounded correction on one workflow you already have: $60 fixed, 5 days.

  • One existing n8n workflow, one named defect — you name it, I quote it back before starting.
  • Before-and-after fixtures, so you can see the defect reproduce and then stop reproducing.
  • An activation and rollback checklist, so putting it live is not a leap.
  • Booked through a work marketplace with payment protection — not an invoice from a stranger.
  • Out of scope: building a new workflow, hosting, or ongoing maintenance. Those are separate conversations.
Book the fix — $60

Keep going from here