Skip to main content
A Data Feed turns a raw HTTP response into a table of records that Studio apps can query. The mapping is controlled by three sections inside the Data Request: Data Path, ID Path, and Capture Variables.

Data Path

The JSON path to the array of records inside the response. For an API that returns this:
The Data Path would be items — that’s the array Composer should iterate. For an API that returns a raw array at the root:
The Data Path is $ (the JSON root). Composer infers the Data Path on first run and lets you correct it if needed.

ID Path

The JSON path to a unique identifier on each record. Used to deduplicate across runs and as the join key for Detail Requests. For records like:
The ID Path is typically id. If you need to drill into an object, use dotted notation: owner.id. If a record has no natural primary key (rare), Composer can synthesise one — e.g. by hashing a stable subset of fields. Tell it the rule in plain English.

Capture Variables

Pull values out of the primary response so the Detail Request can use them. By default, Composer captures the ID (so Detail Request URLs can use {{id}}). You can capture additional fields — useful when:
  • Detail Request needs a non-ID identifier (e.g. a slug or external_ref)
  • Detail Request needs context the API doesn’t echo back (e.g. the workspace ID from the list response)
The Capture Variables section is added via the + chips below the URL row in the Data Request:
Then in the Detail Request URL: https://api.example.com/items/{{slug}}/full.

Inferred schema

Composer reads the response and infers field types — strings, numbers, booleans, ISO-8601 dates, arrays, and nested objects. If a field is sometimes null it is marked nullable.

Refining the schema via Composer

If the inferred schema is wrong (e.g. a numeric ID was inferred as a string), tell Composer:
Composer adds a transformation step to the feed without affecting the source.

Schema in Studio

Inside a Studio app, ask Composer to list available fields:
It’ll print the schema as a table. Field names are stable across Feed runs as long as the source’s API contract doesn’t change.
Privacy: The Studio Composer only sees field names and types — never field values. See Security & Privacy.

Versioning when the source changes

When a source’s API contract changes (e.g. a vendor renames device_name to hostname):
  1. The next Feed run picks up the new field
  2. Existing Studio apps querying the old name will return empty for that field
  3. Composer can rename the field on the Feed side (hostname → device_name) so apps don’t break — ask it explicitly
The audit trail of schema changes is in Settings → Logs → Audit Log.