# 1) Read the document and note its "revision"
curl "https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90" \
-H "Authorization: Bearer $DOCURISE_API_KEY"
# 2) Pause the document and expire it at the end of the year, sending the revision back in the body
curl -X PATCH "https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90" \
-H "Authorization: Bearer $DOCURISE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"revision":"2026-10-04T01:02:03.456Z","status":"inactive","expiresAt":"2026-12-31T23:59:59+09:00"}'
{
"error": {
"code": "PROTECTION_RULE_CONFLICT",
"message": "requireEmail cannot be false: a form always collects the visitor email, so it cannot be turned off",
"retryable": false,
"details": {
"rule": "form"
}
}
}
Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the revision or ETag that GET returns
PATCH
/
api
/
preview
/
documents
/
{id}
# 1) Read the document and note its "revision"
curl "https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90" \
-H "Authorization: Bearer $DOCURISE_API_KEY"
# 2) Pause the document and expire it at the end of the year, sending the revision back in the body
curl -X PATCH "https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90" \
-H "Authorization: Bearer $DOCURISE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"revision":"2026-10-04T01:02:03.456Z","status":"inactive","expiresAt":"2026-12-31T23:59:59+09:00"}'
{
"error": {
"code": "PROTECTION_RULE_CONFLICT",
"message": "requireEmail cannot be false: a form always collects the visitor email, so it cannot be turned off",
"retryable": false,
"details": {
"rule": "form"
}
}
}
A key generated from Settings → Developers, sent as
Authorization: Bearer dr_live_<12 hex chars>_<64 hex chars>. Keys
carry explicit scopes — each endpoint states the one it requires.
The full key is shown exactly once at generation time and cannot be
retrieved again; only the keyId prefix is shown afterward. A
revoked key fails auth on its very next request.
The revision of the document as last returned by GET or PATCH (the plain timestamp is the form to send; the ETag header value is accepted too, as the quoted "..." or the weak W/"..." form). A stale value is 409 REVISION_CONFLICT. Send it here, not as If-Match.
live on a draft post or form publishes it, with the publishing checks; a published post or form cannot go back to draft. live and inactive pause and resume a published document. See the table on the operation for what each value does per document kind.
true asks visitors for an email, false stops asking. false is refused with 422 PROTECTION_RULE_CONFLICT for a form, a document with specific access, and a document with a lead gate. Turning it on ends the sessions visitors already unlocked.
true makes visitors confirm their email through a link. Turning it on ends the sessions visitors already unlocked. Refused for a form (422 PROTECTION_RULE_CONFLICT).
The full list of allowed email addresses (it replaces the stored list). Lowercased and de-duplicated. [] empties it. Enforced only when the access mode is specific. A non-empty list is refused for a form.
The full list of allowed bare domains such as acme.com (it replaces the stored list). Lowercased and de-duplicated; exact match, subdomains are not included. [] empties it. Enforced only when the access mode is specific. A non-empty list is refused for a form.
Maximum array length: 10000
Example:
["acme.com"]
Response
The document after the change.
A DocumentSummary plus description, expiry, a protection summary with the two allow lists, and the
revision. status is the one visitors get (the same value as in the list, including expired).
This is also the body a successful PATCH /api/preview/documents/{id} returns.
The status: live (visitors can open it), draft (a post or form that is not published yet), inactive (turned off, by you or automatically, for example when a Notion page can no longer be read) or expired (its expiry date has passed).
The fixed expiry date, or null when there is none. A per-viewer (relative) expiry has no single date, so it is null here; see expiry on the single-document response.
How the document is gated. Change the email and allow-list fields with PATCH; the password and the access mode are read-only here. Never contains the password.
Identifies this version of the settings (an ISO 8601 UTC timestamp, milliseconds). Also sent as the ETag header; send it back as revision in the body of PATCH. Treat it as opaque.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"DocuRise Developer Docs","colors":{"primary":"#DA350B","light":"#FF3C00","dark":"#AE2D13"},"logo":"https://mintcdn.com/docu-rise/ClhhLqgPXOXvt7Zz/logo.png?fit=max\u0026auto=format\u0026n=ClhhLqgPXOXvt7Zz\u0026q=85\u0026s=b73379a7630a12945d164a128a6ddb12","favicon":"https://mintcdn.com/docu-rise/uxv1U4cKVTA4xM3l/favicon.png?fit=max\u0026auto=format\u0026n=uxv1U4cKVTA4xM3l\u0026q=85\u0026s=0b88e688751814cb08931184873ba0be","appearance":{"default":"light","strict":true},"navbar":{"primary":{"type":"button","label":"Dashboard","href":"https://docurise.io/dashboard"}},"footer":{"socials":{}},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","href":""},{"language":"ko","href":"ko"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"docu-rise","hasAudioNarration":false,"actualSubdomain":"docu-rise","customDomains":["docurise.io"],"gitSource":{"type":"github","owner":"ireneshlee814","repo":"docurise","deployBranch":"master","contentDirectory":"docs-content","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6adf1a4ed7cf896c8ad7ba87","collectionId":"94de5c8f-93e4-44a5-af98-0fc3dd32e1b8","liveDeploymentHistoryId":"6adf1a4ed7cf896c8ad7ba87","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6adf7b89b80f21f061134342","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"en","tag":"API Reference","count":27},{"language":"ko","tag":"API Reference","count":27},{"language":"en","tag":"Documents","count":8},{"language":"ko","tag":"문서","count":8},{"language":"en","tag":"Audiences","count":7},{"language":"en","tag":"Guides","count":7},{"language":"ko","tag":"오디언스","count":7},{"language":"ko","tag":"가이드","count":7},{"language":"en","tag":"Instagram","count":4},{"language":"ko","tag":"Instagram","count":4},{"language":"en","tag":"Email","count":3},{"language":"en","tag":"Get Started","count":3},{"language":"ko","tag":"이메일","count":3},{"language":"ko","tag":"시작하기","count":3},{"language":"en","tag":"Contacts","count":2},{"language":"en","tag":"Reference","count":2},{"language":"en","tag":"AI Apps","count":2},{"language":"ko","tag":"연락처","count":2},{"language":"ko","tag":"레퍼런스","count":2},{"language":"ko","tag":"AI 앱","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/update-document","slug":"/api-reference/update-document","pageMetadata":{"title":"Update a document","description":"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the `revision` or `ETag` that GET returns","openapi":"api-reference/openapi.yaml PATCH /api/preview/documents/{id}","href":"/api-reference/update-document"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the \", _jsx(_components.code, {\n children: \"revision\"\n }), \" or \", _jsx(_components.code, {\n children: \"ETag\"\n }), \" that GET returns\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update a document","description":"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the `revision` or `ETag` that GET returns","openapi":"api-reference/openapi.yaml PATCH /api/preview/documents/{id}","href":"/api-reference/update-document"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"updateDocument","tags":["Documents"],"summary":"Update a document's status, expiry or email protection","description":"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the `revision` or `ETag` that GET returns","security":["38b9f755-a7e8-463b-9844-50be64f5dc35"],"requestBody":"6d08aba3-b708-44ef-b1e1-84016505421f","responses":{"200":"fac5ba73-9c68-461f-8211-3000457f96ed","400":"69f06ca2-0dda-4594-880c-c4bb6192e94b","401":"b240ee4c-f901-4ff2-9d5c-8a693eab35dd","403":"6acb337f-a721-40d0-8e0b-07655acc93b8","404":"075368fc-03bd-4dd1-a586-8ddc83cdce4b","409":"c079b5c0-c2af-49ca-94fb-f11c7c7aec2d","422":"2d77acc3-9009-42ce-a95c-1d35478cc309","428":"8911ccf6-cd52-40d0-bda7-0551b1b29fdd","429":"57840fe7-6144-4674-bde0-1428b64f030c","500":"3519f136-c646-4b82-983c-2ccabc1a25b4","503":"ebe2ad9e-a417-4cab-a5c8-4a405ca792a4"},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"# 1) Read the document and note its \"revision\"\ncurl \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\"\n\n# 2) Pause the document and expire it at the end of the year, sending the revision back in the body\ncurl -X PATCH \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"revision\":\"2026-10-04T01:02:03.456Z\",\"status\":\"inactive\",\"expiresAt\":\"2026-12-31T23:59:59+09:00\"}'\n"},{"lang":"bash","label":"cURL (publish a draft)","source":"# 1) Read the draft and note its \"revision\"\ncurl \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\"\n\n# 2) Publish it, sending the revision back in the body\ncurl -X PATCH \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"revision\":\"2026-10-04T01:02:03.456Z\",\"status\":\"live\"}'\n"}],"method":"patch","type":"path","servers":["7304e0b3-d967-42dc-a414-a807932689bf"],"path":"/api/preview/documents/{id}","baseUrlOptions":["https://docurise.io"],"title":"Update a document's status, expiry or email protection","codeSamples":[{"label":"cURL","lang":"bash","source":"# 1) Read the document and note its \"revision\"\ncurl \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\"\n\n# 2) Pause the document and expire it at the end of the year, sending the revision back in the body\ncurl -X PATCH \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"revision\":\"2026-10-04T01:02:03.456Z\",\"status\":\"inactive\",\"expiresAt\":\"2026-12-31T23:59:59+09:00\"}'\n"},{"label":"cURL (publish a draft)","lang":"bash","source":"# 1) Read the draft and note its \"revision\"\ncurl \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\"\n\n# 2) Publish it, sending the revision back in the body\ncurl -X PATCH \"https://docurise.io/api/preview/documents/7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90\" \\\n -H \"Authorization: Bearer $DOCURISE_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"revision\":\"2026-10-04T01:02:03.456Z\",\"status\":\"live\"}'\n"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"dc17515d-6d64-4d17-9242-abf06cde0dc2":{"name":"id","in":"path","required":true,"description":"The document id.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The document id.","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"`revision` is required, and at least one other field. Any unknown field is rejected with `400 VALIDATION_ERROR`.","type":"object","additionalProperties":false,"minProperties":2,"required":["revision"],"properties":{"revision":{"type":"string","description":"The `revision` of the document as last returned by `GET` or `PATCH` (the plain timestamp is the form to send; the `ETag` header value is accepted too, as the quoted `\"...\"` or the weak `W/\"...\"` form). A stale value is `409 REVISION_CONFLICT`. Send it here, not as `If-Match`.","example":"2026-10-04T01:02:03.456Z","isRequired":true,"uniqueKey":"revision","typeLabel":"string"},"status":{"type":"string","enum":["live","draft","inactive"],"description":"`live` on a draft post or form publishes it, with the publishing checks; a published post or form cannot go back to `draft`. `live` and `inactive` pause and resume a published document. See the table on the operation for what each value does per document kind.","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","description":"RFC 3339 with `Z` or a numeric offset, stored as UTC. `null` removes the expiry. Omit it to leave the expiry alone.","example":"2026-12-31T23:59:59+09:00","uniqueKey":"expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"RFC 3339 with `Z` or a numeric offset, stored as UTC. `null` removes the expiry. Omit it to leave the expiry alone.","example":"2026-12-31T23:59:59+09:00","uniqueKey":"expiresAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"expiresAt","typeLabel":"string\u003cdate-time> | null"},"requireEmail":{"type":"boolean","description":"`true` asks visitors for an email, `false` stops asking. `false` is refused with `422 PROTECTION_RULE_CONFLICT` for a form, a document with `specific` access, and a document with a lead gate. Turning it on ends the sessions visitors already unlocked.","uniqueKey":"requireEmail","typeLabel":"boolean"},"requireEmailVerification":{"type":"boolean","description":"`true` makes visitors confirm their email through a link. Turning it on ends the sessions visitors already unlocked. Refused for a form (`422 PROTECTION_RULE_CONFLICT`).","uniqueKey":"requireEmailVerification","typeLabel":"boolean"},"allowedEmails":{"type":"array","maxItems":10000,"items":{"type":"string","format":"email","uniqueKey":"allowedEmails.items.[INDEX]","typeLabel":"string\u003cemail>"},"description":"The full list of allowed email addresses (it replaces the stored list). Lowercased and de-duplicated. `[]` empties it. Enforced only when the access mode is `specific`. A non-empty list is refused for a form.","example":["alice@example.com"],"uniqueKey":"allowedEmails","typeLabel":"string\u003cemail>[]"},"allowedDomains":{"type":"array","maxItems":10000,"items":{"type":"string","uniqueKey":"allowedDomains.items.[INDEX]","typeLabel":"string"},"description":"The full list of allowed bare domains such as `acme.com` (it replaces the stored list). Lowercased and de-duplicated; exact match, subdomains are not included. `[]` empties it. Enforced only when the access mode is `specific`. A non-empty list is refused for a form.","example":["acme.com"],"uniqueKey":"allowedDomains","typeLabel":"string[]"}},"example":{"status":"inactive","expiresAt":"2026-12-31T23:59:59+09:00"},"uniqueKey":"","typeLabel":"object"},"examples":{"pause":{"title":"pause","value":{"status":"inactive"}},"expire":{"title":"expire","value":{"expiresAt":"2026-12-31T23:59:59+09:00"}},"clearExpiry":{"title":"clearExpiry","value":{"expiresAt":null}},"requireEmail":{"title":"requireEmail","value":{"requireEmail":true}},"verifyEmail":{"title":"verifyEmail","value":{"requireEmail":true,"requireEmailVerification":true}},"allowList":{"title":"allowList","value":{"allowedEmails":["alice@example.com"],"allowedDomains":["acme.com"]}},"clearAllowList":{"title":"clearAllowList","value":{"allowedEmails":[]}},"publish":{"title":"publish","value":{"status":"live"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"fac5ba73-9c68-461f-8211-3000457f96ed":{"description":"The document after the change.","headers":{"ETag":{"description":"The new `revision`, quoted. Send the new `revision` in the body of the next change.","schema":{"type":"string","example":"\"2026-10-04T01:02:09.000Z\""}}},"content":{"application/json":{"schema":{"type":"object","description":"A `DocumentSummary` plus description, expiry, a protection summary with the two allow lists, and the\n`revision`. `status` is the one visitors get (the same value as in the list, including `expired`).\nThis is also the body a successful `PATCH /api/preview/documents/{id}` returns.\n","required":["description","expiry","protection","revision","id","title","kind","status","url","createdAt","updatedAt","expiresAt"],"example":{"id":"7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90","title":"Pricing deck","kind":"pdf","status":"live","url":"https://docurise.io/v/pricing-deck","createdAt":"2026-09-30T12:00:00.000Z","updatedAt":"2026-10-01T08:30:00.000Z","expiresAt":"2026-12-31T00:00:00.000Z","description":"Q4 pricing","expiry":{"type":"fixed_date","expiresAt":"2026-12-31T00:00:00.000Z","days":null},"protection":{"accessMode":"public","requireEmail":true,"requireEmailVerification":false,"passwordProtected":false,"allowedEmails":[],"allowedDomains":[]},"revision":"2026-10-01T08:30:00.000Z"},"properties":{"id":{"type":"string","format":"uuid","description":"The document's id.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"title":{"type":"string","description":"The document's title.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"kind":{"type":"string","enum":["notion","pdf","upload","post","form"],"description":"What the document is made of: `notion`, `pdf`, `upload` (a file you uploaded), `post` or `form`.","isRequired":true,"uniqueKey":"kind","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["live","draft","inactive","expired"],"description":"The status: `live` (visitors can open it), `draft` (a post or form that is not published yet), `inactive` (turned off, by you or automatically, for example when a Notion page can no longer be read) or `expired` (its expiry date has passed).","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"url":{"type":"string","format":"uri","description":"The public share link.","isRequired":true,"uniqueKey":"url","typeLabel":"string\u003curi>"},"createdAt":{"type":"string","format":"date-time","description":"When the document was created (RFC 3339, UTC).","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","description":"When the document was last changed (RFC 3339, UTC).","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","description":"The fixed expiry date, or `null` when there is none. A per-viewer (relative) expiry has no single date, so it is `null` here; see `expiry` on the single-document response.","isRequired":true,"uniqueKey":"expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The fixed expiry date, or `null` when there is none. A per-viewer (relative) expiry has no single date, so it is `null` here; see `expiry` on the single-document response.","isRequired":true,"uniqueKey":"expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expiresAt","typeLabel":"string\u003cdate-time> | null"},"description":{"oneOf":[{"type":"string","description":"The document's subtitle, or `null` when none is set.","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","description":"The document's subtitle, or `null` when none is set.","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"expiry":{"type":"object","required":["type","expiresAt","days"],"properties":{"type":{"type":"string","enum":["none","fixed_date","relative"],"description":"`relative` expires per viewer, a number of `days` after they first open it.","isRequired":true,"uniqueKey":"expiry.type","typeLabel":"enum\u003cstring>"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time","description":"Set for `fixed_date`, otherwise `null`.","isRequired":true,"uniqueKey":"expiry.expiresAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"Set for `fixed_date`, otherwise `null`.","isRequired":true,"uniqueKey":"expiry.expiresAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expiry.expiresAt","typeLabel":"string\u003cdate-time> | null"},"days":{"oneOf":[{"type":"integer","description":"Set for `relative`, otherwise `null`.","isRequired":true,"uniqueKey":"expiry.days.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Set for `relative`, otherwise `null`.","isRequired":true,"uniqueKey":"expiry.days.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expiry.days","typeLabel":"integer | null"}},"description":"When the document expires.","isRequired":true,"uniqueKey":"expiry","typeLabel":"object"},"protection":{"type":"object","description":"How the document is gated. Change the email and allow-list fields with `PATCH`; the password and the access mode are read-only here. Never contains the password.","required":["accessMode","requireEmail","requireEmailVerification","passwordProtected","allowedEmails","allowedDomains"],"properties":{"accessMode":{"type":"string","enum":["public","specific"],"description":"`public` (anyone with the link) or `specific` (only allowed emails and domains).","isRequired":true,"uniqueKey":"protection.accessMode","typeLabel":"enum\u003cstring>"},"requireEmail":{"type":"boolean","description":"Viewers are asked for an email (a lead gate).","isRequired":true,"uniqueKey":"protection.requireEmail","typeLabel":"boolean"},"requireEmailVerification":{"type":"boolean","description":"Whether a viewer must confirm their email by clicking a link we email them before opening the document. It only applies when an email gate is on (`requireEmail`, or `accessMode: specific`).","isRequired":true,"uniqueKey":"protection.requireEmailVerification","typeLabel":"boolean"},"passwordProtected":{"type":"boolean","description":"Viewers must enter a password. The password itself is never returned.","isRequired":true,"uniqueKey":"protection.passwordProtected","typeLabel":"boolean"},"allowedEmails":{"type":"array","items":{"type":"string","format":"email","uniqueKey":"protection.allowedEmails.items.[INDEX]","typeLabel":"string\u003cemail>"},"description":"Lowercase email addresses allowed in (when `accessMode` is `specific`).","isRequired":true,"uniqueKey":"protection.allowedEmails","typeLabel":"string\u003cemail>[]"},"allowedDomains":{"type":"array","items":{"type":"string","uniqueKey":"protection.allowedDomains.items.[INDEX]","typeLabel":"string"},"description":"Lowercase bare domains allowed in (when `accessMode` is `specific`), exact match.","isRequired":true,"uniqueKey":"protection.allowedDomains","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"protection","typeLabel":"object"},"revision":{"type":"string","description":"Identifies this version of the settings (an ISO 8601 UTC timestamp, milliseconds). Also sent as the `ETag` header; send it back as `revision` in the body of `PATCH`. Treat it as opaque.","isRequired":true,"uniqueKey":"revision","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"7f1c0f7e-3c5e-4b1a-9d34-2f0a5b6c8d90","title":"Pricing deck","kind":"pdf","status":"live","url":"https://docurise.io/v/pricing-deck","createdAt":"2026-09-30T12:00:00.000Z","updatedAt":"2026-10-01T08:30:00.000Z","expiresAt":"2026-12-31T00:00:00.000Z","description":"Q4 pricing","expiry":{"type":"fixed_date","expiresAt":"2026-12-31T00:00:00.000Z","days":null},"protection":{"accessMode":"public","requireEmail":true,"requireEmailVerification":false,"passwordProtected":false,"allowedEmails":[],"allowedDomains":[]},"revision":"2026-10-01T08:30:00.000Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"69f06ca2-0dda-4594-880c-c4bb6192e94b":{"description":"`VALIDATION_ERROR` (`message` is prefixed with the offending field: an unknown or out-of-scope field such as `password` or `accessMode`, an invalid `status`, an `expiresAt` that is not RFC 3339 with `Z` or an offset, an `allowedEmails` or `allowedDomains` entry that is not a valid address or domain or a list over 10,000 entries, a `requireEmail` or `requireEmailVerification` that is not a boolean, an empty body, a `revision` that is not the string `GET` returned (`*` or a list included)) or `INVALID_JSON`.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"b240ee4c-f901-4ff2-9d5c-8a693eab35dd":{"description":"Missing, malformed, or revoked API key (`code: UNAUTHORIZED`).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"6acb337f-a721-40d0-8e0b-07655acc93b8":{"description":"`PAST_DUE_RESTRICTED`, `PLAN_REQUIRED`, `INSUFFICIENT_SCOPE` (the key lacks `documents:write`) or `DOCUMENT_LIMIT_REACHED` (publishing a draft would exceed the plan's published-document limit; `retryable: false`, with no `details`, the same body as creating a document over the limit). Nothing was applied.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"075368fc-03bd-4dd1-a586-8ddc83cdce4b":{"description":"`DOCUMENT_NOT_FOUND`: no such document for this account (unknown,\nmalformed or someone else's id, all indistinguishable). Or `NOT_FOUND`\nif the API is not available to the account.\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"c079b5c0-c2af-49ca-94fb-f11c7c7aec2d":{"description":"`REVISION_CONFLICT` (`retryable: false`): the document changed since the revision you sent, or a draft you meant to publish was published in the meantime. Nothing was applied. The current revision is returned only in the `ETag` header (not in the body); read the document again and decide whether to re-apply. The `ETag` header is sent only with `REVISION_CONFLICT`. Or `SLUG_TAKEN` (`retryable: false`): while publishing a post, the web address generated for it was taken by another document at the same moment. Nothing was applied and the post is still a draft; send the request again (read the document first for the current revision).","headers":{"ETag":{"description":"The current revision, quoted. Sent only with `REVISION_CONFLICT`; `SLUG_TAKEN` has no `ETag` header.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"2d77acc3-9009-42ce-a95c-1d35478cc309":{"description":"The request is well formed but a rule refuses it (`retryable: false`),\nand nothing was applied. `code` is one of:\n`STATUS_NOT_SUPPORTED` (`draft` on a Notion, PDF or upload document, or `inactive` on a draft post or form),\n`CANNOT_REVERT_TO_DRAFT` (a published post or form),\n`RELATIVE_EXPIRY_NOT_SUPPORTED` (the document has a per-viewer relative expiry),\n`PAID_LEAD_GATE_NO_PRODUCTS` (turning on, or publishing, a priced document that has no usable product),\n`DOCUMENT_NOT_READY` (status `live` on a PDF whose upload or replacement has not finished processing; wait until the file is processed, then retry),\n`EMPTY_BODY` (publishing a post with no content),\n`UNSUPPORTED_VARIABLE` (publishing a post whose body uses an email variable),\n`VIDEO_FAILED` (publishing a post that contains a video that failed to process),\n`VIDEO_OVER_LIMIT` (publishing a post that contains a video over the duration limit),\n`BROADCAST_BACKED_POST` (the post is the body of an email broadcast and is published through the email flow),\n`PROTECTION_RULE_CONFLICT` (`requireEmail: false` for a document that must keep asking for an email, or turning on email verification or an allow list for a form; `error.details.rule` names the rule, see the table in the operation description).\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"protectionRuleConflict":{"title":"protectionRuleConflict","value":{"error":{"code":"PROTECTION_RULE_CONFLICT","message":"requireEmail cannot be false: a form always collects the visitor email, so it cannot be turned off","retryable":false,"details":{"rule":"form"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"8911ccf6-cd52-40d0-bda7-0551b1b29fdd":{"description":"`PRECONDITION_REQUIRED` (`retryable: false`): the body has no `revision`. Read the document and send its `revision` in the body (not as `If-Match`).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"57840fe7-6144-4674-bde0-1428b64f030c":{"description":"Rate limited (`code: RATE_LIMITED`, always retryable): see the `Retry-After` header and `X-RateLimit-*` headers. Or too many requests running at once (`code: TOO_MANY_CONCURRENT_REQUESTS`, always retryable): `Retry-After` is `1` and there are no `X-RateLimit-*` headers.","headers":{"Retry-After":{"schema":{"type":"integer"}},"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp (seconds) when the limit resets."}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"3519f136-c646-4b82-983c-2ccabc1a25b4":{"description":"`INTERNAL_ERROR`: unexpected failure. Retryable; the cause is not returned.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ebe2ad9e-a417-4cab-a5c8-4a405ca792a4":{"description":"A server-side dependency is temporarily down (`RATE_LIMIT_UNAVAILABLE`\nor `SERVICE_UNAVAILABLE`). Not a problem with the request or key;\nalways retryable — honor `retryAfterSeconds` when present. The group\nendpoints (`POST /segments`, `POST /segments/preview`,\n`GET /segments/{id}`) also return it when a very heavy rule could not be\ncounted within about 10 seconds: simplify the rule or retry.\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code — switch on this, not `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable detail. May change wording without notice.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryable":{"type":"boolean","description":"Whether retrying the identical request may succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"retryAfterSeconds":{"type":"integer","description":"Present only when a concrete backoff hint applies.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"details":{"type":"object","description":"Present only for a few specific codes:\n- `PROTECTION_RULE_CONFLICT`: `{ rule: string }`, the protection rule that refused the request\n (`form`, `restricted_access`, `paid_lead_gate`, `free_lead_gate` or `form_no_access_controls`).\n Open-ended: tolerate new values.\n- `NEXT_POST_RULE_EXISTS`: `{ ruleId: string }`, the existing next-post rule.\n- `NOTION_FETCH_FAILED`: `{ notionErrorCode: string }`, one of\n `NOTION_ERROR_PRIVATE`, `NOTION_ERROR_NOT_FOUND`,\n `NOTION_ERROR_NETWORK`, `NOTION_ERROR_RATE_LIMIT`,\n `NOTION_ERROR_TEMPORARILY_UNAVAILABLE`,\n `NOTION_ERROR_PAGE_REJECTED`, `NOTION_ERROR_UNKNOWN`.\n- `HTML_REJECTED`: `{ reason: string }`, one of `too_large`, `css_rejected` or `invalid`.\n Open-ended: tolerate new values.\n- `CONDITION_NOT_SUPPORTED`: `{ field: string, path: string }`, the condition type that is not\n accepted and where it sits in the request. For a condition shape refused where it sits\n also `operator: string` and, when there is an equivalent operator for `requiredConditions`,\n `invertTo: string`.\n- `REFERENCE_NOT_FOUND`: `{ path: string, kind: string }`, where the unknown id sits in the\n request and what it refers to: `document`, `product`, `tier`, `cta`, `folder`, `broadcast` or\n `step`. Open-ended: tolerate new values.\n- `TAG_NOT_FOUND` (from a group rule): `{ tag: string }`, the tag name that does not exist.\n- `GROUP_REFERENCE_NOT_FOUND`: `{ groupIds: string[] }`, the group ids that are not in the account.\n- `GROUP_LIMIT_REACHED`: `{ limit: integer }`, the most groups an account can create through the API.\n","uniqueKey":"error.details","typeLabel":"object"}},"description":"The error. Every error response from the API has it: `code`, `message`, `retryable` and, for some codes, `retryAfterSeconds` and `details`.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"retryAfterSeconds":123,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"38b9f755-a7e8-463b-9844-50be64f5dc35":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"dr_live_\u003ckeyId>_\u003csecret>","description":"A key generated from Settings → Developers, sent as\n`Authorization: Bearer dr_live_\u003c12 hex chars>_\u003c64 hex chars>`. Keys\ncarry explicit scopes — each endpoint states the one it requires.\nThe full key is shown exactly once at generation time and cannot be\nretrieved again; only the `keyId` prefix is shown afterward. A\nrevoked key fails auth on its very next request.\n","scopes":[],"schemeName":"apiKey"}}},"servers":{"7304e0b3-d967-42dc-a414-a807932689bf":{"url":"https://docurise.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"dr_live_\u003ckeyId>_\u003csecret>","description":"A key generated from Settings → Developers, sent as\n`Authorization: Bearer dr_live_\u003c12 hex chars>_\u003c64 hex chars>`. Keys\ncarry explicit scopes — each endpoint states the one it requires.\nThe full key is shown exactly once at generation time and cannot be\nretrieved again; only the `keyId` prefix is shown afterward. A\nrevoked key fails auth on its very next request.\n","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A key generated from Settings → Developers, sent as\n`Authorization: Bearer dr_live_\u003c12 hex chars>_\u003c64 hex chars>`. Keys\ncarry explicit scopes — each endpoint states the one it requires.\nThe full key is shown exactly once at generation time and cannot be\nretrieved again; only the `keyId` prefix is shown afterward. A\nrevoked key fails auth on its very next request.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"docu-rise","siteName":"DocuRise Developer Docs","title":"Update a document - DocuRise Developer Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/update-document","matchLevel":0},"ko":{"href":"/ko/api-reference/update-document","matchLevel":1}}},"lastModified":"2026-10-21T12:11:39.202Z","originalFileLocation":"api-reference/update-document.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the revision or ETag that GET returns\">\u003cmeta data-mint-head name=\"application-name\" content=\"DocuRise Developer Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update a document - DocuRise Developer Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the revision or ETag that GET returns\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"DocuRise Developer Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docurise.io/docs/api-reference/update-document\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docu-rise.mintlify.app/_mintlify/api/og/v2?division=Documents\u0026amp;title=Update+a+document\u0026amp;description=Publish+a+draft+post+or+form%2C+pause+or+resume+a+document%2C+set+or+clear+its+expiry%2C+and+change+its+email+protection%2C+guarded+by+the+document+revision+in+the+requ\u0026amp;theme=53f5ca0b0069a8a509ebc847\u0026amp;signature=0d0cce77f266ba5441e84939d61ebab51160d70c3d881300a5ed33b60eb7a58d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update a document - DocuRise Developer Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the revision or ETag that GET returns\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docu-rise.mintlify.app/_mintlify/api/og/v2?division=Documents\u0026amp;title=Update+a+document\u0026amp;description=Publish+a+draft+post+or+form%2C+pause+or+resume+a+document%2C+set+or+clear+its+expiry%2C+and+change+its+email+protection%2C+guarded+by+the+document+revision+in+the+requ\u0026amp;theme=53f5ca0b0069a8a509ebc847\u0026amp;signature=0d0cce77f266ba5441e84939d61ebab51160d70c3d881300a5ed33b60eb7a58d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/docu-rise/PjNyTTc63ErGT2fG/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"DocuRise Developer Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#DA350B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docurise.io/docs/api-reference/update-document\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/update-document.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docurise.io/docs/api-reference/update-document\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docurise.io/docs/ko/api-reference/update-document\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docurise.io/docs/api-reference/update-document\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docurise.io/#organization\",\"name\":\"DocuRise Developer Docs\",\"url\":\"https://docurise.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/docu-rise/ClhhLqgPXOXvt7Zz/logo.png?fit=max\u0026auto=format\u0026n=ClhhLqgPXOXvt7Zz\u0026q=85\u0026s=b73379a7630a12945d164a128a6ddb12\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docurise.io/docs#website\",\"name\":\"DocuRise Developer Docs\",\"url\":\"https://docurise.io/docs\",\"publisher\":{\"@id\":\"https://docurise.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docurise.io/docs/api-reference/update-document#webpage\",\"url\":\"https://docurise.io/docs/api-reference/update-document\",\"name\":\"Update a document\",\"description\":\"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the revision or ETag that GET returns\",\"dateModified\":\"2026-10-21T12:11:39.202Z\",\"isPartOf\":{\"@id\":\"https://docurise.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://docurise.io/docs/api-reference/update-document#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docurise.io/docs/api-reference/update-document#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Documents\",\"item\":\"https://docurise.io/docs/api-reference/create-document\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update a document\",\"item\":\"https://docurise.io/docs/api-reference/update-document\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docurise.io/docs/api-reference/update-document#apireference\",\"headline\":\"Update a document\",\"name\":\"Update a document\",\"description\":\"Publish a draft post or form, pause or resume a document, set or clear its expiry, and change its email protection, guarded by the document revision in the request body, copied from the revision or ETag that GET returns\",\"url\":\"https://docurise.io/docs/api-reference/update-document\",\"mainEntityOfPage\":{\"@id\":\"https://docurise.io/docs/api-reference/update-document#webpage\"},\"dateModified\":\"2026-10-21T12:11:39.202Z\",\"publisher\":{\"@id\":\"https://docurise.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docurise.io/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"DocuRise Developer Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"DocuRise Developer Docs","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Guides","icon":"book-open","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Documents","pages":[{"title":"Create a document","openapi":"api-reference/openapi.yaml POST /api/preview/documents","href":"/api-reference/create-document"},{"title":"List documents","openapi":"api-reference/openapi.yaml GET /api/preview/documents","href":"/api-reference/list-documents"},{"title":"Get a document","description":"Read one document with its expiry, protection summary and the revision (ETag) to send back when you change it","openapi":"api-reference/openapi.yaml GET /api/preview/documents/{id}","href":"/api-reference/get-document"},{"title":"Update a document","openapi":"api-reference/openapi.yaml PATCH /api/preview/documents/{id}","href":"/api-reference/update-document"},{"title":"Get document analytics","description":"Views, unique visitors, leads and conversion for one of your documents over a UTC date range","openapi":"api-reference/openapi.yaml GET /api/preview/documents/{id}/analytics","href":"/api-reference/get-document-analytics"},{"title":"Get document analytics by channel","openapi":"api-reference/openapi.yaml GET /api/preview/documents/{id}/analytics/channels","href":"/api-reference/get-document-analytics-channels"},{"title":"Get form funnel","openapi":"api-reference/openapi.yaml GET /api/preview/documents/{id}/analytics/funnel","href":"/api-reference/get-form-funnel"},{"title":"List top documents","openapi":"api-reference/openapi.yaml GET /api/preview/analytics/documents","href":"/api-reference/list-top-documents"}]},{"group":"Folders","pages":[{"title":"List folders and courses","openapi":"api-reference/openapi.yaml GET /api/preview/folders","href":"/api-reference/list-folders"}]},{"group":"Products","pages":[{"title":"List products","openapi":"api-reference/openapi.yaml GET /api/preview/products","href":"/api-reference/list-products"}]},{"group":"Audiences","pages":[{"title":"List tags","openapi":"api-reference/openapi.yaml GET /api/preview/tags","href":"/api-reference/list-tags"},{"title":"Create a tag","openapi":"api-reference/openapi.yaml POST /api/preview/tags","href":"/api-reference/create-tag"},{"title":"List groups","openapi":"api-reference/openapi.yaml GET /api/preview/segments","href":"/api-reference/list-segments"},{"title":"Create a group","openapi":"api-reference/openapi.yaml POST /api/preview/segments","href":"/api-reference/create-segment"},{"title":"Preview a group rule","openapi":"api-reference/openapi.yaml POST /api/preview/segments/preview","href":"/api-reference/preview-segment"},{"title":"Get a group","openapi":"api-reference/openapi.yaml GET /api/preview/segments/{id}","href":"/api-reference/get-segment"},{"title":"Group conditions","href":"/api-reference/group-conditions"}]},{"group":"Contacts","pages":[{"title":"Add a tag to a contact","openapi":"api-reference/openapi.yaml PUT /api/preview/contacts/{contactId}/tags/{tagName}","href":"/api-reference/add-contact-tag"},{"title":"Remove a tag from a contact","openapi":"api-reference/openapi.yaml DELETE /api/preview/contacts/{contactId}/tags/{tagName}","href":"/api-reference/remove-contact-tag"}]},{"group":"Email","pages":[{"title":"List email broadcasts","openapi":"api-reference/openapi.yaml GET /api/preview/email/broadcasts","href":"/api-reference/list-email-broadcasts"},{"title":"Get broadcast insights","openapi":"api-reference/openapi.yaml GET /api/preview/email/broadcasts/{id}/insights","href":"/api-reference/get-broadcast-insights"},{"title":"List automations","openapi":"api-reference/openapi.yaml GET /api/preview/automations","href":"/api-reference/list-automations"}]},{"group":"Instagram","pages":[{"title":"Create an Instagram rule","openapi":"api-reference/openapi.yaml POST /api/preview/instagram/rules","href":"/api-reference/create-instagram-rule"},{"title":"List Instagram rules","openapi":"api-reference/openapi.yaml GET /api/preview/instagram/rules","href":"/api-reference/list-instagram-rules"},{"title":"Get an Instagram rule","openapi":"api-reference/openapi.yaml GET /api/preview/instagram/rules/{id}","href":"/api-reference/get-instagram-rule"},{"title":"Update an Instagram rule","openapi":"api-reference/openapi.yaml PATCH /api/preview/instagram/rules/{id}","href":"/api-reference/update-instagram-rule"}]},{"group":"Account","pages":[{"title":"Inspect the calling key","openapi":"api-reference/openapi.yaml GET /api/preview/whoami","href":"/api-reference/whoami"}]}]}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/api-reference/update-document"}]}]},"title":"Update a document - DocuRise Developer Docs","buildId":"dpl_3DJU2xKhT5gDPFQL5Tqv7AFnkWsF","deploymentId":"dpl_3DJU2xKhT5gDPFQL5Tqv7AFnkWsF","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DsGgv5pK.js","utils-B0h6ZXi-.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-IgrnFwPw.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C49-TBER.js","snippetPresets-BPHn-9OB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CGBwAHwX.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BjABHCCH.js","shallow-C0Uj5sOI.js","getApiPlaygroundDisplay-BnYiIeY4.js","CodeSnippet-BJWWrlBw.js","CodeSnippets-bxE5aDye.js","Page-BBU7roUf.js","getPastedJson-BAjriezQ.js","icon-BqcS52QC.js","MethodPill-BPGyN9me.js","DuplicateIcon-CCf2giLL.js","createIcon-CVH8aNt2.js","DynamicMarkdown-BklwmxA6.js","SectionHeading-DYCZQFxh.js","axios-vUo_bRtp.js","Markdown-D26rHnOC.js","clsx-DkiOUx4h.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DI8jfVGc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DwJy-csb.js"]}