{"openapi":"3.1.0","info":{"title":"SDUK Studio Info Site API","version":"1.0.0","description":"Generated API for SDUK Studio Info Site. Auth: Bearer JWT (POST /auth/login)."},"servers":[{"url":"/api","description":"API base path"}],"tags":[{"name":"Auth"},{"name":"Blog category"},{"name":"Blog post"},{"name":"Capability"},{"name":"Contact submission"},{"name":"Content item"},{"name":"Content target"},{"name":"Discovery call"},{"name":"Lead"},{"name":"Page"},{"name":"Page block"},{"name":"Redirect"},{"name":"Release"},{"name":"Site build"},{"name":"Site event"},{"name":"Views"},{"name":"Custom"},{"name":"Navigation"},{"name":"Admin users"},{"name":"Files"}],"security":[{"bearerAuth":[]}],"paths":{"/auth/register":{"post":{"tags":["Auth"],"summary":"Register","operationId":"register","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}}},"responses":{"201":{"description":"The created user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUser"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Email already registered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/login":{"post":{"tags":["Auth"],"summary":"Log in","operationId":"login","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}}},"responses":{"200":{"description":"Tokens + user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"401":{"description":"Invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/refresh":{"post":{"tags":["Auth"],"summary":"Refresh tokens","operationId":"refresh","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}}},"responses":{"200":{"description":"New tokens","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"401":{"description":"Invalid refresh token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/logout":{"post":{"tags":["Auth"],"summary":"Log out","operationId":"logout","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}}},"responses":{"204":{"description":"Logged out"}}}},"/auth/me":{"get":{"tags":["Auth"],"summary":"Current user","operationId":"me","responses":{"200":{"description":"The authenticated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUser"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/forgot-password":{"post":{"tags":["Auth"],"summary":"Request a password reset email","operationId":"forgotPassword","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}}},"responses":{"202":{"description":"Accepted (always — never reveals whether the account exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}}}}},"/auth/reset-password":{"post":{"tags":["Auth"],"summary":"Reset the password with an emailed token","operationId":"resetPassword","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}}},"responses":{"204":{"description":"Password updated; every refresh session revoked"},"400":{"description":"Invalid or expired token / password policy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/verify-email":{"post":{"tags":["Auth"],"summary":"Verify the email address with an emailed token","operationId":"verifyEmail","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}}},"responses":{"204":{"description":"Email verified"},"400":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/resend-verification":{"post":{"tags":["Auth"],"summary":"Resend the verification email","operationId":"resendVerification","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}}},"responses":{"202":{"description":"Accepted (always — never reveals whether the account exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}}}}},"/auth/magic-link":{"post":{"tags":["Auth"],"summary":"Request a sign-in link email (roles with auth.magicLink)","operationId":"requestMagicLink","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}}},"responses":{"202":{"description":"Accepted (always — never reveals whether the account exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}}}}},"/auth/magic-login":{"post":{"tags":["Auth"],"summary":"Sign in with an emailed magic-link token","operationId":"magicLogin","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}}},"responses":{"200":{"description":"Tokens + user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"400":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/otp":{"post":{"tags":["Auth"],"summary":"Request a one-time sign-in code email (roles with auth.otp)","operationId":"requestOtp","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}}},"responses":{"202":{"description":"Accepted (always — never reveals whether the account exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}}}}},"/auth/otp-login":{"post":{"tags":["Auth"],"summary":"Sign in with an emailed one-time code","operationId":"otpLogin","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtpLoginRequest"}}}},"responses":{"200":{"description":"Tokens + user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"400":{"description":"Invalid or expired code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-category":{"get":{"tags":["Blog category"],"summary":"List Blog category","operationId":"listBlogCategory","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Blog category","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogCategory"}}}}}}},"post":{"tags":["Blog category"],"summary":"Create Blog category","operationId":"createBlogCategory","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogCategoryInput"}}}},"responses":{"201":{"description":"The created Blog category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogCategory"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-category/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Blog category"],"summary":"Get Blog category","operationId":"getBlogCategory","responses":{"200":{"description":"Blog category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogCategory"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Blog category"],"summary":"Update Blog category","operationId":"updateBlogCategory","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogCategoryInput"}}}},"responses":{"200":{"description":"The updated Blog category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogCategory"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Blog category"],"summary":"Delete Blog category","operationId":"deleteBlogCategory","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-post":{"get":{"tags":["Blog post"],"summary":"List Blog post","operationId":"listBlogPost","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Blog post","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogPost"}}}}}}},"post":{"tags":["Blog post"],"summary":"Create Blog post","operationId":"createBlogPost","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostInput"}}}},"responses":{"201":{"description":"The created Blog post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPost"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-post/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Blog post"],"summary":"Get Blog post","operationId":"getBlogPost","responses":{"200":{"description":"Blog post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPost"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Blog post"],"summary":"Update Blog post","operationId":"updateBlogPost","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostInput"}}}},"responses":{"200":{"description":"The updated Blog post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPost"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Blog post"],"summary":"Delete Blog post","operationId":"deleteBlogPost","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-post/{id}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Blog post"],"summary":"Restore Blog post","operationId":"restoreBlogPost","responses":{"200":{"description":"The restored Blog post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPost"}}}}}}},"/blog-post/{id}/duplicate":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Blog post"],"summary":"Duplicate Blog post","operationId":"duplicateBlogPost","description":"Deep-copies the record and its composition children (cascade-delete relations). Requires create on this entity and every copied child entity.","responses":{"201":{"description":"The duplicated Blog post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPost"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-post/{id}/revisions":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Blog post"],"summary":"List Blog post revisions","operationId":"listBlogPostRevisions","description":"Edit history metadata, newest first (kept to the last 5). Requires read on the live row.","responses":{"200":{"description":"Revision summaries","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-post/{id}/revisions/{no}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"no","in":"path","required":true,"schema":{"type":"integer"},"description":"Revision number (1-based, per row)."}],"get":{"tags":["Blog post"],"summary":"Get a Blog post revision","operationId":"getBlogPostRevision","description":"The full before-image of that version, field-permission-stripped.","responses":{"200":{"description":"The revision image","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/blog-post/{id}/revisions/{no}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"no","in":"path","required":true,"schema":{"type":"integer"},"description":"Revision number (1-based, per row)."}],"post":{"tags":["Blog post"],"summary":"Restore a Blog post revision","operationId":"restoreBlogPostRevision","description":"Replays the revision through the ordinary update path (update-governed); fields the caller cannot write are omitted and named in the response.","responses":{"200":{"description":"The restored row + any omitted fields","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/capability":{"get":{"tags":["Capability"],"summary":"List Capability","operationId":"listCapability","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Capability","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Capability"}}}}}}},"post":{"tags":["Capability"],"summary":"Create Capability","operationId":"createCapability","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityInput"}}}},"responses":{"201":{"description":"The created Capability","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capability"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/capability/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Capability"],"summary":"Get Capability","operationId":"getCapability","responses":{"200":{"description":"Capability","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capability"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Capability"],"summary":"Update Capability","operationId":"updateCapability","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityInput"}}}},"responses":{"200":{"description":"The updated Capability","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capability"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Capability"],"summary":"Delete Capability","operationId":"deleteCapability","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/contact-submission":{"get":{"tags":["Contact submission"],"summary":"List Contact submission","operationId":"listContactSubmission","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Contact submission","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactSubmission"}}}}}}},"post":{"tags":["Contact submission"],"summary":"Create Contact submission","operationId":"createContactSubmission","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmissionInput"}}}},"responses":{"201":{"description":"The created Contact submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmission"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/contact-submission/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Contact submission"],"summary":"Get Contact submission","operationId":"getContactSubmission","responses":{"200":{"description":"Contact submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmission"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Contact submission"],"summary":"Update Contact submission","operationId":"updateContactSubmission","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmissionInput"}}}},"responses":{"200":{"description":"The updated Contact submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmission"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Contact submission"],"summary":"Delete Contact submission","operationId":"deleteContactSubmission","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/contact-submission/{id}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Contact submission"],"summary":"Restore Contact submission","operationId":"restoreContactSubmission","responses":{"200":{"description":"The restored Contact submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmission"}}}}}}},"/content-item":{"get":{"tags":["Content item"],"summary":"List Content item","operationId":"listContentItem","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Content item","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentItem"}}}}}}},"post":{"tags":["Content item"],"summary":"Create Content item","operationId":"createContentItem","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItemInput"}}}},"responses":{"201":{"description":"The created Content item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/content-item/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Content item"],"summary":"Get Content item","operationId":"getContentItem","responses":{"200":{"description":"Content item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Content item"],"summary":"Update Content item","operationId":"updateContentItem","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItemInput"}}}},"responses":{"200":{"description":"The updated Content item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Content item"],"summary":"Delete Content item","operationId":"deleteContentItem","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/content-item/{id}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Content item"],"summary":"Restore Content item","operationId":"restoreContentItem","responses":{"200":{"description":"The restored Content item","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItem"}}}}}}},"/content-target":{"get":{"tags":["Content target"],"summary":"List Content target","operationId":"listContentTarget","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Content target","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContentTarget"}}}}}}},"post":{"tags":["Content target"],"summary":"Create Content target","operationId":"createContentTarget","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTargetInput"}}}},"responses":{"201":{"description":"The created Content target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTarget"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/content-target/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Content target"],"summary":"Get Content target","operationId":"getContentTarget","responses":{"200":{"description":"Content target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTarget"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Content target"],"summary":"Update Content target","operationId":"updateContentTarget","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTargetInput"}}}},"responses":{"200":{"description":"The updated Content target","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentTarget"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Content target"],"summary":"Delete Content target","operationId":"deleteContentTarget","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/discovery-call":{"get":{"tags":["Discovery call"],"summary":"List Discovery call","operationId":"listDiscoveryCall","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Discovery call","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DiscoveryCall"}}}}}}},"post":{"tags":["Discovery call"],"summary":"Create Discovery call","operationId":"createDiscoveryCall","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryCallInput"}}}},"responses":{"201":{"description":"The created Discovery call","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryCall"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/discovery-call/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Discovery call"],"summary":"Get Discovery call","operationId":"getDiscoveryCall","responses":{"200":{"description":"Discovery call","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryCall"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Discovery call"],"summary":"Update Discovery call","operationId":"updateDiscoveryCall","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryCallInput"}}}},"responses":{"200":{"description":"The updated Discovery call","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryCall"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Discovery call"],"summary":"Delete Discovery call","operationId":"deleteDiscoveryCall","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/discovery-call/{id}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Discovery call"],"summary":"Restore Discovery call","operationId":"restoreDiscoveryCall","responses":{"200":{"description":"The restored Discovery call","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryCall"}}}}}}},"/lead":{"get":{"tags":["Lead"],"summary":"List Lead","operationId":"listLead","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Lead","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Lead"}}}}}}},"post":{"tags":["Lead"],"summary":"Create Lead","operationId":"createLead","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadInput"}}}},"responses":{"201":{"description":"The created Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lead"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/lead/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Lead"],"summary":"Get Lead","operationId":"getLead","responses":{"200":{"description":"Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lead"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Lead"],"summary":"Update Lead","operationId":"updateLead","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadInput"}}}},"responses":{"200":{"description":"The updated Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lead"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Lead"],"summary":"Delete Lead","operationId":"deleteLead","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/lead/{id}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Lead"],"summary":"Restore Lead","operationId":"restoreLead","responses":{"200":{"description":"The restored Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lead"}}}}}}},"/lead/{id}/duplicate":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Lead"],"summary":"Duplicate Lead","operationId":"duplicateLead","description":"Deep-copies the record and its composition children (cascade-delete relations). Requires create on this entity and every copied child entity.","responses":{"201":{"description":"The duplicated Lead","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lead"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page":{"get":{"tags":["Page"],"summary":"List Page","operationId":"listPage","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Page","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Page"}}}}}}},"post":{"tags":["Page"],"summary":"Create Page","operationId":"createPage","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageInput"}}}},"responses":{"201":{"description":"The created Page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Page"],"summary":"Get Page","operationId":"getPage","responses":{"200":{"description":"Page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Page"],"summary":"Update Page","operationId":"updatePage","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageInput"}}}},"responses":{"200":{"description":"The updated Page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Page"],"summary":"Delete Page","operationId":"deletePage","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page/{id}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Page"],"summary":"Restore Page","operationId":"restorePage","responses":{"200":{"description":"The restored Page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}}}}},"/page/{id}/revisions":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Page"],"summary":"List Page revisions","operationId":"listPageRevisions","description":"Edit history metadata, newest first (kept to the last 10). Requires read on the live row.","responses":{"200":{"description":"Revision summaries","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page/{id}/revisions/{no}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"no","in":"path","required":true,"schema":{"type":"integer"},"description":"Revision number (1-based, per row)."}],"get":{"tags":["Page"],"summary":"Get a Page revision","operationId":"getPageRevision","description":"The full before-image of that version, field-permission-stripped.","responses":{"200":{"description":"The revision image","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page/{id}/revisions/{no}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"no","in":"path","required":true,"schema":{"type":"integer"},"description":"Revision number (1-based, per row)."}],"post":{"tags":["Page"],"summary":"Restore a Page revision","operationId":"restorePageRevision","description":"Replays the revision through the ordinary update path (update-governed); fields the caller cannot write are omitted and named in the response.","responses":{"200":{"description":"The restored row + any omitted fields","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page-block":{"get":{"tags":["Page block"],"summary":"List Page block","operationId":"listPageBlock","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Page block","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PageBlock"}}}}}}},"post":{"tags":["Page block"],"summary":"Create Page block","operationId":"createPageBlock","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageBlockInput"}}}},"responses":{"201":{"description":"The created Page block","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageBlock"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page-block/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Page block"],"summary":"Get Page block","operationId":"getPageBlock","responses":{"200":{"description":"Page block","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageBlock"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Page block"],"summary":"Update Page block","operationId":"updatePageBlock","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageBlockInput"}}}},"responses":{"200":{"description":"The updated Page block","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageBlock"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Page block"],"summary":"Delete Page block","operationId":"deletePageBlock","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page-block/{id}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Page block"],"summary":"Restore Page block","operationId":"restorePageBlock","responses":{"200":{"description":"The restored Page block","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageBlock"}}}}}}},"/page-block/{id}/revisions":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Page block"],"summary":"List Page block revisions","operationId":"listPageBlockRevisions","description":"Edit history metadata, newest first (kept to the last 10). Requires read on the live row.","responses":{"200":{"description":"Revision summaries","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page-block/{id}/revisions/{no}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"no","in":"path","required":true,"schema":{"type":"integer"},"description":"Revision number (1-based, per row)."}],"get":{"tags":["Page block"],"summary":"Get a Page block revision","operationId":"getPageBlockRevision","description":"The full before-image of that version, field-permission-stripped.","responses":{"200":{"description":"The revision image","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/page-block/{id}/revisions/{no}/restore":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"no","in":"path","required":true,"schema":{"type":"integer"},"description":"Revision number (1-based, per row)."}],"post":{"tags":["Page block"],"summary":"Restore a Page block revision","operationId":"restorePageBlockRevision","description":"Replays the revision through the ordinary update path (update-governed); fields the caller cannot write are omitted and named in the response.","responses":{"200":{"description":"The restored row + any omitted fields","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/redirect":{"get":{"tags":["Redirect"],"summary":"List Redirect","operationId":"listRedirect","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Redirect","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Redirect"}}}}}}},"post":{"tags":["Redirect"],"summary":"Create Redirect","operationId":"createRedirect","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectInput"}}}},"responses":{"201":{"description":"The created Redirect","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Redirect"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/redirect/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Redirect"],"summary":"Get Redirect","operationId":"getRedirect","responses":{"200":{"description":"Redirect","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Redirect"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Redirect"],"summary":"Update Redirect","operationId":"updateRedirect","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectInput"}}}},"responses":{"200":{"description":"The updated Redirect","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Redirect"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Redirect"],"summary":"Delete Redirect","operationId":"deleteRedirect","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/release":{"get":{"tags":["Release"],"summary":"List Release","operationId":"listRelease","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Release","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Release"}}}}}}},"post":{"tags":["Release"],"summary":"Create Release","operationId":"createRelease","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseInput"}}}},"responses":{"201":{"description":"The created Release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/release/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Release"],"summary":"Get Release","operationId":"getRelease","responses":{"200":{"description":"Release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Release"],"summary":"Update Release","operationId":"updateRelease","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReleaseInput"}}}},"responses":{"200":{"description":"The updated Release","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Release"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Release"],"summary":"Delete Release","operationId":"deleteRelease","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/site-build":{"get":{"tags":["Site build"],"summary":"List Site build","operationId":"listSiteBuild","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Site build","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SiteBuild"}}}}}}},"post":{"tags":["Site build"],"summary":"Create Site build","operationId":"createSiteBuild","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteBuildInput"}}}},"responses":{"201":{"description":"The created Site build","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteBuild"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/site-build/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Site build"],"summary":"Get Site build","operationId":"getSiteBuild","responses":{"200":{"description":"Site build","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteBuild"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Site build"],"summary":"Update Site build","operationId":"updateSiteBuild","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteBuildInput"}}}},"responses":{"200":{"description":"The updated Site build","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteBuild"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Site build"],"summary":"Delete Site build","operationId":"deleteSiteBuild","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/site-event":{"get":{"tags":["Site event"],"summary":"List Site event","operationId":"listSiteEvent","description":"Also accepts `?<column>=` filters (eq, repeated = IN, plus `__ne|gt|gte|lt|lte|like|in` suffixes).","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","default":10}},{"name":"sort","in":"query","description":"Column(s) to sort by; `-` prefix = desc, comma-separated.","schema":{"type":"string"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"A page of Site event","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SiteEvent"}}}}}}},"post":{"tags":["Site event"],"summary":"Create Site event","operationId":"createSiteEvent","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteEventInput"}}}},"responses":{"201":{"description":"The created Site event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteEvent"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/site-event/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Site event"],"summary":"Get Site event","operationId":"getSiteEvent","responses":{"200":{"description":"Site event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteEvent"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Site event"],"summary":"Update Site event","operationId":"updateSiteEvent","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteEventInput"}}}},"responses":{"200":{"description":"The updated Site event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteEvent"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Site event"],"summary":"Delete Site event","operationId":"deleteSiteEvent","responses":{"204":{"description":"Deleted"},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/views/events-avg-dwell":{"get":{"tags":["Views"],"summary":"Time on page","operationId":"viewEventsAvgDwell","responses":{"200":{"description":"Aggregated rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/views/events-by-category":{"get":{"tags":["Views"],"summary":"Most-read categories","operationId":"viewEventsByCategory","responses":{"200":{"description":"Aggregated rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/views/events-by-day":{"get":{"tags":["Views"],"summary":"Visits over time","operationId":"viewEventsByDay","responses":{"200":{"description":"Aggregated rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/views/events-by-source":{"get":{"tags":["Views"],"summary":"Visits by UTM source","operationId":"viewEventsBySource","responses":{"200":{"description":"Aggregated rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/views/events-top-pages":{"get":{"tags":["Views"],"summary":"Most-read pages","operationId":"viewEventsTopPages","responses":{"200":{"description":"Aggregated rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/views/pages-by-status":{"get":{"tags":["Views"],"summary":"Pages by status","operationId":"viewPagesByStatus","responses":{"200":{"description":"Aggregated rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/views/posts-by-status":{"get":{"tags":["Views"],"summary":"Posts by status","operationId":"viewPostsByStatus","responses":{"200":{"description":"Aggregated rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/releases/execute":{"post":{"tags":["Custom"],"summary":"Execute due releases","operationId":"customExecuteReleases","responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/capabilities":{"get":{"tags":["Custom"],"summary":"What SDUK Studio builds, includes and connects to","operationId":"customPublicCapabilities","responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/posts/{slug}":{"get":{"tags":["Custom"],"summary":"Public blog post by slug","operationId":"customPublicPost","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":200}}],"responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/public/posts":{"get":{"tags":["Custom"],"summary":"Public blog posts","operationId":"customPublicPosts","responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/posts/{id}/publish-now":{"post":{"tags":["Custom"],"summary":"Publish post now","operationId":"customPublishPost","responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/publish/prod":{"post":{"tags":["Custom"],"summary":"Publish to production","operationId":"customPublishProd","responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/publish/staging":{"post":{"tags":["Custom"],"summary":"Publish to staging","operationId":"customPublishStaging","responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/discovery/book":{"post":{"tags":["Custom"],"summary":"Request a discovery call","operationId":"customRequestDiscoveryCall","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"full-name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string","maxLength":40,"format":"phone"},"contact-preference":{"type":"string","enum":["email","phone","either"]},"company":{"type":"string"},"project-type":{"type":"string","enum":["web-data-app","mobile-app","3d-cad","internal-tool","other","unsure"]},"summary":{"type":"string"},"timeline":{"type":"string","enum":["exploring","under-3-months","3-to-6-months","6-months-plus","unsure"]},"tenancy-need":{"type":"string","enum":["single-org","multi-tenant","unsure"]},"entity-count-band":{"type":"string","enum":["small-1-10","medium-11-30","large-30-plus","unsure"]},"concurrent-users-band":{"type":"string","enum":["under-50","50-to-500","500-plus","unsure"]},"data-volume-band":{"type":"string","enum":["low","medium","high","unsure"]},"country":{"type":"string"},"data-residency":{"type":"string","enum":["uk","eu","us","other","unsure"]},"compliance-level":{"type":"string","enum":["standard-gdpr","nhs-dspt","fca","other-regulated","unsure"]},"proposed-route":{"type":"string","enum":["studio","bespoke-sduk-team","either"]},"requested-time":{"type":"string"},"alternative-times":{"type":"string"}},"required":["full-name","email","project-type"]}}}},"responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/site-build/report":{"post":{"tags":["Custom"],"summary":"Site build report (pipeline machine callback)","operationId":"customSiteBuildReport","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"build-id":{"type":"string"},"status":{"type":"string","enum":["running","succeeded","failed"]},"detail":{"type":"string"},"workflow-run":{"type":"string"},"duration-seconds":{"type":"string"}},"required":["build-id","status"]}}}},"responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/posts/{id}/stage":{"post":{"tags":["Custom"],"summary":"Push post to staging","operationId":"customStagePost","responses":{"200":{"description":"Success"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/nav":{"get":{"tags":["Navigation"],"summary":"Role-scoped navigation","operationId":"getNav","security":[],"responses":{"200":{"description":"Menus pruned to the requester’s role","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NavMenu"}}}}}}}},"/admin/users":{"get":{"tags":["Admin users"],"summary":"List users","operationId":"adminListUsers","responses":{"200":{"description":"Users","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminUser"}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Admin users"],"summary":"Create user","operationId":"adminCreateUser","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserInput"}}}},"responses":{"201":{"description":"Created user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUser"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/admin/users/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Admin users"],"summary":"Get user","operationId":"adminGetUser","responses":{"200":{"description":"User","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUser"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Admin users"],"summary":"Update user","operationId":"adminUpdateUser","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserInput"}}}},"responses":{"200":{"description":"Updated user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUser"}}}}}},"delete":{"tags":["Admin users"],"summary":"Delete user","operationId":"adminDeleteUser","responses":{"204":{"description":"Deleted"}}}},"/admin/users/{id}/send-reset-email":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"post":{"tags":["Admin users"],"summary":"Email the user a password-reset link (the admin never knows the credential)","operationId":"adminSendResetEmail","responses":{"202":{"description":"Accepted — the send is fire-and-forget","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/admin/breach-exposure":{"get":{"tags":["Breach exposure"],"summary":"Live breach-exposure estimate (indicative risk-ranking, not an actuarial valuation)","operationId":"getBreachExposure","responses":{"200":{"description":"Breach-exposure estimate","content":{"application/json":{"schema":{"type":"object","properties":{"generatedAt":{"type":"string"},"currency":{"type":"string"},"bandVersion":{"type":"string"},"entities":{"type":"array","items":{"type":"object"}},"system":{"type":"object","properties":{"estLow":{"type":"number"},"estHigh":{"type":"number"}}},"disclaimer":{"type":"string"}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/admin/subjects/{entity}/{id}/export":{"parameters":[{"name":"entity","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Subject access"],"summary":"Export everything held about a data subject (GDPR Art. 15/20) — declared personal data only, classification metadata per field","operationId":"exportSubject","responses":{"200":{"description":"The structured export (subject fields + related rows, each field annotated with its classification)","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such data subject","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/admin/erasure":{"post":{"tags":["Erasure"],"summary":"Execute a GDPR right-to-erasure for a data subject (redact/delete per declared policy)","operationId":"executeErasure","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["entity","id"],"properties":{"entity":{"type":"string"},"id":{"type":"integer"},"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"Erasure summary (tables touched + counts; never the erased values)","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such data subject","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/admin/erasure/{entity}/{id}/preview":{"parameters":[{"name":"entity","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Erasure"],"summary":"Preview a right-to-erasure — what would be redacted/deleted, without mutating","operationId":"previewErasure","responses":{"200":{"description":"Erasure plan","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such data subject","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/files":{"post":{"tags":["Files"],"summary":"Upload a file","operationId":"uploadFile","description":"multipart/form-data with a `file` part. Returns the file metadata; put the returned id on the entity’s file/image column.","parameters":[{"name":"entity","in":"query","description":"Target entity slug — applies that field’s declared limits.","schema":{"type":"string"}},{"name":"field","in":"query","description":"Target file/image field slug.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"entity":{"type":"string"},"field":{"type":"string"}},"required":["file"]}}}},"responses":{"201":{"description":"File metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileMeta"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"File too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/files/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Files"],"summary":"Download a file","operationId":"downloadFile","responses":{"200":{"description":"The file bytes","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Files"],"summary":"Delete a file","operationId":"deleteFile","responses":{"204":{"description":"Deleted"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/files/{id}/meta":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"get":{"tags":["Files"],"summary":"File metadata","operationId":"getFileMeta","responses":{"200":{"description":"File metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileMeta"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"object","nullable":true,"additionalProperties":true}},"required":["error"]},"AuthUser":{"type":"object","properties":{"user_id":{"type":"integer"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"status":{"type":"string"}}},"TokenPair":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"user":{"$ref":"#/components/schemas/AuthUser"}}},"LoginRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]},"RegisterRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"},"profile":{"type":"object","additionalProperties":true}},"required":["email","password"]},"RefreshRequest":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"]},"EmailRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]},"TokenRequest":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]},"ResetPasswordRequest":{"type":"object","properties":{"token":{"type":"string"},"password":{"type":"string","minLength":8}},"required":["token","password"]},"OtpLoginRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string","minLength":6,"maxLength":6}},"required":["email","code"]},"Accepted":{"type":"object","properties":{"status":{"type":"string","enum":["accepted"]}},"required":["status"]},"NavMenu":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/NavItem"}}}},"NavItem":{"type":"object","properties":{"label":{"type":"string"},"page":{"type":"string"},"path":{"type":"string"},"url":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/NavItem"}}}},"AdminUser":{"type":"object","properties":{"user_id":{"type":"integer","readOnly":true},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"status":{"type":"string"},"role_id":{"type":"integer"},"primary_entity_id":{"type":"integer","nullable":true},"bindings":{"type":"array","items":{"$ref":"#/components/schemas/UserBinding"}}}},"AdminUserInput":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"},"displayName":{"type":"string"},"role":{"type":"string"},"status":{"type":"string","enum":["active","suspended","pending"]},"primaryEntityId":{"type":"integer","nullable":true},"bindings":{"type":"array","items":{"$ref":"#/components/schemas/UserBinding"}}},"required":["email","role"]},"UserBinding":{"type":"object","properties":{"entity":{"type":"string"},"entityId":{"type":"integer"}},"required":["entity","entityId"]},"FileMeta":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"originalName":{"type":"string"},"mimeType":{"type":"string"},"sizeBytes":{"type":"integer"},"entitySlug":{"type":"string","nullable":true},"fieldSlug":{"type":"string","nullable":true},"ownerUserId":{"type":"integer","nullable":true}}},"BlogCategory":{"type":"object","properties":{"blog_category_id":{"type":"integer","readOnly":true},"code":{"type":"string","maxLength":60,"format":"slug"},"name":{"type":"string","maxLength":120},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"BlogCategoryInput":{"type":"object","properties":{"code":{"type":"string","maxLength":60,"format":"slug"},"name":{"type":"string","maxLength":120}},"required":["code","name"]},"BlogPost":{"type":"object","properties":{"blog_post_id":{"type":"integer","readOnly":true},"title":{"type":"string","maxLength":200},"meta_title":{"type":"string","maxLength":70},"slug":{"type":"string","maxLength":200,"format":"slug"},"excerpt":{"type":"string"},"hero":{"type":"integer","description":"File reference (core_file id)."},"body":{"type":"string"},"published_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["draft","staging","published"],"default":"draft"},"category_id":{"type":"integer"},"release_id":{"type":"integer"},"target_id":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"BlogPostInput":{"type":"object","properties":{"title":{"type":"string","maxLength":200},"meta_title":{"type":"string","maxLength":70},"slug":{"type":"string","maxLength":200,"format":"slug"},"excerpt":{"type":"string"},"hero":{"type":"integer","description":"File reference (core_file id)."},"body":{"type":"string"},"published_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["draft","staging","published"],"default":"draft"},"category_id":{"type":"integer"},"release_id":{"type":"integer"},"target_id":{"type":"integer"}},"required":["title","slug","status","category_id"]},"Capability":{"type":"object","properties":{"capability_id":{"type":"integer","readOnly":true},"code":{"type":"string","maxLength":60,"format":"slug"},"kind":{"type":"string","enum":["project-type","included","integration"]},"name":{"type":"string","maxLength":120},"summary":{"type":"string"},"detail":{"type":"string","maxLength":200},"route":{"type":"string","enum":["studio","bespoke-sduk-team","either"]},"display_order":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"CapabilityInput":{"type":"object","properties":{"code":{"type":"string","maxLength":60,"format":"slug"},"kind":{"type":"string","enum":["project-type","included","integration"]},"name":{"type":"string","maxLength":120},"summary":{"type":"string"},"detail":{"type":"string","maxLength":200},"route":{"type":"string","enum":["studio","bespoke-sduk-team","either"]},"display_order":{"type":"integer"}},"required":["code","kind","name","summary","display_order"]},"ContactSubmission":{"type":"object","properties":{"contact_submission_id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":120},"email":{"type":"string","maxLength":254,"format":"email"},"company":{"type":"string","maxLength":160},"message":{"type":"string"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"ContactSubmissionInput":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"email":{"type":"string","maxLength":254,"format":"email"},"company":{"type":"string","maxLength":160},"message":{"type":"string"}},"required":["name","email","message"]},"ContentItem":{"type":"object","properties":{"content_item_id":{"type":"integer","readOnly":true},"title":{"type":"string","maxLength":200},"status":{"type":"string","enum":["idea","planned","drafted","staging","published"],"default":"idea"},"target_keyword":{"type":"string","maxLength":160},"brief":{"type":"string"},"category_id":{"type":"integer"},"post_id":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"ContentItemInput":{"type":"object","properties":{"title":{"type":"string","maxLength":200},"status":{"type":"string","enum":["idea","planned","drafted","staging","published"],"default":"idea"},"target_keyword":{"type":"string","maxLength":160},"brief":{"type":"string"},"category_id":{"type":"integer"},"post_id":{"type":"integer"}},"required":["title","status"]},"ContentTarget":{"type":"object","properties":{"content_target_id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":120},"cadence":{"type":"string","enum":["weekly-days","monthly-count"],"default":"weekly-days"},"days":{"type":"string","maxLength":60},"monthly_target":{"type":"integer"},"active":{"type":"boolean","default":true},"category_id":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"ContentTargetInput":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"cadence":{"type":"string","enum":["weekly-days","monthly-count"],"default":"weekly-days"},"days":{"type":"string","maxLength":60},"monthly_target":{"type":"integer"},"active":{"type":"boolean","default":true},"category_id":{"type":"integer"}},"required":["name","cadence","monthly_target","active"]},"DiscoveryCall":{"type":"object","properties":{"discovery_call_id":{"type":"integer","readOnly":true},"requested_time":{"type":"string","maxLength":200},"alternative_times":{"type":"string"},"status":{"type":"string","enum":["provisional","confirmed","declined"],"default":"provisional"},"notes":{"type":"string"},"lead_id":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"DiscoveryCallInput":{"type":"object","properties":{"requested_time":{"type":"string","maxLength":200},"alternative_times":{"type":"string"},"status":{"type":"string","enum":["provisional","confirmed","declined"],"default":"provisional"},"notes":{"type":"string"},"lead_id":{"type":"integer"}},"required":["status","lead_id"]},"Lead":{"type":"object","properties":{"lead_id":{"type":"integer","readOnly":true},"full_name":{"type":"string","maxLength":120},"email":{"type":"string","maxLength":254,"format":"email"},"phone":{"type":"string","maxLength":40,"format":"phone"},"contact_preference":{"type":"string","enum":["email","phone","either"]},"company":{"type":"string","maxLength":160},"project_type":{"type":"string","enum":["web-data-app","mobile-app","3d-cad","internal-tool","other","unsure"]},"summary":{"type":"string"},"timeline":{"type":"string","enum":["exploring","under-3-months","3-to-6-months","6-months-plus","unsure"]},"tenancy_need":{"type":"string","enum":["single-org","multi-tenant","unsure"]},"entity_count_band":{"type":"string","enum":["small-1-10","medium-11-30","large-30-plus","unsure"]},"concurrent_users_band":{"type":"string","enum":["under-50","50-to-500","500-plus","unsure"]},"data_volume_band":{"type":"string","enum":["low","medium","high","unsure"]},"country":{"type":"string","maxLength":80},"data_residency":{"type":"string","enum":["uk","eu","us","other","unsure"]},"compliance_level":{"type":"string","enum":["standard-gdpr","nhs-dspt","fca","other-regulated","unsure"]},"proposed_route":{"type":"string","enum":["studio","bespoke-sduk-team","either"]},"source":{"type":"string","enum":["assistant","mcp-agent"],"default":"assistant"},"status":{"type":"string","enum":["new","reviewed","contacted","qualified","archived"],"default":"new"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"LeadInput":{"type":"object","properties":{"full_name":{"type":"string","maxLength":120},"email":{"type":"string","maxLength":254,"format":"email"},"phone":{"type":"string","maxLength":40,"format":"phone"},"contact_preference":{"type":"string","enum":["email","phone","either"]},"company":{"type":"string","maxLength":160},"project_type":{"type":"string","enum":["web-data-app","mobile-app","3d-cad","internal-tool","other","unsure"]},"summary":{"type":"string"},"timeline":{"type":"string","enum":["exploring","under-3-months","3-to-6-months","6-months-plus","unsure"]},"tenancy_need":{"type":"string","enum":["single-org","multi-tenant","unsure"]},"entity_count_band":{"type":"string","enum":["small-1-10","medium-11-30","large-30-plus","unsure"]},"concurrent_users_band":{"type":"string","enum":["under-50","50-to-500","500-plus","unsure"]},"data_volume_band":{"type":"string","enum":["low","medium","high","unsure"]},"country":{"type":"string","maxLength":80},"data_residency":{"type":"string","enum":["uk","eu","us","other","unsure"]},"compliance_level":{"type":"string","enum":["standard-gdpr","nhs-dspt","fca","other-regulated","unsure"]},"proposed_route":{"type":"string","enum":["studio","bespoke-sduk-team","either"]},"source":{"type":"string","enum":["assistant","mcp-agent"],"default":"assistant"},"status":{"type":"string","enum":["new","reviewed","contacted","qualified","archived"],"default":"new"}},"required":["full_name","email","project_type","source","status"]},"Page":{"type":"object","properties":{"page_id":{"type":"integer","readOnly":true},"slug":{"type":"string","maxLength":80,"format":"slug"},"template":{"type":"string","enum":["home","legal","blog-index"]},"title":{"type":"string","maxLength":120},"meta_title":{"type":"string","maxLength":70},"meta_description":{"type":"string"},"status":{"type":"string","enum":["draft","staging","published"],"default":"draft"},"release_id":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"PageInput":{"type":"object","properties":{"slug":{"type":"string","maxLength":80,"format":"slug"},"template":{"type":"string","enum":["home","legal","blog-index"]},"title":{"type":"string","maxLength":120},"meta_title":{"type":"string","maxLength":70},"meta_description":{"type":"string"},"status":{"type":"string","enum":["draft","staging","published"],"default":"draft"},"release_id":{"type":"integer"}},"required":["slug","template","title","status"]},"PageBlock":{"type":"object","properties":{"page_block_id":{"type":"integer","readOnly":true},"slot":{"type":"string","maxLength":80},"kind":{"type":"string","enum":["text","richtext","image","stat","quote"],"default":"text"},"text":{"type":"string"},"rich":{"type":"string"},"image":{"type":"integer","description":"File reference (core_file id)."},"sort":{"type":"integer"},"page_id":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true},"deleted_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}}},"PageBlockInput":{"type":"object","properties":{"slot":{"type":"string","maxLength":80},"kind":{"type":"string","enum":["text","richtext","image","stat","quote"],"default":"text"},"text":{"type":"string"},"rich":{"type":"string"},"image":{"type":"integer","description":"File reference (core_file id)."},"sort":{"type":"integer"},"page_id":{"type":"integer"}},"required":["slot","kind","page_id"]},"Redirect":{"type":"object","properties":{"redirect_id":{"type":"integer","readOnly":true},"from_path":{"type":"string","maxLength":200},"to_path":{"type":"string","maxLength":200},"kind":{"type":"string","enum":["slug-change","vanity"],"default":"vanity"},"note":{"type":"string","maxLength":200},"active":{"type":"boolean","default":true},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"RedirectInput":{"type":"object","properties":{"from_path":{"type":"string","maxLength":200},"to_path":{"type":"string","maxLength":200},"kind":{"type":"string","enum":["slug-change","vanity"],"default":"vanity"},"note":{"type":"string","maxLength":200},"active":{"type":"boolean","default":true}},"required":["from_path","to_path","kind","active"]},"Release":{"type":"object","properties":{"release_id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":120},"scheduled_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["pending","executed","failed"],"default":"pending"},"executed_at":{"type":"string","format":"date-time"},"detail":{"type":"string"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"ReleaseInput":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"scheduled_at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["pending","executed","failed"],"default":"pending"},"executed_at":{"type":"string","format":"date-time"},"detail":{"type":"string"}},"required":["name","scheduled_at","status"]},"SiteBuild":{"type":"object","properties":{"site_build_id":{"type":"integer","readOnly":true},"environment":{"type":"string","enum":["staging","prod"]},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"default":"queued"},"requested_by":{"type":"string","maxLength":254},"finished_at":{"type":"string","format":"date-time"},"duration_seconds":{"type":"integer"},"workflow_run":{"type":"string","maxLength":300},"detail":{"type":"string"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"SiteBuildInput":{"type":"object","properties":{"environment":{"type":"string","enum":["staging","prod"]},"status":{"type":"string","enum":["queued","running","succeeded","failed"],"default":"queued"},"requested_by":{"type":"string","maxLength":254},"finished_at":{"type":"string","format":"date-time"},"duration_seconds":{"type":"integer"},"workflow_run":{"type":"string","maxLength":300},"detail":{"type":"string"}},"required":["environment","status"]},"SiteEvent":{"type":"object","properties":{"site_event_id":{"type":"integer","readOnly":true},"path":{"type":"string","maxLength":220},"day":{"type":"string","maxLength":10},"kind":{"type":"string","enum":["view","dwell"],"default":"view"},"session":{"type":"string","maxLength":40},"referrer":{"type":"string","maxLength":300},"utm_source":{"type":"string","maxLength":100},"utm_medium":{"type":"string","maxLength":100},"utm_campaign":{"type":"string","maxLength":100},"viewport":{"type":"string","enum":["mobile","tablet","desktop"]},"dwell_seconds":{"type":"integer"},"post_id":{"type":"integer"},"category_id":{"type":"integer"},"created_at":{"type":"string","format":"date-time","readOnly":true},"updated_at":{"type":"string","format":"date-time","readOnly":true}}},"SiteEventInput":{"type":"object","properties":{"path":{"type":"string","maxLength":220},"day":{"type":"string","maxLength":10},"kind":{"type":"string","enum":["view","dwell"],"default":"view"},"session":{"type":"string","maxLength":40},"referrer":{"type":"string","maxLength":300},"utm_source":{"type":"string","maxLength":100},"utm_medium":{"type":"string","maxLength":100},"utm_campaign":{"type":"string","maxLength":100},"viewport":{"type":"string","enum":["mobile","tablet","desktop"]},"dwell_seconds":{"type":"integer"},"post_id":{"type":"integer"},"category_id":{"type":"integer"}},"required":["path","kind","session"]}}}}