Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls:
templates.create with channel: "web", category: "blog" and a web object. web.html is the body readers see, rendered as-is. web.content is required and is the Tiptap document the console editor opens; if you only have HTML, send {"type": "doc", "content": []}, and do not edit that post in the console afterwards, because saving there regenerates web.html from web.content.
blogPosts.create with that template’s id as template_id.
blogPosts.publish.
Requires the blog write permission, plus the templates write permission for step 1.
POST
/
api
/
blogPosts.create
Create a blog post
curl --request POST \ --url https://{notifuseDomain}/api/blogPosts.create \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "category_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "slug": "october-release", "title": "What shipped in October", "template_id": "blog_october_release", "template_version": 1, "excerpt": "A faster editor, scheduled broadcasts and a new API.", "featured_image_url": "https://cdn.example.com/blog/october.png", "authors": [ { "name": "Jane Doe", "avatar_url": "https://cdn.example.com/avatars/jane.png" } ], "reading_time_minutes": 4, "seo": { "meta_title": "Release notes for October", "meta_description": "Everything that shipped this month.", "og_title": "<string>", "og_description": "<string>", "og_image": "https://cdn.example.com/og/october.png", "canonical_url": "https://blog.example.com/product/october-release", "keywords": [ "release", "changelog" ], "meta_robots": "index,follow" }}'
A web template (channel: web) holding the post body — create it first with templates.create. Its existence is not checked here: a post pointing at a missing template is saved and renders with an empty body.
The template version to render. Omit it (or send 0) to always render the template's latest version; pin a version to control exactly when a template edit reaches readers.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Notifuse Documentation","colors":{"primary":"#7763F1","light":"#7763F1","dark":"#7763F1"},"logo":{"light":"https://mintcdn.com/notifuse/Gw4P7NadUImyvZfw/assets/logo/logo-small.png?fit=max\u0026auto=format\u0026n=Gw4P7NadUImyvZfw\u0026q=85\u0026s=3f27c94b7162528f7c2d50f0d0dffdc4","dark":"https://mintcdn.com/notifuse/Gw4P7NadUImyvZfw/assets/logo/logo-small.png?fit=max\u0026auto=format\u0026n=Gw4P7NadUImyvZfw\u0026q=85\u0026s=3f27c94b7162528f7c2d50f0d0dffdc4","href":"https://notifuse.com"},"favicon":"https://mintcdn.com/notifuse/Gw4P7NadUImyvZfw/assets/logo/icon.png?fit=max\u0026auto=format\u0026n=Gw4P7NadUImyvZfw\u0026q=85\u0026s=4747c87b24b335428a3813ddeddb25c6","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"mailto:hello@notifuse.com","label":"Support"},{"href":"https://github.com/notifuse","label":"GitHub"}],"primary":{"type":"button","label":"Try Notifuse Cloud","href":"https://cloud.notifuse.com"}},"footer":{"socials":{"x":"https://x.com/notifuse","github":"https://github.com/notifuse"}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"notifuse","hasAudioNarration":false,"actualSubdomain":"notifuse","customDomains":["docs.notifuse.com"],"gitSource":{"type":"github","owner":"notifuse","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af344515b327c2363d33337","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API Reference","count":74},{"language":"default","tag":"Documentation","count":41},{"language":"default","tag":"Features","count":26},{"language":"default","tag":"Blog","count":21},{"language":"default","tag":"Web Analytics","count":17},{"language":"default","tag":"Broadcasts","count":12},{"language":"default","tag":"Webhooks","count":10},{"language":"default","tag":"Self-hosting","count":8},{"language":"default","tag":"Email Providers","count":7},{"language":"default","tag":"Contacts","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/blog/create-a-blog-post","slug":"/api-reference/blog/create-a-blog-post","pageMetadata":{"title":"Create a blog post","description":"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls:\n\n1. `templates.create` with `channel: \"web\"`, `category: \"blog\"` and a `web` object. `web.html` is the body readers see, rendered as-is. `web.content` is required and is the Tiptap document the console editor opens; if you only have HTML, send `{\"type\": \"doc\", \"content\": []}`, and do not edit that post in the console afterwards, because saving there regenerates `web.html` from `web.content`.\n2. `blogPosts.create` with that template's `id` as `template_id`.\n3. `blogPosts.publish`.\n\nRequires the blog write permission, plus the templates write permission for step 1.\n","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogPosts.create","href":"/api-reference/blog/create-a-blog-post","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n ol: \"ol\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls:\"\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"templates.create\"\n }), \" with \", _jsx(_components.code, {\n children: \"channel: \\\"web\\\"\"\n }), \", \", _jsx(_components.code, {\n children: \"category: \\\"blog\\\"\"\n }), \" and a \", _jsx(_components.code, {\n children: \"web\"\n }), \" object. \", _jsx(_components.code, {\n children: \"web.html\"\n }), \" is the body readers see, rendered as-is. \", _jsx(_components.code, {\n children: \"web.content\"\n }), \" is required and is the Tiptap document the console editor opens; if you only have HTML, send \", _jsx(_components.code, {\n children: \"{\\\"type\\\": \\\"doc\\\", \\\"content\\\": []}\"\n }), \", and do not edit that post in the console afterwards, because saving there regenerates \", _jsx(_components.code, {\n children: \"web.html\"\n }), \" from \", _jsx(_components.code, {\n children: \"web.content\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"blogPosts.create\"\n }), \" with that template’s \", _jsx(_components.code, {\n children: \"id\"\n }), \" as \", _jsx(_components.code, {\n children: \"template_id\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"blogPosts.publish\"\n }), \".\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Requires the blog write permission, plus the templates write permission for step 1.\"\n })]\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":"Create a blog post","description":"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls:\n\n1. `templates.create` with `channel: \"web\"`, `category: \"blog\"` and a `web` object. `web.html` is the body readers see, rendered as-is. `web.content` is required and is the Tiptap document the console editor opens; if you only have HTML, send `{\"type\": \"doc\", \"content\": []}`, and do not edit that post in the console afterwards, because saving there regenerates `web.html` from `web.content`.\n2. `blogPosts.create` with that template's `id` as `template_id`.\n3. `blogPosts.publish`.\n\nRequires the blog write permission, plus the templates write permission for step 1.\n","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogPosts.create","href":"/api-reference/blog/create-a-blog-post","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Create a blog post","description":"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls:\n\n1. `templates.create` with `channel: \"web\"`, `category: \"blog\"` and a `web` object. `web.html` is the body readers see, rendered as-is. `web.content` is required and is the Tiptap document the console editor opens; if you only have HTML, send `{\"type\": \"doc\", \"content\": []}`, and do not edit that post in the console afterwards, because saving there regenerates `web.html` from `web.content`.\n2. `blogPosts.create` with that template's `id` as `template_id`.\n3. `blogPosts.publish`.\n\nRequires the blog write permission, plus the templates write permission for step 1.\n","operationId":"createBlogPost","tags":["Blog"],"security":["58605084-31fc-43c1-9b04-be7e5a09ff54"],"parameters":["3ac2eb6f-9aa8-4e0d-a880-a78a5514a0b3"],"requestBody":"9f3b6fb9-d277-410c-99c1-9fabdc7538c7","responses":{"201":"b872d2a2-32b9-4309-85b7-659b48016db1","400":"13a00348-6e95-4dbf-b22b-fb4007c1d571","401":"497645a2-2ac5-45e0-8dd6-175167844a63","403":"21cb154f-e2cb-4957-8583-b94369a66091"},"method":"post","type":"path","servers":["40491414-819c-4153-87c6-8275ef85e9c4"],"path":"/api/blogPosts.create","baseUrlOptions":["https://{notifuseDomain}"],"title":"Create a blog post","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"3ac2eb6f-9aa8-4e0d-a880-a78a5514a0b3":{"name":"workspace_id","in":"query","required":true,"schema":{"type":"string","isRequired":true,"description":"The ID of the workspace. Passed in the query string, not the body.","uniqueKey":"","typeLabel":"string"},"description":"The ID of the workspace. Passed in the query string, not the body.","example":"ws_1234567890"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["category_id","slug","title","template_id"],"properties":{"category_id":{"type":"string","description":"An existing category.","example":"7c9e6679-7425-40de-944b-e07fc1f90ae7","isRequired":true,"uniqueKey":"category_id","typeLabel":"string"},"slug":{"type":"string","maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Lowercase letters, digits and single hyphens. Must be unique across the whole workspace, not just within the category.","example":"october-release","isRequired":true,"uniqueKey":"slug","typeLabel":"string"},"title":{"type":"string","maxLength":500,"example":"What shipped in October","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"template_id":{"type":"string","description":"A web template (`channel: web`) holding the post body — create it first with `templates.create`. Its existence is not checked here: a post pointing at a missing template is saved and renders with an empty body.","example":"blog_october_release","isRequired":true,"uniqueKey":"template_id","typeLabel":"string"},"template_version":{"type":"integer","default":0,"description":"The template version to render. Omit it (or send `0`) to always render the template's latest version; pin a version to control exactly when a template edit reaches readers.","example":1,"uniqueKey":"template_version","typeLabel":"integer"},"excerpt":{"type":"string","example":"A faster editor, scheduled broadcasts and a new API.","uniqueKey":"excerpt","typeLabel":"string"},"featured_image_url":{"type":"string","example":"https://cdn.example.com/blog/october.png","uniqueKey":"featured_image_url","typeLabel":"string"},"authors":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"Jane Doe","isRequired":true,"uniqueKey":"authors.items.[INDEX].name","typeLabel":"string"},"avatar_url":{"type":"string","example":"https://cdn.example.com/avatars/jane.png","uniqueKey":"authors.items.[INDEX].avatar_url","typeLabel":"string"}},"uniqueKey":"authors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"authors","typeLabel":"object[]"},"reading_time_minutes":{"type":"integer","example":4,"uniqueKey":"reading_time_minutes","typeLabel":"integer"},"seo":{"type":"object","description":"Search and social metadata for the page, exposed to the blog theme.","properties":{"meta_title":{"type":"string","example":"Release notes for October","uniqueKey":"seo.meta_title","typeLabel":"string"},"meta_description":{"type":"string","example":"Everything that shipped this month.","uniqueKey":"seo.meta_description","typeLabel":"string"},"og_title":{"type":"string","description":"Open Graph title","uniqueKey":"seo.og_title","typeLabel":"string"},"og_description":{"type":"string","description":"Open Graph description","uniqueKey":"seo.og_description","typeLabel":"string"},"og_image":{"type":"string","description":"Open Graph image URL","example":"https://cdn.example.com/og/october.png","uniqueKey":"seo.og_image","typeLabel":"string"},"canonical_url":{"type":"string","example":"https://blog.example.com/product/october-release","uniqueKey":"seo.canonical_url","typeLabel":"string"},"keywords":{"type":"array","items":{"type":"string","uniqueKey":"seo.keywords.items.[INDEX]","typeLabel":"string"},"example":["release","changelog"],"uniqueKey":"seo.keywords","typeLabel":"string[]"},"meta_robots":{"type":"string","description":"Content of the robots meta tag.","example":"index,follow","uniqueKey":"seo.meta_robots","typeLabel":"string"}},"uniqueKey":"seo","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"category_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","slug":"october-release","title":"What shipped in October","template_id":"blog_october_release","template_version":1,"excerpt":"A faster editor, scheduled broadcasts and a new API.","featured_image_url":"https://cdn.example.com/blog/october.png","authors":[{"name":"Jane Doe","avatar_url":"https://cdn.example.com/avatars/jane.png"}],"reading_time_minutes":4,"seo":{"meta_title":"Release notes for October","meta_description":"Everything that shipped this month.","og_title":"\u003cstring>","og_description":"\u003cstring>","og_image":"https://cdn.example.com/og/october.png","canonical_url":"https://blog.example.com/product/october-release","keywords":["release","changelog"],"meta_robots":"index,follow"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"b872d2a2-32b9-4309-85b7-659b48016db1":{"description":"Post created as a draft","content":{"application/json":{"schema":{"type":"object","required":["post"],"properties":{"post":{"type":"object","required":["id","category_id","slug","settings","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Server-generated UUID.","example":"1b4e28ba-2fa1-11d2-883f-0016d3cca427","isRequired":true,"uniqueKey":"post.id","typeLabel":"string"},"category_id":{"type":"string","example":"7c9e6679-7425-40de-944b-e07fc1f90ae7","isRequired":true,"uniqueKey":"post.category_id","typeLabel":"string"},"slug":{"type":"string","description":"The post's path segment on the blog (`/{category_slug}/{post_slug}`).","example":"october-release","isRequired":true,"uniqueKey":"post.slug","typeLabel":"string"},"settings":{"type":"object","required":["title","template","reading_time_minutes"],"properties":{"title":{"type":"string","description":"The post's H1.","example":"What shipped in October","isRequired":true,"uniqueKey":"post.settings.title","typeLabel":"string"},"template":{"type":"object","required":["template_id","template_version"],"description":"The web template holding the post body.","properties":{"template_id":{"type":"string","example":"blog_october_release","isRequired":true,"uniqueKey":"post.settings.template.template_id","typeLabel":"string"},"template_version":{"type":"integer","description":"The template version the post renders. `0` means the latest version, whatever it is at render time.","example":3,"isRequired":true,"uniqueKey":"post.settings.template.template_version","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"post.settings.template","typeLabel":"object"},"reading_time_minutes":{"type":"integer","description":"Displayed as given; not computed from the body.","example":4,"isRequired":true,"uniqueKey":"post.settings.reading_time_minutes","typeLabel":"integer"},"excerpt":{"type":"string","example":"A faster editor, scheduled broadcasts and a new API.","uniqueKey":"post.settings.excerpt","typeLabel":"string"},"featured_image_url":{"type":"string","example":"https://cdn.example.com/blog/october.png","uniqueKey":"post.settings.featured_image_url","typeLabel":"string"},"authors":{"oneOf":[{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"Jane Doe","isRequired":true,"uniqueKey":"post.settings.authors.oneOf.0.items.[INDEX].name","typeLabel":"string"},"avatar_url":{"type":"string","example":"https://cdn.example.com/avatars/jane.png","uniqueKey":"post.settings.authors.oneOf.0.items.[INDEX].avatar_url","typeLabel":"string"}},"uniqueKey":"post.settings.authors.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"post.settings.authors.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"Jane Doe"},"avatar_url":{"type":"string","example":"https://cdn.example.com/avatars/jane.png"}}},"uniqueKey":"post.settings.authors.oneOf.1","typeLabel":"null"}],"uniqueKey":"post.settings.authors","typeLabel":"object[] | null"},"seo":{"type":"object","description":"Search and social metadata for the page, exposed to the blog theme.","properties":{"meta_title":{"type":"string","example":"Release notes for October","uniqueKey":"post.settings.seo.meta_title","typeLabel":"string"},"meta_description":{"type":"string","example":"Everything that shipped this month.","uniqueKey":"post.settings.seo.meta_description","typeLabel":"string"},"og_title":{"type":"string","description":"Open Graph title","uniqueKey":"post.settings.seo.og_title","typeLabel":"string"},"og_description":{"type":"string","description":"Open Graph description","uniqueKey":"post.settings.seo.og_description","typeLabel":"string"},"og_image":{"type":"string","description":"Open Graph image URL","example":"https://cdn.example.com/og/october.png","uniqueKey":"post.settings.seo.og_image","typeLabel":"string"},"canonical_url":{"type":"string","example":"https://blog.example.com/product/october-release","uniqueKey":"post.settings.seo.canonical_url","typeLabel":"string"},"keywords":{"type":"array","items":{"type":"string","uniqueKey":"post.settings.seo.keywords.items.[INDEX]","typeLabel":"string"},"example":["release","changelog"],"uniqueKey":"post.settings.seo.keywords","typeLabel":"string[]"},"meta_robots":{"type":"string","description":"Content of the robots meta tag.","example":"index,follow","uniqueKey":"post.settings.seo.meta_robots","typeLabel":"string"}},"uniqueKey":"post.settings.seo","typeLabel":"object"}},"isRequired":true,"uniqueKey":"post.settings","typeLabel":"object"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"post.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"post.updated_at","typeLabel":"string\u003cdate-time>"},"published_at":{"type":"string","format":"date-time","description":"Absent while the post is a draft.","example":"2026-10-01T09:00:00Z","uniqueKey":"post.published_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"post","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"post":{"id":"1b4e28ba-2fa1-11d2-883f-0016d3cca427","category_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","slug":"october-release","settings":{"title":"What shipped in October","template":{"template_id":"blog_october_release","template_version":3},"reading_time_minutes":4,"excerpt":"A faster editor, scheduled broadcasts and a new API.","featured_image_url":"https://cdn.example.com/blog/october.png","authors":[{"name":"Jane Doe","avatar_url":"https://cdn.example.com/avatars/jane.png"}],"seo":{"meta_title":"Release notes for October","meta_description":"Everything that shipped this month.","og_title":"\u003cstring>","og_description":"\u003cstring>","og_image":"https://cdn.example.com/og/october.png","canonical_url":"https://blog.example.com/product/october-release","keywords":["release","changelog"],"meta_robots":"index,follow"}},"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","published_at":"2026-10-01T09:00:00Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"13a00348-6e95-4dbf-b22b-fb4007c1d571":{"description":"Bad request - validation failed, slug taken or category not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"slugTaken":{"title":"slugTaken","value":{"error":"post with slug 'october-release' already exists"}},"unknownCategory":{"title":"unknownCategory","value":{"error":"category not found: blog category not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"497645a2-2ac5-45e0-8dd6-175167844a63":{"description":"Unauthorized - invalid or missing authentication token","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"21cb154f-e2cb-4957-8583-b94369a66091":{"description":"Forbidden - missing the blog write permission","content":{"application/json":{"schema":{"type":"object","description":"Returned with a 403 when the user or API key lacks the permission the endpoint requires.","properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"resource":{"type":"string","description":"The permission resource the endpoint requires.","example":"blog","isRequired":true,"uniqueKey":"resource","typeLabel":"string"},"permission":{"type":"string","enum":["read","write"],"description":"The access level the endpoint requires on that resource.","isRequired":true,"uniqueKey":"permission","typeLabel":"enum\u003cstring>"}},"required":["error","resource","permission"],"uniqueKey":"","typeLabel":"object"},"example":{"error":"Insufficient permissions: write access to blog required","resource":"blog","permission":"write"},"examples":{"Example":{"title":"Example","value":{"error":"Insufficient permissions: write access to blog required","resource":"blog","permission":"write"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"58605084-31fc-43c1-9b04-be7e5a09ff54":{"BearerAuth":{"type":"http","scheme":"bearer","description":"API token for authentication","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"40491414-819c-4153-87c6-8275ef85e9c4":{"url":"https://{notifuseDomain}","description":"Customer-specific Notifuse API server","variables":{"notifuseDomain":{"description":"Your unique Notifuse domain","default":"demo.notifuse.com"}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API token for authentication","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API token for authentication","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"notifuse","siteName":"Notifuse Documentation","title":"Create a blog post - Notifuse Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-10T16:20:40.742Z","originalFileLocation":"api-reference/blog/create-a-blog-post.mdx"},"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=\"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls: 1. templates.create with channel: \u0026quot;web\u0026quot;, category: \u0026quot;blog\u0026quot; and a web object. web.html is the body readers see, rendered as-is. web.content is required and is the Tiptap document the console editor opens; if you only have HTML, send {\u0026quot;type\u0026quot;: \u0026quot;doc\u0026quot;, \u0026quot;content\u0026quot;: []}, and do not edit that post in the console afterwards, because saving there regenerates web.html from web.content. 2. blogPosts.create with that template\u0026#x27;s id as template_id. 3. blogPosts.publish. Requires the blog write permission, plus the templates write permission for step 1.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Notifuse Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_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=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a blog post - Notifuse Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls: 1. templates.create with channel: \u0026quot;web\u0026quot;, category: \u0026quot;blog\u0026quot; and a web object. web.html is the body readers see, rendered as-is. web.content is required and is the Tiptap document the console editor opens; if you only have HTML, send {\u0026quot;type\u0026quot;: \u0026quot;doc\u0026quot;, \u0026quot;content\u0026quot;: []}, and do not edit that post in the console afterwards, because saving there regenerates web.html from web.content. 2. blogPosts.create with that template\u0026#x27;s id as template_id. 3. blogPosts.publish. Requires the blog write permission, plus the templates write permission for step 1.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Notifuse Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://notifuse.mintlify.site/_mintlify/api/og/v2?division=Blog\u0026amp;title=Create+a+blog+post\u0026amp;description=Creates+a+post+as+a+draft.+The+post+holds+the+metadata%3B+its+body+lives+in+a+web+template%2C+so+publishing+a+post+over+the+API+takes+three+calls%3A%0A%0A1.+%60templates.cr\u0026amp;theme=aae659bd81e1847b077c159a\u0026amp;signature=a8ee078aee36184d01c1b64b529771d450d69637d92c6dc08e9221566e31588c\">\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=\"Create a blog post - Notifuse Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls: 1. templates.create with channel: \u0026quot;web\u0026quot;, category: \u0026quot;blog\u0026quot; and a web object. web.html is the body readers see, rendered as-is. web.content is required and is the Tiptap document the console editor opens; if you only have HTML, send {\u0026quot;type\u0026quot;: \u0026quot;doc\u0026quot;, \u0026quot;content\u0026quot;: []}, and do not edit that post in the console afterwards, because saving there regenerates web.html from web.content. 2. blogPosts.create with that template\u0026#x27;s id as template_id. 3. blogPosts.publish. Requires the blog write permission, plus the templates write permission for step 1.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://notifuse.mintlify.site/_mintlify/api/og/v2?division=Blog\u0026amp;title=Create+a+blog+post\u0026amp;description=Creates+a+post+as+a+draft.+The+post+holds+the+metadata%3B+its+body+lives+in+a+web+template%2C+so+publishing+a+post+over+the+API+takes+three+calls%3A%0A%0A1.+%60templates.cr\u0026amp;theme=aae659bd81e1847b077c159a\u0026amp;signature=a8ee078aee36184d01c1b64b529771d450d69637d92c6dc08e9221566e31588c\">\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=\"/mintlify-assets/_mintlify/favicons/notifuse/c0N0ayUOq9_6B61d/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Notifuse Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7763F1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/blog/create-a-blog-post.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.notifuse.com/#organization\",\"name\":\"Notifuse Documentation\",\"url\":\"https://docs.notifuse.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/notifuse/Gw4P7NadUImyvZfw/assets/logo/logo-small.png?fit=max\u0026auto=format\u0026n=Gw4P7NadUImyvZfw\u0026q=85\u0026s=3f27c94b7162528f7c2d50f0d0dffdc4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.notifuse.com#website\",\"name\":\"Notifuse Documentation\",\"url\":\"https://docs.notifuse.com\",\"publisher\":{\"@id\":\"https://docs.notifuse.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post#webpage\",\"url\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post\",\"name\":\"Create a blog post\",\"description\":\"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls: 1. templates.create with channel: \\\"web\\\", category: \\\"blog\\\" and a web object. web.html is the body readers see, rendered as-is. web.content is required and is the Tiptap document the console editor opens; if you only have HTML, send {\\\"type\\\": \\\"doc\\\", \\\"content\\\": []}, and do not edit that post in the console afterwards, because saving there regenerates web.html from web.content. 2. blogPosts.create with that template's id as template_id. 3. blogPosts.publish. Requires the blog write permission, plus the templates write permission for step 1.\",\"dateModified\":\"2026-11-10T16:20:40.742Z\",\"isPartOf\":{\"@id\":\"https://docs.notifuse.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog\",\"item\":\"https://docs.notifuse.com/api-reference/blog/list-blog-categories\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a blog post\",\"item\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post#apireference\",\"headline\":\"Create a blog post\",\"name\":\"Create a blog post\",\"description\":\"Creates a post as a draft. The post holds the metadata; its body lives in a web template, so publishing a post over the API takes three calls: 1. templates.create with channel: \\\"web\\\", category: \\\"blog\\\" and a web object. web.html is the body readers see, rendered as-is. web.content is required and is the Tiptap document the console editor opens; if you only have HTML, send {\\\"type\\\": \\\"doc\\\", \\\"content\\\": []}, and do not edit that post in the console afterwards, because saving there regenerates web.html from web.content. 2. blogPosts.create with that template's id as template_id. 3. blogPosts.publish. Requires the blog write permission, plus the templates write permission for step 1.\",\"url\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post\",\"mainEntityOfPage\":{\"@id\":\"https://docs.notifuse.com/api-reference/blog/create-a-blog-post#webpage\"},\"dateModified\":\"2026-11-10T16:20:40.742Z\",\"publisher\":{\"@id\":\"https://docs.notifuse.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.notifuse.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Notifuse Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Notifuse Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Self-hosting","pages":[{"title":"Self-hosting","href":"/self-hosting/installation"}]},{"tab":"API Reference","groups":[{"group":"Authentication","pages":[{"title":"Root user programmatic signin","deprecated":null,"version":null,"openapi":"/openapi.json post /api/user.rootSignin","href":"/api-reference/authentication/root-user-programmatic-signin"}]},{"group":"Transactional","pages":[{"title":"Send a transactional notification","deprecated":null,"version":null,"openapi":"/openapi.json post /api/transactional.send","href":"/api-reference/send-a-transactional-notification"}]},{"group":"Contacts","pages":[{"title":"List contacts with filtering and pagination","deprecated":null,"version":null,"openapi":"/openapi.json get /api/contacts.list","href":"/api-reference/list-contacts-with-filtering-and-pagination"},{"title":"Count contacts in a workspace","deprecated":null,"version":null,"openapi":"/openapi.json get /api/contacts.count","href":"/api-reference/count-contacts-in-a-workspace"},{"title":"Create or update a contact","deprecated":null,"version":null,"openapi":"/openapi.json post /api/contacts.upsert","href":"/api-reference/create-or-update-a-contact"},{"title":"Get a contact by email address","deprecated":null,"version":null,"openapi":"/openapi.json get /api/contacts.getByEmail","href":"/api-reference/get-a-contact-by-email-address"},{"title":"Get a contact by external ID","deprecated":null,"version":null,"openapi":"/openapi.json get /api/contacts.getByExternalID","href":"/api-reference/get-a-contact-by-external-id"},{"title":"Batch import contacts","deprecated":null,"version":null,"openapi":"/openapi.json post /api/contacts.import","href":"/api-reference/batch-import-contacts"},{"title":"Delete a contact","deprecated":null,"version":null,"openapi":"/openapi.json post /api/contacts.delete","href":"/api-reference/delete-a-contact"}]},{"group":"Lists","pages":[{"title":"Update contact list subscription status","deprecated":null,"version":null,"openapi":"/openapi.json post /api/contactLists.updateStatus","href":"/api-reference/update-contact-list-subscription-status"},{"title":"Subscribe to email lists","deprecated":null,"version":null,"openapi":"/openapi.json post /subscribe","href":"/api-reference/subscribe-to-email-lists"},{"title":"Subscribe to email lists (authenticated)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/lists.subscribe","href":"/api-reference/subscribe-to-email-lists-authenticated"}]},{"group":"Custom Events","pages":[{"title":"Import custom events","deprecated":null,"version":null,"openapi":"/openapi.json post /api/customEvents.import","href":"/api-reference/import-custom-events"}]},{"group":"Web Analytics","pages":[{"title":"Ingest a web analytics beat","deprecated":null,"version":null,"openapi":"/openapi.json post /track","href":"/api-reference/web-analytics/ingest-a-web-analytics-beat"},{"title":"Replace the workspace's web analytics settings","deprecated":null,"version":null,"openapi":"/openapi.json post /api/workspaces.setWebAnalyticsSettings","href":"/api-reference/web-analytics/replace-the-workspaces-web-analytics-settings"},{"title":"Start an attribution backfill","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webAnalytics.backfillStart","href":"/api-reference/web-analytics/start-an-attribution-backfill"},{"title":"Get the latest backfill run","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webAnalytics.backfillStatus","href":"/api-reference/web-analytics/get-the-latest-backfill-run"},{"title":"Cancel the in-flight backfill run","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webAnalytics.backfillCancel","href":"/api-reference/web-analytics/cancel-the-in-flight-backfill-run"},{"title":"List annotations","deprecated":null,"version":null,"openapi":"/openapi.json get /api/annotations.list","href":"/api-reference/web-analytics/list-annotations"},{"title":"Get an annotation","deprecated":null,"version":null,"openapi":"/openapi.json get /api/annotations.get","href":"/api-reference/web-analytics/get-an-annotation"},{"title":"Create an annotation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/annotations.create","href":"/api-reference/web-analytics/create-an-annotation"},{"title":"Update an annotation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/annotations.update","href":"/api-reference/web-analytics/update-an-annotation"},{"title":"Delete an annotation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/annotations.delete","href":"/api-reference/web-analytics/delete-an-annotation"}]},{"group":"Broadcasts","pages":[{"title":"List broadcasts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/broadcasts.list","href":"/api-reference/list-broadcasts"},{"title":"Get a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json get /api/broadcasts.get","href":"/api-reference/get-a-broadcast"},{"title":"Create a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.create","href":"/api-reference/create-a-broadcast"},{"title":"Update a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.update","href":"/api-reference/update-a-broadcast"},{"title":"Schedule a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.schedule","href":"/api-reference/schedule-a-broadcast"},{"title":"Pause a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.pause","href":"/api-reference/pause-a-broadcast"},{"title":"Resume a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.resume","href":"/api-reference/resume-a-broadcast"},{"title":"Cancel a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.cancel","href":"/api-reference/cancel-a-broadcast"},{"title":"Send broadcast to individual","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.sendToIndividual","href":"/api-reference/send-broadcast-to-individual"},{"title":"Delete a broadcast","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.delete","href":"/api-reference/delete-a-broadcast"},{"title":"Get A/B test results","deprecated":null,"version":null,"openapi":"/openapi.json get /api/broadcasts.getTestResults","href":"/api-reference/get-ab-test-results"},{"title":"Select winning A/B test variation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/broadcasts.selectWinner","href":"/api-reference/select-winning-ab-test-variation"}]},{"group":"Templates","pages":[{"title":"List templates","deprecated":null,"version":null,"openapi":"/openapi.json get /api/templates.list","href":"/api-reference/list-templates"},{"title":"Get a template","deprecated":null,"version":null,"openapi":"/openapi.json get /api/templates.get","href":"/api-reference/get-a-template"},{"title":"Create a template","deprecated":null,"version":null,"openapi":"/openapi.json post /api/templates.create","href":"/api-reference/create-a-template"},{"title":"Update a template","deprecated":null,"version":null,"openapi":"/openapi.json post /api/templates.update","href":"/api-reference/update-a-template"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"/openapi.json post /api/templates.delete","href":"/api-reference/delete-a-template"},{"title":"Compile template","deprecated":null,"version":null,"openapi":"/openapi.json post /api/templates.compile","href":"/api-reference/compile-template"}]},{"group":"Blog","pages":[{"title":"List blog categories","deprecated":null,"version":null,"openapi":"/openapi.json get /api/blogCategories.list","href":"/api-reference/blog/list-blog-categories"},{"title":"Get a blog category","deprecated":null,"version":null,"openapi":"/openapi.json get /api/blogCategories.get","href":"/api-reference/blog/get-a-blog-category"},{"title":"Create a blog category","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogCategories.create","href":"/api-reference/blog/create-a-blog-category"},{"title":"Update a blog category","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogCategories.update","href":"/api-reference/blog/update-a-blog-category"},{"title":"Delete a blog category","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogCategories.delete","href":"/api-reference/blog/delete-a-blog-category"},{"title":"List blog posts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/blogPosts.list","href":"/api-reference/blog/list-blog-posts"},{"title":"Get a blog post","description":"Retrieves a post by `id` or by `slug`; when both are given, `id` wins. Drafts are returned too. Requires the blog read permission.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/blogPosts.get","href":"/api-reference/blog/get-a-blog-post"},{"title":"Create a blog post","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogPosts.create","href":"/api-reference/blog/create-a-blog-post"},{"title":"Update a blog post","description":"Replaces a post's metadata. This is not a patch: optional fields left out are cleared, so send the post back with your changes applied.\n\nTo change the body, update the template with `templates.update`, which saves a new template version. A post pinned to a `template_version` keeps rendering the old one until you update the post with the new version; a post at version `0` follows the latest version on its own, within the 5-minute page cache.\n\nRequires the blog write permission.\n","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogPosts.update","href":"/api-reference/blog/update-a-blog-post"},{"title":"Delete a blog post","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogPosts.delete","href":"/api-reference/blog/delete-a-blog-post"},{"title":"Publish a blog post","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogPosts.publish","href":"/api-reference/blog/publish-a-blog-post"},{"title":"Unpublish a blog post","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogPosts.unpublish","href":"/api-reference/blog/unpublish-a-blog-post"},{"title":"List blog theme versions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/blogThemes.list","href":"/api-reference/blog/list-blog-theme-versions"},{"title":"Get a blog theme version","deprecated":null,"version":null,"openapi":"/openapi.json get /api/blogThemes.get","href":"/api-reference/blog/get-a-blog-theme-version"},{"title":"Get the published blog theme","deprecated":null,"version":null,"openapi":"/openapi.json get /api/blogThemes.getPublished","href":"/api-reference/blog/get-the-published-blog-theme"},{"title":"Create a blog theme version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogThemes.create","href":"/api-reference/blog/create-a-blog-theme-version"},{"title":"Update a blog theme version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogThemes.update","href":"/api-reference/blog/update-a-blog-theme-version"},{"title":"Publish a blog theme version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/blogThemes.publish","href":"/api-reference/blog/publish-a-blog-theme-version"}]},{"group":"Webhooks","pages":[{"title":"Create a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webhookSubscriptions.create","href":"/api-reference/create-a-webhook-subscription"},{"title":"List webhook subscriptions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/webhookSubscriptions.list","href":"/api-reference/list-webhook-subscriptions"},{"title":"Get a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json get /api/webhookSubscriptions.get","href":"/api-reference/get-a-webhook-subscription"},{"title":"Update a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webhookSubscriptions.update","href":"/api-reference/update-a-webhook-subscription"},{"title":"Delete a webhook subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webhookSubscriptions.delete","href":"/api-reference/delete-a-webhook-subscription"},{"title":"Toggle webhook subscription enabled state","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webhookSubscriptions.toggle","href":"/api-reference/toggle-webhook-subscription-enabled-state"},{"title":"Regenerate webhook secret","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webhookSubscriptions.regenerateSecret","href":"/api-reference/regenerate-webhook-secret"},{"title":"Get webhook delivery history","deprecated":null,"version":null,"openapi":"/openapi.json get /api/webhookSubscriptions.deliveries","href":"/api-reference/get-webhook-delivery-history"},{"title":"Send a test webhook","deprecated":null,"version":null,"openapi":"/openapi.json post /api/webhookSubscriptions.test","href":"/api-reference/send-a-test-webhook"},{"title":"List available event types","deprecated":null,"version":null,"openapi":"/openapi.json get /api/webhookSubscriptions.eventTypes","href":"/api-reference/list-available-event-types"}]},{"group":"Audit logs","pages":[{"title":"List audit logs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auditLogs.list","href":"/api-reference/audit-logs/list-audit-logs"},{"title":"Get an audit log entry","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auditLogs.get","href":"/api-reference/audit-logs/get-an-audit-log-entry"},{"title":"List audit actions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auditLogs.actions","href":"/api-reference/audit-logs/list-audit-actions"},{"title":"Export audit logs","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auditLogs.export","href":"/api-reference/audit-logs/export-audit-logs"},{"title":"Set the workspace audit log retention","deprecated":null,"version":null,"openapi":"/openapi.json post /api/workspaces.setAuditLogSettings","href":"/api-reference/audit-logs/set-the-workspace-audit-log-retention"}]}]},{"tab":"Cloud","href":"https://cloud.notifuse.com"}]},"basePath":"","title":"Create a blog post - Notifuse Documentation","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}