Data Path
The JSON path to the array of records inside the response. For an API that returns this:items — that’s the array Composer should iterate.
For an API that returns a raw array at the root:
$ (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: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
slugorexternal_ref) - Detail Request needs context the API doesn’t echo back (e.g. the workspace ID from the list response)
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 sometimesnull 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:Schema in Studio
Inside a Studio app, ask Composer to list available fields: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 renamesdevice_name to hostname):
- The next Feed run picks up the new field
- Existing Studio apps querying the old name will return empty for that field
- Composer can rename the field on the Feed side (
hostname→device_name) so apps don’t break — ask it explicitly