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 readSend
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 fullPathA stored field instead; check the model
A dateYYYY-MM-DD HH:MM:SS
A long selector on a GETThe raw selector with X-Body-Has-Parameters: Query string or request body
Two fields in propertiesSeparated by a comma, not a space; fail tests on a value starting Error: Getter
A custom entity listIts plural identifier
Any listAlways send a limit
What the public seesCheck 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

ToSend
Serialise a write bodyJSON 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 liveAlways send originRevision
Write only some of a layout's areaspatchRevision, not revisions, which leaves the rest empty in the new revision
Replace one collection elementareaCollectionElement(area, n), not setAreaCollectionElement(area, n)
Edit a collection after an earlier removalrewrite it from a fresh read first
Change a layout area on a custom entity recordInside patchRevision, never at the top level
A multiselect areaA JSON-encoded string, not an array
A date areaValidate the format in the client before sending it
Fire a job from an entity eventAn event the record type actually fires: CreateRecord, UpdateRecord, from the reference

Checks worth building in

  • After a filtered read, compare totalCount with 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.id before 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.