Flows
Node Types
Data Operations

Data Nodes

Nodes for reading and writing data from Tables and external APIs.

Available Nodes

Fetch Data
Query data from tables
Table Insert
Insert new records
Table Update
Update/delete records
HTTP Request
HTTP requests to APIs

Fetch Data

Fetch Data

Query data from a Lux table or external database.

Configuration:

FieldTypeDescription
sourceselectlux_table or external_db
tableNamestringTable name (e.g., customers)
filterjsonFilter conditions
orderBystringSort order (e.g., created_at DESC)
limitnumberMaximum records to return (default: 100)

Output:

  • {{ $node.fetch_data-1.data }} - Array of matching records

Example - Fetch from Lux Table:

{
  "id": "fetch_data-1",
  "type": "fetch_data",
  "label": "Get Active Customers",
  "config": {
    "source": "lux_table",
    "tableName": "customers",
    "filter": "{ \"status\": \"active\" }",
    "orderBy": "created_at DESC",
    "limit": 50
  }
}

Example - Dynamic Filter:

{
  "config": {
    "source": "lux_table",
    "tableName": "orders",
    "filter": "{ \"customer_id\": \"{{ $input.customerId }}\" }"
  }
}

Table Insert

Table Insert

Insert a new row into a table.

Configuration:

FieldTypeDescription
tableNamestringTable to insert into
fieldsarrayArray of column/value mappings

Fields Format:

{
  "fields": [
    { "column": "id", "value": "{{ $node.generate_uuid-1.id }}" },
    { "column": "name", "value": "{{ $input.name }}" },
    { "column": "email", "value": "{{ $input.email }}" },
    { "column": "created_at", "value": "{{ $node.get_timestamp-1.timestamp }}" }
  ]
}

Output:

  • {{ $node.table_insert-1.success }} - Boolean success status
  • {{ $node.table_insert-1.record }} - The inserted record

Example:

{
  "id": "table_insert-1",
  "type": "table_insert",
  "label": "Create Customer",
  "config": {
    "tableName": "customers",
    "fields": [
      { "column": "id", "value": "{{ $node.generate_uuid-1.id }}" },
      { "column": "name", "value": "{{ $input.name }}" },
      { "column": "email", "value": "{{ $input.email }}" }
    ]
  }
}

Table Update

Table Update

Update, upsert, or delete records in a table.

Configuration:

FieldTypeDescription
tableNamestringTable to modify
operationselectupdate, upsert, or delete
conditionsarrayWhere conditions to match rows
fieldsarrayFields to update (for update/upsert)
matchColumnsarrayColumns to match on (for upsert)
limitobjectHow many rows to affect

Conditions Format:

{
  "conditions": [
    { "column": "id", "operator": "equals", "value": "{{ $input.id }}" }
  ]
}

Available Operators: equals, not_equals, gt, gte, lt, lte, contains, text_contains, is_null, is_not_null

Example - Update:

{
  "id": "table_update-1",
  "type": "table_update",
  "label": "Update Status",
  "config": {
    "tableName": "orders",
    "operation": "update",
    "conditions": [
      { "column": "id", "operator": "equals", "value": "{{ $input.orderId }}" }
    ],
    "fields": [
      { "column": "status", "mode": "set_value", "value": "shipped" }
    ],
    "limit": { "type": "first" }
  }
}

Example - Upsert:

{
  "config": {
    "tableName": "user_preferences",
    "operation": "upsert",
    "matchColumns": ["user_id"],
    "fields": [
      { "column": "user_id", "mode": "set_value", "value": "{{ $input.userId }}" },
      { "column": "theme", "mode": "set_value", "value": "{{ $input.theme }}" }
    ]
  }
}

Example - Find & Replace:

{
  "config": {
    "tableName": "products",
    "operation": "update",
    "conditions": [
      { "column": "description", "operator": "text_contains", "value": "old-domain.com" }
    ],
    "fields": [
      { "column": "description", "mode": "find_replace", "find": "old-domain.com", "replace": "new-domain.com" }
    ],
    "limit": { "type": "all" }
  }
}

API Request

HTTP Request

Make HTTP requests to external APIs.

Configuration:

FieldTypeDescription
methodselectGET, POST, PUT, PATCH, DELETE
urlexpressionRequest URL
headerskeyvalueRequest headers
queryParamskeyvalueURL query parameters
bodykeyvalueRequest body (for POST/PUT/PATCH)
timeoutnumberTimeout in seconds (default: 30)

Output:

  • {{ $node.api_request-1.status }} - HTTP status code
  • {{ $node.api_request-1.data }} - Response body
  • {{ $node.api_request-1.headers }} - Response headers

Example - GET Request:

{
  "id": "api_request-1",
  "type": "api_request",
  "label": "Get User",
  "config": {
    "method": "GET",
    "url": "https://api.example.com/users/{{ $input.userId }}"
  }
}

Example - POST Request:

{
  "id": "api_request-1",
  "type": "api_request",
  "label": "Create Order",
  "config": {
    "method": "POST",
    "url": "https://api.example.com/orders",
    "headers": [
      { "key": "Content-Type", "value": "application/json" },
      { "key": "Authorization", "value": "Bearer {{ $env.API_KEY }}" }
    ],
    "body": [
      { "key": "customer_id", "value": "{{ $input.customerId }}" },
      { "key": "amount", "value": "{{ $input.amount }}" }
    ]
  }
}

Expression Syntax

Reference data from previous nodes:

PatternDescription
{{ $input.fieldName }}Input data from trigger
{{ $node.fetch_data-1.data }}Output from fetch_data node
{{ $node.api_request-1.data.user.name }}Nested API response data
{{ $env.API_KEY }}Environment variable/secret
{{ $now }}Current ISO timestamp

See Also: