A fixed set of actions per model
Every model gets create, read, replace, update, delete and search – for audited models optionally also history and roll back, for file models upload and download. You switch on which of these exist per model in the Hub. Structure, rules and permissions are the same across all models, and a machine-readable API description shows what is possible on each model.
Responses and errors have fixed shapes. Errors carry a fixed key instead of free text. The message in the person’s language is produced by the frontend.
Two special forms complete the set: a singleton – such as a person’s settings – needs no identifier, because the server knows which object is meant. And for an abstract model a single search finds objects of all sub-types, sorted and paged together.
Exactly the fields you need
Every reading request states which fields should come back – individually or with a shorthand for all simple fields. Related objects are expanded deliberately, level by level, and lists inside them can be filtered and sorted. The selection already shapes the database query: what is not requested is not read, and nothing is loaded behind the scenes.
At every level the permissions of the model the request reaches into apply.
Search, filter, page
You query lists with a structured filter:
- conditions in AND and OR groups nested to any depth
- comparisons for equality, search patterns, value lists, empty fields, date and time limits, and membership in lists
- filtering and sorting across relationships, for example by the city of a contact’s company
- several sort criteria and pages with the total number of hits
Reliable reads and writes
A filter that Data Management cannot apply is never dropped silently – the request is rejected and names the field concerned. Your conditions are also always combined with the security filters: you can narrow results, never widen them.
Replace describes the complete target state, update only the fields you name. Every request is one transaction: it is saved before the response goes back, or not at all. A success response therefore means “saved”, and it shows the state that is now actually in the database.
What this means day to day
Know one model’s API and you know them all.
- Frontends, integrations and AI tools work against the same predictable structure.
- Lean responses, because only what was requested is read.
- Errors can be handled precisely in the client instead of interpreting text.