Skip to content

Mock API

The live reference demo for vitepress-openapi-docs, backed by a mock server at api.rodin.dev/mock. OpenAPI 3.1, 107 operations across 15 tags, 34 webhooks, bearer auth, callbacks, oneOf, rich examples: everything the plugin renders, rendered here.

Pick any operation from the sidebar and hit Try-It — the request goes to the real origin, CORS is open, you get real JSON back. The spec is fetched at build time so this page mirrors the live contract.

albums

GET/albums

List all albums

Paginated list of albums. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsAlbum

Response examples

200Paginated array of albums

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "title": "Abstract",
    "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
    "coverImage": "https://picsum.photos/seed/album1/600/400",
    "photoCount": 39,
    "isPublic": true,
    "createdAt": "2024-07-02T09:01:49.954Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/albums

Create album

Create a new album. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `albums.created` webhook.

ReturnsAlbum

AcceptsAlbumInput

Response examples

201Album created

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Abstract",
  "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "coverImage": "https://picsum.photos/seed/album1/600/400",
  "photoCount": 39,
  "isPublic": true,
  "createdAt": "2024-07-02T09:01:49.954Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/albums/{id}

Get album by ID

Retrieve a single album. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsAlbum

Response examples

200The album

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Abstract",
  "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "coverImage": "https://picsum.photos/seed/album1/600/400",
  "photoCount": 39,
  "isPublic": true,
  "createdAt": "2024-07-02T09:01:49.954Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/albums/{id}

Replace album

Full replacement. All mutable fields overwritten. Triggers `albums.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsAlbum

AcceptsAlbumInput

Response examples

200Album replaced

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Abstract",
  "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "coverImage": "https://picsum.photos/seed/album1/600/400",
  "photoCount": 39,
  "isPublic": true,
  "createdAt": "2024-07-02T09:01:49.954Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/albums/{id}

Partially update album

Partial update — only provided fields change. Triggers `albums.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsAlbum

AcceptsAlbumInput

Response examples

200Album updated

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Abstract",
  "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "coverImage": "https://picsum.photos/seed/album1/600/400",
  "photoCount": 39,
  "isPublic": true,
  "createdAt": "2024-07-02T09:01:49.954Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/albums/{id}

Delete album

Permanently remove a album. Returns deleted resource. Triggers `albums.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsAlbum

Response examples

200Deleted album

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Abstract",
  "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
  "coverImage": "https://picsum.photos/seed/album1/600/400",
  "photoCount": 39,
  "isPublic": true,
  "createdAt": "2024-07-02T09:01:49.954Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/albums/{id}/photos

List album's photos

Retrieve album's photos. Same filtering, sorting, and pagination as `/photos`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsPhoto

Response examples

200Array of photos

application/json example derived from schema

[
  {
    "id": 1,
    "albumId": 1,
    "title": "Photo 1",
    "url": "https://picsum.photos/seed/1/800/960",
    "thumbnailUrl": "https://picsum.photos/seed/1/150/150",
    "width": 800,
    "height": 960,
    "size": 4803273,
    "format": "jpeg",
    "createdAt": "2026-07-24T20:47:13.121Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

auth

GET/auth/basic-demo

HTTP Basic demo

Demonstrates HTTP Basic — intentionally present so API docs generators can render the Basic auth block. Any credentials accepted. Echoes the username back so you can confirm the header reached the server.

ReturnsBasicDemoResponse

Response examples

200Authenticated with Basic

application/json example derived from schema

{
  "authenticated": true,
  "scheme": "basic"
}
401401 — missing or expired Bearer token

application/json

{
  "error": {
    "status": 401,
    "message": "Authentication required"
  }
}

POST/auth/login

Log in

Authenticate with email/password. **Mock: any password works for any seeded email.** The demo account `demo@example.com` is always present and carries admin role — use it for docs Try-It. Token valid 1 hour.

ReturnsAuthResponse

AcceptsAuthCredentials

Response examples

200Logged in

application/json example derived from schema

{
  "user": {
    "id": 1,
    "firstName": "Demo",
    "lastName": "User",
    "email": "demo@example.com",
    "username": "demo",
    "avatar": "https://i.pravatar.cc/150?u=demo",
    "phone": "+1-555-000-0001",
    "address": {
      "street": "1 Demo Way",
      "city": "Austin",
      "state": "TX",
      "zipCode": "78701",
      "country": "US",
      "geo": {
        "lat": 30.2672,
        "lng": -97.7431
      }
    },
    "company": {
      "name": "Demo Corp",
      "catchPhrase": "Seeded for docs and testing."
    },
    "website": "https://example.com/demo",
    "role": "admin",
    "age": 30,
    "bio": "Seeded demo account. Log in with any password.",
    "isActive": true,
    "createdAt": "2024-01-01T00:00:00.000Z",
    "updatedAt": "2026-04-21T00:00:00.000Z"
  },
  "token": "string",
  "expiresAt": "2024-01-15T09:30:00Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
401401 — missing or expired Bearer token

application/json

{
  "error": {
    "status": 401,
    "message": "Authentication required"
  }
}

POST/auth/logout

Log out

Revoke the Bearer token.

Response examples

200Logged out

application/json example derived from schema

{
  "message": "Logged out"
}

GET/auth/me

Get current user

Returns profile for the provided Bearer token.

ReturnsUser

Response examples

200User profile

application/json example derived from schema

{
  "id": 1,
  "firstName": "Demo",
  "lastName": "User",
  "email": "demo@example.com",
  "username": "demo",
  "avatar": "https://i.pravatar.cc/150?u=demo",
  "phone": "+1-555-000-0001",
  "address": {
    "street": "1 Demo Way",
    "city": "Austin",
    "state": "TX",
    "zipCode": "78701",
    "country": "US",
    "geo": {
      "lat": 30.2672,
      "lng": -97.7431
    }
  },
  "company": {
    "name": "Demo Corp",
    "catchPhrase": "Seeded for docs and testing."
  },
  "website": "https://example.com/demo",
  "role": "admin",
  "age": 30,
  "bio": "Seeded demo account. Log in with any password.",
  "isActive": true,
  "createdAt": "2024-01-01T00:00:00.000Z",
  "updatedAt": "2026-04-21T00:00:00.000Z"
}
401401 — missing or expired Bearer token

application/json

{
  "error": {
    "status": 401,
    "message": "Authentication required"
  }
}

POST/auth/refresh

Refresh token

Exchange valid token for new one. Old token revoked.

ReturnsTokenResponse

Response examples

200New token

application/json example derived from schema

{
  "token": "string",
  "expiresAt": "2024-01-15T09:30:00Z"
}
401401 — missing or expired Bearer token

application/json

{
  "error": {
    "status": 401,
    "message": "Authentication required"
  }
}

POST/auth/register

Register new user

Create account and receive token. Returns 409 if email exists.

ReturnsAuthResponse

AcceptsAuthCredentials

Response examples

201Registered

application/json example derived from schema

{
  "user": {
    "id": 1,
    "firstName": "Demo",
    "lastName": "User",
    "email": "demo@example.com",
    "username": "demo",
    "avatar": "https://i.pravatar.cc/150?u=demo",
    "phone": "+1-555-000-0001",
    "address": {
      "street": "1 Demo Way",
      "city": "Austin",
      "state": "TX",
      "zipCode": "78701",
      "country": "US",
      "geo": {
        "lat": 30.2672,
        "lng": -97.7431
      }
    },
    "company": {
      "name": "Demo Corp",
      "catchPhrase": "Seeded for docs and testing."
    },
    "website": "https://example.com/demo",
    "role": "admin",
    "age": 30,
    "bio": "Seeded demo account. Log in with any password.",
    "isActive": true,
    "createdAt": "2024-01-01T00:00:00.000Z",
    "updatedAt": "2026-04-21T00:00:00.000Z"
  },
  "token": "string",
  "expiresAt": "2024-01-15T09:30:00Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
409409 — duplicate resource

application/json

{
  "error": {
    "status": 409,
    "message": "Email already registered"
  }
}

categories

GET/categories

List all categories

Paginated list of categories. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsCategory

Response examples

200Paginated array of categories

application/json example derived from schema

[
  {
    "id": 1,
    "name": "Electronics",
    "slug": "electronics",
    "description": "Gadgets, devices, and electronic accessories",
    "image": "https://picsum.photos/seed/cat1/300/200",
    "productCount": 5,
    "createdAt": "2022-01-06T04:19:58.076Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/categories

Create category

Create a new category. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `categories.created` webhook.

ReturnsCategory

AcceptsCategoryInput

Response examples

201Category created

application/json example derived from schema

{
  "id": 1,
  "name": "Electronics",
  "slug": "electronics",
  "description": "Gadgets, devices, and electronic accessories",
  "image": "https://picsum.photos/seed/cat1/300/200",
  "productCount": 5,
  "createdAt": "2022-01-06T04:19:58.076Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/categories/{id}

Get category by ID

Retrieve a single category. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsCategory

Response examples

200The category

application/json example derived from schema

{
  "id": 1,
  "name": "Electronics",
  "slug": "electronics",
  "description": "Gadgets, devices, and electronic accessories",
  "image": "https://picsum.photos/seed/cat1/300/200",
  "productCount": 5,
  "createdAt": "2022-01-06T04:19:58.076Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/categories/{id}

Replace category

Full replacement. All mutable fields overwritten. Triggers `categories.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsCategory

AcceptsCategoryInput

Response examples

200Category replaced

application/json example derived from schema

{
  "id": 1,
  "name": "Electronics",
  "slug": "electronics",
  "description": "Gadgets, devices, and electronic accessories",
  "image": "https://picsum.photos/seed/cat1/300/200",
  "productCount": 5,
  "createdAt": "2022-01-06T04:19:58.076Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/categories/{id}

Partially update category

Partial update — only provided fields change. Triggers `categories.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsCategory

AcceptsCategoryInput

Response examples

200Category updated

application/json example derived from schema

{
  "id": 1,
  "name": "Electronics",
  "slug": "electronics",
  "description": "Gadgets, devices, and electronic accessories",
  "image": "https://picsum.photos/seed/cat1/300/200",
  "productCount": 5,
  "createdAt": "2022-01-06T04:19:58.076Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/categories/{id}

Delete category

Permanently remove a category. Returns deleted resource. Triggers `categories.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsCategory

Response examples

200Deleted category

application/json example derived from schema

{
  "id": 1,
  "name": "Electronics",
  "slug": "electronics",
  "description": "Gadgets, devices, and electronic accessories",
  "image": "https://picsum.photos/seed/cat1/300/200",
  "productCount": 5,
  "createdAt": "2022-01-06T04:19:58.076Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/categories/{id}/products

List category's products

Retrieve category's products. Same filtering, sorting, and pagination as `/products`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsProduct

Response examples

200Array of products

application/json example derived from schema

[
  {
    "id": 1,
    "categoryId": 4,
    "name": "Desk Lamp",
    "description": "Ultra-fast connectivity with rock-solid reliability.",
    "price": 161.28,
    "originalPrice": 231.38,
    "currency": "USD",
    "stock": 257,
    "sku": "SKU-00001",
    "rating": 4.4,
    "reviewCount": 188,
    "image": "https://picsum.photos/seed/prod1/400/400",
    "images": [
      "https://picsum.photos/seed/prod1-0/400/400",
      "https://picsum.photos/seed/prod1-1/400/400",
      "https://picsum.photos/seed/prod1-2/400/400",
      "https://picsum.photos/seed/prod1-3/400/400",
      "https://picsum.photos/seed/prod1-4/400/400"
    ],
    "weight": 9.19,
    "dimensions": {
      "width": 33.4,
      "height": 40,
      "depth": 14.6
    },
    "isAvailable": true,
    "isFeatured": false,
    "tags": [
      "backend"
    ],
    "createdAt": "2024-05-30T01:37:26.059Z",
    "updatedAt": "2026-12-15T02:55:19.943Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

comments

GET/comments

List all comments

Paginated list of comments. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsComment

Response examples

200Paginated array of comments

application/json example derived from schema

[
  {
    "id": 1,
    "postId": 1,
    "userId": 1,
    "body": "How does this compare to the approach described in the official docs?",
    "likes": 16,
    "createdAt": "2023-04-28T06:59:47.906Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/comments

Create comment

Create a new comment. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `comments.created` webhook.

ReturnsComment

AcceptsCommentInput

Response examples

201Comment created

application/json example derived from schema

{
  "id": 1,
  "postId": 1,
  "userId": 1,
  "body": "How does this compare to the approach described in the official docs?",
  "likes": 16,
  "createdAt": "2023-04-28T06:59:47.906Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/comments/{id}

Get comment by ID

Retrieve a single comment. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsComment

Response examples

200The comment

application/json example derived from schema

{
  "id": 1,
  "postId": 1,
  "userId": 1,
  "body": "How does this compare to the approach described in the official docs?",
  "likes": 16,
  "createdAt": "2023-04-28T06:59:47.906Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/comments/{id}

Replace comment

Full replacement. All mutable fields overwritten. Triggers `comments.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsComment

AcceptsCommentInput

Response examples

200Comment replaced

application/json example derived from schema

{
  "id": 1,
  "postId": 1,
  "userId": 1,
  "body": "How does this compare to the approach described in the official docs?",
  "likes": 16,
  "createdAt": "2023-04-28T06:59:47.906Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/comments/{id}

Partially update comment

Partial update — only provided fields change. Triggers `comments.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsComment

AcceptsCommentInput

Response examples

200Comment updated

application/json example derived from schema

{
  "id": 1,
  "postId": 1,
  "userId": 1,
  "body": "How does this compare to the approach described in the official docs?",
  "likes": 16,
  "createdAt": "2023-04-28T06:59:47.906Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/comments/{id}

Delete comment

Permanently remove a comment. Returns deleted resource. Triggers `comments.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsComment

Response examples

200Deleted comment

application/json example derived from schema

{
  "id": 1,
  "postId": 1,
  "userId": 1,
  "body": "How does this compare to the approach described in the official docs?",
  "likes": 16,
  "createdAt": "2023-04-28T06:59:47.906Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

database

GET/admin/report

Admin aggregate report

Read-only snapshot of record counts, active webhooks, and token count. Accepts either Bearer or Basic — the auth block in docs should show both alternatives.

ReturnsAdminReport

Response examples

200Report payload

application/json example derived from schema

{
  "generatedAt": "2024-01-15T09:30:00Z",
  "scheme": "bearer",
  "totals": {}
}
401401 — missing or expired Bearer token

application/json

{
  "error": {
    "status": 401,
    "message": "Authentication required"
  }
}

GET/db/export

Export database

Full database as JSON. May be large.

Response examples

200Full dump

application/json example derived from schema

{}

POST/db/reset

Reset database

Regenerate all data, clear tokens/webhooks/deliveries.

POST/db/seed

Re-seed database

Regenerate with custom counts.

AcceptsSeedRequest

GET/db/stats

Database stats

ReturnsDbStats

Response examples

200Statistics

application/json example derived from schema

{
  "counts": {},
  "webhooks": 0,
  "deliveries": 0,
  "tokens": 0
}

GET/openapi.json

OpenAPI spec

notifications

GET/notifications

List all notifications

Paginated list of notifications. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsNotification

Response examples

200Paginated array of notifications

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "type": "error",
    "title": "Error notification",
    "message": "New follower on your profile.",
    "read": true,
    "link": null,
    "createdAt": "2026-03-23T15:22:15.402Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/notifications

Create notification

Create a new notification. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `notifications.created` webhook.

ReturnsNotification

AcceptsNotificationInput

Response examples

201Notification created

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "type": "error",
  "title": "Error notification",
  "message": "New follower on your profile.",
  "read": true,
  "link": null,
  "createdAt": "2026-03-23T15:22:15.402Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/notifications/{id}

Get notification by ID

Retrieve a single notification. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsNotification

Response examples

200The notification

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "type": "error",
  "title": "Error notification",
  "message": "New follower on your profile.",
  "read": true,
  "link": null,
  "createdAt": "2026-03-23T15:22:15.402Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/notifications/{id}

Replace notification

Full replacement. All mutable fields overwritten. Triggers `notifications.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsNotification

AcceptsNotificationInput

Response examples

200Notification replaced

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "type": "error",
  "title": "Error notification",
  "message": "New follower on your profile.",
  "read": true,
  "link": null,
  "createdAt": "2026-03-23T15:22:15.402Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/notifications/{id}

Partially update notification

Partial update — only provided fields change. Triggers `notifications.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsNotification

AcceptsNotificationInput

Response examples

200Notification updated

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "type": "error",
  "title": "Error notification",
  "message": "New follower on your profile.",
  "read": true,
  "link": null,
  "createdAt": "2026-03-23T15:22:15.402Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/notifications/{id}

Delete notification

Permanently remove a notification. Returns deleted resource. Triggers `notifications.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsNotification

Response examples

200Deleted notification

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "type": "error",
  "title": "Error notification",
  "message": "New follower on your profile.",
  "read": true,
  "link": null,
  "createdAt": "2026-03-23T15:22:15.402Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

orders

GET/orders

List all orders

Paginated list of orders. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsOrder

Response examples

200Paginated array of orders

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "items": [
      {
        "productId": 37,
        "quantity": 2,
        "price": 416.97
      },
      {
        "productId": 16,
        "quantity": 2,
        "price": 478.87
      }
    ],
    "subtotal": 1791.68,
    "tax": 143.33,
    "shipping": 0,
    "total": 1935.01,
    "currency": "USD",
    "status": "pending",
    "paymentMethod": "credit_card",
    "shippingAddress": {
      "street": "6620 Maple Dr",
      "city": "Fort Worth",
      "state": "MI",
      "zipCode": "16372",
      "country": "US"
    },
    "trackingNumber": "TRK442765071",
    "notes": null,
    "createdAt": "2026-04-19T12:16:46.226Z",
    "updatedAt": "2025-01-30T04:10:54.855Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/orders

Create order

Create a new order. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `orders.created` webhook.

ReturnsOrder

AcceptsOrderInput

Response examples

201Order created

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "items": [
    {
      "productId": 37,
      "quantity": 2,
      "price": 416.97
    },
    {
      "productId": 16,
      "quantity": 2,
      "price": 478.87
    }
  ],
  "subtotal": 1791.68,
  "tax": 143.33,
  "shipping": 0,
  "total": 1935.01,
  "currency": "USD",
  "status": "pending",
  "paymentMethod": "credit_card",
  "shippingAddress": {
    "street": "6620 Maple Dr",
    "city": "Fort Worth",
    "state": "MI",
    "zipCode": "16372",
    "country": "US"
  },
  "trackingNumber": "TRK442765071",
  "notes": null,
  "createdAt": "2026-04-19T12:16:46.226Z",
  "updatedAt": "2025-01-30T04:10:54.855Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/orders/{id}

Get order by ID

Retrieve a single order. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsOrder

Response examples

200The order

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "items": [
    {
      "productId": 37,
      "quantity": 2,
      "price": 416.97
    },
    {
      "productId": 16,
      "quantity": 2,
      "price": 478.87
    }
  ],
  "subtotal": 1791.68,
  "tax": 143.33,
  "shipping": 0,
  "total": 1935.01,
  "currency": "USD",
  "status": "pending",
  "paymentMethod": "credit_card",
  "shippingAddress": {
    "street": "6620 Maple Dr",
    "city": "Fort Worth",
    "state": "MI",
    "zipCode": "16372",
    "country": "US"
  },
  "trackingNumber": "TRK442765071",
  "notes": null,
  "createdAt": "2026-04-19T12:16:46.226Z",
  "updatedAt": "2025-01-30T04:10:54.855Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/orders/{id}

Replace order

Full replacement. All mutable fields overwritten. Triggers `orders.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsOrder

AcceptsOrderInput

Response examples

200Order replaced

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "items": [
    {
      "productId": 37,
      "quantity": 2,
      "price": 416.97
    },
    {
      "productId": 16,
      "quantity": 2,
      "price": 478.87
    }
  ],
  "subtotal": 1791.68,
  "tax": 143.33,
  "shipping": 0,
  "total": 1935.01,
  "currency": "USD",
  "status": "pending",
  "paymentMethod": "credit_card",
  "shippingAddress": {
    "street": "6620 Maple Dr",
    "city": "Fort Worth",
    "state": "MI",
    "zipCode": "16372",
    "country": "US"
  },
  "trackingNumber": "TRK442765071",
  "notes": null,
  "createdAt": "2026-04-19T12:16:46.226Z",
  "updatedAt": "2025-01-30T04:10:54.855Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/orders/{id}

Partially update order

Partial update — only provided fields change. Triggers `orders.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsOrder

AcceptsOrderInput

Response examples

200Order updated

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "items": [
    {
      "productId": 37,
      "quantity": 2,
      "price": 416.97
    },
    {
      "productId": 16,
      "quantity": 2,
      "price": 478.87
    }
  ],
  "subtotal": 1791.68,
  "tax": 143.33,
  "shipping": 0,
  "total": 1935.01,
  "currency": "USD",
  "status": "pending",
  "paymentMethod": "credit_card",
  "shippingAddress": {
    "street": "6620 Maple Dr",
    "city": "Fort Worth",
    "state": "MI",
    "zipCode": "16372",
    "country": "US"
  },
  "trackingNumber": "TRK442765071",
  "notes": null,
  "createdAt": "2026-04-19T12:16:46.226Z",
  "updatedAt": "2025-01-30T04:10:54.855Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/orders/{id}

Delete order

Permanently remove a order. Returns deleted resource. Triggers `orders.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsOrder

Response examples

200Deleted order

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "items": [
    {
      "productId": 37,
      "quantity": 2,
      "price": 416.97
    },
    {
      "productId": 16,
      "quantity": 2,
      "price": 478.87
    }
  ],
  "subtotal": 1791.68,
  "tax": 143.33,
  "shipping": 0,
  "total": 1935.01,
  "currency": "USD",
  "status": "pending",
  "paymentMethod": "credit_card",
  "shippingAddress": {
    "street": "6620 Maple Dr",
    "city": "Fort Worth",
    "state": "MI",
    "zipCode": "16372",
    "country": "US"
  },
  "trackingNumber": "TRK442765071",
  "notes": null,
  "createdAt": "2026-04-19T12:16:46.226Z",
  "updatedAt": "2025-01-30T04:10:54.855Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

photos

GET/photos

List all photos

Paginated list of photos. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsPhoto

Response examples

200Paginated array of photos

application/json example derived from schema

[
  {
    "id": 1,
    "albumId": 1,
    "title": "Photo 1",
    "url": "https://picsum.photos/seed/1/800/960",
    "thumbnailUrl": "https://picsum.photos/seed/1/150/150",
    "width": 800,
    "height": 960,
    "size": 4803273,
    "format": "jpeg",
    "createdAt": "2026-07-24T20:47:13.121Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/photos

Create photo

Create a new photo. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `photos.created` webhook.

ReturnsPhoto

AcceptsPhotoInput

Response examples

201Photo created

application/json example derived from schema

{
  "id": 1,
  "albumId": 1,
  "title": "Photo 1",
  "url": "https://picsum.photos/seed/1/800/960",
  "thumbnailUrl": "https://picsum.photos/seed/1/150/150",
  "width": 800,
  "height": 960,
  "size": 4803273,
  "format": "jpeg",
  "createdAt": "2026-07-24T20:47:13.121Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/photos/{id}

Get photo by ID

Retrieve a single photo. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsPhoto

Response examples

200The photo

application/json example derived from schema

{
  "id": 1,
  "albumId": 1,
  "title": "Photo 1",
  "url": "https://picsum.photos/seed/1/800/960",
  "thumbnailUrl": "https://picsum.photos/seed/1/150/150",
  "width": 800,
  "height": 960,
  "size": 4803273,
  "format": "jpeg",
  "createdAt": "2026-07-24T20:47:13.121Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/photos/{id}

Replace photo

Full replacement. All mutable fields overwritten. Triggers `photos.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsPhoto

AcceptsPhotoInput

Response examples

200Photo replaced

application/json example derived from schema

{
  "id": 1,
  "albumId": 1,
  "title": "Photo 1",
  "url": "https://picsum.photos/seed/1/800/960",
  "thumbnailUrl": "https://picsum.photos/seed/1/150/150",
  "width": 800,
  "height": 960,
  "size": 4803273,
  "format": "jpeg",
  "createdAt": "2026-07-24T20:47:13.121Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/photos/{id}

Partially update photo

Partial update — only provided fields change. Triggers `photos.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsPhoto

AcceptsPhotoInput

Response examples

200Photo updated

application/json example derived from schema

{
  "id": 1,
  "albumId": 1,
  "title": "Photo 1",
  "url": "https://picsum.photos/seed/1/800/960",
  "thumbnailUrl": "https://picsum.photos/seed/1/150/150",
  "width": 800,
  "height": 960,
  "size": 4803273,
  "format": "jpeg",
  "createdAt": "2026-07-24T20:47:13.121Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/photos/{id}

Delete photo

Permanently remove a photo. Returns deleted resource. Triggers `photos.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsPhoto

Response examples

200Deleted photo

application/json example derived from schema

{
  "id": 1,
  "albumId": 1,
  "title": "Photo 1",
  "url": "https://picsum.photos/seed/1/800/960",
  "thumbnailUrl": "https://picsum.photos/seed/1/150/150",
  "width": 800,
  "height": 960,
  "size": 4803273,
  "format": "jpeg",
  "createdAt": "2026-07-24T20:47:13.121Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

posts

GET/posts

List all posts

Paginated list of posts. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsPost

Response examples

200Paginated array of posts

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "title": "Performance Optimization Tips",
    "slug": "web-security-fundamentals",
    "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
    "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
    "tags": [
      "ux"
    ],
    "status": "published",
    "views": 16848,
    "likes": 28,
    "featured": false,
    "coverImage": "https://picsum.photos/seed/1/800/400",
    "readingTime": 7,
    "createdAt": "2026-01-21T19:36:04.116Z",
    "updatedAt": "2026-01-21T19:36:04.116Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/posts

Create post

Create a new post. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `posts.created` webhook.

ReturnsPost

AcceptsPostInput

Response examples

201Post created

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Performance Optimization Tips",
  "slug": "web-security-fundamentals",
  "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
  "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
  "tags": [
    "ux"
  ],
  "status": "published",
  "views": 16848,
  "likes": 28,
  "featured": false,
  "coverImage": "https://picsum.photos/seed/1/800/400",
  "readingTime": 7,
  "createdAt": "2026-01-21T19:36:04.116Z",
  "updatedAt": "2026-01-21T19:36:04.116Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/posts/{id}

Get post by ID

Retrieve a single post. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsPost

Response examples

200The post

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Performance Optimization Tips",
  "slug": "web-security-fundamentals",
  "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
  "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
  "tags": [
    "ux"
  ],
  "status": "published",
  "views": 16848,
  "likes": 28,
  "featured": false,
  "coverImage": "https://picsum.photos/seed/1/800/400",
  "readingTime": 7,
  "createdAt": "2026-01-21T19:36:04.116Z",
  "updatedAt": "2026-01-21T19:36:04.116Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/posts/{id}deprecated

Replace post

Full replacement. All mutable fields overwritten. Triggers `posts.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsPost

AcceptsPostInput

Response examples

200Post replaced

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Performance Optimization Tips",
  "slug": "web-security-fundamentals",
  "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
  "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
  "tags": [
    "ux"
  ],
  "status": "published",
  "views": 16848,
  "likes": 28,
  "featured": false,
  "coverImage": "https://picsum.photos/seed/1/800/400",
  "readingTime": 7,
  "createdAt": "2026-01-21T19:36:04.116Z",
  "updatedAt": "2026-01-21T19:36:04.116Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/posts/{id}

Partially update post

Partial update — only provided fields change. Triggers `posts.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsPost

AcceptsPostInput

Response examples

200Post updated

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Performance Optimization Tips",
  "slug": "web-security-fundamentals",
  "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
  "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
  "tags": [
    "ux"
  ],
  "status": "published",
  "views": 16848,
  "likes": 28,
  "featured": false,
  "coverImage": "https://picsum.photos/seed/1/800/400",
  "readingTime": 7,
  "createdAt": "2026-01-21T19:36:04.116Z",
  "updatedAt": "2026-01-21T19:36:04.116Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/posts/{id}

Delete post

Permanently remove a post. Returns deleted resource. Triggers `posts.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsPost

Response examples

200Deleted post

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Performance Optimization Tips",
  "slug": "web-security-fundamentals",
  "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
  "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
  "tags": [
    "ux"
  ],
  "status": "published",
  "views": 16848,
  "likes": 28,
  "featured": false,
  "coverImage": "https://picsum.photos/seed/1/800/400",
  "readingTime": 7,
  "createdAt": "2026-01-21T19:36:04.116Z",
  "updatedAt": "2026-01-21T19:36:04.116Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/posts/{id}/comments

List post's comments

Retrieve post's comments. Same filtering, sorting, and pagination as `/comments`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsComment

Response examples

200Array of comments

application/json example derived from schema

[
  {
    "id": 1,
    "postId": 1,
    "userId": 1,
    "body": "How does this compare to the approach described in the official docs?",
    "likes": 16,
    "createdAt": "2023-04-28T06:59:47.906Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

products

GET/products

List all products

Paginated list of products. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsProduct

Response examples

200Paginated array of products

application/json example derived from schema

[
  {
    "id": 1,
    "categoryId": 4,
    "name": "Desk Lamp",
    "description": "Ultra-fast connectivity with rock-solid reliability.",
    "price": 161.28,
    "originalPrice": 231.38,
    "currency": "USD",
    "stock": 257,
    "sku": "SKU-00001",
    "rating": 4.4,
    "reviewCount": 188,
    "image": "https://picsum.photos/seed/prod1/400/400",
    "images": [
      "https://picsum.photos/seed/prod1-0/400/400",
      "https://picsum.photos/seed/prod1-1/400/400",
      "https://picsum.photos/seed/prod1-2/400/400",
      "https://picsum.photos/seed/prod1-3/400/400",
      "https://picsum.photos/seed/prod1-4/400/400"
    ],
    "weight": 9.19,
    "dimensions": {
      "width": 33.4,
      "height": 40,
      "depth": 14.6
    },
    "isAvailable": true,
    "isFeatured": false,
    "tags": [
      "backend"
    ],
    "createdAt": "2024-05-30T01:37:26.059Z",
    "updatedAt": "2026-12-15T02:55:19.943Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/products

Create product

Create a new product. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `products.created` webhook.

ReturnsProduct

AcceptsProductInput

Response examples

201Product created

application/json example derived from schema

{
  "id": 1,
  "categoryId": 4,
  "name": "Desk Lamp",
  "description": "Ultra-fast connectivity with rock-solid reliability.",
  "price": 161.28,
  "originalPrice": 231.38,
  "currency": "USD",
  "stock": 257,
  "sku": "SKU-00001",
  "rating": 4.4,
  "reviewCount": 188,
  "image": "https://picsum.photos/seed/prod1/400/400",
  "images": [
    "https://picsum.photos/seed/prod1-0/400/400",
    "https://picsum.photos/seed/prod1-1/400/400",
    "https://picsum.photos/seed/prod1-2/400/400",
    "https://picsum.photos/seed/prod1-3/400/400",
    "https://picsum.photos/seed/prod1-4/400/400"
  ],
  "weight": 9.19,
  "dimensions": {
    "width": 33.4,
    "height": 40,
    "depth": 14.6
  },
  "isAvailable": true,
  "isFeatured": false,
  "tags": [
    "backend"
  ],
  "createdAt": "2024-05-30T01:37:26.059Z",
  "updatedAt": "2026-12-15T02:55:19.943Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/products/{id}

Get product by ID

Retrieve a single product. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsProduct

Response examples

200The product

application/json example derived from schema

{
  "id": 1,
  "categoryId": 4,
  "name": "Desk Lamp",
  "description": "Ultra-fast connectivity with rock-solid reliability.",
  "price": 161.28,
  "originalPrice": 231.38,
  "currency": "USD",
  "stock": 257,
  "sku": "SKU-00001",
  "rating": 4.4,
  "reviewCount": 188,
  "image": "https://picsum.photos/seed/prod1/400/400",
  "images": [
    "https://picsum.photos/seed/prod1-0/400/400",
    "https://picsum.photos/seed/prod1-1/400/400",
    "https://picsum.photos/seed/prod1-2/400/400",
    "https://picsum.photos/seed/prod1-3/400/400",
    "https://picsum.photos/seed/prod1-4/400/400"
  ],
  "weight": 9.19,
  "dimensions": {
    "width": 33.4,
    "height": 40,
    "depth": 14.6
  },
  "isAvailable": true,
  "isFeatured": false,
  "tags": [
    "backend"
  ],
  "createdAt": "2024-05-30T01:37:26.059Z",
  "updatedAt": "2026-12-15T02:55:19.943Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/products/{id}

Replace product

Full replacement. All mutable fields overwritten. Triggers `products.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsProduct

AcceptsProductInput

Response examples

200Product replaced

application/json example derived from schema

{
  "id": 1,
  "categoryId": 4,
  "name": "Desk Lamp",
  "description": "Ultra-fast connectivity with rock-solid reliability.",
  "price": 161.28,
  "originalPrice": 231.38,
  "currency": "USD",
  "stock": 257,
  "sku": "SKU-00001",
  "rating": 4.4,
  "reviewCount": 188,
  "image": "https://picsum.photos/seed/prod1/400/400",
  "images": [
    "https://picsum.photos/seed/prod1-0/400/400",
    "https://picsum.photos/seed/prod1-1/400/400",
    "https://picsum.photos/seed/prod1-2/400/400",
    "https://picsum.photos/seed/prod1-3/400/400",
    "https://picsum.photos/seed/prod1-4/400/400"
  ],
  "weight": 9.19,
  "dimensions": {
    "width": 33.4,
    "height": 40,
    "depth": 14.6
  },
  "isAvailable": true,
  "isFeatured": false,
  "tags": [
    "backend"
  ],
  "createdAt": "2024-05-30T01:37:26.059Z",
  "updatedAt": "2026-12-15T02:55:19.943Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/products/{id}

Partially update product

Partial update — only provided fields change. Triggers `products.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsProduct

AcceptsProductInput

Response examples

200Product updated

application/json example derived from schema

{
  "id": 1,
  "categoryId": 4,
  "name": "Desk Lamp",
  "description": "Ultra-fast connectivity with rock-solid reliability.",
  "price": 161.28,
  "originalPrice": 231.38,
  "currency": "USD",
  "stock": 257,
  "sku": "SKU-00001",
  "rating": 4.4,
  "reviewCount": 188,
  "image": "https://picsum.photos/seed/prod1/400/400",
  "images": [
    "https://picsum.photos/seed/prod1-0/400/400",
    "https://picsum.photos/seed/prod1-1/400/400",
    "https://picsum.photos/seed/prod1-2/400/400",
    "https://picsum.photos/seed/prod1-3/400/400",
    "https://picsum.photos/seed/prod1-4/400/400"
  ],
  "weight": 9.19,
  "dimensions": {
    "width": 33.4,
    "height": 40,
    "depth": 14.6
  },
  "isAvailable": true,
  "isFeatured": false,
  "tags": [
    "backend"
  ],
  "createdAt": "2024-05-30T01:37:26.059Z",
  "updatedAt": "2026-12-15T02:55:19.943Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/products/{id}

Delete product

Permanently remove a product. Returns deleted resource. Triggers `products.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsProduct

Response examples

200Deleted product

application/json example derived from schema

{
  "id": 1,
  "categoryId": 4,
  "name": "Desk Lamp",
  "description": "Ultra-fast connectivity with rock-solid reliability.",
  "price": 161.28,
  "originalPrice": 231.38,
  "currency": "USD",
  "stock": 257,
  "sku": "SKU-00001",
  "rating": 4.4,
  "reviewCount": 188,
  "image": "https://picsum.photos/seed/prod1/400/400",
  "images": [
    "https://picsum.photos/seed/prod1-0/400/400",
    "https://picsum.photos/seed/prod1-1/400/400",
    "https://picsum.photos/seed/prod1-2/400/400",
    "https://picsum.photos/seed/prod1-3/400/400",
    "https://picsum.photos/seed/prod1-4/400/400"
  ],
  "weight": 9.19,
  "dimensions": {
    "width": 33.4,
    "height": 40,
    "depth": 14.6
  },
  "isAvailable": true,
  "isFeatured": false,
  "tags": [
    "backend"
  ],
  "createdAt": "2024-05-30T01:37:26.059Z",
  "updatedAt": "2026-12-15T02:55:19.943Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/products/{id}/reviews

List product's reviews

Retrieve product's reviews. Same filtering, sorting, and pagination as `/reviews`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsReview

Response examples

200Array of reviews

application/json example derived from schema

[
  {
    "id": 1,
    "productId": 1,
    "userId": 1,
    "rating": 4,
    "title": "Works as advertised",
    "body": "Great article! Really helped me understand the concept better.",
    "isVerified": true,
    "helpful": 1,
    "createdAt": "2025-08-29T18:25:55.906Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

reviews

GET/reviews

List all reviews

Paginated list of reviews. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsReview

Response examples

200Paginated array of reviews

application/json example derived from schema

[
  {
    "id": 1,
    "productId": 1,
    "userId": 1,
    "rating": 4,
    "title": "Works as advertised",
    "body": "Great article! Really helped me understand the concept better.",
    "isVerified": true,
    "helpful": 1,
    "createdAt": "2025-08-29T18:25:55.906Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/reviews

Create review

Create a new review. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `reviews.created` webhook.

ReturnsReview

AcceptsReviewInput

Response examples

201Review created

application/json example derived from schema

{
  "id": 1,
  "productId": 1,
  "userId": 1,
  "rating": 4,
  "title": "Works as advertised",
  "body": "Great article! Really helped me understand the concept better.",
  "isVerified": true,
  "helpful": 1,
  "createdAt": "2025-08-29T18:25:55.906Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/reviews/{id}

Get review by ID

Retrieve a single review. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsReview

Response examples

200The review

application/json example derived from schema

{
  "id": 1,
  "productId": 1,
  "userId": 1,
  "rating": 4,
  "title": "Works as advertised",
  "body": "Great article! Really helped me understand the concept better.",
  "isVerified": true,
  "helpful": 1,
  "createdAt": "2025-08-29T18:25:55.906Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/reviews/{id}

Replace review

Full replacement. All mutable fields overwritten. Triggers `reviews.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsReview

AcceptsReviewInput

Response examples

200Review replaced

application/json example derived from schema

{
  "id": 1,
  "productId": 1,
  "userId": 1,
  "rating": 4,
  "title": "Works as advertised",
  "body": "Great article! Really helped me understand the concept better.",
  "isVerified": true,
  "helpful": 1,
  "createdAt": "2025-08-29T18:25:55.906Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/reviews/{id}

Partially update review

Partial update — only provided fields change. Triggers `reviews.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsReview

AcceptsReviewInput

Response examples

200Review updated

application/json example derived from schema

{
  "id": 1,
  "productId": 1,
  "userId": 1,
  "rating": 4,
  "title": "Works as advertised",
  "body": "Great article! Really helped me understand the concept better.",
  "isVerified": true,
  "helpful": 1,
  "createdAt": "2025-08-29T18:25:55.906Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/reviews/{id}

Delete review

Permanently remove a review. Returns deleted resource. Triggers `reviews.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsReview

Response examples

200Deleted review

application/json example derived from schema

{
  "id": 1,
  "productId": 1,
  "userId": 1,
  "rating": 4,
  "title": "Works as advertised",
  "body": "Great article! Really helped me understand the concept better.",
  "isVerified": true,
  "helpful": 1,
  "createdAt": "2025-08-29T18:25:55.906Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

todos

GET/todos

List all todos

Paginated list of todos. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsTodo

Response examples

200Paginated array of todos

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "title": "Configure monitoring",
    "completed": true,
    "priority": "low",
    "dueDate": null,
    "tags": [],
    "createdAt": "2024-01-25T00:38:32.919Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/todos

Create todo

Create a new todo. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `todos.created` webhook.

ReturnsTodo

AcceptsTodoInput

Response examples

201Todo created

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Configure monitoring",
  "completed": true,
  "priority": "low",
  "dueDate": null,
  "tags": [],
  "createdAt": "2024-01-25T00:38:32.919Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/todos/{id}

Get todo by ID

Retrieve a single todo. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsTodo

Response examples

200The todo

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Configure monitoring",
  "completed": true,
  "priority": "low",
  "dueDate": null,
  "tags": [],
  "createdAt": "2024-01-25T00:38:32.919Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/todos/{id}

Replace todo

Full replacement. All mutable fields overwritten. Triggers `todos.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsTodo

AcceptsTodoInput

Response examples

200Todo replaced

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Configure monitoring",
  "completed": true,
  "priority": "low",
  "dueDate": null,
  "tags": [],
  "createdAt": "2024-01-25T00:38:32.919Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/todos/{id}

Partially update todo

Partial update — only provided fields change. Triggers `todos.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsTodo

AcceptsTodoInput

Response examples

200Todo updated

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Configure monitoring",
  "completed": true,
  "priority": "low",
  "dueDate": null,
  "tags": [],
  "createdAt": "2024-01-25T00:38:32.919Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/todos/{id}

Delete todo

Permanently remove a todo. Returns deleted resource. Triggers `todos.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsTodo

Response examples

200Deleted todo

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Configure monitoring",
  "completed": true,
  "priority": "low",
  "dueDate": null,
  "tags": [],
  "createdAt": "2024-01-25T00:38:32.919Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

users

GET/users

List all users

Paginated list of users. Supports filtering, range operators (`_gte`, `_lte`, `_gt`, `_lt`, `_ne`, `_like`), full-text search, sorting, field selection, and relation expansion.

Parameters 12

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsUser

Response examples

200Paginated array of users

application/json example derived from schema

[
  {
    "id": 1,
    "firstName": "Demo",
    "lastName": "User",
    "email": "demo@example.com",
    "username": "demo",
    "avatar": "https://i.pravatar.cc/150?u=demo",
    "phone": "+1-555-000-0001",
    "address": {
      "street": "1 Demo Way",
      "city": "Austin",
      "state": "TX",
      "zipCode": "78701",
      "country": "US",
      "geo": {
        "lat": 30.2672,
        "lng": -97.7431
      }
    },
    "company": {
      "name": "Demo Corp",
      "catchPhrase": "Seeded for docs and testing."
    },
    "website": "https://example.com/demo",
    "role": "admin",
    "age": 30,
    "bio": "Seeded demo account. Log in with any password.",
    "isActive": true,
    "createdAt": "2024-01-01T00:00:00.000Z",
    "updatedAt": "2026-04-21T00:00:00.000Z"
  }
]
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

POST/users

Create user

Create a new user. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `users.created` webhook.

ReturnsUser

AcceptsUserInput

Response examples

201User created

application/json example derived from schema

{
  "id": 1,
  "firstName": "Demo",
  "lastName": "User",
  "email": "demo@example.com",
  "username": "demo",
  "avatar": "https://i.pravatar.cc/150?u=demo",
  "phone": "+1-555-000-0001",
  "address": {
    "street": "1 Demo Way",
    "city": "Austin",
    "state": "TX",
    "zipCode": "78701",
    "country": "US",
    "geo": {
      "lat": 30.2672,
      "lng": -97.7431
    }
  },
  "company": {
    "name": "Demo Corp",
    "catchPhrase": "Seeded for docs and testing."
  },
  "website": "https://example.com/demo",
  "role": "admin",
  "age": 30,
  "bio": "Seeded demo account. Log in with any password.",
  "isActive": true,
  "createdAt": "2024-01-01T00:00:00.000Z",
  "updatedAt": "2026-04-21T00:00:00.000Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

GET/users/{id}

Get user by ID

Retrieve a single user. Supports ETag conditional requests via `If-None-Match`.

Parameters 4

NameTypeDescription
_fieldsquery · stringSparse fieldset — comma-separated fields to return. Leave blank for the full object.
_expandquery · stringExpand parent relations inline. Applies only when the resource has a matching parent (e.g. `user` on posts).
_embedquery · stringEmbed child collections. Applies only when the resource has a matching child (e.g. `comments` on posts).

ReturnsUser

Response examples

200The user

application/json example derived from schema

{
  "id": 1,
  "firstName": "Demo",
  "lastName": "User",
  "email": "demo@example.com",
  "username": "demo",
  "avatar": "https://i.pravatar.cc/150?u=demo",
  "phone": "+1-555-000-0001",
  "address": {
    "street": "1 Demo Way",
    "city": "Austin",
    "state": "TX",
    "zipCode": "78701",
    "country": "US",
    "geo": {
      "lat": 30.2672,
      "lng": -97.7431
    }
  },
  "company": {
    "name": "Demo Corp",
    "catchPhrase": "Seeded for docs and testing."
  },
  "website": "https://example.com/demo",
  "role": "admin",
  "age": 30,
  "bio": "Seeded demo account. Log in with any password.",
  "isActive": true,
  "createdAt": "2024-01-01T00:00:00.000Z",
  "updatedAt": "2026-04-21T00:00:00.000Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PUT/users/{id}deprecated

Replace user

Full replacement. All mutable fields overwritten. Triggers `users.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsUser

AcceptsUserInput

Response examples

200User replaced

application/json example derived from schema

{
  "id": 1,
  "firstName": "Demo",
  "lastName": "User",
  "email": "demo@example.com",
  "username": "demo",
  "avatar": "https://i.pravatar.cc/150?u=demo",
  "phone": "+1-555-000-0001",
  "address": {
    "street": "1 Demo Way",
    "city": "Austin",
    "state": "TX",
    "zipCode": "78701",
    "country": "US",
    "geo": {
      "lat": 30.2672,
      "lng": -97.7431
    }
  },
  "company": {
    "name": "Demo Corp",
    "catchPhrase": "Seeded for docs and testing."
  },
  "website": "https://example.com/demo",
  "role": "admin",
  "age": 30,
  "bio": "Seeded demo account. Log in with any password.",
  "isActive": true,
  "createdAt": "2024-01-01T00:00:00.000Z",
  "updatedAt": "2026-04-21T00:00:00.000Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/users/{id}

Partially update user

Partial update — only provided fields change. Triggers `users.updated` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsUser

AcceptsUserInput

Response examples

200User updated

application/json example derived from schema

{
  "id": 1,
  "firstName": "Demo",
  "lastName": "User",
  "email": "demo@example.com",
  "username": "demo",
  "avatar": "https://i.pravatar.cc/150?u=demo",
  "phone": "+1-555-000-0001",
  "address": {
    "street": "1 Demo Way",
    "city": "Austin",
    "state": "TX",
    "zipCode": "78701",
    "country": "US",
    "geo": {
      "lat": 30.2672,
      "lng": -97.7431
    }
  },
  "company": {
    "name": "Demo Corp",
    "catchPhrase": "Seeded for docs and testing."
  },
  "website": "https://example.com/demo",
  "role": "admin",
  "age": 30,
  "bio": "Seeded demo account. Log in with any password.",
  "isActive": true,
  "createdAt": "2024-01-01T00:00:00.000Z",
  "updatedAt": "2026-04-21T00:00:00.000Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/users/{id}

Delete user

Permanently remove a user. Returns deleted resource. Triggers `users.deleted` webhook.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsUser

Response examples

200Deleted user

application/json example derived from schema

{
  "id": 1,
  "firstName": "Demo",
  "lastName": "User",
  "email": "demo@example.com",
  "username": "demo",
  "avatar": "https://i.pravatar.cc/150?u=demo",
  "phone": "+1-555-000-0001",
  "address": {
    "street": "1 Demo Way",
    "city": "Austin",
    "state": "TX",
    "zipCode": "78701",
    "country": "US",
    "geo": {
      "lat": 30.2672,
      "lng": -97.7431
    }
  },
  "company": {
    "name": "Demo Corp",
    "catchPhrase": "Seeded for docs and testing."
  },
  "website": "https://example.com/demo",
  "role": "admin",
  "age": 30,
  "bio": "Seeded demo account. Log in with any password.",
  "isActive": true,
  "createdAt": "2024-01-01T00:00:00.000Z",
  "updatedAt": "2026-04-21T00:00:00.000Z"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/users/{id}/albums

List user's albums

Retrieve user's albums. Same filtering, sorting, and pagination as `/albums`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsAlbum

Response examples

200Array of albums

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "title": "Abstract",
    "description": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
    "coverImage": "https://picsum.photos/seed/album1/600/400",
    "photoCount": 39,
    "isPublic": true,
    "createdAt": "2024-07-02T09:01:49.954Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/users/{id}/comments

List user's comments

Retrieve user's comments. Same filtering, sorting, and pagination as `/comments`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsComment

Response examples

200Array of comments

application/json example derived from schema

[
  {
    "id": 1,
    "postId": 1,
    "userId": 1,
    "body": "How does this compare to the approach described in the official docs?",
    "likes": 16,
    "createdAt": "2023-04-28T06:59:47.906Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/users/{id}/notifications

List user's notifications

Retrieve user's notifications. Same filtering, sorting, and pagination as `/notifications`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsNotification

Response examples

200Array of notifications

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "type": "error",
    "title": "Error notification",
    "message": "New follower on your profile.",
    "read": true,
    "link": null,
    "createdAt": "2026-03-23T15:22:15.402Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/users/{id}/orders

List user's orders

Retrieve user's orders. Same filtering, sorting, and pagination as `/orders`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsOrder

Response examples

200Array of orders

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "items": [
      {
        "productId": 37,
        "quantity": 2,
        "price": 416.97
      },
      {
        "productId": 16,
        "quantity": 2,
        "price": 478.87
      }
    ],
    "subtotal": 1791.68,
    "tax": 143.33,
    "shipping": 0,
    "total": 1935.01,
    "currency": "USD",
    "status": "pending",
    "paymentMethod": "credit_card",
    "shippingAddress": {
      "street": "6620 Maple Dr",
      "city": "Fort Worth",
      "state": "MI",
      "zipCode": "16372",
      "country": "US"
    },
    "trackingNumber": "TRK442765071",
    "notes": null,
    "createdAt": "2026-04-19T12:16:46.226Z",
    "updatedAt": "2025-01-30T04:10:54.855Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/users/{id}/posts

List user's posts

Retrieve user's posts. Same filtering, sorting, and pagination as `/posts`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsPost

Response examples

200Array of posts

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "title": "Performance Optimization Tips",
    "slug": "web-security-fundamentals",
    "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
    "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
    "tags": [
      "ux"
    ],
    "status": "published",
    "views": 16848,
    "likes": 28,
    "featured": false,
    "coverImage": "https://picsum.photos/seed/1/800/400",
    "readingTime": 7,
    "createdAt": "2026-01-21T19:36:04.116Z",
    "updatedAt": "2026-01-21T19:36:04.116Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/users/{id}/reviews

List user's reviews

Retrieve user's reviews. Same filtering, sorting, and pagination as `/reviews`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsReview

Response examples

200Array of reviews

application/json example derived from schema

[
  {
    "id": 1,
    "productId": 1,
    "userId": 1,
    "rating": 4,
    "title": "Works as advertised",
    "body": "Great article! Really helped me understand the concept better.",
    "isVerified": true,
    "helpful": 1,
    "createdAt": "2025-08-29T18:25:55.906Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/users/{id}/todos

List user's tasks

Retrieve user's tasks. Same filtering, sorting, and pagination as `/todos`.

Parameters 13

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
_startquery · integerSlice start index (alternative to page-based)

ReturnsTodo

Response examples

200Array of todos

application/json example derived from schema

[
  {
    "id": 1,
    "userId": 1,
    "title": "Configure monitoring",
    "completed": true,
    "priority": "low",
    "dueDate": null,
    "tags": [],
    "createdAt": "2024-01-25T00:38:32.919Z"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

utils

POST/batch

Batch operations

Up to 20 operations in one request, executed sequentially.

ReturnsBatchResult

AcceptsBatchOperation

Response examples

200Results

application/json example derived from schema

[
  {
    "status": 200,
    "body": {}
  }
]
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}

GET/delay/{ms}

Delayed response

Wait N ms before responding. Test timeouts and loading states.

Parameters 1

NameTypeDescription
msrequiredpath · integer

Response examples

200Delayed response

application/json example derived from schema

{
  "delayed": 0,
  "timestamp": "2024-01-15T09:30:00Z"
}

GET/echo

Echo request

Mirror request back as JSON.

ReturnsEchoResponse

Response examples

200Request mirror

application/json example derived from schema

{
  "method": "string",
  "url": "string",
  "headers": {},
  "query": {}
}

POST/echo

Echo POST

Mirror the request body, query, and headers back — handy when you want to see exactly what your client is sending.

ReturnsEchoResponse

Response examples

200Request mirror

application/json example derived from schema

{
  "method": "string",
  "url": "string",
  "headers": {},
  "query": {}
}

GET/health

Health check

ReturnsHealthCheck

Response examples

200Healthy

application/json example derived from schema

{
  "status": "ok",
  "uptime": 0,
  "timestamp": "2024-01-15T09:30:00Z"
}

GET/random/number

Random number(s)

Parameters 3

NameTypeDescription
minquery · integer
maxquery · integer
countquery · integer

GET/random/text

Lorem Ipsum

Parameters 1

NameTypeDescription
paragraphsquery · integer

GET/random/uuid

Random UUID(s)

Parameters 1

NameTypeDescription
countquery · integer

Response examples

200UUID(s)

application/json example derived from schema

{
  "uuid": "00000000-0000-4000-8000-000000000000"
}

GET/status/{code}

Return HTTP status code

Test error handling with any status code.

Parameters 1

NameTypeDescription
coderequiredpath · integer

GET/stream

SSE event stream

Server-Sent Events — 1 event/sec, max 50. Test real-time UI and EventSource.

Response examples

200SSE stream

text/event-stream example derived from schema

"string"

POST/upload

Mock file upload

Simulates upload — no actual file storage. Accepts raw binary, multipart form, or JSON with a filename hint. Returns a fake CDN URL so your frontend can wire the full happy path without real object storage.

ReturnsUploadResponse

Response examples

201Upload response

application/json example derived from schema

{
  "id": "00000000-0000-4000-8000-000000000000",
  "filename": "document.pdf",
  "url": "https://example.com"
}

webhooks

GET/webhooks

List webhooks

Parameters 2

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page

ReturnsWebhook

Response examples

200Webhook list

application/json example derived from schema

[
  {
    "id": 1,
    "url": "https://example.com/webhooks/receiver",
    "events": [
      "users.created",
      "orders.*"
    ]
  }
]

POST/webhooks

Register webhook

Subscribe URL to events. Patterns: `*` (all), `users.*`, `*.created`, `users.created`. Deliveries are simulated (logged, not sent).

ReturnsWebhook

AcceptsWebhookInput

Response examples

201Registered

application/json example derived from schema

{
  "id": 1,
  "url": "https://example.com/webhooks/receiver",
  "events": [
    "users.created",
    "orders.*"
  ]
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}

GET/webhooks/{id}

Get webhook

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsWebhook

Response examples

200Webhook

application/json example derived from schema

{
  "id": 1,
  "url": "https://example.com/webhooks/receiver",
  "events": [
    "users.created",
    "orders.*"
  ]
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

PATCH/webhooks/{id}

Update webhook

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsWebhook

AcceptsWebhookInput

Response examples

200Updated

application/json example derived from schema

{
  "id": 1,
  "url": "https://example.com/webhooks/receiver",
  "events": [
    "users.created",
    "orders.*"
  ]
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

DELETE/webhooks/{id}

Delete webhook

Remove webhook and all delivery records.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsWebhook

Response examples

200Deleted

application/json example derived from schema

{
  "id": 1,
  "url": "https://example.com/webhooks/receiver",
  "events": [
    "users.created",
    "orders.*"
  ]
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

GET/webhooks/{id}/deliveries

Delivery history

Delivery log for a webhook — event, payload, simulated response, timing.

Parameters 3

NameTypeDescription
_pagequery · integerPage number (1-based)
_limitquery · integerItems per page
idrequiredpath · integerResource identifier

ReturnsWebhookDelivery

Response examples

200Deliveries

application/json example derived from schema

[
  {
    "id": 1,
    "webhookId": 1,
    "event": "users.created",
    "resource": "users"
  }
]
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

POST/webhooks/{id}/test

Send test event

Trigger simulated `webhook.test` event.

Parameters 1

NameTypeDescription
idrequiredpath · integerResource identifier

ReturnsWebhookDelivery

Response examples

200Test delivery

application/json example derived from schema

{
  "id": 1,
  "webhookId": 1,
  "event": "users.created",
  "resource": "users"
}
404404 — resource not found

application/json

{
  "error": {
    "status": 404,
    "message": "users #999 not found"
  }
}

POSTalbums.createdwebhook

Album created

Fired when a album is created.

AcceptsWebhookPayload

POSTalbums.deletedwebhook

Album deleted

Fired when a album is deleted.

AcceptsWebhookPayload

POSTalbums.updatedwebhook

Album updated

Fired when a album is updated.

AcceptsWebhookPayload

POSTcategories.createdwebhook

Category created

Fired when a category is created.

AcceptsWebhookPayload

POSTcategories.deletedwebhook

Category deleted

Fired when a category is deleted.

AcceptsWebhookPayload

POSTcategories.updatedwebhook

Category updated

Fired when a category is updated.

AcceptsWebhookPayload

POSTcomments.createdwebhook

Comment created

Fired when a comment is created.

AcceptsWebhookPayload

POSTcomments.deletedwebhook

Comment deleted

Fired when a comment is deleted.

AcceptsWebhookPayload

POSTcomments.updatedwebhook

Comment updated

Fired when a comment is updated.

AcceptsWebhookPayload

POSTnotifications.createdwebhook

Notification created

Fired when a notification is created.

AcceptsWebhookPayload

POSTnotifications.deletedwebhook

Notification deleted

Fired when a notification is deleted.

AcceptsWebhookPayload

POSTnotifications.updatedwebhook

Notification updated

Fired when a notification is updated.

AcceptsWebhookPayload

POSTorders.createdwebhook

Order created

Fired when a order is created.

AcceptsWebhookPayload

POSTorders.deletedwebhook

Order deleted

Fired when a order is deleted.

AcceptsWebhookPayload

POSTorders.updatedwebhook

Order updated

Fired when a order is updated.

AcceptsWebhookPayload

POSTphotos.createdwebhook

Photo created

Fired when a photo is created.

AcceptsWebhookPayload

POSTphotos.deletedwebhook

Photo deleted

Fired when a photo is deleted.

AcceptsWebhookPayload

POSTphotos.updatedwebhook

Photo updated

Fired when a photo is updated.

AcceptsWebhookPayload

POSTposts.createdwebhook

Post created

Fired when a post is created.

AcceptsWebhookPayload

POSTposts.deletedwebhook

Post deleted

Fired when a post is deleted.

AcceptsWebhookPayload

POSTposts.updatedwebhook

Post updated

Fired when a post is updated.

AcceptsWebhookPayload

POSTproducts.createdwebhook

Product created

Fired when a product is created.

AcceptsWebhookPayload

POSTproducts.deletedwebhook

Product deleted

Fired when a product is deleted.

AcceptsWebhookPayload

POSTproducts.updatedwebhook

Product updated

Fired when a product is updated.

AcceptsWebhookPayload

POSTreviews.createdwebhook

Review created

Fired when a review is created.

AcceptsWebhookPayload

POSTreviews.deletedwebhook

Review deleted

Fired when a review is deleted.

AcceptsWebhookPayload

POSTreviews.updatedwebhook

Review updated

Fired when a review is updated.

AcceptsWebhookPayload

POSTtodos.createdwebhook

Todo created

Fired when a todo is created.

AcceptsWebhookPayload

POSTtodos.deletedwebhook

Todo deleted

Fired when a todo is deleted.

AcceptsWebhookPayload

POSTtodos.updatedwebhook

Todo updated

Fired when a todo is updated.

AcceptsWebhookPayload

POSTusers.createdwebhook

User created

Fired when a user is created.

AcceptsWebhookPayload

POSTusers.deletedwebhook

User deleted

Fired when a user is deleted.

AcceptsWebhookPayload

POSTusers.updatedwebhook

User updated

Fired when a user is updated.

AcceptsWebhookPayload

POSTwebhook.testwebhook

Test ping

Fired via `POST /webhooks/{id}/test`.

AcceptsWebhookPayload

Released under the MIT License.