Skip to content
v0.3

App data projections

The 5 model(s) this image’s apps publish on the anonymous list face, and the NARROWINGS each one answers to. Editing this page by hand is undone by pnpm codegen and breaks CI.

A caller reads a model through:

GET /v1/ext-public/<extension>/<model>?store=<store_id>[&<field>=<value>][&projection=<name>]

Rules, and all three are the kernel’s rather than any app’s:

  • No projection = the full row, exactly as this face has always answered. Absence changes nothing for a caller that already exists.
  • An unknown projection is REFUSED (400 invalid), and the refusal lists the names the model does declare. It is never the full row in silence — a caller that asks for a narrowing has sized itself for one, and answering a typo with the complete payload is “it works” hiding an error.
  • A projection only NARROWS. Its columns are validated against the model’s own declared fields when the app is loaded and when it is installed, so it can never open a field the full face was not already serving.

The declaration is the app’s (dataModels[].publicList), never the kernel’s — a projection name is that app’s vocabulary. Growing one is a decision, taken in a manifest, and it shows up on this page.

Full row (no projection): store_ref, collection, revision, last_event_type, last_event_id, stamped_at — plus the platform’s own id and created_at.

Declares no projection: this model answers with the full row only.

Full row (no projection): product_id, paired_product_id, paired_handle, position — plus the platform’s own id and created_at.

Declares no projection: this model answers with the full row only.

Full row (no projection): items_per_block — plus the platform’s own id and created_at.

Declares no projection: this model answers with the full row only.

Full row (no projection): product_id, rating, body, author, verified — plus the platform’s own id and created_at.

?projection= Columns
summary product_id, rating

Full row (no projection): item_count_default, item_count_max — plus the platform’s own id and created_at.

Declares no projection: this model answers with the full row only.