Nodes and values on the wire
A node is one JSON object: its properties by CodeName, and system fields with a $ prefix that no C#
name can have.
{
"$id": "…", "$type": "IArticle", "$displayName": "Five trails worth the climb",
"$createdUtc": "2026-10-01T08:00:00.0000000Z", "$changedUtc": "2026-10-02T09:15:00.0000000Z",
"$revisionId": null, "$revisionType": "Published", "$culture": null, "$collection": null,
"$status": { "state": "published", "draft": false, "releaseUtc": null, "expireUtc": null },
"Name": "Five trails worth the climb",
"Body": "<p>Start <a href=\"/trails/north-ridge\">at the north ridge</a>.</p>",
"Picture": { "name": "trails.jpg", "size": 183402, "contentType": "image/jpeg", "url": "/…", "thumbnailUrl": "/…", … },
"Parent": { "$id": "…", "$type": "INewsList", "$displayName": "News", … }
}$revisionId,$revisionTypeand$culturesay which version this is. The id is null for a node without revisions, and the culture null for none.$collectionis the node's site, or null.$statussays whether readers see the node now:published,scheduled,expired,draftorunpublished, anddraft: truewhen a draft exists beside the published version.- A relation end is there only when the query included it.
- An embedded property is the list of its inner nodes, each
{ $id, $type, <CodeName>: value }, and is written whole. Send an inner node's$idto keep it: a value left out keeps what that inner node had, and null resets it. - Dates are ISO 8601 text in UTC, a
TimeSpanits invariant text (1.02:03:04), a coordinate{ latitude, longitude }, and an enum its number. An enum is written as its number or its name. - HTML comes back with the store's links as URLs, unless the context has
links: "stored". - A password reads as
{ isSet, storage, retrievable }, never the password. Write{ "set": "…", "storage": "Hashed" }to set one and{ "clear": true }to remove it; any other value leaves it as it is. - Values sent in are parsed strictly by the property's type. A value that does not fit is refused (400), never stored as the type's default.
A file is { name, size, contentType, width, height, hash, url, thumbnailUrl, previewUrl, converting }.
The store's file conversions make the two pictures: of a picture, a square thumbnail and a larger
preview; of a video, frames. They are null for an SVG and for a file no converter makes a picture of.
A video's frames are made in the background. While they are, converting says how far along they
are ({ progress, message }), so ask file-info again until it is null.
A query's answer has a kind, by what the query ends in:
kind |
For | Holds |
|---|---|---|
nodes |
nodes | items, totalCount, count, pageIndex, pageSize, isLastPage, durationMs |
values |
SelectId |
items, paged like nodes |
objects |
Select |
items, paged like nodes |
search |
a ranked search | hits, each { node, sample, score }, paged like nodes |
facets |
facets | items and facets, paged like nodes |
pivot |
Pivot, GroupBy |
result |
path |
ShortestPath |
found, ids, items |
value |
Count, Sum |
value |