{"openapi":"3.1.0","info":{"title":"ClarkCant Marketplace API","version":"1.0.0","description":"Discovery and curation for ClarkCant packages. The marketplace lists and describes packages; npm distributes them and ClarkCant installs and runs them. Nothing returned by this API grants runtime permissions."},"servers":[{"url":"https://marketplace.clarkcant.cc"}],"tags":[{"name":"system","description":"Health and metadata"},{"name":"packages","description":"Package listings"},{"name":"search","description":"Full-text search"},{"name":"catalog","description":"Categories and collections"},{"name":"pages","description":"Published page documents and the page builder admin API (versioned, If-Match guarded)"},{"name":"account","description":"The signed-in account, personal API tokens, linked devices and OAuth grants"},{"name":"publishers","description":"Publisher organisations, members, verification and package claims"},{"name":"publish","description":"Package submissions: ask the marketplace to index an npm package version"},{"name":"curation","description":"Curator commands (packages:curate): curation status, featuring and collections"}],"security":[{"bearerAuth":[]},{"sessionCookie":[]},{}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal API token (`cmk_…`), OAuth access token (audience `<origin>/api/v1`), or a session token"},"sessionCookie":{"type":"apiKey","in":"cookie","name":"better-auth.session_token","description":"Browser session; mutations must come from the site's own origin"}},"schemas":{"Health":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"]},"environment":{"type":"string","enum":["development","staging","production"]},"checkedAt":{"type":"string","format":"date-time"},"checks":{"type":"object","properties":{"database":{"type":"string","enum":["ok","error"]}},"required":["database"]}},"required":["status","environment","checkedAt","checks"]},"PackageVersionList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"indexedAt":{"type":"string","format":"date-time"},"npmIntegrity":{"type":"string"},"tarballSha512Verified":{"type":"boolean"},"hasProvenance":{"type":"boolean"}},"required":["version","publishedAt","indexedAt","npmIntegrity","tarballSha512Verified","hasProvenance"]}}},"required":["items"]},"CategoryList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"packageCount":{"type":"integer","minimum":0}},"required":["slug","name","description","packageCount"]}}},"required":["items"]},"CollectionList":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"}},"required":["slug","title","description"]}}},"required":["items"]},"SubmitPackageResult":{"type":"object","properties":{"submission":{"type":"object","properties":{"id":{"type":"string"},"packageName":{"type":"string"},"version":{"type":["string","null"]},"status":{"type":"string","enum":["queued","indexing","indexed","failed"]},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","packageName","version","status","error","createdAt","updatedAt"]},"created":{"type":"boolean"}},"required":["submission","created"]}},"parameters":{}},"paths":{"/api/v1/health":{"get":{"operationId":"getHealth","tags":["system"],"summary":"Service health, including a live database round-trip","responses":{"200":{"description":"Healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"503":{"description":"A dependency is failing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/api/v1/packages":{"get":{"operationId":"listPackages","tags":["packages"],"summary":"List publicly visible packages","description":"Filters combine with AND: `q` (full text), `category`, facet `kind` and `isolation`, `platform`, `publisher` (slug) and `curation` (`listed` or `featured`). Facet and platform filters apply to the latest version.","parameters":[{"schema":{"type":"string","maxLength":200,"default":""},"required":false,"name":"q","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":false,"name":"category","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z-]+$"},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string","enum":["declarative","service","isolated-ui","trusted-native"]},"required":false,"name":"isolation","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"required":false,"name":"platform","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":false,"name":"publisher","in":"query"},{"schema":{"type":"string","enum":["listed","featured"]},"required":false,"name":"curation","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":200},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["latest","name","relevance"]},"required":false,"name":"sort","in":"query"}],"responses":{"200":{"description":"A page of packages","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"latestVersion":{"type":["string","null"]},"publisher":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"}},"required":["slug","name","verified"]},"categorySlug":{"type":["string","null"]},"curationStatus":{"type":"string","enum":["unreviewed","listed","featured","hidden","rejected"]},"keywords":{"type":"array","items":{"type":"string"}},"indexedAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["name","displayName","description","latestVersion","publisher","categorySlug","curationStatus","keywords","indexedAt","updatedAt"]}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Invalid request (`validation_failed` or `bad_request`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/packages/{name}":{"get":{"operationId":"getPackage","tags":["packages"],"summary":"Get one package by npm name (URL-encode scoped names: %40scope%2Fname)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":214,"example":"%40acme%2Fchart-widget"},"required":true,"name":"name","in":"path"}],"responses":{"200":{"description":"Package detail","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"latestVersion":{"type":["string","null"]},"publisher":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"}},"required":["slug","name","verified"]},"categorySlug":{"type":["string","null"]},"curationStatus":{"type":"string","enum":["unreviewed","listed","featured","hidden","rejected"]},"keywords":{"type":"array","items":{"type":"string"}},"indexedAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"homepage":{"type":["string","null"]},"repositoryUrl":{"type":["string","null"]},"license":{"type":["string","null"]},"latest":{"type":["object","null"],"properties":{"version":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"indexedAt":{"type":"string","format":"date-time"},"npmIntegrity":{"type":"string"},"tarballSha512Verified":{"type":"boolean"},"hasProvenance":{"type":"boolean"},"readmeHtml":{"type":["string","null"]},"platforms":{"type":"array","items":{"type":"string"}},"facets":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"isolation":{"type":"string"},"renderer":{"type":["string","null"]},"entry":{"type":"string"},"widgetId":{"type":["string","null"]}},"required":["kind","isolation","renderer","entry","widgetId"]}},"permissions":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["capability","network","filesystem","microphone","camera","lifecycle"]},"value":{"type":"string"},"access":{"type":["string","null"]}},"required":["kind","value","access"]}},"previews":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["image","video","social_card"]},"url":{"type":"string"},"alt":{"type":"string"},"contentType":{"type":"string"},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]}},"required":["kind","url","alt","contentType","width","height"]}},"securityChecks":{"type":"array","items":{"type":"object","properties":{"check":{"type":"string"},"result":{"type":"string","enum":["pass","warn","fail"]},"details":{}},"required":["check","result"]}}},"required":["version","publishedAt","indexedAt","npmIntegrity","tarballSha512Verified","hasProvenance","readmeHtml","platforms","facets","permissions","previews","securityChecks"]},"versions":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"}},"required":["version","publishedAt"]}}},"required":["name","displayName","description","latestVersion","publisher","categorySlug","curationStatus","keywords","indexedAt","updatedAt","homepage","repositoryUrl","license","latest","versions"]}}}},"400":{"description":"Invalid request (`validation_failed` or `bad_request`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/packages/{name}/versions":{"get":{"operationId":"listPackageVersions","tags":["packages"],"summary":"Every indexed version, newest first, with integrity and provenance facts","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":214,"example":"%40acme%2Fchart-widget"},"required":true,"name":"name","in":"path"}],"responses":{"200":{"description":"Indexed versions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageVersionList"}}}},"400":{"description":"Invalid request (`validation_failed` or `bad_request`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/packages/{name}/install":{"get":{"operationId":"getPackageInstall","tags":["packages"],"summary":"Install coordinate for one exact version (latest unless `version` is given)","description":"Returns `{package, version, source: \"npm\", integrity}` plus the PROPOSED `clarkcant://install` deep link and a CLI fallback. The marketplace never serves the artifact; ClarkCant downloads it from npm, re-verifies the integrity and asks for consent. Nothing here grants permissions.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":214,"example":"%40acme%2Fchart-widget"},"required":true,"name":"name","in":"path"},{"schema":{"type":"string","pattern":"^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$"},"required":false,"name":"version","in":"query"}],"responses":{"200":{"description":"Install coordinate","content":{"application/json":{"schema":{"type":"object","properties":{"package":{"type":"string"},"version":{"type":"string"},"source":{"type":"string","enum":["npm"]},"integrity":{"type":"string"},"openInClarkCant":{"type":"string"},"cliCommand":{"type":"string"}},"required":["package","version","source","integrity","openInClarkCant","cliCommand"]}}}},"400":{"description":"Invalid request (`validation_failed` or `bad_request`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/search":{"get":{"operationId":"searchPackages","tags":["search"],"summary":"Full-text search over publicly visible packages; an empty `q` browses by recency","parameters":[{"schema":{"type":"string","maxLength":200,"default":""},"required":false,"name":"q","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":false,"name":"category","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[a-z-]+$"},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string","enum":["declarative","service","isolated-ui","trusted-native"]},"required":false,"name":"isolation","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":40,"pattern":"^[a-z0-9-]+$"},"required":false,"name":"platform","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":false,"name":"publisher","in":"query"},{"schema":{"type":"string","enum":["listed","featured"]},"required":false,"name":"curation","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":200},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Ranked results","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"latestVersion":{"type":["string","null"]},"publisher":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"}},"required":["slug","name","verified"]},"categorySlug":{"type":["string","null"]},"curationStatus":{"type":"string","enum":["unreviewed","listed","featured","hidden","rejected"]},"keywords":{"type":"array","items":{"type":"string"}},"indexedAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["name","displayName","description","latestVersion","publisher","categorySlug","curationStatus","keywords","indexedAt","updatedAt"]}},"nextCursor":{"type":["string","null"]}},"required":["query","items","nextCursor"]}}}},"400":{"description":"Invalid request (`validation_failed` or `bad_request`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/curation/packages/{name}/status":{"post":{"operationId":"setCurationStatus","tags":["curation"],"summary":"Set a package's curation status (unreviewed, listed, featured, hidden, rejected)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":214,"example":"%40acme%2Fchart-widget"},"required":true,"name":"name","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["unreviewed","listed","featured","hidden","rejected"]},"reason":{"type":"string","maxLength":500}},"required":["status"]}}}},"responses":{"200":{"description":"Resulting curation state","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"curationStatus":{"type":"string","enum":["unreviewed","listed","featured","hidden","rejected"]}},"required":["name","curationStatus"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `packages:curate` scope or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Package or collection not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/curation/packages/{name}/featured":{"post":{"operationId":"featurePackage","tags":["curation"],"summary":"Feature a package, or return a featured package to plain listing","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":214,"example":"%40acme%2Fchart-widget"},"required":true,"name":"name","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"featured":{"type":"boolean"}},"required":["featured"]}}}},"responses":{"200":{"description":"Resulting curation state","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"curationStatus":{"type":"string","enum":["unreviewed","listed","featured","hidden","rejected"]}},"required":["name","curationStatus"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `packages:curate` scope or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Package or collection not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/curation/collections/{slug}":{"get":{"operationId":"getCollectionState","tags":["curation"],"summary":"Admin view of a collection, including unpublished state and non-public items","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"Collection state","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"published":{"type":"boolean"},"position":{"type":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"packageName":{"type":"string"},"position":{"type":"integer"},"note":{"type":["string","null"]}},"required":["packageName","position","note"]}}},"required":["slug","title","description","published","position","items"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `packages:curate` scope or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Package or collection not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"manageCollection","tags":["curation"],"summary":"Run one collection command: create, update, add_item, remove_item or reorder","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"action":{"type":"string","enum":["create"]},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":600,"default":""},"published":{"type":"boolean","default":false},"position":{"type":"integer","minimum":0,"maximum":10000,"default":0}},"required":["action","title"]},{"type":"object","properties":{"action":{"type":"string","enum":["update"]},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":600},"published":{"type":"boolean"},"position":{"type":"integer","minimum":0,"maximum":10000}},"required":["action"]},{"type":"object","properties":{"action":{"type":"string","enum":["add_item"]},"packageName":{"type":"string","minLength":1,"maxLength":214,"pattern":"^(?:@[a-z0-9][a-z0-9._~-]*\\/)?[a-z0-9][a-z0-9._~-]*$"},"note":{"type":"string","maxLength":300}},"required":["action","packageName"]},{"type":"object","properties":{"action":{"type":"string","enum":["remove_item"]},"packageName":{"type":"string","minLength":1,"maxLength":214,"pattern":"^(?:@[a-z0-9][a-z0-9._~-]*\\/)?[a-z0-9][a-z0-9._~-]*$"}},"required":["action","packageName"]},{"type":"object","properties":{"action":{"type":"string","enum":["reorder"]},"packageNames":{"type":"array","items":{"type":"string","minLength":1,"maxLength":214,"pattern":"^(?:@[a-z0-9][a-z0-9._~-]*\\/)?[a-z0-9][a-z0-9._~-]*$"},"minItems":1,"maxItems":200}},"required":["action","packageNames"]}]}}}},"responses":{"200":{"description":"Resulting collection state","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"published":{"type":"boolean"},"position":{"type":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"packageName":{"type":"string"},"position":{"type":"integer"},"note":{"type":["string","null"]}},"required":["packageName","position","note"]}}},"required":["slug","title","description","published","position","items"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `packages:curate` scope or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Package or collection not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/categories":{"get":{"operationId":"listCategories","tags":["catalog"],"summary":"All categories with public package counts","responses":{"200":{"description":"Categories","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryList"}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/categories/{slug}":{"get":{"operationId":"getCategory","tags":["catalog"],"summary":"One category with its public package count","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"Category","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"packageCount":{"type":"integer","minimum":0}},"required":["slug","name","description","packageCount"]}}}},"400":{"description":"Invalid request (`validation_failed` or `bad_request`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/collections":{"get":{"operationId":"listCollections","tags":["catalog"],"summary":"Published editorial collections","responses":{"200":{"description":"Collections","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionList"}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/collections/{slug}":{"get":{"operationId":"getCollection","tags":["catalog"],"summary":"One published collection with its public packages, in editorial order","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"Collection with its packages","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"packages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"latestVersion":{"type":["string","null"]},"publisher":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"verified":{"type":"boolean"}},"required":["slug","name","verified"]},"categorySlug":{"type":["string","null"]},"curationStatus":{"type":"string","enum":["unreviewed","listed","featured","hidden","rejected"]},"keywords":{"type":"array","items":{"type":"string"}},"indexedAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["name","displayName","description","latestVersion","publisher","categorySlug","curationStatus","keywords","indexedAt","updatedAt"]}}},"required":["slug","title","description","packages"]}}}},"400":{"description":"Invalid request (`validation_failed` or `bad_request`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error (`internal_error` or `configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/pages/{slug}":{"get":{"operationId":"getPublishedPage","tags":["pages"],"summary":"Get the published revision of a page (URL-encode nested slugs: docs%2Finstall)","description":"Returns the live `PageDocument` as JSON, or its Markdown rendering with `?format=md`. Drafts are never returned here; unpublished pages answer 404.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/[a-z0-9]+(?:-[a-z0-9]+)*)*$"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","enum":["json","md"],"default":"json"},"required":false,"name":"format","in":"query"}],"responses":{"200":{"description":"The published page","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"}},"required":["id","slug","kind","title"]},"revisionId":{"type":"string"},"revisionNumber":{"type":"integer"},"publishedAt":{"type":"string","format":"date-time"},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["page","revisionId","revisionNumber","publishedAt","document"]}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"Invalid slug or format (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"No published page with this slug","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me":{"get":{"operationId":"getMe","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"The signed-in account, its role and the scopes of the current credential","responses":{"200":{"description":"Account profile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"image":{"type":["string","null"]},"role":{"type":"string","enum":["admin","user"]},"scopes":{"type":"array","items":{"type":"string","enum":["packages:read","packages:submit","packages:curate","publishers:read","publishers:write","pages:read","pages:write","pages:publish","media:write","account:read","account:write","devices:link","admin"]}},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","email","emailVerified","image","role","scopes","createdAt"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"delete":{"operationId":"deleteMe","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Delete the account and all data tied to it (needs a signed-in session)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"string","enum":["DELETE"]}},"required":["confirm"]}}}},"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","enum":[true]},"removed":{"type":"object","properties":{"apiTokens":{"type":"integer"},"deviceLinks":{"type":"integer"},"oauthGrants":{"type":"integer"},"publishers":{"type":"integer"},"media":{"type":"integer"}},"required":["apiTokens","deviceLinks","oauthGrants","publishers","media"]}},"required":["deleted","removed"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/packages":{"get":{"operationId":"listMyPackages","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Listings owned by the caller's publishers, in any curation state","responses":{"200":{"description":"Owned listings","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"latestVersion":{"type":["string","null"]},"curationStatus":{"type":"string"},"verifiedPublisher":{"type":"boolean"},"publisher":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"]}},"required":["id","name","displayName","latestVersion","curationStatus","verifiedPublisher","publisher"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/export":{"get":{"operationId":"exportMe","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Download everything stored about the account as JSON","responses":{"200":{"description":"Account data export","content":{"application/json":{"schema":{"type":"object","properties":{"exportedAt":{"type":"string","format":"date-time"},"profile":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"image":{"type":["string","null"]},"role":{"type":"string","enum":["admin","user"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","email","emailVerified","image","role","createdAt"]},"signInMethods":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["provider","createdAt"]}},"sessions":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"},"ipAddress":{"type":["string","null"]},"userAgent":{"type":["string","null"]}},"required":["createdAt","expiresAt","ipAddress","userAgent"]}},"passkeys":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"deviceType":{"type":"string"},"createdAt":{"type":["string","null"],"format":"date-time"}},"required":["name","deviceType","createdAt"]}},"apiTokens":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["packages:read","packages:submit","packages:curate","publishers:read","publishers:write","pages:read","pages:write","pages:publish","media:write","account:read","account:write","devices:link","admin"]}},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","scopes","createdAt","lastUsedAt","expiresAt","revokedAt"]}},"deviceLinks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"localPrincipalId":{"type":"string"},"deviceLabel":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","localPrincipalId","deviceLabel","createdAt","revokedAt"]}},"oauthConsents":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time"}},"required":["clientId","scopes","createdAt"]}},"publishers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"}},"required":["id","slug","name","role"]}},"packageClaims":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"packageId":{"type":"string"},"publisherId":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","packageId","publisherId","status","createdAt"]}},"media":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sha256":{"type":"string"},"contentType":{"type":"string"},"bytes":{"type":"number"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","sha256","contentType","bytes","createdAt"]}},"auditEvents":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string"},"subjectType":{"type":"string"},"subjectId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["action","subjectType","subjectId","createdAt"]}}},"required":["exportedAt","profile","signInMethods","sessions","passkeys","apiTokens","deviceLinks","oauthConsents","publishers","packageClaims","media","auditEvents"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/tokens":{"get":{"operationId":"listApiTokens","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Personal API tokens (metadata only; plaintext is never shown again)","responses":{"200":{"description":"Tokens","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["packages:read","packages:submit","packages:curate","publishers:read","publishers:write","pages:read","pages:write","pages:publish","media:write","account:read","account:write","devices:link","admin"]}},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","scopes","createdAt","lastUsedAt","expiresAt","revokedAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"createApiToken","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Create a scoped personal API token (needs a signed-in session, not a token); the plaintext `token` is returned once, so a replayed Idempotency-Key answers 409 instead of repeating it","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"scopes":{"type":"array","items":{"type":"string","enum":["packages:read","packages:submit","packages:curate","publishers:read","publishers:write","pages:read","pages:write","pages:publish","media:write","account:read","account:write","devices:link","admin"]},"minItems":1,"maxItems":13},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"default":90}},"required":["name","scopes"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["packages:read","packages:submit","packages:curate","publishers:read","publishers:write","pages:read","pages:write","pages:publish","media:write","account:read","account:write","devices:link","admin"]}},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"},"token":{"type":"string"}},"required":["id","name","scopes","createdAt","lastUsedAt","expiresAt","revokedAt","token"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/tokens/{id}":{"delete":{"operationId":"revokeApiToken","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Revoke a personal API token (needs a signed-in session, not a token)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Revoked","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["packages:read","packages:submit","packages:curate","publishers:read","publishers:write","pages:read","pages:write","pages:publish","media:write","account:read","account:write","devices:link","admin"]}},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","scopes","createdAt","lastUsedAt","expiresAt","revokedAt"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/devices/link":{"post":{"operationId":"linkClarkCantDevice","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Link a ClarkCant install (local principal prin_*) to this account; idempotent per principal. Needs `devices:link` (offered to OAuth clients) or `account:write`","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"localPrincipalId":{"type":"string","pattern":"^prin_[A-Za-z0-9]{1,120}$"},"deviceLabel":{"type":"string","minLength":1,"maxLength":80}},"required":["localPrincipalId","deviceLabel"]}}}},"responses":{"200":{"description":"Linked","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"localPrincipalId":{"type":"string"},"deviceLabel":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","localPrincipalId","deviceLabel","createdAt"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/devices":{"get":{"operationId":"listClarkCantDevices","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Linked ClarkCant installs (`devices:link` or `account:read`)","responses":{"200":{"description":"Linked devices","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"localPrincipalId":{"type":"string"},"deviceLabel":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","localPrincipalId","deviceLabel","createdAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/devices/{id}":{"delete":{"operationId":"unlinkClarkCantDevice","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Unlink a ClarkCant install (`devices:link` or `account:write`)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Unlinked"},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/oauth/grants":{"get":{"operationId":"listOAuthGrants","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"OAuth clients the account has authorized","responses":{"200":{"description":"Grants","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"clientName":{"type":["string","null"]},"scopes":{"type":"array","items":{"type":"string"}},"grantedAt":{"type":"string"}},"required":["clientId","clientName","scopes","grantedAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/oauth/grants/{id}":{"delete":{"operationId":"revokeOAuthGrant","tags":["account"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Revoke an OAuth client's consent and tokens (id = client id)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"id","in":"path"}],"responses":{"204":{"description":"Revoked"},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers":{"get":{"operationId":"listMyPublishers","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Publishers the caller belongs to, with the caller's role","responses":{"200":{"description":"Publishers","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["org","person"]},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["id","slug","name","kind","verifiedAt","createdAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"createPublisher","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Create a publisher (the caller becomes its owner)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$"},"name":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["org","person"],"default":"org"}},"required":["slug","name"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["org","person"]},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["id","slug","name","kind","verifiedAt","createdAt"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers/{publisherId}/members":{"get":{"operationId":"listPublisherMembers","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Members of a publisher","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"}],"responses":{"200":{"description":"Members","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"joinedAt":{"type":"string","format":"date-time"}},"required":["userId","name","email","role","joinedAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers/{publisherId}/invitations":{"get":{"operationId":"listPublisherInvitations","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Pending invitations (owners and admins)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"}],"responses":{"200":{"description":"Invitations","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"publisherId":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"status":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["id","publisherId","email","role","status","expiresAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"inviteMember","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Invite an email address; share the returned invitation id with the invitee (no email is sent)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["admin","member"],"default":"member"}},"required":["email"]}}}},"responses":{"201":{"description":"Invited","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"publisherId":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","member"]},"status":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["id","publisherId","email","role","status","expiresAt"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/invitations/{id}/accept":{"post":{"operationId":"acceptInvitation","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Accept an invitation addressed to the caller's email (the email must be verified)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"responses":{"200":{"description":"Joined","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["org","person"]},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"role":{"type":"string","enum":["owner","admin","member"]}},"required":["id","slug","name","kind","verifiedAt","createdAt"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers/{publisherId}/domains":{"get":{"operationId":"listPublisherDomains","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Claimed domains and their TXT challenge","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"}],"responses":{"200":{"description":"Domains","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"txtRecordName":{"type":"string"},"txtRecordValue":{"type":"string"},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","domain","txtRecordName","txtRecordValue","verifiedAt","createdAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"addPublisherDomain","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Claim a domain; returns the DNS TXT record to publish","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","maxLength":253,"pattern":"^(?=.{4,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,63}$"}},"required":["domain"]}}}},"responses":{"201":{"description":"Claimed","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"txtRecordName":{"type":"string"},"txtRecordValue":{"type":"string"},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","domain","txtRecordName","txtRecordValue","verifiedAt","createdAt"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers/{publisherId}/domains/{childId}/verify":{"post":{"operationId":"verifyPublisherDomain","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Check the DNS TXT record now and mark the domain verified on a match","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"childId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"responses":{"200":{"description":"Verified","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"txtRecordName":{"type":"string"},"txtRecordValue":{"type":"string"},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","domain","txtRecordName","txtRecordValue","verifiedAt","createdAt"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers/{publisherId}/repositories":{"get":{"operationId":"listPublisherRepositories","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Linked source repositories","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"}],"responses":{"200":{"description":"Repositories","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["github"]},"repository":{"type":"string"},"verificationFilePath":{"type":"string"},"verificationFileContent":{"type":"string"},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","provider","repository","verificationFilePath","verificationFileContent","verifiedAt","createdAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"linkPublisherRepository","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Link a GitHub repository; returns the verification file to commit","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["github"],"default":"github"},"repository":{"type":"string","pattern":"^[A-Za-z0-9](?:[A-Za-z0-9-]{0,38})\\/[A-Za-z0-9._-]{1,100}$"}},"required":["repository"]}}}},"responses":{"201":{"description":"Linked","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["github"]},"repository":{"type":"string"},"verificationFilePath":{"type":"string"},"verificationFileContent":{"type":"string"},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","provider","repository","verificationFilePath","verificationFileContent","verifiedAt","createdAt"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers/{publisherId}/repositories/{childId}/verify":{"post":{"operationId":"verifyPublisherRepository","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Check the verification file on the default branch now","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"childId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"responses":{"200":{"description":"Verified","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["github"]},"repository":{"type":"string"},"verificationFilePath":{"type":"string"},"verificationFileContent":{"type":"string"},"verifiedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","provider","repository","verificationFilePath","verificationFileContent","verifiedAt","createdAt"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/me/publishers/{publisherId}/claims":{"get":{"operationId":"listPackageClaims","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Package claims made by a publisher","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"}],"responses":{"200":{"description":"Claims","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"packageId":{"type":"string"},"packageName":{"type":"string"},"publisherId":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"method":{"type":"string","enum":["npm_maintainer","repository"]},"evidence":{"type":"object","additionalProperties":{}},"createdAt":{"type":"string","format":"date-time"}},"required":["id","packageId","packageName","publisherId","status","method","evidence","createdAt"]}}},"required":["items"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"claimPackage","tags":["publishers"],"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"summary":"Claim an indexed package via npm maintainers or a verified repository; approved when proven","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":true,"name":"publisherId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"packageName":{"type":"string","minLength":1,"maxLength":214},"method":{"type":"string","enum":["npm_maintainer","repository"]}},"required":["packageName","method"]}}}},"responses":{"201":{"description":"Recorded","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"packageId":{"type":"string"},"packageName":{"type":"string"},"publisherId":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected"]},"method":{"type":"string","enum":["npm_maintainer","repository"]},"evidence":{"type":"object","additionalProperties":{}},"createdAt":{"type":"string","format":"date-time"}},"required":["id","packageId","packageName","publisherId","status","method","evidence","createdAt"]}}}},"400":{"description":"Invalid request (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential, or an invalid/expired/revoked one (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing scope, not permitted, or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Conflicts with the current state (`conflict`), or a request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/publish/submit":{"post":{"operationId":"submitPackage","tags":["publish"],"summary":"Ask the marketplace to index an npm package version (`packages:submit`)","description":"Queues indexing of `name@version` (or the `latest` dist-tag when `version` is omitted). Idempotent: an open submission for the same name and version is returned rather than duplicated, and `Idempotency-Key` replays the first response. Poll `GET /publish/submissions/{id}` for the outcome.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":214,"pattern":"^(?:@[a-z0-9][a-z0-9._~-]*\\/)?[a-z0-9][a-z0-9._~-]*$"},"version":{"type":"string","pattern":"^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$"}},"required":["name"]}}}},"responses":{"202":{"description":"Accepted for indexing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitPackageResult"}}}},"400":{"description":"Invalid package name or version (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `packages:submit` scope or cross-site request (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"A request with this Idempotency-Key is still running (`idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error, including a missing ingest queue binding (`configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/publish/submissions/{id}":{"get":{"operationId":"getSubmission","tags":["publish"],"summary":"Status of one submission (visible to its submitter and to curators)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"example":"sub_01k6abcdefghjkmnpqrstvwxyz"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Submission","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"packageName":{"type":"string"},"version":{"type":["string","null"]},"status":{"type":"string","enum":["queued","indexing","indexed","failed"]},"error":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","packageName","version","status","error","createdAt","updatedAt"]}}}},"400":{"description":"Invalid package name or version (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Submission not found, or not visible to the caller","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error, including a missing ingest queue binding (`configuration_error`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/blocks":{"get":{"operationId":"listPageBlocks","tags":["pages"],"summary":"Registered blocks (props JSON Schema, editor fields) and layouts","responses":{"200":{"description":"Block and layout registry","content":{"application/json":{"schema":{"type":"object","properties":{"blocks":{"type":"array","items":{"type":"object","additionalProperties":{}}},"layouts":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["blocks","layouts"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages":{"get":{"operationId":"listPages","tags":["pages"],"summary":"All pages, including unpublished ones (pages:write)","responses":{"200":{"description":"All pages, including unpublished","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]}}},"required":["items"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"post":{"operationId":"createPage","tags":["pages"],"summary":"Create a page with its first draft revision (pages:write)","parameters":[{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"document":{}},"required":["slug","kind"]}}}},"responses":{"201":{"description":"The new page with its first draft revision","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]}},"required":["page","draft","published"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}":{"get":{"operationId":"getPage","tags":["pages"],"summary":"Draft document and live revision of a page; the ETag is the draft revision id","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"}],"responses":{"200":{"description":"Draft document and live revision; ETag is the draft revision id","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]}},"required":["page","draft","published"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"patch":{"operationId":"patchPage","tags":["pages"],"summary":"Apply a batch of block/SEO operations atomically as one new draft revision","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operations":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"op":{"type":"string","enum":["add_block"]},"block":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"type":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*$"},"version":{"type":"integer","exclusiveMinimum":0},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]},"maxItems":12}},"required":["type"]},"parentId":{"type":["string","null"],"minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"beforeId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"afterId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["op","block"]},{"type":"object","properties":{"op":{"type":"string","enum":["update_block"]},"blockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"props":{"type":"object","additionalProperties":{}},"mode":{"type":"string","enum":["merge","replace"],"default":"merge"}},"required":["op","blockId","props"]},{"type":"object","properties":{"op":{"type":"string","enum":["remove_block"]},"blockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["op","blockId"]},{"type":"object","properties":{"op":{"type":"string","enum":["move_block"]},"blockId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"parentId":{"type":["string","null"],"minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"beforeId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"afterId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"}},"required":["op","blockId"]},{"type":"object","properties":{"op":{"type":"string","enum":["set_page_seo"]},"seo":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"locale":{"type":"string","minLength":2,"maxLength":35},"noindex":{"type":"boolean"},"image":{"type":["string","null"],"minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"}}}},"required":["op","seo"]},{"type":"object","properties":{"op":{"type":"string","enum":["set_layout"]},"layout":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64},"version":{"type":"integer","exclusiveMinimum":0}},"required":["id","version"]}},"required":["op","layout"]}]},"minItems":1,"maxItems":100},"expectedRevisionId":{"type":"string","minLength":1,"maxLength":64}},"required":["operations"]}}}},"responses":{"200":{"description":"Saved, with the id each operation touched","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"results":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"},"blockId":{"type":"string"}},"required":["op"]}}},"required":["page","draft","published","results"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/draft":{"put":{"operationId":"createPageDraft","tags":["pages"],"summary":"Save a whole document as the new draft revision","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"document":{},"expectedRevisionId":{"type":"string","minLength":1,"maxLength":64}}}}}},"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]}},"required":["page","draft","published"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/blocks":{"post":{"operationId":"addBlock","tags":["pages"],"summary":"Add one block to the draft (If-Match: the draft revision)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"block":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}}},"required":["type"]},"parentId":{"type":["string","null"],"minLength":1,"maxLength":64},"beforeId":{"type":"string","minLength":1,"maxLength":64},"afterId":{"type":"string","minLength":1,"maxLength":64},"expectedRevisionId":{"type":"string","minLength":1,"maxLength":64}},"required":["block"]}}}},"responses":{"200":{"description":"Saved; `results[0].blockId` is the new block","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"results":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"},"blockId":{"type":"string"}},"required":["op"]}}},"required":["page","draft","published","results"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/blocks/{blockId}":{"patch":{"operationId":"updateBlock","tags":["pages"],"summary":"Merge or replace the props of one block in the draft","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"blockId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"props":{"type":"object","additionalProperties":{}},"mode":{"type":"string","enum":["merge","replace"]},"expectedRevisionId":{"type":"string","minLength":1,"maxLength":64}},"required":["props"]}}}},"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"results":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"},"blockId":{"type":"string"}},"required":["op"]}}},"required":["page","draft","published","results"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}},"delete":{"operationId":"removeBlock","tags":["pages"],"summary":"Remove one block (and its children) from the draft","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"blockId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"results":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"},"blockId":{"type":"string"}},"required":["op"]}}},"required":["page","draft","published","results"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/blocks/{blockId}/move":{"post":{"operationId":"moveBlock","tags":["pages"],"summary":"Move one block to a new parent or position in the draft","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"blockId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":["string","null"],"minLength":1,"maxLength":64},"beforeId":{"type":"string","minLength":1,"maxLength":64},"afterId":{"type":"string","minLength":1,"maxLength":64},"expectedRevisionId":{"type":"string","minLength":1,"maxLength":64}}}}}},"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"results":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"},"blockId":{"type":"string"}},"required":["op"]}}},"required":["page","draft","published","results"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/seo":{"put":{"operationId":"setPageSeo","tags":["pages"],"summary":"Update the page title, description, locale or noindex flag in the draft","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"seo":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":500},"locale":{"type":"string","minLength":2,"maxLength":35},"noindex":{"type":"boolean"},"image":{"type":["string","null"],"minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"}}},"expectedRevisionId":{"type":"string","minLength":1,"maxLength":64}},"required":["seo"]}}}},"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"results":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"},"blockId":{"type":"string"}},"required":["op"]}}},"required":["page","draft","published","results"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/preview":{"post":{"operationId":"previewPage","tags":["pages"],"summary":"Create a signed, short-lived preview URL for a revision (the draft by default)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"revisionId":{"type":"string"},"ttlSeconds":{"type":"integer"}}}}}},"responses":{"200":{"description":"Preview link","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"path":{"type":"string"},"revisionId":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"url":{"type":"string"}},"required":["token","path","revisionId","expiresAt","url"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/publish":{"post":{"operationId":"publishPage","tags":["pages"],"summary":"Publish the current draft revision (requires `pages:publish`)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revisionId":{"type":"string"}}}}}},"responses":{"200":{"description":"Published","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]}},"required":["page","draft","published"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/rollback":{"post":{"operationId":"rollbackPage","tags":["pages"],"summary":"Make a previously published revision live again (If-Match: the currently live revision)","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","maxLength":80,"description":"ETag of the revision the edit is based on"},"required":false,"description":"ETag of the revision the edit is based on","name":"if-match","in":"header"},{"schema":{"type":"string","maxLength":255,"description":"Makes retries safe; replayed for 24 hours"},"required":false,"description":"Makes retries safe; replayed for 24 hours","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revisionId":{"type":"string"},"expectedPublishedRevisionId":{"type":"string"}},"required":["revisionId"]}}}},"responses":{"200":{"description":"Rolled back","content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string","enum":["custom","legal","docs","landing","category","collection"]},"title":{"type":"string"},"currentDraftRevisionId":{"type":["string","null"]},"publishedRevisionId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","title","currentDraftRevisionId","publishedRevisionId","createdAt","updatedAt"]},"draft":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]},"published":{"type":["object","null"],"properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]}},"required":["page","draft","published"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/revisions":{"get":{"operationId":"listPageRevisions","tags":["pages"],"summary":"Every revision of a page, newest first","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"}],"responses":{"200":{"description":"Newest first","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]}}},"required":["items"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/{pageId}/revisions/{revisionId}":{"get":{"operationId":"getPageRevision","tags":["pages"],"summary":"One immutable revision with its document","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"pageId","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"required":true,"name":"revisionId","in":"path"}],"responses":{"200":{"description":"One immutable revision","content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"object","properties":{"id":{"type":"string"},"pageId":{"type":"string"},"number":{"type":"integer"},"parentRevisionId":{"type":["string","null"]},"authorId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"isDraft":{"type":"boolean"},"isPublished":{"type":"boolean"},"lastPublishedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","pageId","number","parentRevisionId","authorId","createdAt","isDraft","isPublished","lastPublishedAt"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["revision","document"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/defaults":{"post":{"operationId":"ensureDefaultPages","tags":["pages"],"summary":"Create and publish the default landing (`home`) and `about` pages if missing (requires `pages:publish`)","responses":{"200":{"description":"Which default pages were created","content":{"application/json":{"schema":{"type":"object","properties":{"created":{"type":"array","items":{"type":"string"}},"existing":{"type":"array","items":{"type":"string"}}},"required":["created","existing"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}},"/api/v1/admin/pages/render":{"post":{"operationId":"renderPageDocument","tags":["pages"],"summary":"Validate and render an unsaved document (builder canvas, Markdown and agent views)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"document":{},"slug":{"type":"string"}}}}}},"responses":{"200":{"description":"Rendered with the public renderer","content":{"application/json":{"schema":{"type":"object","properties":{"html":{"type":"string"},"markdown":{"type":"string"},"structuredData":{"type":"array","items":{"type":"object","additionalProperties":{}}},"summary":{"type":"string"},"diagnostics":{"type":"array","items":{"type":"string"}},"socialImage":{"type":["object","null"],"properties":{"id":{"type":"string"},"url":{"type":"string"},"contentType":{"type":"string"},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]}},"required":["id","url","contentType","width","height"]},"document":{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"layout":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"}},"required":["id","version"]},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"locale":{"type":"string"},"noindex":{"type":"boolean"},"image":{"type":"string","description":"Media id of the share image"}},"required":["title","description","locale","noindex"]},"blocks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"version":{"type":"integer"},"props":{"type":"object","additionalProperties":{}},"children":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Nested blocks, each shaped like this block"}},"required":["id","type","version","props"]}}},"required":["schemaVersion","layout","meta","blocks"]}},"required":["html","markdown","structuredData","summary","diagnostics","document"]}}}},"400":{"description":"Invalid request or document (`validation_failed`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"401":{"description":"No credential (`unauthorized`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"403":{"description":"Missing `pages:write` / `pages:publish` scope (`forbidden`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"404":{"description":"Page, revision or block not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"409":{"description":"Stale revision or concurrent change (`conflict`, `idempotency_in_progress`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"422":{"description":"Idempotency-Key reused with a different request (`idempotency_key_reused`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","idempotency_key_reused","idempotency_in_progress","rate_limited","configuration_error","not_implemented","internal_error"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{}},"required":["code","message","requestId"]}},"required":["error"]}}}}}}}},"webhooks":{}}