{
  "item": [
    {
      "id": "52ca2b7d-1c38-4a6b-a877-951acec6c829",
      "name": "Health",
      "description": {
        "content": "Uptime and dependency status.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "6cfa2b1f-b3fa-4fa9-8cf1-db8b12eb7598",
          "name": "Application health check",
          "request": {
            "name": "Application health check",
            "description": {
              "content": "Returns the application status and PocketBase connectivity. Uptime monitors should use this endpoint.  A `200` response with `pb: \"down\"` becomes `503` — treat either as degraded.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "health"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "8cbd40a3-9cf9-495a-81fa-3d697c2d33ab",
              "name": "Application is healthy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "health"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"ok\",\n  \"ts\": \"2026-05-02T10:00:00.000Z\",\n  \"pb\": \"ok\",\n  \"build\": \"a1b2c3d\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8e159dcb-1fc7-4f1f-9cfd-dc33efe8182d",
              "name": "PocketBase unreachable — application degraded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "health"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Service Unavailable",
              "code": 503,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"ok\",\n  \"ts\": \"1987-11-28T00:32:36.137Z\",\n  \"build\": \"string\",\n  \"pb\": \"unconfigured\",\n  \"error\": \"string\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "4822cc98-862d-4ea6-a530-688da8c49003",
      "name": "Posts",
      "description": {
        "content": "Blog post CRUD.  Scope — `posts:read` / `posts:write`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "37a068cf-edbc-4e0f-b20e-620e23ad3ab5",
          "name": "List posts",
          "request": {
            "name": "List posts",
            "description": {
              "content": "Returns a paginated list of posts for the authenticated tenant. Scope: `posts:read`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "posts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "page",
                  "value": "1",
                  "description": "Page number (1-based)."
                },
                {
                  "disabled": true,
                  "key": "per_page",
                  "value": "20",
                  "description": "Records per page (max 100)."
                },
                {
                  "disabled": true,
                  "key": "status",
                  "value": "draft",
                  "description": "Filter by post status."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "8ac7c43f-49a3-4b04-b7a2-5c63cd4defb1",
              "name": "Paginated post list.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "status",
                      "value": "draft"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"items\": [\n    {\n      \"id\": \"string\",\n      \"title\": \"string\",\n      \"slug\": \"string\",\n      \"status\": \"draft\",\n      \"created\": \"2008-04-25T05:18:42.565Z\",\n      \"updated\": \"1955-03-15T23:21:33.646Z\",\n      \"excerpt\": \"string\",\n      \"tags\": [\n        \"string\",\n        \"string\"\n      ],\n      \"published_at\": \"2020-06-26T08:47:18.395Z\"\n    },\n    {\n      \"id\": \"string\",\n      \"title\": \"string\",\n      \"slug\": \"string\",\n      \"status\": \"published\",\n      \"created\": \"1957-03-12T20:44:45.610Z\",\n      \"updated\": \"1965-11-05T05:06:38.422Z\",\n      \"excerpt\": \"string\",\n      \"tags\": [\n        \"string\",\n        \"string\"\n      ],\n      \"published_at\": \"1998-12-02T17:11:43.381Z\"\n    }\n  ],\n  \"page\": 5913,\n  \"per_page\": 4549,\n  \"total\": 7903,\n  \"total_pages\": 7308\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8ff34fb6-058c-4233-ac23-24827d11d23a",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "status",
                      "value": "draft"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b6efa522-476e-46c3-8a3f-123599cb0348",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "status",
                      "value": "draft"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "433137b2-a248-4aed-af0a-2a3b2146da6d",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "status",
                      "value": "draft"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d4f50cea-ed8a-4e79-a7d7-79ebe6e2ad27",
              "name": "Unexpected server error.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "status",
                      "value": "draft"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "5d304e86-e302-46af-9ece-b80384994617",
          "name": "Create post",
          "request": {
            "name": "Create post",
            "description": {
              "content": "Creates a new post for the authenticated tenant. Scope: `posts:write`.  If `status=published` is set, `published_at` is stamped automatically.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "posts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "4037e43b-b47a-497d-b08a-aa7e81fd6e70",
              "name": "Post created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"string\",\n    \"title\": \"string\",\n    \"slug\": \"string\",\n    \"status\": \"published\",\n    \"created\": \"1983-12-08T07:23:09.069Z\",\n    \"updated\": \"2007-08-06T14:08:17.740Z\",\n    \"excerpt\": \"string\",\n    \"tags\": [\n      \"string\",\n      \"string\"\n    ],\n    \"published_at\": \"1966-11-18T01:33:05.581Z\",\n    \"content_html\": \"string\",\n    \"content_json\": {},\n    \"seo_title\": \"string\",\n    \"seo_description\": \"string\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ac802ad6-1f30-4318-a451-f787d3c5a09b",
              "name": "Invalid JSON body.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4496fca8-385a-4993-acd6-61508582dc1a",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b775b5ce-a26e-4066-a4d9-d82d2ae5aa3f",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "08e9f161-431d-4884-a5a3-8b1629ad3dfb",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9bed161e-34bf-4852-9c44-242f90a564cc",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e00a3b42-ff46-435f-bfa3-0efdd993b1f2",
              "name": "Unexpected server error.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"Hello World\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"intro\",\n    \"welcome\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "0a4135ef-ede4-4b83-a831-e2a44b4817df",
          "name": "Get post by ID",
          "request": {
            "name": "Get post by ID",
            "description": {
              "content": "Scope — `posts:read`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "posts",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the post."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "190f0803-1be4-46f2-a322-d30d18f88e0e",
              "name": "Post record.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"string\",\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"status\": \"draft\",\n  \"created\": \"1960-12-18T23:45:33.386Z\",\n  \"updated\": \"2010-11-26T05:06:35.317Z\",\n  \"excerpt\": \"string\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"published_at\": \"1971-08-19T08:06:25.345Z\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "700c9069-5111-4040-88eb-d0cd552cee43",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "51f74a60-97de-455e-9339-2a33eac5c3e5",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "298345bd-d475-4f6b-bb65-4a120390d38d",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b74ddf04-6193-4555-9b27-2dbaaa9dccc0",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "967505b0-53d9-4c47-9ad7-f825933b65a9",
          "name": "Update post",
          "request": {
            "name": "Update post",
            "description": {
              "content": "Partial update.  Only provided fields are changed. Transitioning `status` from `draft` → `published` stamps `published_at`. Scope — `posts:write`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "posts",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the post."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "0c4c713b-3260-47bb-9eaf-1fa27e2ca038",
              "name": "Updated post.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"string\",\n    \"title\": \"string\",\n    \"slug\": \"string\",\n    \"status\": \"published\",\n    \"created\": \"1983-12-08T07:23:09.069Z\",\n    \"updated\": \"2007-08-06T14:08:17.740Z\",\n    \"excerpt\": \"string\",\n    \"tags\": [\n      \"string\",\n      \"string\"\n    ],\n    \"published_at\": \"1966-11-18T01:33:05.581Z\",\n    \"content_html\": \"string\",\n    \"content_json\": {},\n    \"seo_title\": \"string\",\n    \"seo_description\": \"string\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9f3ba264-4db5-478d-b48d-fe7f9868a396",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8a9b7801-b33e-4519-94b5-8bb6e7c5554a",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a3e11558-1f85-451f-ab6c-2f606564ff63",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eb9cb2a8-613e-4c48-b2f2-da77a68b9dac",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "88641ee7-95b6-4e81-a49c-a8f2b7c05c56",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2e9c6294-1a67-45d0-a693-6e3f41db20c9",
              "name": "Unexpected server error.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title\": \"string\",\n  \"slug\": \"string\",\n  \"content_html\": \"string\",\n  \"content_json\": {},\n  \"excerpt\": \"string\",\n  \"status\": \"draft\",\n  \"tags\": [\n    \"string\",\n    \"string\"\n  ],\n  \"seo_title\": \"string\",\n  \"seo_description\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d52b34c9-8052-41d0-a445-cfdf145cb493",
          "name": "Delete post",
          "request": {
            "name": "Delete post",
            "description": {
              "content": "Permanently deletes the post.  Scope — `posts:write`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "posts",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the post."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": null
          },
          "response": [
            {
              "id": "f64fa23b-a386-4cac-86d9-7793507782ee",
              "name": "Post deleted.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "method": "DELETE",
                "body": {}
              },
              "status": "No Content",
              "code": 204,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/plain"
                }
              ],
              "body": "",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "f3370f78-331e-44d7-b485-4903747fcd06",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3e844560-14d6-4fa7-942e-dfa121f79d85",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4eb23c37-e5f2-4a2b-a3d3-b4e57333e7d9",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6f078c0b-5e36-4656-9082-741480b479e7",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "posts",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the post."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "d586102f-2703-4deb-b570-ced320acbbd7",
      "name": "Media",
      "description": {
        "content": "Media library.  Scope — `media:read` / `media:write`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "bea3d39d-c84b-4c9f-8c10-8987d3fd12fa",
          "name": "List media",
          "request": {
            "name": "List media",
            "description": {
              "content": "Scope — `media:read`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "media"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "page",
                  "value": "1",
                  "description": "Page number (1-based)."
                },
                {
                  "disabled": true,
                  "key": "per_page",
                  "value": "20",
                  "description": "Records per page (max 100)."
                },
                {
                  "disabled": true,
                  "key": "type",
                  "value": "string",
                  "description": "Filter by MIME type prefix (e.g. `image`)."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "1833f945-2052-4950-8fde-4a57947845a0",
              "name": "Paginated media list.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "type",
                      "value": "string"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"items\": [\n    {\n      \"id\": \"string\",\n      \"filename\": \"string\",\n      \"mime_type\": \"string\",\n      \"size\": 8075,\n      \"created\": \"1951-10-23T21:58:15.889Z\",\n      \"url\": \"https://fnXVuIHMFzBxpUFaCQTbdwfomphfknS.arolP3vcOXpS-ejfkBUMZWNjjHrCPmYtFdOrjE8oA+VanrJy9V,.+IIWY\",\n      \"width\": 1962,\n      \"height\": 6901,\n      \"alt\": \"string\"\n    },\n    {\n      \"id\": \"string\",\n      \"filename\": \"string\",\n      \"mime_type\": \"string\",\n      \"size\": 6556,\n      \"created\": \"1978-09-16T14:20:42.277Z\",\n      \"url\": \"https://BFAkgYYahDgCBUeLkwjLiVmCwXlNt.thbwv+\",\n      \"width\": 2307,\n      \"height\": 3485,\n      \"alt\": \"string\"\n    }\n  ],\n  \"page\": 310,\n  \"per_page\": 905,\n  \"total\": 8940,\n  \"total_pages\": 1275\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "769ab572-b821-4d8a-81f9-6c7ddcdfab2a",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "type",
                      "value": "string"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2722f4f0-d189-41b5-92d1-c9d9a5e73e05",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "type",
                      "value": "string"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "461186ae-eac2-466a-9da5-0666367a4835",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "type",
                      "value": "string"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "d654b64f-21fd-4165-be9c-749487ebb6ee",
          "name": "Upload media file",
          "request": {
            "name": "Upload media file",
            "description": {
              "content": "Accepts `multipart/form-data` with a `file` field. Scope — `media:write`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "media"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "multipart/form-data"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "description": "(Required) The media file to upload."
                },
                {
                  "key": "alt",
                  "value": "string",
                  "type": "text",
                  "description": "Alt text for images."
                }
              ]
            }
          },
          "response": [
            {
              "id": "281b0181-70c2-471d-ae2e-594637a4b5af",
              "name": "Media uploaded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "description": {
                        "content": "(Required) The media file to upload.",
                        "type": "text/plain"
                      },
                      "key": "file",
                      "type": "file"
                    },
                    {
                      "description": {
                        "content": "Alt text for images.",
                        "type": "text/plain"
                      },
                      "key": "alt",
                      "value": "string",
                      "type": "text"
                    }
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"string\",\n    \"filename\": \"string\",\n    \"mime_type\": \"string\",\n    \"size\": 6556,\n    \"created\": \"1955-10-19T15:41:20.203Z\",\n    \"url\": \"https://ZyKSo.bzehZxgC4oGTHvoaasnW9KxcRYyNmpLLcfkKQbKYa8S3BTdh5cpp-nwUWGxfs\",\n    \"width\": 4135,\n    \"height\": 5532,\n    \"alt\": \"string\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a8b59975-c5a2-4455-b811-552372e59b56",
              "name": "Missing or malformed multipart body.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "description": {
                        "content": "(Required) The media file to upload.",
                        "type": "text/plain"
                      },
                      "key": "file",
                      "type": "file"
                    },
                    {
                      "description": {
                        "content": "Alt text for images.",
                        "type": "text/plain"
                      },
                      "key": "alt",
                      "value": "string",
                      "type": "text"
                    }
                  ]
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a5aba23e-287e-4710-a1f5-e7c862376a1c",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "description": {
                        "content": "(Required) The media file to upload.",
                        "type": "text/plain"
                      },
                      "key": "file",
                      "type": "file"
                    },
                    {
                      "description": {
                        "content": "Alt text for images.",
                        "type": "text/plain"
                      },
                      "key": "alt",
                      "value": "string",
                      "type": "text"
                    }
                  ]
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e3d433b3-dce2-44a1-8e28-a161cf96ae75",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "description": {
                        "content": "(Required) The media file to upload.",
                        "type": "text/plain"
                      },
                      "key": "file",
                      "type": "file"
                    },
                    {
                      "description": {
                        "content": "Alt text for images.",
                        "type": "text/plain"
                      },
                      "key": "alt",
                      "value": "string",
                      "type": "text"
                    }
                  ]
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8262c343-d86e-4113-856b-56c5cdb78892",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "description": {
                        "content": "(Required) The media file to upload.",
                        "type": "text/plain"
                      },
                      "key": "file",
                      "type": "file"
                    },
                    {
                      "description": {
                        "content": "Alt text for images.",
                        "type": "text/plain"
                      },
                      "key": "alt",
                      "value": "string",
                      "type": "text"
                    }
                  ]
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b23653bb-b697-42a4-b42a-65847dd9d599",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "description": {
                        "content": "(Required) The media file to upload.",
                        "type": "text/plain"
                      },
                      "key": "file",
                      "type": "file"
                    },
                    {
                      "description": {
                        "content": "Alt text for images.",
                        "type": "text/plain"
                      },
                      "key": "alt",
                      "value": "string",
                      "type": "text"
                    }
                  ]
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5cf14453-32c9-4eb6-900d-c48e5d6877f8",
              "name": "Unexpected server error.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "formdata",
                  "formdata": [
                    {
                      "description": {
                        "content": "(Required) The media file to upload.",
                        "type": "text/plain"
                      },
                      "key": "file",
                      "type": "file"
                    },
                    {
                      "description": {
                        "content": "Alt text for images.",
                        "type": "text/plain"
                      },
                      "key": "alt",
                      "value": "string",
                      "type": "text"
                    }
                  ]
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "238400a9-75f0-4774-b84f-4b1a7423511d",
          "name": "Delete media item",
          "request": {
            "name": "Delete media item",
            "description": {
              "content": "Scope — `media:write`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "media",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the media item."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": null
          },
          "response": [
            {
              "id": "2cc040ce-dafc-42bb-a5fd-2d0c778de615",
              "name": "Media deleted.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the media item."
                    }
                  ]
                },
                "method": "DELETE",
                "body": {}
              },
              "status": "No Content",
              "code": 204,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/plain"
                }
              ],
              "body": "",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "b2e16d43-18b9-4913-aa76-66fd4903c7d9",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the media item."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1013312e-8d0a-4d3b-b47f-9c61a19198cf",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the media item."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "41fa2c09-0f4c-4f31-845e-d0796958fab1",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the media item."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3233a6a3-b9c3-46e2-a3b2-d38b2c29dbdb",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "media",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the media item."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "3b5cb295-b9c9-4ff1-884e-54a365dd27ca",
      "name": "Comments",
      "description": {
        "content": "Comment threads.  Scope — `comments:read` / `comments:write` / `comments:moderate`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "66a6da2a-5d93-4634-ba0b-3118dde4d6c9",
          "name": "List comments",
          "request": {
            "name": "List comments",
            "description": {
              "content": "Scope — `comments:read`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "comments"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "page",
                  "value": "1",
                  "description": "Page number (1-based)."
                },
                {
                  "disabled": true,
                  "key": "per_page",
                  "value": "20",
                  "description": "Records per page (max 100)."
                },
                {
                  "disabled": true,
                  "key": "post_id",
                  "value": "string",
                  "description": "Filter to a specific post."
                },
                {
                  "disabled": true,
                  "key": "status",
                  "value": "pending",
                  "description": "Filter by moderation status."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "cf9ac971-50d5-4693-a6e7-a92f82d5601f",
              "name": "Paginated comment list.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "post_id",
                      "value": "string"
                    },
                    {
                      "key": "status",
                      "value": "pending"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"items\": [\n    {\n      \"id\": \"string\",\n      \"post_id\": \"string\",\n      \"author_name\": \"string\",\n      \"body\": \"string\",\n      \"status\": \"spam\",\n      \"created\": \"1977-02-28T08:00:14.769Z\",\n      \"author_email\": \"string\",\n      \"parent_id\": \"string\",\n      \"updated\": \"1946-10-27T00:09:27.309Z\"\n    },\n    {\n      \"id\": \"string\",\n      \"post_id\": \"string\",\n      \"author_name\": \"string\",\n      \"body\": \"string\",\n      \"status\": \"spam\",\n      \"created\": \"2015-10-18T07:05:53.435Z\",\n      \"author_email\": \"string\",\n      \"parent_id\": \"string\",\n      \"updated\": \"2022-05-20T22:46:06.391Z\"\n    }\n  ],\n  \"page\": 2607,\n  \"per_page\": 4750,\n  \"total\": 8758,\n  \"total_pages\": 5235\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0ff6b8bc-e325-441b-975d-9cb0c5cb8841",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "post_id",
                      "value": "string"
                    },
                    {
                      "key": "status",
                      "value": "pending"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9069ef01-1ab0-46ca-b380-a401c69b7b93",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "post_id",
                      "value": "string"
                    },
                    {
                      "key": "status",
                      "value": "pending"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "05f7d447-a03b-4bd0-a2cd-9d39dd86a803",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "post_id",
                      "value": "string"
                    },
                    {
                      "key": "status",
                      "value": "pending"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "839ce5d5-e6d6-412d-91b2-ca4b9f5f6ade",
          "name": "Submit a comment",
          "request": {
            "name": "Submit a comment",
            "description": {
              "content": "API-submitted comments are auto-approved. Scope — `comments:write`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "comments"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"post_id\": \"string\",\n  \"author_name\": \"string\",\n  \"body\": \"string\",\n  \"author_email\": \"f-S@vWtXkpKjsAMoygWFrOqARGWge.epjq\",\n  \"parent_id\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "8a42da1b-f153-4405-8998-6068eb8945f4",
              "name": "Comment created.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"post_id\": \"string\",\n  \"author_name\": \"string\",\n  \"body\": \"string\",\n  \"author_email\": \"f-S@vWtXkpKjsAMoygWFrOqARGWge.epjq\",\n  \"parent_id\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"string\",\n    \"post_id\": \"string\",\n    \"author_name\": \"string\",\n    \"body\": \"string\",\n    \"status\": \"approved\",\n    \"created\": \"2019-03-31T04:22:33.506Z\",\n    \"author_email\": \"string\",\n    \"parent_id\": \"string\",\n    \"updated\": \"1970-02-07T18:50:58.245Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1221215a-7345-4d38-b2e6-2159ce509cf9",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"post_id\": \"string\",\n  \"author_name\": \"string\",\n  \"body\": \"string\",\n  \"author_email\": \"f-S@vWtXkpKjsAMoygWFrOqARGWge.epjq\",\n  \"parent_id\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e0d5778f-e16f-44f4-8c3c-a18df55b2562",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"post_id\": \"string\",\n  \"author_name\": \"string\",\n  \"body\": \"string\",\n  \"author_email\": \"f-S@vWtXkpKjsAMoygWFrOqARGWge.epjq\",\n  \"parent_id\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3b09dc7b-5c49-4594-b347-83201c36ab48",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"post_id\": \"string\",\n  \"author_name\": \"string\",\n  \"body\": \"string\",\n  \"author_email\": \"f-S@vWtXkpKjsAMoygWFrOqARGWge.epjq\",\n  \"parent_id\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "88a55b2a-ba09-495e-85b6-ae244796dae4",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"post_id\": \"string\",\n  \"author_name\": \"string\",\n  \"body\": \"string\",\n  \"author_email\": \"f-S@vWtXkpKjsAMoygWFrOqARGWge.epjq\",\n  \"parent_id\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "11d51bac-76da-4f98-adb0-7ade53119725",
          "name": "Moderate a comment",
          "request": {
            "name": "Moderate a comment",
            "description": {
              "content": "Set comment status to `approved`, `pending`, or `spam`. Scope — `comments:moderate`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "comments",
                ":id",
                "moderate"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the comment."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"pending\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "5ebb664a-a381-4cf9-93c1-776754b6352a",
              "name": "Comment status updated.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments",
                    ":id",
                    "moderate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the comment."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"pending\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"string\",\n    \"post_id\": \"string\",\n    \"author_name\": \"string\",\n    \"body\": \"string\",\n    \"status\": \"approved\",\n    \"created\": \"2019-03-31T04:22:33.506Z\",\n    \"author_email\": \"string\",\n    \"parent_id\": \"string\",\n    \"updated\": \"1970-02-07T18:50:58.245Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e2883232-5c66-474d-8e49-15962b335727",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments",
                    ":id",
                    "moderate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the comment."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"pending\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2e8cd398-d401-4d1a-a8f9-32b55ec24add",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments",
                    ":id",
                    "moderate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the comment."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"pending\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "99df4e64-ed2f-4a4f-af72-1f1e7366d4d6",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments",
                    ":id",
                    "moderate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the comment."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"pending\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ed09cf93-57a4-4057-99d3-c4c78447d37b",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments",
                    ":id",
                    "moderate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the comment."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"pending\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0a70ef5a-19be-4815-91e0-80cb0e65e1e2",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "comments",
                    ":id",
                    "moderate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the comment."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"pending\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "52f84d53-0137-4d52-a7c0-530c6857dbef",
      "name": "Members",
      "description": {
        "content": "Reader / subscriber management.  Scope — `members:read` / `members:write`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "0fc139d6-145d-44a8-8ab5-ce17a028dd6d",
          "name": "List members (anonymized)",
          "request": {
            "name": "List members (anonymized)",
            "description": {
              "content": "Returns a paginated list of reader / subscriber records. Email local parts are masked for privacy (e.g. `u***@example.com`). Scope — `members:read`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "members"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": true,
                  "key": "page",
                  "value": "1",
                  "description": "Page number (1-based)."
                },
                {
                  "disabled": true,
                  "key": "per_page",
                  "value": "20",
                  "description": "Records per page (max 100)."
                },
                {
                  "disabled": true,
                  "key": "tier",
                  "value": "paid",
                  "description": "Filter by subscription tier."
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "e33557b6-562d-46c7-9f2f-5099f509d0e1",
              "name": "Paginated member list.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "tier",
                      "value": "paid"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"items\": [\n    {\n      \"id\": \"string\",\n      \"email\": \"string\",\n      \"tier\": \"free\",\n      \"status\": \"past_due\",\n      \"created\": \"2018-11-25T18:49:55.762Z\",\n      \"updated\": \"1994-08-07T10:22:57.286Z\"\n    },\n    {\n      \"id\": \"string\",\n      \"email\": \"string\",\n      \"tier\": \"paid\",\n      \"status\": \"cancelled\",\n      \"created\": \"2000-02-15T11:15:13.526Z\",\n      \"updated\": \"1999-08-07T19:07:41.150Z\"\n    }\n  ],\n  \"page\": 5741,\n  \"per_page\": 8134,\n  \"total\": 2625,\n  \"total_pages\": 726\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "77cdf886-f00c-439c-9b94-cfb0733f6873",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "tier",
                      "value": "paid"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2723e88e-80f4-40b7-bd96-45e64914d582",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "tier",
                      "value": "paid"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4540e740-4ded-4aff-b269-f1e31077315c",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1"
                    },
                    {
                      "key": "per_page",
                      "value": "20"
                    },
                    {
                      "key": "tier",
                      "value": "paid"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "6c081767-ebd6-41fc-b1fd-1ad2bf87c6de",
          "name": "Update member tier or status",
          "request": {
            "name": "Update member tier or status",
            "description": {
              "content": "Scope — `members:write`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "members",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the member."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tier\": \"free\",\n  \"status\": \"cancelled\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "6c75cb56-f1e4-4883-9e1c-2e4a768a22a2",
              "name": "Member updated.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the member."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tier\": \"free\",\n  \"status\": \"cancelled\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"data\": {\n    \"id\": \"string\",\n    \"email\": \"string\",\n    \"tier\": \"paid\",\n    \"status\": \"active\",\n    \"created\": \"1989-01-28T23:49:31.888Z\",\n    \"updated\": \"1999-08-25T23:47:36.077Z\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4643850f-92fa-498b-8d36-97bace9c8d2d",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the member."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tier\": \"free\",\n  \"status\": \"cancelled\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fd7e19b6-e673-4dca-8241-13040499b449",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the member."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tier\": \"free\",\n  \"status\": \"cancelled\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4b94025b-e5f1-42f8-9d2c-d1dc5e942b94",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the member."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tier\": \"free\",\n  \"status\": \"cancelled\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "67b72638-b639-4ffc-96ab-f026a27cec9e",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the member."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tier\": \"free\",\n  \"status\": \"cancelled\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eafa3e5a-c0bc-45fb-b0f2-2eb2c457b728",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "members",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the member."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "PATCH",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tier\": \"free\",\n  \"status\": \"cancelled\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "9711453c-530a-40fc-8ec9-9fdd430ca902",
      "name": "Site Settings",
      "description": {
        "content": "Tenant-level configuration (secrets redacted).  Scope — `site-settings:read`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "d16318c2-4606-4755-b1b9-c442032527a8",
          "name": "Get site settings",
          "request": {
            "name": "Get site settings",
            "description": {
              "content": "Returns the tenant's site configuration. All encrypted fields (`member_stripe_*`, `ai_api_key`) are excluded from the response.  Scope — `site-settings:read`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "site-settings"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "88d6255a-328a-43da-b6ad-822fb36d7d55",
              "name": "Site settings.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "site-settings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"string\",\n  \"tenant_id\": \"string\",\n  \"site_name\": \"string\",\n  \"site_description\": \"string\",\n  \"site_logo\": \"string\",\n  \"site_favicon\": \"string\",\n  \"members_enabled\": true,\n  \"comments_enabled\": false,\n  \"created\": \"1987-12-19T23:25:46.846Z\",\n  \"updated\": \"1959-10-31T06:57:42.314Z\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "cef6f61a-5a9b-4ee3-8248-b19ea3be8529",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "site-settings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "21956384-ca12-4477-9f11-0dc91c78a845",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "site-settings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "26b27b93-abf2-424e-8f28-30479bc0e702",
              "name": "Site settings record not yet created for this tenant.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "site-settings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "42dabdc4-4323-4f5b-b7fd-b429dcdc52e4",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "site-settings"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "ae77f88c-92fd-4544-93e9-819b62157470",
      "name": "Webhooks",
      "description": {
        "content": "Outbound webhook subscriptions.  Scope — `webhooks:read` / `webhooks:write`.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "1885fb5d-56a0-4c41-9ac0-992e8f382ea5",
          "name": "List webhook subscriptions",
          "request": {
            "name": "List webhook subscriptions",
            "description": {
              "content": "Returns all outbound webhook subscriptions for the tenant. The `secret` field is never included. Scope — `webhooks:read`.  Requires Pro or higher plan.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "079ebdd1-6db2-405c-9ae8-5e57b61bdf67",
              "name": "Webhook subscription list.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"items\": [\n    {\n      \"id\": \"string\",\n      \"name\": \"string\",\n      \"url\": \"https://iCMGqvcfnvxjCAGZmWTxSa.kjdyI\",\n      \"events\": [\n        \"comment.received\",\n        \"post.deleted\"\n      ],\n      \"failure_count\": 7297,\n      \"created\": \"1982-01-14T23:07:54.664Z\",\n      \"last_delivery_at\": \"2002-06-09T03:12:22.317Z\",\n      \"disabled_at\": \"1986-04-09T22:33:26.977Z\"\n    },\n    {\n      \"id\": \"string\",\n      \"name\": \"string\",\n      \"url\": \"http://FJMBTpTaHzhDNxnyrlrQ.bgGsdyxzk9QJ7AUN2rdu1FzpsLpw--yawXhcKK6+PKCTZ-\",\n      \"events\": [\n        \"comment.approved\",\n        \"subscriber.removed\"\n      ],\n      \"failure_count\": 9438,\n      \"created\": \"2024-01-04T12:47:20.294Z\",\n      \"last_delivery_at\": \"1974-11-25T09:46:55.847Z\",\n      \"disabled_at\": \"1997-09-22T04:10:05.339Z\"\n    }\n  ],\n  \"total\": 4682\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "58455c4b-a6ed-4b38-afa7-c70796e97000",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a9e0057f-649c-448b-8ad2-39860373fde5",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "045073d1-3ce4-4d7b-9061-e7c6d9d6bccb",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "dacb45da-443c-479b-8390-c732c219dedb",
          "name": "Create webhook subscription",
          "request": {
            "name": "Create webhook subscription",
            "description": {
              "content": "Creates a new outbound webhook subscription. The `secret` is returned **only in this response** — store it securely and use it to verify incoming `X-VeloCMS-Signature` headers with HMAC-SHA256. Scope — `webhooks:write`.  Requires Pro or higher plan.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Zapier post trigger\",\n  \"url\": \"https://hooks.zapier.com/hooks/catch/abc/xyz/\",\n  \"events\": [\n    \"post.published\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "148608ab-2fa6-4b11-a53f-97427a90912a",
              "name": "Webhook created.  `secret` shown once only.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Zapier post trigger\",\n  \"url\": \"https://hooks.zapier.com/hooks/catch/abc/xyz/\",\n  \"events\": [\n    \"post.published\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"string\",\n  \"name\": \"string\",\n  \"url\": \"http://dTLAC.ymiDhXRCQiqd2aTxoOMrQw\",\n  \"events\": [\n    \"post.updated\",\n    \"post.updated\"\n  ],\n  \"failure_count\": 993,\n  \"created\": \"2020-01-21T00:24:45.258Z\",\n  \"last_delivery_at\": \"2012-03-12T13:42:33.614Z\",\n  \"disabled_at\": \"1998-03-25T05:54:40.478Z\",\n  \"secret\": \"string\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "12e67b85-9448-45c2-b7cf-81919fda0f7c",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Zapier post trigger\",\n  \"url\": \"https://hooks.zapier.com/hooks/catch/abc/xyz/\",\n  \"events\": [\n    \"post.published\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "839927d8-ebba-4a39-b515-9f1083a59d5d",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Zapier post trigger\",\n  \"url\": \"https://hooks.zapier.com/hooks/catch/abc/xyz/\",\n  \"events\": [\n    \"post.published\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "197f6611-3de7-442c-8237-cca3aedfe553",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Zapier post trigger\",\n  \"url\": \"https://hooks.zapier.com/hooks/catch/abc/xyz/\",\n  \"events\": [\n    \"post.published\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d08b08e4-fb72-4f97-966f-eb3afc3671a3",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Zapier post trigger\",\n  \"url\": \"https://hooks.zapier.com/hooks/catch/abc/xyz/\",\n  \"events\": [\n    \"post.published\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d18d33d9-a2bd-4c9b-85a8-6dcff7aca1a3",
              "name": "Unexpected server error.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Zapier post trigger\",\n  \"url\": \"https://hooks.zapier.com/hooks/catch/abc/xyz/\",\n  \"events\": [\n    \"post.published\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "483921ff-00d9-4a90-ad19-905bcb841815",
          "name": "Delete webhook subscription",
          "request": {
            "name": "Delete webhook subscription",
            "description": {
              "content": "Scope — `webhooks:write`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "webhooks",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the webhook subscription."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": null
          },
          "response": [
            {
              "id": "43ecbd2c-56c5-4695-84f4-26c440b205a0",
              "name": "Webhook deleted.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "method": "DELETE",
                "body": {}
              },
              "status": "No Content",
              "code": 204,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/plain"
                }
              ],
              "body": "",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "287af9d1-6a26-4435-9cff-6e67a0c9ea3d",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5afe9d85-541a-42bb-8805-8f01aa00210d",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3baef59b-b30c-4126-978a-0a323bbe7e11",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2a7e1d58-5531-4055-87b2-9b1358bbe5ad",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "DELETE",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "8d10f3da-a271-4bdf-94d8-0bd7e0d470f4",
          "name": "Rotate webhook signing secret",
          "request": {
            "name": "Rotate webhook signing secret",
            "description": {
              "content": "Generates a new HMAC-SHA256 signing secret for the webhook. The old secret is invalidated immediately. The new secret is returned **once only** — update your receiver before calling this endpoint. Scope — `webhooks:write`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "v1",
                "webhooks",
                ":id",
                "rotate-secret"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) PocketBase record ID of the webhook subscription."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [
            {
              "id": "84e878c6-1ebc-4d73-af09-66ae890eecc8",
              "name": "New secret generated.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id",
                    "rotate-secret"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"string\",\n  \"secret\": \"string\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ef5c7632-75e9-4f88-b26d-3ed595706aa2",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id",
                    "rotate-secret"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "351bf929-251a-4dea-8f81-085c90118b75",
              "name": "Key lacks required scope, or plan upgrade required.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id",
                    "rotate-secret"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "aa4913e3-5e8d-4918-9ec3-7c00d5e55261",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id",
                    "rotate-secret"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bc487f5b-eb45-4474-875b-0542772f3e02",
              "name": "Rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "v1",
                    "webhooks",
                    ":id",
                    "rotate-secret"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) PocketBase record ID of the webhook subscription."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "description": "Seconds until the rate-limit window resets.",
                  "key": "Retry-After",
                  "value": "5664"
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "47b75fed-f084-4ead-9f25-596e48641348",
      "name": "AI",
      "description": {
        "content": "Editor AI content generation (SSE streaming).",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "8473d9f6-ba0b-4748-9f90-a61d72403f81",
          "name": "AI content generation (SSE streaming)",
          "request": {
            "name": "AI content generation (SSE streaming)",
            "description": {
              "content": "Generates or transforms text using the configured AI provider\n(BYOK or platform Gemini key).\n\n**Response format:** `text/event-stream` (Server-Sent Events).\n\nEach SSE event is a JSON object on a `data:` line:\n\n```\ndata: {\"text\": \"partial output chunk\"}\\n\\n\ndata: [DONE]\\n\\n\n```\n\nOn error:\n```\ndata: {\"error\": \"Rate limit exceeded.\"}\\n\\n\ndata: [DONE]\\n\\n\n```\n\nOn mid-stream failure:\n```\ndata: {\"event\": \"stream_failed\", \"reason\": \"timeout\", \"retryable\": true}\\n\\n\ndata: [DONE]\\n\\n\n```\n\n**Rate limits:** 10 requests per minute per IP (platform key path).\nPer-tenant limits apply on top.\n\n**Actions:**\n- `generate` — generate content from a `prompt`\n- `rewrite` — rewrite selected `selection`\n- `translate` — translate `selection` to `language`\n- `summarize` — summarize `selection` in 2-3 sentences\n\nNo `Authorization` header required — uses the tenant's BYOK AI key\n(configured in `/admin/settings`) or the platform Gemini key as fallback.\nThe `x-tenant-id` header is set automatically by middleware on subdomain\nrequests; pass it explicitly when calling from a third-party context.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "ai",
                "generate"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "text/event-stream"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"generate\",\n  \"prompt\": \"Write an introduction to a post about AI in content marketing.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "ed8cdfef-6e91-4b73-b0ff-b49d5e5c8f01",
              "name": "SSE stream opened.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "ai",
                    "generate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "text/event-stream"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"generate\",\n  \"prompt\": \"Write an introduction to a post about AI in content marketing.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/event-stream"
                }
              ],
              "body": "string",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "77be3abd-70a2-4c1f-917f-5fe8d693381c",
              "name": "Missing required field or unknown action.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "ai",
                    "generate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"generate\",\n  \"prompt\": \"Write an introduction to a post about AI in content marketing.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b99e46c9-8202-4a30-850d-15d9a0e69a5a",
              "name": "IP or tenant rate limit exceeded.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "ai",
                    "generate"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"generate\",\n  \"prompt\": \"Write an introduction to a post about AI in content marketing.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "disabled": true,
                  "key": "Retry-After",
                  "value": "5664",
                  "description": ""
                },
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "f3ada328-7715-4f24-aefb-46cd548288a7",
      "name": "GDPR",
      "description": {
        "content": "GDPR Article 17 (erasure) and Article 20 (data portability).  Session-auth or `x-tenant-id` required.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "ba5fa305-ca76-4a30-b875-a87441b443d5",
          "name": "Request a GDPR data export (Article 20)",
          "request": {
            "name": "Request a GDPR data export (Article 20)",
            "description": {
              "content": "Queues a data export.  For small tenants (< 28 s), the export is\nbuilt synchronously and a `download_url` is returned with `200`.\nLarger tenants get `202 Accepted` with a `request_id` — the\ndownload link is emailed when ready.\n\n**Auth:** active admin session cookie OR `x-tenant-id` header.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "gdpr",
                "export"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"member\",\n  \"member_id\": \"string\",\n  \"tenant_id\": \"string\",\n  \"notify_email\": \"P1QnkFZY@ZjgvTAsldyB.dfb\",\n  \"blog_name\": \"string\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "14eb2ac5-8d16-48b9-89c8-793ceacb9332",
              "name": "Export ready (synchronous path).",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "export"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"member\",\n  \"member_id\": \"string\",\n  \"tenant_id\": \"string\",\n  \"notify_email\": \"P1QnkFZY@ZjgvTAsldyB.dfb\",\n  \"blog_name\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"request_id\": \"string\",\n  \"status\": \"ready\",\n  \"download_url\": \"http://XcmNzcWhsJ.llU-xDSNUp9S-.Wg0+qkRZRlPP9JwwQns\",\n  \"expires_at\": \"1957-07-20T12:44:15.745Z\",\n  \"inline_data\": {}\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d98a0635-0119-4b8a-be01-c7d75dd61e3e",
              "name": "Export queued (async path) — download link will be emailed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "export"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"member\",\n  \"member_id\": \"string\",\n  \"tenant_id\": \"string\",\n  \"notify_email\": \"P1QnkFZY@ZjgvTAsldyB.dfb\",\n  \"blog_name\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"request_id\": \"string\",\n  \"status\": \"queued\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "062383bf-2d59-48c7-97b0-c2cbe6e56e16",
              "name": "Missing tenant or member_id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "export"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"member\",\n  \"member_id\": \"string\",\n  \"tenant_id\": \"string\",\n  \"notify_email\": \"P1QnkFZY@ZjgvTAsldyB.dfb\",\n  \"blog_name\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7a7bc6b2-077e-4b64-bb48-3eba1adfb308",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "export"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"member\",\n  \"member_id\": \"string\",\n  \"tenant_id\": \"string\",\n  \"notify_email\": \"P1QnkFZY@ZjgvTAsldyB.dfb\",\n  \"blog_name\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "92647b95-0ff0-4897-a3ba-6c46c2326afc",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "export"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"member\",\n  \"member_id\": \"string\",\n  \"tenant_id\": \"string\",\n  \"notify_email\": \"P1QnkFZY@ZjgvTAsldyB.dfb\",\n  \"blog_name\": \"string\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "516e9167-2270-4175-b46e-f068501159c2",
          "name": "Download a completed GDPR export",
          "request": {
            "name": "Download a completed GDPR export",
            "description": {
              "content": "Returns the export archive for a completed `gdpr_requests` record. The URL is signed with the actor ID as a token (`?token=...`). Links expire after 7 days.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "gdpr",
                "export",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "token",
                  "value": "string",
                  "description": "(Required) Actor ID token from the export ready email."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) GDPR request record ID returned by the initial POST."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/octet-stream"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "c2bc546d-7e0b-41b0-8bbb-893d4e68f367",
              "name": "Export archive (ZIP or JSON).",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "export",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "token",
                      "value": "string"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) GDPR request record ID returned by the initial POST."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/octet-stream"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/octet-stream"
                }
              ],
              "body": "string",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "b2cdef49-9080-4656-9317-1c7f58e7fa35",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "export",
                    ":id"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "token",
                      "value": "string"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) GDPR request record ID returned by the initial POST."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4a27e254-7446-4351-92ab-22ca0ad623d4",
          "name": "Request account or tenant deletion (Article 17)",
          "request": {
            "name": "Request account or tenant deletion (Article 17)",
            "description": {
              "content": "Schedules a hard deletion with a 30-day grace period.\nImmediately:\n- Creates a `gdpr_requests` record (`type=delete`, `status=queued`)\n- For `type=tenant`: sets `read_only_mode=true` and stamps `deleted_at`\n- Sends a confirmation email with a cancellation link\n\nHard delete is deferred 30 days.\n\n**Auth:** active admin session cookie OR `x-tenant-id` header.\n\n**Warning:** this action cannot be undone after the grace period.\nThe `confirmation_phrase` field (`\"DELETE MY DATA\"`) is required to\nprevent accidental deletion.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "gdpr",
                "delete"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"tenant\",\n  \"confirmation_phrase\": \"DELETE MY DATA\",\n  \"tenant_slug\": \"myblog\",\n  \"notify_email\": \"owner@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "99e0b4cd-5025-449c-a76b-08d9f102b59c",
              "name": "Deletion scheduled.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "delete"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"tenant\",\n  \"confirmation_phrase\": \"DELETE MY DATA\",\n  \"tenant_slug\": \"myblog\",\n  \"notify_email\": \"owner@example.com\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"request_id\": \"string\",\n  \"status\": \"queued\",\n  \"grace_until\": \"1962-08-09T07:49:16.528Z\",\n  \"cancellation_url\": \"https://tKofyhdzukKzygfshwGLsh.gxun9n3VWLvYd,EYnYkRlvb8IXhjR\",\n  \"type\": \"member\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "82c63278-b63b-407f-8757-c8458ad215a4",
              "name": "Missing or invalid body field.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "delete"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"tenant\",\n  \"confirmation_phrase\": \"DELETE MY DATA\",\n  \"tenant_slug\": \"myblog\",\n  \"notify_email\": \"owner@example.com\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d82fd819-ba65-4673-9a50-102014071920",
              "name": "Missing or invalid API key.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "delete"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"tenant\",\n  \"confirmation_phrase\": \"DELETE MY DATA\",\n  \"tenant_slug\": \"myblog\",\n  \"notify_email\": \"owner@example.com\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8c1394cf-53f9-4c34-b7a1-1d815ff8fa95",
              "name": "Request body failed Zod validation.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "delete"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"tenant\",\n  \"confirmation_phrase\": \"DELETE MY DATA\",\n  \"tenant_slug\": \"myblog\",\n  \"notify_email\": \"owner@example.com\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "bbf2d5f1-01e1-4834-9977-d4c505f896eb",
          "name": "Cancel a pending deletion request",
          "request": {
            "name": "Cancel a pending deletion request",
            "description": {
              "content": "Cancels a deletion within the 30-day grace window. The cancellation URL is included in the deletion confirmation email.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "gdpr",
                "delete",
                ":id",
                "cancel"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "token",
                  "value": "string",
                  "description": "(Required) Cancellation token from the confirmation email."
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "string",
                  "key": "id",
                  "description": "(Required) GDPR request record ID returned by the initial POST."
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [
            {
              "id": "b8a3c65e-ed5e-4d16-9e1e-fe6203c2f267",
              "name": "Deletion cancelled.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "delete",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "token",
                      "value": "string"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) GDPR request record ID returned by the initial POST."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"request_id\": \"string\",\n  \"status\": \"cancelled\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7dff7060-7f1f-458e-8fb9-b342bb8cf951",
              "name": "Resource not found.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "gdpr",
                    "delete",
                    ":id",
                    "cancel"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "key": "token",
                      "value": "string"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "string",
                      "key": "id",
                      "description": "(Required) GDPR request record ID returned by the initial POST."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "id": "de6d3f39-caa5-4020-85ea-0cda8a1bdf17",
      "name": "Member Webhook",
      "description": {
        "content": "Per-tenant Stripe webhook endpoint (BYOK billing).  Consumed by Stripe — not called by integrators directly.",
        "type": "text/plain"
      },
      "item": [
        {
          "id": "b207f5ef-6b46-4b0f-8b7e-dfe78c69c953",
          "name": "Per-tenant Stripe webhook receiver",
          "request": {
            "name": "Per-tenant Stripe webhook receiver",
            "description": {
              "content": "Receives Stripe event payloads for a specific tenant's BYOK Stripe\naccount.  Stripe calls this endpoint directly — integrators do NOT\ncall it.\n\n**Stripe events handled:**\n- `checkout.session.completed` (membership + digital products + cart)\n- `customer.subscription.updated`\n- `customer.subscription.deleted`\n- `invoice.payment_failed`\n- `charge.refunded`\n\nAuthentication is via Stripe's own `stripe-signature` header\n(HMAC-SHA256 signed payload).  The tenant's webhook secret is stored\nAES-256-GCM encrypted in `site_settings.member_stripe_webhook_secret`.\n\nConfigure the endpoint URL in your Stripe Dashboard webhook settings:\n```\nhttps://<your-subdomain>.velocms.org/api/member-webhook/<your-slug>\n```\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "member-webhook",
                ":tenantSlug"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "wjcap7hzfiv",
                  "key": "tenantSlug",
                  "description": "(Required) Tenant's subdomain slug (e.g. `myblog` from `myblog.velocms.org`)."
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "id": "5a5ef84b-6717-4635-bb67-90b2487adef2",
              "name": "Event received and processed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "member-webhook",
                    ":tenantSlug"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "wjcap7hzfiv",
                      "key": "tenantSlug",
                      "description": "(Required) Tenant's subdomain slug (e.g. `myblog` from `myblog.velocms.org`)."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"received\": false\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f5644373-78a7-45ac-a050-f4c3b34f9fa0",
              "name": "Missing signature, invalid tenant slug, or unsupported event.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "member-webhook",
                    ":tenantSlug"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "wjcap7hzfiv",
                      "key": "tenantSlug",
                      "description": "(Required) Tenant's subdomain slug (e.g. `myblog` from `myblog.velocms.org`)."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b17b2e5b-331e-44cb-b04a-eb21e3285545",
              "name": "Tenant not found or Stripe not configured.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "member-webhook",
                    ":tenantSlug"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "wjcap7hzfiv",
                      "key": "tenantSlug",
                      "description": "(Required) Tenant's subdomain slug (e.g. `myblog` from `myblog.velocms.org`)."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b27fc6dc-d255-4dca-bed1-cacbefe00f31",
              "name": "Unexpected server error.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "member-webhook",
                    ":tenantSlug"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "type": "any",
                      "value": "wjcap7hzfiv",
                      "key": "tenantSlug",
                      "description": "(Required) Tenant's subdomain slug (e.g. `myblog` from `myblog.velocms.org`)."
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": {\n    \"code\": \"UNAUTHORIZED\",\n    \"message\": \"string\",\n    \"details\": {\n      \"key_0\": false\n    }\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "type": "string",
      "value": "https://velocms.org",
      "key": "baseUrl"
    },
    {
      "key": "apiKey",
      "value": "vcms_live_your_api_key_here",
      "type": "string",
      "description": "VeloCMS API key. Get yours from /admin/settings → API Keys."
    },
    {
      "key": "tenantId",
      "value": "",
      "type": "string",
      "description": "Your tenant ID (optional — set if not using subdomain routing)."
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{bearerToken}}"
      }
    ]
  },
  "info": {
    "_postman_id": "e565cfba-81c4-4c4d-88a1-45cd981eb21c",
    "name": "VeloCMS Public API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "The VeloCMS REST API gives integrators, Zapier zaps, n8n workflows, and\ncustom plugins programmatic access to a tenant's blog content, members,\nmedia, webhooks, and GDPR tooling.\n\n**Base URL:** `https://velocms.org`\n\n## Authentication\n\nAll `/api/v1/*` endpoints require a Bearer API key issued from your VeloCMS\ndashboard (`/admin/settings → API Keys`).  API keys are plan-gated —\nPro or higher is required to call any `/api/v1/*` endpoint.\n\n```\nAuthorization: Bearer vcms_live_xxxxxxxxxxxxxxxx\n```\n\nFor multi-tenant deployments (subdomain or custom domain routing), the\nmiddleware injects `x-tenant-id` automatically from the request host.\nWhen calling from a third-party context, pass the header explicitly:\n\n```\nx-tenant-id: <your-tenant-id>\n```\n\n## Scopes\n\nEach API key is issued with one or more scopes.  Calling an endpoint\nwithout the matching scope returns `403 INVALID_SCOPE`.\n\n| Scope | Grants |\n|---|---|\n| `posts:read` | List + view posts |\n| `posts:write` | Create, update, delete posts |\n| `media:read` | List media |\n| `media:write` | Upload media |\n| `comments:read` | List comments |\n| `comments:write` | Submit comments |\n| `comments:moderate` | Approve / reject comments |\n| `members:read` | List members (anonymized) |\n| `members:write` | Update member tier / status |\n| `site-settings:read` | Read public site settings (secrets redacted) |\n| `webhooks:read` | List webhook subscriptions |\n| `webhooks:write` | Create / delete webhook subscriptions |\n\n## Rate Limits\n\n| Plan | Per-minute | Per-hour |\n|---|---|---|\n| Pro | 30 | 1 000 |\n| Business | 120 | 5 000 |\n| Agency | 300 | 20 000 |\n\nRate-limited responses return `429` with a `Retry-After` header\n(seconds until the window resets).\n\n## Error Envelope\n\nAll errors use a consistent JSON envelope:\n\n```json\n{\n  \"error\": {\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"Human-readable description.\",\n    \"details\": { \"field\": [\"error detail\"] }\n  }\n}\n```\n\nError codes: `UNAUTHORIZED`, `INVALID_SCOPE`, `RATE_LIMITED`,\n`QUOTA_EXCEEDED`, `NOT_FOUND`, `VALIDATION_ERROR`, `FORBIDDEN`,\n`INTERNAL_ERROR`, `PLAN_UPGRADE_REQUIRED`, `HTTPS_REQUIRED`.\n\n\nContact Support:\n Name: VeloCMS Support",
      "type": "text/plain"
    }
  }
}