{"endpoints":[{"description":"Endpoint discovery","method":"GET","path":"/"},{"description":"Liveness probe","method":"GET","path":"/healthz"},{"description":"Readiness probe","method":"GET","path":"/ready"},{"description":"Detailed health check","method":"GET","path":"/health"},{"description":"Register a new user","method":"POST","path":"/api/v1/auth/register"},{"description":"Log in (issues access + refresh cookies)","method":"POST","path":"/api/v1/auth/login"},{"description":"Log out (clears cookies + revokes refresh)","method":"POST","path":"/api/v1/auth/logout"},{"description":"Rotate access + refresh cookies","method":"POST","path":"/api/v1/auth/refresh"},{"description":"Get the authenticated user","method":"GET","path":"/api/v1/auth/me"},{"description":"Resend email confirmation link","method":"POST","path":"/api/v1/account/confirm-resend"},{"description":"Confirm an account from token","method":"POST","path":"/api/v1/account/confirm/{token}"},{"description":"Request a password-reset email","method":"POST","path":"/api/v1/account/reset-password-request"},{"description":"Reset password using a token","method":"POST","path":"/api/v1/account/reset-password/{token}"},{"description":"Request a confirm-email link for a new address","method":"POST","path":"/api/v1/account/change-email-request"},{"description":"Apply a pending email change from token","method":"POST","path":"/api/v1/account/change-email/{token}"},{"description":"Set password and confirm account from an invite token","method":"POST","path":"/api/v1/account/join-from-invite/{token}"},{"description":"Change password while logged in","method":"POST","path":"/api/v1/account/change-password"},{"description":"List your API keys","method":"GET","path":"/api/v1/account/api-keys"},{"description":"Create an API key (secret shown once)","method":"POST","path":"/api/v1/account/api-keys"},{"description":"Revoke an API key","method":"DELETE","path":"/api/v1/account/api-keys/{id}"},{"description":"Admin: list users","method":"GET","path":"/api/v1/admin/users"},{"description":"Admin: create a user","method":"POST","path":"/api/v1/admin/users"},{"description":"Admin: invite a user via email","method":"POST","path":"/api/v1/admin/invite"},{"description":"Admin: user detail","method":"GET","path":"/api/v1/admin/users/{id}"},{"description":"Admin: update user (email, role, name)","method":"PATCH","path":"/api/v1/admin/users/{id}"},{"description":"Admin: delete user","method":"DELETE","path":"/api/v1/admin/users/{id}"},{"description":"Admin: list roles","method":"GET","path":"/api/v1/admin/roles"},{"description":"Admin: create role","method":"POST","path":"/api/v1/admin/roles"},{"description":"Admin: update role (name, permissions, is_default)","method":"PATCH","path":"/api/v1/admin/roles/{id}"},{"description":"Admin: delete role","method":"DELETE","path":"/api/v1/admin/roles/{id}"},{"description":"Admin: list the audit trail (requires audit-read permission)","method":"GET","path":"/api/v1/admin/audit"},{"description":"List jobs","method":"GET","path":"/api/v1/jobs"},{"description":"Submit job","method":"POST","path":"/api/v1/jobs"},{"description":"List dead-letter queue","method":"GET","path":"/api/v1/jobs/dlq"},{"description":"Requeue a DLQ job","method":"POST","path":"/api/v1/jobs/dlq/{id}/requeue"},{"description":"Get job status","method":"GET","path":"/api/v1/jobs/{id}"},{"description":"Cancel job","method":"DELETE","path":"/api/v1/jobs/{id}"},{"description":"List posts (admin)","method":"GET","path":"/api/v1/posts"},{"description":"Create post (admin)","method":"POST","path":"/api/v1/posts"},{"description":"Get post (admin)","method":"GET","path":"/api/v1/posts/{id}"},{"description":"Admin: issue a draft preview link (1h)","method":"POST","path":"/api/v1/posts/{id}/preview-token"},{"description":"Update post (admin)","method":"PATCH","path":"/api/v1/posts/{id}"},{"description":"Delete post (admin)","method":"DELETE","path":"/api/v1/posts/{id}"},{"description":"List published posts (public; filterable, paged, optional facets)","method":"GET","path":"/api/v1/public/posts"},{"description":"Get published post by slug (public)","method":"GET","path":"/api/v1/public/posts/{slug}"},{"description":"Published post body as raw Markdown (public)","method":"GET","path":"/posts/{slug}"},{"description":"Dynamic sitemap over published posts (public)","method":"GET","path":"/sitemap.xml"},{"description":"Upload an image (admin)","method":"POST","path":"/api/v1/admin/uploads"},{"description":"Admin: list uploaded images","method":"GET","path":"/api/v1/admin/uploads"},{"description":"Admin: delete an uploaded image","method":"DELETE","path":"/api/v1/admin/uploads/{name}"},{"description":"Serve an uploaded image (public; local storage backend only)","method":"GET","path":"/uploads/{key}"}],"message":"C++ API Template","version":"1.4.0"}