GET /v1/entities/{entity}/{comboKey}
Streams every object of a given entity type whose comboKey starts with the supplied prefix, scoped to your subscription. This is the standard "list related records" query.
Path parameters
entity, uppercase entity code (e.g.PPL,ACTION,PATENT).comboKey, prefix of the hierarchical combo key. Everything afterSUB:{your-sub-id}drills down into related records. UseSUBalone to list every object of that entity in your tenant.
Query parameters
fields(optional), comma-separated list of field names to return. Other fields are omitted, which saves bandwidth when you only need a subset.
Response
Content-Type: application/json. The body is a JSON array streamed as records are read. Each item also carries a _type: "data" marker. Errors that occur mid-stream are emitted as objects with _type: "error".
Examples
List every person in your tenant:
curl -H "Authorization: Bearer $TOKEN" \
"https://rest.demandflow.com/v1/entities/PPL/SUB"
List all patent applications under a specific patent, returning only id, name, and status:
curl -H "Authorization: Bearer $TOKEN" \
"https://rest.demandflow.com/v1/entities/PATENTA/SUB:abc123%7CPAT:xyz789?fields=id,name,status"
(URL-encode | as %7C if your client does not do it automatically.)
Consuming the stream
For small responses, read the whole body and JSON.parse it as a normal array. For large result sets, parse the response as it arrives:
const r = await fetch(url, { headers: { Authorization: `Bearer ${token}` } });
const reader = r.body.getReader();
const decoder = new TextDecoder();
let buf = '';
while (true) {
const { value, done } = await reader.read();
if (done) break;
buf += decoder.decode(value, { stream: true });
// split on commas between items, or switch to POST /v1/query for true NDJSON
}