What happens if…
Records, filters, limits and deletes: each case, what Gemmein does and what you do.
| If… | What happens | What you do |
|---|---|---|
| The collection doesn't exist | 404 unknown_collection | Ask your human to create it in the dashboard, with the name and the safety rule |
Someone reads another person's records in a private collection | They see none: list() returns only their own and get() answers 404 | Nothing |
Someone edits or deletes a record they didn't write (shared, community) | 404, the same answer as a record that doesn't exist | Nothing |
A filter is used on a private collection | It narrows the person's own records; it never reaches anyone else's | Nothing |
A list asks count: true and more than 10,000 match | totalAtLeast: 10000, no total | Show "10,000+" |
author is used on a private collection | 403 author_not_visible | Drop it; a private list is already the person's own |
author names a person with no records | An empty page, and total: 0 when counted | Nothing |
| A person publishes in a collection whose posts wait for approval | 403 moderation_required; the post stays a draft | Save without published: true and show the author a "waiting for approval" state |
| An author edits an approved post there | It is saved and waits for approval again; Collections counts it as waiting | Nothing |
"publishing": "owner approves" is set on a rule other than community, any "publishing" is set on public_read, or the value is misspelled | Refused by gemmein dev and before gemmein sync reaches the cloud (invalid_publishing); nothing is created or changed | Fix the file |
| The file and the cloud disagree on an existing collection's Publishing | gemmein sync reports it and changes nothing | Your human sets Publishing on the collection's page in the dashboard's Data |
| Someone asks the AI to build a team or workspace feature (invite colleagues, a company account, records shared inside an organisation) | The guide tells the AI it isn't supported | Keep each person's data their own; never build it from a shared collection filtered in the app |
| Posts wait and nobody approves them | They stay drafts; Collections shows how many wait | Tell your human they approve posts in the dashboard |
Your code sends id, userId, role or another server-managed field | 403 forbidden, and the message names the field | Remove it; the server sets these itself |
| The data is not a plain object | 400 invalid_body | Send an object of fields |
| A record is deleted | It is kept 30 days and its files stay. After 30 days it is removed for good, with the files only it referenced. A file a buyer owns (a product's file, or one an access grant or payment names) and a file another record still references are kept | Nothing |
| Your human saves a record in the dashboard that changed since they opened it | Nothing is saved. The editor says the record changed since it was opened (409 changed_since_opened) | Nothing. They refresh and make the change again |
| A record's data is over 32 KB | 413 payload_too_large | Keep large content in a file with upload() |
| A list asks for more than 100 records, or for 0 | 400 invalid_limit; the limit is never cut down for you. With no limit you get 25 records, hasMore and a cursor | Page with cursor |
A where uses an unknown operator or too many fields | 400 invalid_filter, naming the field and the operator | Fix the filter |
| One IP (an IPv6 address counts by its /64) writes more than 60 times in a minute | 429 with resetAt. Reads allow 150 a minute | Wait until resetAt; batch your own loops |
A create times out and your code retries it without a key | The retry can make a second record | Give creates that must happen once a key: the retry then returns the first record |
| A secret key reads or writes outside its collections, or writes with a read-only scope | 403 scope_denied | Ask your human to widen the key in the dashboard |
| A collection that still has records is deleted from the CLI | 409 collection_not_empty | Delete its records first |
| Your human deletes a collection in the dashboard, typing its name | It goes; its records are kept 30 days, and the name can be used again for a new, empty collection | Nothing |
HTML reaches a community, addressed or direct record | 400 html_not_allowed | Store plain text |
| A live collection with fixed fields gets a field it doesn't have | 400 invalid_shape | Build the field in Development and promote it |
Was this page helpful?
Thanks for telling us.
Thanks for telling us.
Last updated