{"openapi":"3.1.0","info":{"title":"ETCC CMS management API","version":"1.0.0","description":"Public specification. CMS-scoped OAuth and an approved current connection are required for management. Draft-first; no hard-delete, financial or people-admin API. Check runtime status before use."},"x-source-version":"26998f55469af135b8cc6bf911a6e0f471bbb7dd","x-enabled":false,"servers":[{"url":"https://www.easterntaichi.org","description":"Production"},{"url":"https://dev.easterntaichi.org","description":"Development, synthetic data"},{"url":"https://test.easterntaichi.org","description":"Test, synthetic data"}],"security":[{"CmsBearer":[]}],"components":{"securitySchemes":{"CmsBearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Use the dedicated CMS audience and scopes discovered at /.well-known/oauth-protected-resource/mcp/cms. Never substitute a broad administration or Google credential."}},"schemas":{"UpdateImage":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","enum":["en","zh-CN"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"content":{"type":"object","properties":{"alt":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"caption":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]}},"additionalProperties":false,"minProperties":1}},"required":["locale","revision","content"],"additionalProperties":false},"ImageDocument":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"locale":{"type":"string","enum":["en","zh-CN"]},"updatedAt":{"type":"string","format":"date-time"},"image":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","minimum":1},"url":{"type":"string"},"alt":{"type":"string"},"caption":{"type":["string","null"]},"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["id","url","alt","caption","width","height"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["id","locale","updatedAt","image","revision"]},"ImagePage":{"type":"object","additionalProperties":false,"properties":{"images":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"locale":{"type":"string","enum":["en","zh-CN"]},"updatedAt":{"type":"string","format":"date-time"},"image":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"integer","minimum":1},"url":{"type":"string"},"alt":{"type":"string"},"caption":{"type":["string","null"]},"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["id","url","alt","caption","width","height"]}},"required":["id","locale","updatedAt","image"]}},"page":{"type":"integer","minimum":1},"nextPage":{"type":["integer","null"],"minimum":2}},"required":["images","page","nextPage"]},"CreateDraft":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","enum":["en","zh-CN"]},"slug":{"type":"string","maxLength":160,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"kind":{"type":"string","enum":["article","classic","photo","youtube","document","video"]},"content":{"type":"object","properties":{"title":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"body":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"originalText":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}]},"originalLanguage":{"anyOf":[{"type":"string","enum":["en","zh-CN"]},{"type":"null"}]},"author":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"sourceTitle":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"cover":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"attachments":{"maxItems":10,"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"youtube":{"type":"object","properties":{"videoId":{"anyOf":[{"type":"string","pattern":"^[\\w-]{11}$"},{"type":"null"}]}},"required":["videoId"],"additionalProperties":false}},"additionalProperties":false,"minProperties":1}},"required":["locale","slug","kind","content"],"additionalProperties":false},"UpdateDraft":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","enum":["en","zh-CN"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"content":{"type":"object","properties":{"title":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"body":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"originalText":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}]},"originalLanguage":{"anyOf":[{"type":"string","enum":["en","zh-CN"]},{"type":"null"}]},"author":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"sourceTitle":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"cover":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"attachments":{"maxItems":10,"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"youtube":{"type":"object","properties":{"videoId":{"anyOf":[{"type":"string","pattern":"^[\\w-]{11}$"},{"type":"null"}]}},"required":["videoId"],"additionalProperties":false}},"additionalProperties":false,"minProperties":1}},"required":["locale","revision","content"],"additionalProperties":false},"RestoreDraft":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","enum":["en","zh-CN"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"versionId":{"type":"string","pattern":"^[1-9]\\d{0,9}$"}},"required":["locale","revision","versionId"],"additionalProperties":false},"PublicationIntent":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","enum":["en","zh-CN"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"action":{"type":"string","enum":["publish","withdraw"]}},"required":["locale","revision","action"],"additionalProperties":false},"ApprovedPublication":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"locale":{"type":"string","enum":["en","zh-CN"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"action":{"type":"string","enum":["publish","withdraw"]},"approvalId":{"type":"string","pattern":"^[1-9]\\d{0,9}$"}},"required":["locale","revision","action","approvalId"],"additionalProperties":false},"ImportIntent":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"connectionId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,128}$"},"source":{"anyOf":[{"type":"string","maxLength":2048},{"type":"object","properties":{"fileId":{"type":"string","pattern":"^[A-Za-z0-9_-]{10,200}$"},"resourceKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,200}$"}},"required":["fileId"],"additionalProperties":false}]},"kind":{"type":"string","enum":["article","image","pdf","office","video"]},"locale":{"type":"string","enum":["en","zh-CN"]},"videoSources":{"type":"object","properties":{"language":{"type":"string","enum":["en","zh-CN"]},"captions":{"anyOf":[{"type":"string","maxLength":2048},{"type":"object","properties":{"fileId":{"type":"string","pattern":"^[A-Za-z0-9_-]{10,200}$"},"resourceKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,200}$"}},"required":["fileId"],"additionalProperties":false}]},"transcript":{"anyOf":[{"type":"string","maxLength":2048},{"type":"object","properties":{"fileId":{"type":"string","pattern":"^[A-Za-z0-9_-]{10,200}$"},"resourceKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,200}$"}},"required":["fileId"],"additionalProperties":false}]}},"required":["language"],"additionalProperties":false,"minProperties":2,"description":"Video imports only: supplied WebVTT/SRT captions or UTF-8 transcript from the same approved folder. No inline text or generated transcription."},"slug":{"type":"string","maxLength":160,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"target":{"type":"object","properties":{"entryId":{"type":"string","pattern":"^[1-9]\\d{0,9}$"},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["entryId","revision"],"additionalProperties":false}},"required":["connectionId","source","kind","locale","slug"],"additionalProperties":false},"ImportControl":{"type":"object","additionalProperties":false,"properties":{"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["revision"]},"SourceConnections":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"connections":{"type":"array","maxItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"label":{"type":"string"},"readOnly":{"const":true}},"required":["id","label","readOnly"]}}},"required":["enabled","connections"]},"ImportJob":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"kind":{"type":"string","enum":["article","image","pdf","office","video"]},"locale":{"type":"string","enum":["en","zh-CN"]},"state":{"type":"string","enum":["queued","importing","processing","ready_for_review","failed","cancelled"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"entryId":{"type":["string","null"]},"sourceName":{"type":["string","null"]},"draftUrl":{"type":["string","null"]},"statusUrl":{"type":"string"},"progressUrl":{"type":"string"},"warnings":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":1000}},"failure":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"]}]}},"required":["id","kind","locale","state","revision","createdAt","updatedAt","entryId","sourceName","draftUrl","statusUrl","progressUrl","warnings","failure"]},"DraftDocument":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["article","classic","photo","youtube","document","video"]},"locale":{"type":"string","enum":["en","zh-CN"]},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"draftStatus":{"type":"string","enum":["draft","published"]},"publication":{"type":"string","enum":["published","unpublished"]},"title":{"type":["string","null"]},"summary":{"type":["string","null"]},"body":{"type":["object","null"],"additionalProperties":true},"originalText":{"type":["string","null"]},"originalLanguage":{"type":["string","null"],"enum":["en","zh-CN",null]},"author":{"type":["string","null"]},"sourceTitle":{"type":["string","null"]},"sourceUrl":{"type":["string","null"]},"cover":{"type":["integer","null"],"minimum":1},"attachments":{"type":"array","maxItems":10,"items":{"type":"integer","minimum":1}},"youtube":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"videoId":{"type":"string","pattern":"^[\\w-]{11}$"}},"required":["videoId"]}]},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","locale","revision","draftStatus","publication","title","summary","body","originalText","originalLanguage","author","sourceTitle","sourceUrl","cover","attachments","youtube","updatedAt"]},"EntryPage":{"type":"object","additionalProperties":false,"properties":{"entries":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"slug":{"type":"string"},"kind":{"type":"string","enum":["article","classic","photo","youtube","document","video"]},"locale":{"type":"string","enum":["en","zh-CN"]},"title":{"type":["string","null"]},"draftStatus":{"type":"string","enum":["draft","published"]},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","slug","kind","locale","title","draftStatus","updatedAt"]}},"page":{"type":"integer","minimum":1},"nextPage":{"type":["integer","null"],"minimum":2}},"required":["entries","page","nextPage"]},"VersionPage":{"type":"object","additionalProperties":false,"properties":{"versions":{"type":"array","maxItems":25,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"entryId":{"type":"string","pattern":"^[1-9][0-9]*$"},"locale":{"type":"string","enum":["en","zh-CN"]},"title":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","entryId","locale","title","createdAt"]}},"page":{"type":"integer","minimum":1},"nextPage":{"type":["integer","null"],"minimum":2}},"required":["versions","page","nextPage"]},"VersionDocument":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"entryId":{"type":"string","pattern":"^[1-9][0-9]*$"},"locale":{"type":"string","enum":["en","zh-CN"]},"createdAt":{"type":"string","format":"date-time"},"content":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"body":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"originalText":{"anyOf":[{"type":"string","maxLength":200000},{"type":"null"}]},"originalLanguage":{"anyOf":[{"type":"string","enum":["en","zh-CN"]},{"type":"null"}]},"author":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]},"sourceTitle":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"sourceUrl":{"type":["string","null"]},"cover":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"attachments":{"maxItems":10,"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"youtube":{"type":"object","properties":{"videoId":{"anyOf":[{"type":"string","pattern":"^[\\w-]{11}$"},{"type":"null"}]}},"required":["videoId"],"additionalProperties":false}},"additionalProperties":false,"minProperties":1}},"required":["id","entryId","locale","createdAt","content"]},"PublicationRequest":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^[1-9][0-9]*$"},"entryId":{"type":"string","pattern":"^[1-9][0-9]*$"},"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"action":{"type":"string","enum":["publish","withdraw"]},"locale":{"type":"string","enum":["en","zh-CN"]},"state":{"type":"string","enum":["pending","approved","rejected","consumed"]},"expiresAt":{"type":"string","format":"date-time"},"reviewUrl":{"type":"string"}},"required":["id","entryId","revision","action","locale","state","expiresAt","reviewUrl"]},"PublicationValidation":{"type":"object","additionalProperties":false,"properties":{"revision":{"type":"string","pattern":"^[a-f0-9]{64}$"},"action":{"type":"string","enum":["publish","withdraw"]},"locale":{"type":"string","enum":["en","zh-CN"]},"valid":{"type":"boolean"},"errors":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":1000}}},"required":["revision","action","locale","valid","errors"]},"Identity":{"type":"object","additionalProperties":false,"properties":{"grantId":{"type":"string","format":"uuid"},"personId":{"type":"string","format":"uuid"},"scopes":{"type":"array","items":{"type":"string","enum":["cms.read","cms.draft","cms.import","cms.publish","cms.withdraw"]}},"expiresAt":{"type":"integer"}},"required":["grantId","personId","scopes","expiresAt"]},"ConnectionRequest":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"tenantId":{"type":"string","format":"uuid"},"objectId":{"type":"string","format":"uuid"},"clientId":{"type":"string","format":"uuid"},"scopes":{"type":"array","items":{"type":"string","enum":["cms.read","cms.draft","cms.import","cms.publish","cms.withdraw"]}},"expiresAt":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["pending","approved","expired"]},"approvalUrl":{"type":"string"}},"required":["id","tenantId","objectId","clientId","scopes","expiresAt","status","approvalUrl"]}}},"paths":{"/api/v1/cms/images":{"get":{"operationId":"cmsListImages","parameters":[{"name":"locale","in":"query","required":true,"schema":{"type":"string","enum":["en","zh-CN"]}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"q","in":"query","schema":{"type":"string","maxLength":160}}],"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImagePage"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/images/{imageId}":{"get":{"operationId":"cmsGetImage","parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"locale","in":"query","required":true,"schema":{"type":"string","enum":["en","zh-CN"]}}],"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}},"patch":{"operationId":"cmsUpdateImage","parameters":[{"name":"imageId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateImage"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/status":{"get":{"operationId":"cmsStatus","security":[],"responses":{"200":{"description":"Environment activation state.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}}}}},"/api/v1/cms/tools":{"get":{"operationId":"cmsTools","security":[],"responses":{"200":{"description":"Public current MCP tool definitions, JSON schemas and enabled state."}}}},"/api/v1/cms/identity":{"get":{"operationId":"cmsIdentity","responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Identity"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/source-connections":{"get":{"operationId":"cmsSourceConnections","responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceConnections"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/imports":{"post":{"operationId":"cmsImportDrive","parameters":[{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"description":"Queue backend-only transfer from the dedicated read-only Drive folder. Never relay file bytes through the caller.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportIntent"}}}},"responses":{"202":{"description":"Queued import; follow the Location header or statusUrl.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportJob"}}},"headers":{"Location":{"description":"Authenticated job-status URL.","schema":{"type":"string"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"429":{"description":"The bounded import queue is full; finish or cancel an existing job."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/imports/{jobId}":{"get":{"operationId":"cmsImportStatus","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}}],"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportJob"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/imports/{jobId}/cancel":{"post":{"operationId":"cmsCancelImport","description":"Cancel this import job. No source file is deleted.","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportControl"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportJob"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/imports/{jobId}/retry":{"post":{"operationId":"cmsRetryImport","description":"Retry an explicitly retryable failed job using its latest revision.","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportControl"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportJob"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/connections/enrollments":{"post":{"operationId":"cmsStartConnection","description":"A CMS token may request a connection before a grant exists. Only the human website review can approve it.","responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionRequest"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries":{"get":{"operationId":"cmsListEntries","parameters":[{"name":"locale","in":"query","required":true,"schema":{"type":"string","enum":["en","zh-CN"]}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"q","in":"query","schema":{"type":"string","maxLength":160}},{"name":"kind","in":"query","schema":{"type":"string","enum":["article","classic","photo","youtube","document","video"]}}],"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryPage"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}},"post":{"operationId":"cmsCreateDraft","parameters":[{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDraft"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries/{entryId}":{"get":{"operationId":"cmsGetEntry","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"locale","in":"query","required":true,"schema":{"type":"string","enum":["en","zh-CN"]}}],"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}},"patch":{"operationId":"cmsUpdateDraft","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDraft"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries/{entryId}/versions":{"get":{"operationId":"cmsEntryVersions","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"locale","in":"query","required":true,"schema":{"type":"string","enum":["en","zh-CN"]}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":10000,"default":1}}],"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionPage"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries/{entryId}/versions/{versionId}":{"get":{"operationId":"cmsGetVersion","description":"Read only historical content before restoration; no historical approval or actor fields.","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"versionId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"locale","in":"query","required":true,"schema":{"type":"string","enum":["en","zh-CN"]}}],"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries/{entryId}/restore":{"post":{"operationId":"cmsRestoreDraft","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreDraft"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries/{entryId}/validate":{"post":{"operationId":"cmsValidatePublication","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicationIntent"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicationValidation"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries/{entryId}/publication-requests":{"post":{"operationId":"cmsRequestPublication","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicationIntent"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicationRequest"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}},"/api/v1/cms/entries/{entryId}/publication":{"post":{"operationId":"cmsExecutePublication","parameters":[{"name":"entryId","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,9}$"}},{"name":"x-idempotency-key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Reuse the exact key and body after an uncertain result; changed intent requires a new key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovedPublication"}}}},"responses":{"200":{"description":"Current authorized result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftDocument"}}}},"400":{"description":"Invalid or unsupported fields, query, locale or action key."},"401":{"description":"CMS-scoped authentication required. See WWW-Authenticate protected-resource metadata."},"403":{"description":"Current scope, grant or reviewer authorization is insufficient or revoked."},"404":{"description":"Resource unavailable to this identity."},"409":{"description":"Revision, idempotency or approval conflict; read and review current state."},"413":{"description":"JSON/material exceeds its supported limit."},"503":{"description":"CMS integration is disabled, unconfigured or unavailable."}}}}}}