CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/api-design-patterns

REST API design patterns — response envelopes, pagination, filtering, status codes, and resource naming

87

1.78x
Quality

83%

Does it follow best practices?

Impact

98%

1.78x

Average score across 4 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-4/

{
  "context": "Tests whether the agent applies REST API design patterns when building a user management API: consistent response envelopes, pagination, filtering and sorting via query parameters, correct status codes, and PATCH semantics.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "success-response-envelope",
      "description": "Success responses wrap the resource or resource array in a { data: ... } envelope",
      "max_score": 10
    },
    {
      "name": "error-response-envelope",
      "description": "Error responses use a consistent { error: { code: '...', message: '...' } } structure",
      "max_score": 8
    },
    {
      "name": "list-endpoint-paginated",
      "description": "The list users endpoint supports pagination via query parameters rather than returning all users",
      "max_score": 10
    },
    {
      "name": "filtering-by-role-and-status",
      "description": "The list endpoint supports filtering by role and status via query parameters",
      "max_score": 10
    },
    {
      "name": "sorting-support",
      "description": "The list endpoint supports sorting by at least name and registration date via a query parameter with a consistent convention",
      "max_score": 8
    },
    {
      "name": "search-support",
      "description": "The list endpoint supports searching users by name or email partial match via a query parameter",
      "max_score": 6
    },
    {
      "name": "201-for-post",
      "description": "The POST create user endpoint returns 201 Created on success",
      "max_score": 8
    },
    {
      "name": "409-for-duplicate-email",
      "description": "Creating a user with a duplicate email returns 409 Conflict",
      "max_score": 6
    },
    {
      "name": "patch-partial-update",
      "description": "The update endpoint uses PATCH and only modifies fields present in the request body",
      "max_score": 10
    },
    {
      "name": "plural-noun-resource-path",
      "description": "Resource URLs use plural nouns (e.g., /users) with no verbs in the path",
      "max_score": 6
    },
    {
      "name": "deactivate-not-delete",
      "description": "Deactivation is implemented as a PATCH to update the status field (or a specific sub-resource), not as a DELETE that removes the record",
      "max_score": 6
    },
    {
      "name": "404-for-not-found",
      "description": "Requests for a non-existent user ID return 404 with an error envelope",
      "max_score": 6
    },
    {
      "name": "safe-defaults",
      "description": "List endpoint has safe defaults — default sort order, default page size, and clamped maximum limit",
      "max_score": 6
    }
  ]
}

evals

tile.json