Elizon Docs
Workflows

Edit Fields

Build an object out of named fields — rename, reshape or assemble data mid-workflow.

An Edit Fields node (edit_fields) builds an object out of named fields — the direct way to reshape, rename, or assemble data mid-graph without pressing an AI Prompt or a Variable node into service for it.

Configuration

FieldTypeDefaultDescription
rowslist of { id, name, value, valueMode }[]One field each. valueMode is expression (the default: value is resolved) or fixed (value is used as written).
keepOnlySetFieldsbooleantrueThe output holds exactly the rows you set. Must stay on — see below.

Each row is a name and a value, and each row's value is independently one of two things:

  • Expression (the default) — resolved with the {{ }} syntax above, against the same namespaces. {{ upstream.classify-1.output.assignedCategories }} renames another node's field into one of yours.
  • Fixed — used verbatim. Text that happens to look like {{ … }} stays literal text rather than being resolved, which is what makes a fixed row safe for values that contain braces.

Rows declare no type. A row that resolves to the number 92 reaches downstream nodes as the number 92, not as "92".

The node's output is an object of exactly the rows you set — Keep only set fields. Turning that setting off (n8n's merge mode) is not available: a node here has no single implicit input to merge onto, since it may have any number of upstream nodes and none of them is privileged. Studio keeps the setting locked on, and a node that reached the canvas with it off — hand-crafted through the API, or restored from a version saved elsewhere — fails at run time with that explanation rather than silently dropping the data you asked to keep — tick the setting back on in the panel to repair it. To carry data through, add a row that references it — for example {{ upstream.<nodeId>.output }}.

A row whose expression cannot be resolved fails the node at run time and names the offending row — an expression can only be judged against real run data, so Studio cannot warn you about it while you author. What it does check as you type is the name side: a row with no name (which the node also refuses at run time), a name another row already sets, and a name no downstream {{ }} reference could address.

Output

An object with one key per row, named by the row's name: {{ upstream.<nodeId>.output.<name> }}.

Limits and errors

  • A row whose expression cannot be resolved fails the node, naming the row.
  • A row with no name, or a node saved with keepOnlySetFields off, fails at run time with the reason.

Example

workflows/shape-lead.yaml
name: Shape lead
description: Turns a form submission into the CRM's field names.
graph:
  nodes:
    - id: lead-form
      type: trigger_form
      position: { x: 0, y: 0 }
      data:
        authMode: none
        fields:
          - { name: fullName, label: Your name, type: text, required: true }
          - { name: email, label: Email, type: email, required: true }
    - id: crm-fields
      type: edit_fields
      position: { x: 280, y: 0 }
      data:
        rows:
          - {
              id: r1,
              name: contact_name,
              value: '{{ trigger.body.fullName }}',
              valueMode: expression,
            }
          - {
              id: r2,
              name: contact_email,
              value: '{{ trigger.body.email }}',
              valueMode: expression,
            }
          - { id: r3, name: source, value: website, valueMode: fixed }
        keepOnlySetFields: true
  edges:
    - { id: form-to-fields, source: lead-form, target: crm-fields }

In a Package

  • Travels: rows, keepOnlySetFields
  • Converted: none
  • Never carried: none