Dry run: fills in block ids, derives request_format, and checks compilation and interactivity against sample_data without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. valid: false comes with the engine’s messages under errors. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.
LithoBlocks API key obtained from your organization dashboard. The LithoBlocks MCP server also presents a Supabase-issued user session token here on the user's behalf; such a token acts as that user with the scopes their organization role allows.
{ template_id, data } where data holds null per placeholder and [{ field: null }] per array path; what a caller of compile/send must supply. GET /templates/{id}/input-schema describes the same paths with types, labels and nesting
What compile normalised: chart points filled with 0, series or points truncated to Slack's counts
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"LithoBlocks","colors":{"primary":"#0891b2","light":"#cffafe","dark":"#0e7490"},"logo":{"light":"https://mintcdn.com/lithoblocks/KGZFBT_KPY8H2VP2/logo/light.png?fit=max\u0026auto=format\u0026n=KGZFBT_KPY8H2VP2\u0026q=85\u0026s=99f8cf65528bebb78dec112d77f923c9","dark":"https://mintcdn.com/lithoblocks/KGZFBT_KPY8H2VP2/logo/dark.png?fit=max\u0026auto=format\u0026n=KGZFBT_KPY8H2VP2\u0026q=85\u0026s=b6b4fd2bca60dc8ed583e3676c957b57"},"favicon":"https://mintcdn.com/lithoblocks/KGZFBT_KPY8H2VP2/favicon.svg?fit=max\u0026auto=format\u0026n=KGZFBT_KPY8H2VP2\u0026q=85\u0026s=e04b2e285f25e00cea6112bb57507308","api":{"playground":{"display":"none"}},"navbar":{"links":[{"href":"mailto:support@lithoblocks.com","label":"Support"}],"primary":{"type":"button","label":"Preview dashboard","href":"https://next.app.lithoblocks.com"}},"footer":{"socials":{"github":"https://github.com/lithoblocks","linkedin":"https://linkedin.com/company/lithoblocks"}},"banner":{"content":"Release preview — review [environments and availability](/guides/availability) before testing.","dismissible":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Preview dashboard","icon":"arrow-right","href":"https://next.app.lithoblocks.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lithoblocks","hasAudioNarration":false,"actualSubdomain":"lithoblocks","customDomains":["docs.lithoblocks.com"],"gitSource":{"type":"github","owner":"lithoblocks","repo":"lithoblocks","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adcc23c2892a8a2da120815","collectionId":"d2c69ba1-1109-47e2-940b-4fddd2313bf9","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adcc23c2892a8a2da120815"},"entitlements":{},"buildId":"6adccb2375476ff3698df547","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Reference","count":90},{"language":"default","tag":"API endpoints","count":82},{"language":"default","tag":"Templates","count":20},{"language":"default","tag":"Interactivity","count":17},{"language":"default","tag":"Automate","count":16},{"language":"default","tag":"Build","count":14},{"language":"default","tag":"Integrate","count":13},{"language":"default","tag":"Queues","count":12},{"language":"default","tag":"Messages","count":10},{"language":"default","tag":"Start","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","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":"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":"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":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/templates/validate-blocks-without-saving","slug":"/api-reference/templates/validate-blocks-without-saving","pageMetadata":{"title":"Validate blocks without saving","description":"Dry run: fills in block ids, derives `request_format`, and checks compilation and interactivity against `sample_data` without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. `valid: false` comes with the engine's messages under `errors`. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/validate","href":"/api-reference/templates/validate-blocks-without-saving","autogeneratedByOpenApi":true},"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: [\"Dry run: fills in block ids, derives \", _jsx(_components.code, {\n children: \"request_format\"\n }), \", and checks compilation and interactivity against \", _jsx(_components.code, {\n children: \"sample_data\"\n }), \" without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. \", _jsx(_components.code, {\n children: \"valid: false\"\n }), \" comes with the engine’s messages under \", _jsx(_components.code, {\n children: \"errors\"\n }), \". Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.\"]\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":"Validate blocks without saving","description":"Dry run: fills in block ids, derives `request_format`, and checks compilation and interactivity against `sample_data` without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. `valid: false` comes with the engine's messages under `errors`. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/validate","href":"/api-reference/templates/validate-blocks-without-saving","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Templates"],"summary":"Validate blocks without saving","description":"Dry run: fills in block ids, derives `request_format`, and checks compilation and interactivity against `sample_data` without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. `valid: false` comes with the engine's messages under `errors`. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.","security":["6fb0ba45-8d42-4181-88be-81aca56e5918"],"requestBody":"2b9fb26f-e92c-4ded-9191-c18597713a7b","responses":{"200":"68f7c98d-a181-4175-aa9c-3282ed741bb1","401":"812f9a71-ce5c-4325-b478-0967fe7b3088","403":"3743f6d7-d620-41cb-993a-0a90fe8bf504","422":"e00017e9-e477-481c-a78b-ec9a1bc15726","429":"4004095c-ce12-4f97-a305-05cf273c6d8c","500":"18549917-9fdc-49c3-a004-b2ba7ef30f7e"},"method":"post","type":"path","servers":["7d0c3f43-b728-43e4-890f-4b5fcd8955dd","3e80eef4-e2e2-4ad0-9415-b5e2e8a59216"],"path":"/v1/templates/validate","baseUrlOptions":["https://api.lithoblocks.com","http://localhost:9999"],"title":"Validate blocks without saving","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"description":"Blocks to validate","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"blocks":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"blocks.items.[INDEX].type","typeLabel":"string"},"id":{"type":"string","uniqueKey":"blocks.items.[INDEX].id","typeLabel":"string"}},"required":["type"],"uniqueKey":"blocks.items.[INDEX]","typeLabel":"object"},"minItems":1,"isRequired":true,"uniqueKey":"blocks","typeLabel":"object[]"},"sample_data":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"sample_data.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"sample_data.additionalProperties","typeLabel":"null"},"description":"Data to compile against; defaults to a null-filled skeleton of the request format","uniqueKey":"sample_data","typeLabel":"object"},"expiration":{"type":"object","properties":{"default":{"type":"object","properties":{"after_seconds":{"type":"integer","minimum":60,"maximum":31622400,"description":"Seconds after delivery","isRequired":true,"uniqueKey":"expiration.default.after_seconds","typeLabel":"integer"},"mode":{"type":"string","enum":["replace","delete"],"description":"`replace` (default): the message is replaced with a notice that it expired, and its buttons stop working. `delete`: it is deleted from Slack.","uniqueKey":"expiration.default.mode","typeLabel":"enum\u003cstring>"},"retain_content":{"type":"boolean","uniqueKey":"expiration.default.retain_content","typeLabel":"boolean"}},"required":["after_seconds"],"additionalProperties":false,"description":"Applies to a send that names no expiry.","uniqueKey":"expiration.default","typeLabel":"object"},"max_after_seconds":{"type":"integer","minimum":60,"maximum":31622400,"description":"The longest a message from this template may live. A send asking for longer is refused with 422 `expiration_exceeds_maximum`; with no `default`, this becomes the default.","uniqueKey":"expiration.max_after_seconds","typeLabel":"integer"},"notice":{"type":"object","properties":{"blocks":{"type":"array","items":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"expiration.notice.blocks.items.[INDEX].additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"expiration.notice.blocks.items.[INDEX].additionalProperties","typeLabel":"null"},"uniqueKey":"expiration.notice.blocks.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":10,"description":"Blocks that replace the message when it expires, compiled with the send's data. Nothing interactive: no actions, inputs or buttons.","isRequired":true,"uniqueKey":"expiration.notice.blocks","typeLabel":"object[]"},"text":{"type":"string","maxLength":4000,"description":"The notification text; derived from the blocks when omitted. Placeholders allowed.","uniqueKey":"expiration.notice.text","typeLabel":"string"}},"required":["blocks"],"additionalProperties":false,"description":"Replaces the system notice, \"This message expired \u003cdate>.\"","uniqueKey":"expiration.notice","typeLabel":"object"}},"additionalProperties":false,"description":"How messages sent from this version expire.","uniqueKey":"expiration","typeLabel":"object"}},"required":["blocks"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"blocks":[{"type":"\u003cstring>","id":"\u003cstring>"}],"sample_data":{},"expiration":{"max_after_seconds":15811230}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"68f7c98d-a181-4175-aa9c-3282ed741bb1":{"description":"Validation result","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean","isRequired":true,"uniqueKey":"valid","typeLabel":"boolean"},"request_format":{"type":"object","additionalProperties":{"oneOf":[{},{"type":"null","uniqueKey":"request_format.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"request_format.additionalProperties","typeLabel":"null"},"description":"`{ template_id, data }` where `data` holds `null` per placeholder and `[{ field: null }]` per array path; what a caller of compile/send must supply. `GET /templates/{id}/input-schema` describes the same paths with types, labels and nesting","isRequired":true,"uniqueKey":"request_format","typeLabel":"object"},"blocks":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"blocks.items.[INDEX].type","typeLabel":"string"},"id":{"type":"string","uniqueKey":"blocks.items.[INDEX].id","typeLabel":"string"}},"required":["type"],"uniqueKey":"blocks.items.[INDEX]","typeLabel":"object"},"description":"The blocks as they would be stored: ids and action ids filled in","isRequired":true,"uniqueKey":"blocks","typeLabel":"object[]"},"errors":{"type":"array","items":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].error","typeLabel":"string"},"details":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].details","typeLabel":"string"}},"required":["error","details"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"description":"Present when `valid` is false","uniqueKey":"errors","typeLabel":"object[]"},"interactivity":{"type":"object","properties":{"buttons":{"type":"number","description":"Buttons carrying an `action_config`","isRequired":true,"uniqueKey":"interactivity.buttons","typeLabel":"number"},"metadata_bytes":{"type":"number","description":"Uncompressed event payload bytes measured with sample_data","uniqueKey":"interactivity.metadata_bytes","typeLabel":"number"},"metadata_transport":{"type":"object","properties":{"raw_payload_bytes":{"type":"number","isRequired":true,"uniqueKey":"interactivity.metadata_transport.raw_payload_bytes","typeLabel":"number"},"wire_bytes":{"type":"number","isRequired":true,"uniqueKey":"interactivity.metadata_transport.wire_bytes","typeLabel":"number"},"budgeted_bytes":{"type":"number","isRequired":true,"uniqueKey":"interactivity.metadata_transport.budgeted_bytes","typeLabel":"number"},"encoding":{"type":"string","enum":["json","gzip_base64"],"isRequired":true,"uniqueKey":"interactivity.metadata_transport.encoding","typeLabel":"enum\u003cstring>"}},"required":["raw_payload_bytes","wire_bytes","budgeted_bytes","encoding"],"description":"Slack transport bytes; budgeted_bytes reserves both send-log UUIDs","uniqueKey":"interactivity.metadata_transport","typeLabel":"object"}},"required":["buttons"],"uniqueKey":"interactivity","typeLabel":"object"},"fields_truncated":{"type":"number","description":"How many text fields were shortened to fit Slack's limits","uniqueKey":"fields_truncated","typeLabel":"number"},"warnings":{"type":"array","items":{"type":"string","uniqueKey":"warnings.items.[INDEX]","typeLabel":"string"},"description":"What compile normalised: chart points filled with 0, series or points truncated to Slack's counts","uniqueKey":"warnings","typeLabel":"string[]"}},"required":["valid","request_format","blocks"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"valid":true,"request_format":{},"blocks":[{"type":"\u003cstring>","id":"\u003cstring>"}],"errors":[{"error":"\u003cstring>","details":"\u003cstring>"}],"interactivity":{"buttons":123,"metadata_bytes":123,"metadata_transport":{"raw_payload_bytes":123,"wire_bytes":123,"budgeted_bytes":123,"encoding":"json"}},"fields_truncated":123,"warnings":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"812f9a71-ce5c-4325-b478-0967fe7b3088":{"description":"Authentication required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable summary. Not stable; match on `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthenticated","invalid_token","insufficient_scope","access_denied","validation_failed","invalid_request","invalid_data","invalid_destination","invalid_search_query","not_found","template_not_found","version_not_found","organization_not_found","entity_not_found","field_not_found","user_not_found","profile_not_found","credits_not_found","insufficient_credits","overage_limit_exceeded","credit_deduction_failed","compilation_failed","no_blocks_to_send","slack_not_connected","slack_user_not_found","slack_dm_failed","slack_token_decrypt_failed","slack_api_error","already_exists","invitation_pending","idempotency_conflict","idempotency_in_progress","rate_limited","tier_limit","invalid_state","template_archived","template_in_use","template_not_activated","current_version_changed","message_not_found","not_message_sender","revision_conflict","message_not_live","mutation_in_progress","reconciliation_required","nothing_to_reconcile","text_not_editable","slack_refused","slack_outcome_unknown","expiration_in_past","expiration_in_progress","no_expiration","expiration_exceeds_maximum","maintenance","misconfigured","internal_error"],"description":"Machine-readable reason for the failure. Match on this, not on `error`. New codes may be added; existing ones are stable.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"request_id":{"type":"string","description":"Echoed from the request's X-Request-Id header, or generated. Quote it in support requests.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"},"details":{"type":"string","uniqueKey":"details","typeLabel":"string"},"error_details":{"type":"string","uniqueKey":"error_details","typeLabel":"string"},"success":{"type":"boolean","enum":[false],"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"valid":{"type":"boolean","enum":[false],"uniqueKey":"valid","typeLabel":"enum\u003cboolean>"},"required_scopes":{"type":"array","items":{"type":"string","uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required_scopes","typeLabel":"string[]"},"user_scopes":{"type":"array","items":{"type":"string","uniqueKey":"user_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"user_scopes","typeLabel":"string[]"}},"required":["error","code","request_id"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"unauthenticated","request_id":"\u003cstring>","message":"\u003cstring>","details":"\u003cstring>","error_details":"\u003cstring>","success":false,"valid":false,"required_scopes":["\u003cstring>"],"user_scopes":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"3743f6d7-d620-41cb-993a-0a90fe8bf504":{"description":"Insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable summary. Not stable; match on `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthenticated","invalid_token","insufficient_scope","access_denied","validation_failed","invalid_request","invalid_data","invalid_destination","invalid_search_query","not_found","template_not_found","version_not_found","organization_not_found","entity_not_found","field_not_found","user_not_found","profile_not_found","credits_not_found","insufficient_credits","overage_limit_exceeded","credit_deduction_failed","compilation_failed","no_blocks_to_send","slack_not_connected","slack_user_not_found","slack_dm_failed","slack_token_decrypt_failed","slack_api_error","already_exists","invitation_pending","idempotency_conflict","idempotency_in_progress","rate_limited","tier_limit","invalid_state","template_archived","template_in_use","template_not_activated","current_version_changed","message_not_found","not_message_sender","revision_conflict","message_not_live","mutation_in_progress","reconciliation_required","nothing_to_reconcile","text_not_editable","slack_refused","slack_outcome_unknown","expiration_in_past","expiration_in_progress","no_expiration","expiration_exceeds_maximum","maintenance","misconfigured","internal_error"],"description":"Machine-readable reason for the failure. Match on this, not on `error`. New codes may be added; existing ones are stable.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"request_id":{"type":"string","description":"Echoed from the request's X-Request-Id header, or generated. Quote it in support requests.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"},"details":{"type":"string","uniqueKey":"details","typeLabel":"string"},"error_details":{"type":"string","uniqueKey":"error_details","typeLabel":"string"},"success":{"type":"boolean","enum":[false],"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"valid":{"type":"boolean","enum":[false],"uniqueKey":"valid","typeLabel":"enum\u003cboolean>"},"required_scopes":{"type":"array","items":{"type":"string","uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required_scopes","typeLabel":"string[]"},"user_scopes":{"type":"array","items":{"type":"string","uniqueKey":"user_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"user_scopes","typeLabel":"string[]"}},"required":["error","code","request_id"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"unauthenticated","request_id":"\u003cstring>","message":"\u003cstring>","details":"\u003cstring>","error_details":"\u003cstring>","success":false,"valid":false,"required_scopes":["\u003cstring>"],"user_scopes":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"e00017e9-e477-481c-a78b-ec9a1bc15726":{"description":"The request body, query string or path parameters failed validation","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[false],"isRequired":true,"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"error":{"type":"object","properties":{"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.issues.items.[INDEX].code","typeLabel":"string"},"path":{"type":"array","items":{"oneOf":[{"type":"string","uniqueKey":"error.issues.items.[INDEX].path.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"error.issues.items.[INDEX].path.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"error.issues.items.[INDEX].path.items.[INDEX]","typeLabel":"string | number"},"isRequired":true,"uniqueKey":"error.issues.items.[INDEX].path","typeLabel":"(string | number)[]"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.issues.items.[INDEX].message","typeLabel":"string"}},"required":["code","path","message"],"uniqueKey":"error.issues.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"error.issues","typeLabel":"object[]"},"name":{"type":"string","isRequired":true,"uniqueKey":"error.name","typeLabel":"string"}},"required":["issues","name"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"message":{"type":"string","description":"The issues as one line, `path: message; path: message`, for callers that show a string (form builders such as Make)","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","enum":["validation_failed"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"}},"required":["success","error","message","code","request_id"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":{"issues":[{"code":"\u003cstring>","path":["\u003cstring>"],"message":"\u003cstring>"}],"name":"\u003cstring>"},"message":"\u003cstring>","code":"validation_failed","request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"4004095c-ce12-4f97-a305-05cf273c6d8c":{"description":"Rate limit exceeded for this organization; see Retry-After","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable summary. Not stable; match on `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthenticated","invalid_token","insufficient_scope","access_denied","validation_failed","invalid_request","invalid_data","invalid_destination","invalid_search_query","not_found","template_not_found","version_not_found","organization_not_found","entity_not_found","field_not_found","user_not_found","profile_not_found","credits_not_found","insufficient_credits","overage_limit_exceeded","credit_deduction_failed","compilation_failed","no_blocks_to_send","slack_not_connected","slack_user_not_found","slack_dm_failed","slack_token_decrypt_failed","slack_api_error","already_exists","invitation_pending","idempotency_conflict","idempotency_in_progress","rate_limited","tier_limit","invalid_state","template_archived","template_in_use","template_not_activated","current_version_changed","message_not_found","not_message_sender","revision_conflict","message_not_live","mutation_in_progress","reconciliation_required","nothing_to_reconcile","text_not_editable","slack_refused","slack_outcome_unknown","expiration_in_past","expiration_in_progress","no_expiration","expiration_exceeds_maximum","maintenance","misconfigured","internal_error"],"description":"Machine-readable reason for the failure. Match on this, not on `error`. New codes may be added; existing ones are stable.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"request_id":{"type":"string","description":"Echoed from the request's X-Request-Id header, or generated. Quote it in support requests.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"},"details":{"type":"string","uniqueKey":"details","typeLabel":"string"},"error_details":{"type":"string","uniqueKey":"error_details","typeLabel":"string"},"success":{"type":"boolean","enum":[false],"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"valid":{"type":"boolean","enum":[false],"uniqueKey":"valid","typeLabel":"enum\u003cboolean>"},"required_scopes":{"type":"array","items":{"type":"string","uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required_scopes","typeLabel":"string[]"},"user_scopes":{"type":"array","items":{"type":"string","uniqueKey":"user_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"user_scopes","typeLabel":"string[]"}},"required":["error","code","request_id"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"unauthenticated","request_id":"\u003cstring>","message":"\u003cstring>","details":"\u003cstring>","error_details":"\u003cstring>","success":false,"valid":false,"required_scopes":["\u003cstring>"],"user_scopes":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"18549917-9fdc-49c3-a004-b2ba7ef30f7e":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable summary. Not stable; match on `code`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","enum":["unauthenticated","invalid_token","insufficient_scope","access_denied","validation_failed","invalid_request","invalid_data","invalid_destination","invalid_search_query","not_found","template_not_found","version_not_found","organization_not_found","entity_not_found","field_not_found","user_not_found","profile_not_found","credits_not_found","insufficient_credits","overage_limit_exceeded","credit_deduction_failed","compilation_failed","no_blocks_to_send","slack_not_connected","slack_user_not_found","slack_dm_failed","slack_token_decrypt_failed","slack_api_error","already_exists","invitation_pending","idempotency_conflict","idempotency_in_progress","rate_limited","tier_limit","invalid_state","template_archived","template_in_use","template_not_activated","current_version_changed","message_not_found","not_message_sender","revision_conflict","message_not_live","mutation_in_progress","reconciliation_required","nothing_to_reconcile","text_not_editable","slack_refused","slack_outcome_unknown","expiration_in_past","expiration_in_progress","no_expiration","expiration_exceeds_maximum","maintenance","misconfigured","internal_error"],"description":"Machine-readable reason for the failure. Match on this, not on `error`. New codes may be added; existing ones are stable.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"request_id":{"type":"string","description":"Echoed from the request's X-Request-Id header, or generated. Quote it in support requests.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"},"details":{"type":"string","uniqueKey":"details","typeLabel":"string"},"error_details":{"type":"string","uniqueKey":"error_details","typeLabel":"string"},"success":{"type":"boolean","enum":[false],"uniqueKey":"success","typeLabel":"enum\u003cboolean>"},"valid":{"type":"boolean","enum":[false],"uniqueKey":"valid","typeLabel":"enum\u003cboolean>"},"required_scopes":{"type":"array","items":{"type":"string","uniqueKey":"required_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required_scopes","typeLabel":"string[]"},"user_scopes":{"type":"array","items":{"type":"string","uniqueKey":"user_scopes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"user_scopes","typeLabel":"string[]"}},"required":["error","code","request_id"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"unauthenticated","request_id":"\u003cstring>","message":"\u003cstring>","details":"\u003cstring>","error_details":"\u003cstring>","success":false,"valid":false,"required_scopes":["\u003cstring>"],"user_scopes":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"6fb0ba45-8d42-4181-88be-81aca56e5918":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"LithoBlocks API key obtained from your organization dashboard. The LithoBlocks MCP server also presents a Supabase-issued user session token here on the user's behalf; such a token acts as that user with the scopes their organization role allows.","scopes":["templates:read"],"schemeName":"bearerAuth"}}},"servers":{"7d0c3f43-b728-43e4-890f-4b5fcd8955dd":{"url":"https://api.lithoblocks.com","description":"Production (paths in this spec are rooted at /v1/...)"},"3e80eef4-e2e2-4ad0-9415-b5e2e8a59216":{"url":"http://localhost:9999","description":"Local dev (paths in this spec are rooted at /v1/...)"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"LithoBlocks API key obtained from your organization dashboard. The LithoBlocks MCP server also presents a Supabase-issued user session token here on the user's behalf; such a token acts as that user with the scopes their organization role allows.","scopes":["templates:read"],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"LithoBlocks API key obtained from your organization dashboard. The LithoBlocks MCP server also presents a Supabase-issued user session token here on the user's behalf; such a token acts as that user with the scopes their organization role allows.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"lithoblocks","siteName":"LithoBlocks","title":"Validate blocks without saving - LithoBlocks","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T12:19:23.819Z","originalFileLocation":"api-reference/templates/validate-blocks-without-saving.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;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=\"system\"}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=\"Dry run: fills in block ids, derives request_format, and checks compilation and interactivity against sample_data without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. valid: false comes with the engine\u0026#x27;s messages under errors. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.\">\u003cmeta data-mint-head name=\"application-name\" content=\"LithoBlocks\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lithoblocks/iXe-cKTkiEit2LxE/_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/lithoblocks/iXe-cKTkiEit2LxE/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lithoblocks/iXe-cKTkiEit2LxE/_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/lithoblocks/iXe-cKTkiEit2LxE/_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/lithoblocks/iXe-cKTkiEit2LxE/_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/lithoblocks/iXe-cKTkiEit2LxE/_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/lithoblocks/iXe-cKTkiEit2LxE/_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/lithoblocks/iXe-cKTkiEit2LxE/_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/lithoblocks/iXe-cKTkiEit2LxE/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Validate blocks without saving - LithoBlocks\">\u003cmeta data-mint-head property=\"og:description\" content=\"Dry run: fills in block ids, derives request_format, and checks compilation and interactivity against sample_data without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. valid: false comes with the engine\u0026#x27;s messages under errors. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LithoBlocks\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lithoblocks.mintlify.app/_mintlify/api/og/v2?division=Templates\u0026amp;title=Validate+blocks+without+saving\u0026amp;description=Dry+run%3A+fills+in+block+ids%2C+derives+%60request_format%60%2C+and+checks+compilation+and+interactivity+against+%60sample_data%60+without+persisting+anything+or+spending+cr\u0026amp;theme=e4b95b926ded7506313bc7e6\u0026amp;signature=8f523d27162fb0a2831ff528abaa3b131c875c62e0910feeb351cd59917e2fd6\">\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=\"Validate blocks without saving - LithoBlocks\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Dry run: fills in block ids, derives request_format, and checks compilation and interactivity against sample_data without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. valid: false comes with the engine\u0026#x27;s messages under errors. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lithoblocks.mintlify.app/_mintlify/api/og/v2?division=Templates\u0026amp;title=Validate+blocks+without+saving\u0026amp;description=Dry+run%3A+fills+in+block+ids%2C+derives+%60request_format%60%2C+and+checks+compilation+and+interactivity+against+%60sample_data%60+without+persisting+anything+or+spending+cr\u0026amp;theme=e4b95b926ded7506313bc7e6\u0026amp;signature=8f523d27162fb0a2831ff528abaa3b131c875c62e0910feeb351cd59917e2fd6\">\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/lithoblocks/iXe-cKTkiEit2LxE/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LithoBlocks\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0891b2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/templates/validate-blocks-without-saving.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.lithoblocks.com/#organization\",\"name\":\"LithoBlocks\",\"url\":\"https://docs.lithoblocks.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lithoblocks/KGZFBT_KPY8H2VP2/logo/light.png?fit=max\u0026auto=format\u0026n=KGZFBT_KPY8H2VP2\u0026q=85\u0026s=99f8cf65528bebb78dec112d77f923c9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.lithoblocks.com#website\",\"name\":\"LithoBlocks\",\"url\":\"https://docs.lithoblocks.com\",\"publisher\":{\"@id\":\"https://docs.lithoblocks.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving#webpage\",\"url\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving\",\"name\":\"Validate blocks without saving\",\"description\":\"Dry run: fills in block ids, derives request_format, and checks compilation and interactivity against sample_data without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. valid: false comes with the engine's messages under errors. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.\",\"dateModified\":\"2026-10-23T12:19:23.819Z\",\"isPartOf\":{\"@id\":\"https://docs.lithoblocks.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API endpoints\",\"item\":\"https://docs.lithoblocks.com/api-reference/interactivity/list-destinations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Templates\",\"item\":\"https://docs.lithoblocks.com/api-reference/templates/what-the-platform-accepts-in-a-template\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Validate blocks without saving\",\"item\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving#apireference\",\"headline\":\"Validate blocks without saving\",\"name\":\"Validate blocks without saving\",\"description\":\"Dry run: fills in block ids, derives request_format, and checks compilation and interactivity against sample_data without persisting anything or spending credits. Returns normalized input blocks and validation diagnostics, with no rendered Slack output. valid: false comes with the engine's messages under errors. Iterate here until valid, then create the template or version. To obtain rendered Slack blocks, use POST /v1/templates/compile, which spends a credit.\",\"url\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving\",\"mainEntityOfPage\":{\"@id\":\"https://docs.lithoblocks.com/api-reference/templates/validate-blocks-without-saving#webpage\"},\"dateModified\":\"2026-10-23T12:19:23.819Z\",\"publisher\":{\"@id\":\"https://docs.lithoblocks.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.lithoblocks.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"LithoBlocks\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"LithoBlocks","nav":{"global":{"anchors":[{"anchor":"Preview dashboard","icon":"arrow-right","href":"https://next.app.lithoblocks.com"}]},"tabs":[{"tab":"Start","pages":[{"title":"Start","href":""}]},{"tab":"Build","pages":[{"title":"Build","href":"/guides/templates-blocks"}]},{"tab":"Automate","pages":[{"title":"Automate","href":"/guides/send-with-api"}]},{"tab":"Integrate","pages":[{"title":"Integrate","href":"/guides/low-code-overview"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"Reference","groups":[{"group":"Contracts and permissions","pages":[{"title":"API introduction","href":"/api-reference/introduction"},{"title":"Create and manage API keys","href":"/guides/api-keys"},{"title":"Limits and validation","href":"/guides/limits"},{"title":"Webhook payload variables","href":"/guides/webhook-variables"}]},{"group":"Interactive APIs (preview)","pages":[{"title":"Interactive templates over the API","href":"/guides/interactive-templates-api"},{"title":"Manage destinations with the API","href":"/guides/destinations-api"},{"title":"Create and version modals with the API","href":"/guides/modals-api"},{"title":"Inspect interactions and track clicks","href":"/guides/interaction-history"}]},{"group":"API endpoints","pages":[{"group":"Interactivity","pages":[{"title":"List destinations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/destinations","href":"/api-reference/interactivity/list-destinations"},{"title":"Create destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/destinations","href":"/api-reference/interactivity/create-destination"},{"title":"Get destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/destinations/{id}","href":"/api-reference/interactivity/get-destination"},{"title":"Delete destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/destinations/{id}","href":"/api-reference/interactivity/delete-destination"},{"title":"Update destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/destinations/{id}","href":"/api-reference/interactivity/update-destination"},{"title":"Test destination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/destinations/{id}/test","href":"/api-reference/interactivity/test-destination"},{"title":"List interactions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/interactions","href":"/api-reference/interactivity/list-interactions"},{"title":"Get interaction","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/interactions/{id}","href":"/api-reference/interactivity/get-interaction"},{"title":"List modal submissions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/modal-submissions","href":"/api-reference/interactivity/list-modal-submissions"},{"title":"List modals","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/modals","href":"/api-reference/interactivity/list-modals"},{"title":"Create modal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/modals","href":"/api-reference/interactivity/create-modal"},{"title":"Validate modal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/modals/validate","href":"/api-reference/interactivity/validate-modal"},{"title":"Get modal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/modals/{id}","href":"/api-reference/interactivity/get-modal"},{"title":"Update modal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/modals/{id}","href":"/api-reference/interactivity/update-modal"},{"title":"List modal versions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/modals/{id}/versions","href":"/api-reference/interactivity/list-modal-versions"},{"title":"Create modal version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/modals/{id}/versions","href":"/api-reference/interactivity/create-modal-version"},{"title":"Activate modal version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/modals/{id}/versions/{version_id}/activate","href":"/api-reference/interactivity/activate-modal-version"}]},{"group":"Templates","pages":[{"title":"What the platform accepts in a template","description":"The block types the template engine compiles, the directive types and `#if` operators, the placeholder syntax, Slack's text limits as the engine enforces them, and the interactivity contract: what a button's `action_config` may say, which message-update strategies apply where, the payload variables, and the metadata size ceiling. Derived from the engine and slack-kit at build time, so it cannot drift from what compile and send do.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates/block-schema","href":"/api-reference/templates/what-the-platform-accepts-in-a-template"},{"title":"Validate blocks without saving","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/validate","href":"/api-reference/templates/validate-blocks-without-saving"},{"title":"Get all templates","description":"Get all templates with optional inclusion of related data. This endpoint now returns a pagination envelope instead of a top-level array.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates","href":"/api-reference/templates/get-all-templates"},{"title":"Create a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates","href":"/api-reference/templates/create-a-template"},{"title":"Get a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates/{id}","href":"/api-reference/templates/get-a-template"},{"title":"Update template metadata","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/templates/{id}","href":"/api-reference/templates/update-template-metadata"},{"title":"Describe a template's input","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates/{id}/input-schema","href":"/api-reference/templates/describe-a-templates-input"},{"title":"Describe a template's input as Make parameters","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates/{id}/input-schema/make","href":"/api-reference/templates/describe-a-templates-input-as-make-parameters"},{"title":"Archive a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/{id}/archive","href":"/api-reference/templates/archive-a-template"},{"title":"Unarchive a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/{id}/unarchive","href":"/api-reference/templates/unarchive-a-template"},{"title":"Compile a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/compile","href":"/api-reference/templates/compile-a-template"},{"title":"Send a template message to Slack","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/send","href":"/api-reference/templates/send-a-template-message-to-slack"},{"title":"Send a template message to multiple Slack destinations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/send-bulk","href":"/api-reference/templates/send-a-template-message-to-multiple-slack-destinations"}]},{"group":"Credits","pages":[{"title":"Get credit balance","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/credits/{organization_id}","href":"/api-reference/credits/get-credit-balance"},{"title":"Get credit logs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/credits/{organization_id}/logs","href":"/api-reference/credits/get-credit-logs"}]},{"group":"Organizations","pages":[{"title":"Get organization details","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organizations/{id}","href":"/api-reference/organizations/get-organization-details"},{"title":"Update organization name","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/organizations/{id}","href":"/api-reference/organizations/update-organization-name"},{"title":"List organization members","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organizations/{id}/members","href":"/api-reference/organizations/list-organization-members"},{"title":"Invite user to organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/organizations/{id}/invite","href":"/api-reference/organizations/invite-user-to-organization"}]},{"group":"Users","pages":[{"title":"Get current user profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/users/profile","href":"/api-reference/users/get-current-user-profile"},{"title":"Update user profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/users/profile","href":"/api-reference/users/update-user-profile"},{"title":"Get user by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/users/{id}","href":"/api-reference/users/get-user-by-id"},{"title":"Delete user","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/users/{id}","href":"/api-reference/users/delete-user"}]},{"group":"Template Versions","pages":[{"title":"List template versions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates/{id}/versions","href":"/api-reference/template-versions/list-template-versions"},{"title":"Create new template version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/{id}/versions","href":"/api-reference/template-versions/create-new-template-version"},{"title":"Get specific template version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates/{id}/versions/{version_id}","href":"/api-reference/template-versions/get-specific-template-version"},{"title":"Activate template version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/templates/{id}/versions/{version_id}/activate","href":"/api-reference/template-versions/activate-template-version"},{"title":"List template activations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/templates/{id}/activations","href":"/api-reference/template-versions/list-template-activations"}]},{"group":"Entities","pages":[{"title":"List organization entities","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/organizations/{id}/entities","href":"/api-reference/entities/list-organization-entities"},{"title":"Get entity with fields","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/entities/{id}","href":"/api-reference/entities/get-entity-with-fields"},{"title":"Delete entity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/entities/{id}","href":"/api-reference/entities/delete-entity"},{"title":"Update entity metadata","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/entities/{id}","href":"/api-reference/entities/update-entity-metadata"},{"title":"Delete entity field","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/entities/{entity_id}/fields/{field_id}","href":"/api-reference/entities/delete-entity-field"},{"title":"Update entity field","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/entities/{entity_id}/fields/{field_id}","href":"/api-reference/entities/update-entity-field"}]},{"group":"Search","pages":[{"title":"Search templates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/search/templates","href":"/api-reference/search/search-templates"},{"title":"Search entities","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/search/entities","href":"/api-reference/search/search-entities"}]},{"group":"Authentication","pages":[{"title":"Validate authentication token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/auth/validate","href":"/api-reference/authentication/validate-authentication-token"}]},{"group":"Queues","pages":[{"title":"List queues","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/queues","href":"/api-reference/queues/list-queues"},{"title":"Create a queue","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/queues","href":"/api-reference/queues/create-a-queue"},{"title":"List queue and scheduled-message executions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/queue-executions","href":"/api-reference/queues/list-queue-and-scheduled-message-executions"},{"title":"Get a queue","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/queues/{id}","href":"/api-reference/queues/get-a-queue"},{"title":"Delete a queue","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/queues/{id}","href":"/api-reference/queues/delete-a-queue"},{"title":"Update a queue","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/queues/{id}","href":"/api-reference/queues/update-a-queue"},{"title":"List a queue's events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/queues/{id}/events","href":"/api-reference/queues/list-a-queues-events"},{"title":"Push events to a queue","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/queues/{id}/events","href":"/api-reference/queues/push-events-to-a-queue"},{"title":"Send the open batch now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/queues/{id}/flush","href":"/api-reference/queues/send-the-open-batch-now"},{"title":"Preview the open batch's aggregated data","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/queues/{id}/preview","href":"/api-reference/queues/preview-the-open-batchs-aggregated-data"},{"title":"Drop pending events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/queues/{id}/drop-pending","href":"/api-reference/queues/drop-pending-events"},{"title":"List a queue's batches","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/queues/{id}/batches","href":"/api-reference/queues/list-a-queues-batches"}]},{"group":"Scheduled messages","pages":[{"title":"List scheduled messages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/scheduled-messages","href":"/api-reference/scheduled-messages/list-scheduled-messages"},{"title":"Schedule a message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/scheduled-messages","href":"/api-reference/scheduled-messages/schedule-a-message"},{"title":"Get a scheduled message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/scheduled-messages/{id}","href":"/api-reference/scheduled-messages/get-a-scheduled-message"},{"title":"Cancel a scheduled message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/scheduled-messages/{id}","href":"/api-reference/scheduled-messages/cancel-a-scheduled-message"},{"title":"Reschedule or edit a scheduled message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/scheduled-messages/{id}","href":"/api-reference/scheduled-messages/reschedule-or-edit-a-scheduled-message"},{"title":"Send a scheduled message now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/scheduled-messages/{id}/send-now","href":"/api-reference/scheduled-messages/send-a-scheduled-message-now"}]},{"group":"Messages","pages":[{"title":"List sent messages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/messages","href":"/api-reference/messages/list-sent-messages"},{"title":"Get a sent message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/messages/{id}","href":"/api-reference/messages/get-a-sent-message"},{"title":"Delete a sent message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/messages/{id}","href":"/api-reference/messages/delete-a-sent-message"},{"title":"Correct a sent message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/messages/{id}","href":"/api-reference/messages/correct-a-sent-message"},{"title":"List a sent message's change history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/messages/{id}/events","href":"/api-reference/messages/list-a-sent-messages-change-history"},{"title":"Resolve a change whose outcome was lost","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/messages/{id}/reconcile","href":"/api-reference/messages/resolve-a-change-whose-outcome-was-lost"},{"title":"Set when a sent message expires","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /v1/messages/{id}/expiration","href":"/api-reference/messages/set-when-a-sent-message-expires"},{"title":"Cancel a sent message's expiry","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/messages/{id}/expiration","href":"/api-reference/messages/cancel-a-sent-messages-expiry"},{"title":"Expire a sent message now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/messages/{id}/expire","href":"/api-reference/messages/expire-a-sent-message-now"},{"title":"Expire every message with a reference","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/messages/expire","href":"/api-reference/messages/expire-every-message-with-a-reference"}]}]}]},{"tab":"Operate","pages":[{"title":"Operate","href":"/guides/logs"}]}]},"title":"Validate blocks without saving - LithoBlocks","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-B-Glu166.js","dist-zbf22OZA.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-Cs6nMGht.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","AssistantPageLink-C_fs-y5n.js"]}