Who this is for. Anyone writing a client that filters, selects fields, or writes content. Name fields and values exactly, and build in the checks below to confirm each request did what you asked.
Reads
| To filter or read | Send |
|---|---|
| A versioned record's name (pages, posts, books, FAQ, custom entity records) | activeRevision.name, not name; check the model |
Greater than or equal, less than or equal, or a suffix form such as created_gte, name_contains | >, <, % |
A computed field such as fullPath | A stored field instead; check the model |
| A date | YYYY-MM-DD HH:MM:SS |
A long selector on a GET | The raw selector with X-Body-Has-Parameters: Query string or request body |
Two fields in properties | Separated by a comma, not a space; fail tests on a value starting Error: Getter |
| A custom entity list | Its plural identifier |
| Any list | Always send a limit |
| What the public sees | Check it signed out, not with admin credentials |
Order by stored fields only, and keep the outer braces on a selector sent in a GET body.
Writes
| To | Send |
|---|---|
| Serialise a write body | JSON from a library, and read the record back to confirm the write took |
| Make a revision live | "activeRevision": true inside patchRevision or revisions, not at the top level, where it takes a revision id instead: Making a revision live |
| Patch after a rollback, or an edit saved but not made live | Always send originRevision |
| Write only some of a layout's areas | patchRevision, not revisions, which leaves the rest empty in the new revision |
| Replace one collection element | areaCollectionElement(area, n), not setAreaCollectionElement(area, n) |
| Edit a collection after an earlier removal | rewrite it from a fresh read first |
| Change a layout area on a custom entity record | Inside patchRevision, never at the top level |
| A multiselect area | A JSON-encoded string, not an array |
| A date area | Validate the format in the client before sending it |
| Fire a job from an entity event | An event the record type actually fires: CreateRecord, UpdateRecord, from the reference |
Checks worth building in
- After a filtered read, compare
totalCountwith what the filter should allow. - After a write that matters, read the record back with a selector and compare the fields you changed. For versioned content, compare
activeRevision.idbefore and after. - In tests, fail on any string value beginning
Error: Getter for property. - For anything published, verify as a visitor, signed out, not with the credentials that wrote it.