Skip to main content
The Data Feed editor uses JSON paths in three places: Data Path, ID Path, and Capture Variables. Pagination patterns also use them. This page is a reference for the syntax with copy-paste examples.

Syntax recap

Dimension follows the JSONPath convention. The root prefix $ is optional in most fields — items and $.items are equivalent.

Data Path — pointing at the records array

The Data Path is the JSONPath to the array of records inside the response. Composer infers it on the first successful run but you can override.

Example responses + their Data Paths

Data Path: $ (root)
Data Path: items (or $.items)
Data Path: data.users.edges[*].node This last form is common in GraphQL responses.

ID Path — the unique key per record

The ID Path is the JSONPath to a unique identifier on each record. Used for deduplication across syncs and as the join key for Detail Requests. Given records from Response 1 / 2 above:
ID Path: id Given records like:
ID Path: user.id (or user.email if email is more stable) Given records with composite keys:
Composer can synthesise an ID:
Composer adds a transform step that produces <device>::<scan_date> and uses it as the ID Path.

Capture Variables — pulling values for Detail Requests

The Capture Variables section exposes JSONPath-extracted values for use in the Detail Request URL / body / params.

Example — slug-based detail endpoint

Primary endpoint returns:
You want the detail endpoint to use slug not id: Detail Request URL becomes:

Example — captured context

Primary endpoint returns a list with parent context:
You want every Detail Request to include the tenant in the URL: Detail Request URL:

Pagination JSONPaths

When Pagination is set to Next Page Link or Cursor, Composer asks for the JSONPath to the cursor/next URL inside the response.
Next URL JSONPath: meta.pagination.next_url When the field returns null or is missing, Dimension stops pagination automatically. GitHub puts the next URL in the Link HTTP response header, not the body:
Tell Composer:
Composer wires the parser without you needing JSONPath syntax.

Cursor — Slack style

Page Number & Size — Index based

For an API that takes ?page=N&size=100: Composer asks for the response’s record count field if you have one (e.g. total: 4521) to avoid an extra empty-response call.

Limit/Offset

For ?limit=100&offset=200:

Worked examples — real API shapes

GitHub — repos endpoint

Detail Request to pull repo branches:

Slack — conversations.list

Microsoft Graph — users

Notice the @odata.nextLink key — JSONPath escapes the @ automatically.

Debugging tips

  • The Test panel shows the response — use it before fiddling with JSONPaths. Inspect the raw payload to confirm structure.
  • Composer is good at JSONPath — paste a sample response into the chat and say “the records live under this path; configure it”.
  • Inherit auth from parent when the Detail Request is on the same API — avoids re-entering credentials.
  • Empty Data Path on a single-object response — when the response itself is the record (e.g. GET /me), set Data Path to $ and Composer treats the whole response as one record.

See also

Data Feeds overview

The full editor with Trigger / Data Request / Detail Request

Data Sources

HTTP methods and auth patterns

Schema & Fields

How Composer infers and refines the schema

Sync & Freshness

Schedules and troubleshooting