Appwrite
Open-source backend for web and mobile apps.
Overall score
35.5/100
appwrite-rest-v1
Measured Oct 5, 2026
Status
Ranked
Complete benchmark. `overall` is a weighted average of the applicable criteria, comparable to other surfaces in the same category and the same rubric version.
Coverage
86% of the rubric
Surfaces
evaluated.
We score a surface, not a product. One product often exposes several, and they are not worth the same.
appwrite-rest-v1restprimary
86% coverage
35.5/100
Criterion
by criterion.
Measured on appwrite-rest-v1, rubric v0.2.0. A criterion with no score is not counted as zero: it is excluded and the weights are renormalised.
Offload Valuejudged · weight 15 · Oct 5, 2026
35/100
This is a managed database CRUD API: create databases, collections, attributes, indexes, and documents. The agent must still decide schema, write queries, and interpret results — no domain logic, no proprietary data, no inference-replacing computation. The only genuine offloads beyond storage are durable persistence, indexed querying, transactions, and atomic increment/decrement operations, which do provide real server-side side effects and avoid read-modify-write reasoning, but remain generic infrastructure convenience rather than token-saving cognition.
- https://appwrite.io/docs/references/cloud/server-rest/databases
Increment document attribute patch /databases/{databaseId}/collections/{collectionId}/documents/{documentId}/{attribute}/increment
- https://appwrite.io/docs/references/cloud/server-rest/databases
Create document post /databases/{databaseId}/collections/{collectionId}/documents
- https://appwrite.io/docs/references/cloud/server-rest/databases
Create document post /databases/{databaseId}/collections/{collectionId}/documents
Interaction Costmeasured · weight 15 · Oct 5, 2026
17/100
Median over 2 successful run(s): 41322 tokens, 7.5 calls. Ratio to the best in "backend-database" (4 surfaces measured, v0.2 scale). Cold, without documentation: 1/1 succeeded.
Error Recoverabilityprobed · weight 15 · Oct 5, 2026
39/100
unknown_endpoint → HTTP 404, clarity 55/100 (field named: yes, allowed values: no, RFC 9457: no) · wrong_type → HTTP 400, clarity 50/100 (field named: no, allowed values: yes, RFC 9457: no) · hallucinated_enum → HTTP 400, clarity 50/100 (field named: no, allowed values: yes, RFC 9457: no) · unknown_field → HTTP 200, clarity 0/100 (field named: no, allowed values: no, RFC 9457: no)
- https://fra.cloud.appwrite.io/v1/databases
HTTP 401: {"message":"User (role: guests) missing scopes ([\"databases.read\"])","code":401,"type":"general_unauthorized_scope","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases/nonexistent_resource_xyz
HTTP 404: {"message":"Database with the requested ID 'nonexistent_resource_xyz' could not be found.","code":404,"type":"database_not_found","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases?queries%5B%5D=not_a_query
HTTP 400: {"message":"Invalid `queries` param: Invalid query: Invalid query: Syntax error","code":400,"type":"general_argument_invalid","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases?queries%5B%5D=orderAsc(%22nonexistent_field%22)
HTTP 400: {"message":"Invalid `queries` param: Invalid query: Invalid query: Syntax error","code":400,"type":"general_argument_invalid","version":"2.3.0"}
Doc Legibilitymeasured · weight 12 · Oct 5, 2026
17/100
text/markup ratio 1.7% (weight 30) · rendering without JavaScript undetermined (excluded from the calculation) (weight 25) · machine-readable spec: none found (weight 25) · llms.txt: https://appwrite.io/llms.txt (weight 10) · 0 runnable example(s) (weight 10). Weighted average over 75 points of available sub-criteria.
Auth Frictionmeasured · weight 10 · Oct 5, 2026
78/100
Dedicated X-Appwrite-Key header, verified by a successful call. 1 mandatory header(s) besides the key: an agent holding only the secret fails, and nothing in the response tells it why.
- https://fra.cloud.appwrite.io/v1/databases
HTTP 401: {"message":"User (role: guests) missing scopes ([\"databases.read\"])","code":401,"type":"general_unauthorized_scope","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases/nonexistent_resource_xyz
HTTP 404: {"message":"Database with the requested ID 'nonexistent_resource_xyz' could not be found.","code":404,"type":"database_not_found","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases?queries%5B%5D=not_a_query
HTTP 400: {"message":"Invalid `queries` param: Invalid query: Invalid query: Syntax error","code":400,"type":"general_argument_invalid","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases?queries%5B%5D=orderAsc(%22nonexistent_field%22)
HTTP 400: {"message":"Invalid `queries` param: Invalid query: Invalid query: Syntax error","code":400,"type":"general_argument_invalid","version":"2.3.0"}
Safety & Reversibilityprobed · weight 10
—/100
If I retry after a timeout, do I charge the customer twice?
Payload Efficiencyprobed · weight 8 · Oct 5, 2026
5/100
No discoverable field selection (tested fields, select, _fields, expand, properties): the agent swallows the whole resource. (weight 35) · No cursor pagination marker in the response. (weight 20) · Nested envelope or non-list shape. (weight 10) · No ETag. (Compression is not measurable: the runtime decompresses it and strips the header.) (weight 10). Weighted average over 75 points of measured sub-criteria.
- https://fra.cloud.appwrite.io/v1/databases
HTTP 401: {"message":"User (role: guests) missing scopes ([\"databases.read\"])","code":401,"type":"general_unauthorized_scope","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases/nonexistent_resource_xyz
HTTP 404: {"message":"Database with the requested ID 'nonexistent_resource_xyz' could not be found.","code":404,"type":"database_not_found","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases?queries%5B%5D=not_a_query
HTTP 400: {"message":"Invalid `queries` param: Invalid query: Invalid query: Syntax error","code":400,"type":"general_argument_invalid","version":"2.3.0"}
- https://fra.cloud.appwrite.io/v1/databases?queries%5B%5D=orderAsc(%22nonexistent_field%22)
HTTP 400: {"message":"Invalid `queries` param: Invalid query: Invalid query: Syntax error","code":400,"type":"general_argument_invalid","version":"2.3.0"}
Task Atomicitymeasured · weight 6 · Oct 5, 2026
27/100
Median over 2 successful run(s): 41322 tokens, 7.5 calls. Ratio to the best in "backend-database" (4 surfaces measured, v0.2 scale). Cold, without documentation: 1/1 succeeded.
Prior Knowledge Coveragemeasured · weight 5 · Oct 5, 2026
100/100
Median over 2 successful run(s): 41322 tokens, 7.5 calls. Ratio to the best in "backend-database" (4 surfaces measured, v0.2 scale). Cold, without documentation: 1/1 succeeded.
Async Compatibilityprobed · weight 2
—/100
If the operation is asynchronous, can I get the result without hosting a web server?
Tool-Native (MCP)binary · weight 2
—/100
Does the vendor publish an official, maintained MCP server?
Runs, verified
never on the agent’s word.
Every row is a real attempt at the category’s canonical task. Success is verified by reading the created resource back.
| Task | Tokens | Calls | Errors | Docs | Result |
|---|---|---|---|---|---|
| store-and-query-record | 36,255 | 7 | 3 | without | verified |
| store-and-query-record | 46,647 | 8 | 2 | with | verified |
| store-and-query-record | 35,997 | 7 | 2 | with | verified |
The same entry,
without the markup.
You publish this API and dispute a score? The methodology is public and every score above points to the evidence that produced it.