Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an x-presentation-token scoped to this presentation, matching the sibling events and appointment routes. Obtain the token from POST /api/presentations/{presentationId}/events-token. Soft-deleted presentations are refused with 404 even when the caller holds a still-valid token minted before the delete. Client-supplied variables are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to resolvedVariables.
Variable values substituted into the template. Keys outside the server-side allow-list are dropped before storage. The allow-list covers customer fields (first_name, last_name, full_name, address, city, state, zip, email, phone), company fields (company_name, company_address, company_city, company_state, company_zip, company_phone, company_email, license_number, rep_name), and date fields (today, month, year, date, signature_timestamp). Non-string values are also dropped.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Demand IQ Docs","colors":{"primary":"#15ABE6","light":"#4DC4F5","dark":"#0D8FBF"},"logo":{"light":"https://mintcdn.com/demandiq/uEOIlnRlShq78CaU/logo/light.svg?fit=max\u0026auto=format\u0026n=uEOIlnRlShq78CaU\u0026q=85\u0026s=6b20bece67526eefd70ff64cc194f726","dark":"https://mintcdn.com/demandiq/uEOIlnRlShq78CaU/logo/dark.svg?fit=max\u0026auto=format\u0026n=uEOIlnRlShq78CaU\u0026q=85\u0026s=7c1536ee4a0142de77ede0db3669a9b3"},"favicon":"https://mintcdn.com/demandiq/uEOIlnRlShq78CaU/favicon.svg?fit=max\u0026auto=format\u0026n=uEOIlnRlShq78CaU\u0026q=85\u0026s=3977ad1b9501e84aaac387cc29d19e3c","styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"demandiq","hasAudioNarration":false,"actualSubdomain":"demandiq","customDomains":["developer.demand-iq.com"],"gitSource":{"type":"github","owner":"demand-iq","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aec99a98cb1f1c974b9defe","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"API Reference","count":102},{"language":"default","tag":"Endpoints","count":102},{"language":"default","tag":"Guides","count":13},{"language":"default","tag":"Presentations","count":12},{"language":"default","tag":"Company","count":10},{"language":"default","tag":"Decks","count":9},{"language":"default","tag":"Contracts","count":8},{"language":"default","tag":"Slides","count":8},{"language":"default","tag":"Configuration guides","count":6},{"language":"default","tag":"Authentication","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/contracts/sign-a-contract","slug":"/api-reference/contracts/sign-a-contract","pageMetadata":{"title":"Sign a contract","description":"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an `x-presentation-token` scoped to this presentation, matching the sibling `events` and `appointment` routes. Obtain the token from `POST /api/presentations/{presentationId}/events-token`. Soft-deleted presentations are refused with `404` even when the caller holds a still-valid token minted before the delete. Client-supplied `variables` are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to `resolvedVariables`.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/{presentationId}/sign-contract","href":"/api-reference/contracts/sign-a-contract","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: [\"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an \", _jsx(_components.code, {\n children: \"x-presentation-token\"\n }), \" scoped to this presentation, matching the sibling \", _jsx(_components.code, {\n children: \"events\"\n }), \" and \", _jsx(_components.code, {\n children: \"appointment\"\n }), \" routes. Obtain the token from \", _jsx(_components.code, {\n children: \"POST /api/presentations/{presentationId}/events-token\"\n }), \". Soft-deleted presentations are refused with \", _jsx(_components.code, {\n children: \"404\"\n }), \" even when the caller holds a still-valid token minted before the delete. Client-supplied \", _jsx(_components.code, {\n children: \"variables\"\n }), \" are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to \", _jsx(_components.code, {\n children: \"resolvedVariables\"\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":"Sign a contract","description":"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an `x-presentation-token` scoped to this presentation, matching the sibling `events` and `appointment` routes. Obtain the token from `POST /api/presentations/{presentationId}/events-token`. Soft-deleted presentations are refused with `404` even when the caller holds a still-valid token minted before the delete. Client-supplied `variables` are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to `resolvedVariables`.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/{presentationId}/sign-contract","href":"/api-reference/contracts/sign-a-contract","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Contracts"],"summary":"Sign a contract","description":"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an `x-presentation-token` scoped to this presentation, matching the sibling `events` and `appointment` routes. Obtain the token from `POST /api/presentations/{presentationId}/events-token`. Soft-deleted presentations are refused with `404` even when the caller holds a still-valid token minted before the delete. Client-supplied `variables` are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to `resolvedVariables`.","security":["5f31fc07-2848-4cb3-8044-a55e19fa442e"],"parameters":["efefec14-addf-46a0-ab00-d04eb562dcf1"],"requestBody":"ea90e1bc-b8dd-4973-b7bf-9b12408339fa","responses":{"200":"13dbe454-6f0a-4102-9927-bf4f0bc173c9","400":"d080e763-02e3-41c3-81bc-0b13971eff8c","401":"97c585a9-46b4-47ed-82ea-f09afa35c5e2","404":"f16610dc-856c-4331-b7f0-4efa31c2a993","500":"e56d427f-0870-4146-90db-21838b56f880"},"method":"post","type":"path","servers":["8c1c298c-6efa-4eee-bbc2-ad374d34a17e","7c7f8449-1062-4369-8578-0037bf063220"],"path":"/api/presentations/{presentationId}/sign-contract","baseUrlOptions":["https://app.demand-iq.com","http://localhost:3000"],"title":"Sign a contract","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"efefec14-addf-46a0-ab00-d04eb562dcf1":{"in":"path","name":"presentationId","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["variables","signature"],"properties":{"variables":{"type":"object","description":"Variable values substituted into the template. Keys outside the server-side allow-list are dropped before storage. The allow-list covers customer fields (`first_name`, `last_name`, `full_name`, `address`, `city`, `state`, `zip`, `email`, `phone`), company fields (`company_name`, `company_address`, `company_city`, `company_state`, `company_zip`, `company_phone`, `company_email`, `license_number`, `rep_name`), and date fields (`today`, `month`, `year`, `date`, `signature_timestamp`). Non-string values are also dropped.","required":["full_name"],"properties":{"full_name":{"type":"string","isRequired":true,"uniqueKey":"variables.full_name","typeLabel":"string"},"first_name":{"type":"string","uniqueKey":"variables.first_name","typeLabel":"string"},"last_name":{"type":"string","uniqueKey":"variables.last_name","typeLabel":"string"}},"additionalProperties":{"type":"string","uniqueKey":"variables.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"variables","typeLabel":"object"},"signature":{"type":"string","description":"Typed signature (must match the customer name)","isRequired":true,"uniqueKey":"signature","typeLabel":"string"},"configId":{"type":"string","format":"uuid","uniqueKey":"configId","typeLabel":"string\u003cuuid>"},"agreedToTerms":{"type":"boolean","uniqueKey":"agreedToTerms","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"variables":{"full_name":"\u003cstring>","first_name":"\u003cstring>","last_name":"\u003cstring>"},"signature":"\u003cstring>","configId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","agreedToTerms":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"13dbe454-6f0a-4102-9927-bf4f0bc173c9":{"description":"Contract signed","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","uniqueKey":"success","typeLabel":"boolean"},"documentId":{"type":"string","format":"uuid","uniqueKey":"documentId","typeLabel":"string\u003cuuid>"},"signedAt":{"type":"string","format":"date-time","uniqueKey":"signedAt","typeLabel":"string\u003cdate-time>"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"documentId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","signedAt":"2023-11-07T05:31:56Z","message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"d080e763-02e3-41c3-81bc-0b13971eff8c":{"description":"Bad request (signature mismatch, validation error, or a request body that is not valid JSON or not a JSON object)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"97c585a9-46b4-47ed-82ea-f09afa35c5e2":{"description":"Missing, malformed, or wrong-presentation `x-presentation-token`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"f16610dc-856c-4331-b7f0-4efa31c2a993":{"description":"Presentation not found, presentation soft-deleted, deck missing, or contract template not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"e56d427f-0870-4146-90db-21838b56f880":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"5f31fc07-2848-4cb3-8044-a55e19fa442e":{"presentationToken":{"type":"apiKey","in":"header","name":"x-presentation-token","description":"HMAC-signed token scoped to a specific presentation. Obtained from `POST /api/presentations/{presentationId}/events-token`.","scopes":[],"schemeName":"presentationToken"}}},"servers":{"8c1c298c-6efa-4eee-bbc2-ad374d34a17e":{"url":"https://app.demand-iq.com","description":"Production"},"7c7f8449-1062-4369-8578-0037bf063220":{"url":"http://localhost:3000","description":"Local development"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-presentation-token","description":"HMAC-signed token scoped to a specific presentation. Obtained from `POST /api/presentations/{presentationId}/events-token`.","scopes":[],"schemeName":"presentationToken"},"schema":{"title":"x-presentation-token","type":"string","description":"HMAC-signed token scoped to a specific presentation. Obtained from `POST /api/presentations/{presentationId}/events-token`.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"presentationToken","name":"x-presentation-token"}],"title":"presentationToken"}]},"originalFileLocation":"openapi.json"},"subdomain":"demandiq","siteName":"Demand IQ Docs","title":"Sign a contract - Demand IQ Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T19:16:29.856Z","originalFileLocation":"api-reference/contracts/sign-a-contract.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=\"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an x-presentation-token scoped to this presentation, matching the sibling events and appointment routes. Obtain the token from POST /api/presentations/{presentationId}/events-token. Soft-deleted presentations are refused with 404 even when the caller holds a still-valid token minted before the delete. Client-supplied variables are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to resolvedVariables.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Demand IQ Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/demandiq/54pBlYBD7mNg2sEI/_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/demandiq/54pBlYBD7mNg2sEI/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/demandiq/54pBlYBD7mNg2sEI/_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/demandiq/54pBlYBD7mNg2sEI/_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/demandiq/54pBlYBD7mNg2sEI/_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/demandiq/54pBlYBD7mNg2sEI/_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/demandiq/54pBlYBD7mNg2sEI/_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/demandiq/54pBlYBD7mNg2sEI/_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/demandiq/54pBlYBD7mNg2sEI/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Sign a contract - Demand IQ Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an x-presentation-token scoped to this presentation, matching the sibling events and appointment routes. Obtain the token from POST /api/presentations/{presentationId}/events-token. Soft-deleted presentations are refused with 404 even when the caller holds a still-valid token minted before the delete. Client-supplied variables are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to resolvedVariables.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Demand IQ Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://demandiq.mintlify.site/_mintlify/api/og/v2?division=Contracts\u0026amp;title=Sign+a+contract\u0026amp;description=Submits+a+contract+signature.+Validates+the+typed+signature+against+the+customer+name%2C+resolves+the+template+with+variables%2C+and+creates+an+audit-trailed+signed\u0026amp;theme=6cb71c7b4cbe4450b6bff4c3\u0026amp;signature=26d9b82b7008a29309ee8b64618895aa72b148c63d5a9bf0de224125b6519235\">\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=\"Sign a contract - Demand IQ Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an x-presentation-token scoped to this presentation, matching the sibling events and appointment routes. Obtain the token from POST /api/presentations/{presentationId}/events-token. Soft-deleted presentations are refused with 404 even when the caller holds a still-valid token minted before the delete. Client-supplied variables are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to resolvedVariables.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://demandiq.mintlify.site/_mintlify/api/og/v2?division=Contracts\u0026amp;title=Sign+a+contract\u0026amp;description=Submits+a+contract+signature.+Validates+the+typed+signature+against+the+customer+name%2C+resolves+the+template+with+variables%2C+and+creates+an+audit-trailed+signed\u0026amp;theme=6cb71c7b4cbe4450b6bff4c3\u0026amp;signature=26d9b82b7008a29309ee8b64618895aa72b148c63d5a9bf0de224125b6519235\">\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/demandiq/54pBlYBD7mNg2sEI/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Demand IQ Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#15ABE6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/contracts/sign-a-contract.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.demand-iq.com/#organization\",\"name\":\"Demand IQ Docs\",\"url\":\"https://developer.demand-iq.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/demandiq/uEOIlnRlShq78CaU/logo/light.svg?fit=max\u0026auto=format\u0026n=uEOIlnRlShq78CaU\u0026q=85\u0026s=6b20bece67526eefd70ff64cc194f726\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.demand-iq.com#website\",\"name\":\"Demand IQ Docs\",\"url\":\"https://developer.demand-iq.com\",\"publisher\":{\"@id\":\"https://developer.demand-iq.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract#webpage\",\"url\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract\",\"name\":\"Sign a contract\",\"description\":\"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an x-presentation-token scoped to this presentation, matching the sibling events and appointment routes. Obtain the token from POST /api/presentations/{presentationId}/events-token. Soft-deleted presentations are refused with 404 even when the caller holds a still-valid token minted before the delete. Client-supplied variables are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to resolvedVariables.\",\"dateModified\":\"2026-11-02T19:16:29.856Z\",\"isPartOf\":{\"@id\":\"https://developer.demand-iq.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://developer.demand-iq.com/api-reference/activity/list-recent-activity\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Contracts\",\"item\":\"https://developer.demand-iq.com/api-reference/contracts/import-a-contract-document\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Sign a contract\",\"item\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract#apireference\",\"headline\":\"Sign a contract\",\"name\":\"Sign a contract\",\"description\":\"Submits a contract signature. Validates the typed signature against the customer name, resolves the template with variables, and creates an audit-trailed signed document. Requires an x-presentation-token scoped to this presentation, matching the sibling events and appointment routes. Obtain the token from POST /api/presentations/{presentationId}/events-token. Soft-deleted presentations are refused with 404 even when the caller holds a still-valid token minted before the delete. Client-supplied variables are filtered through an allow-list before storage. Non-whitelisted keys are dropped rather than persisted to resolvedVariables.\",\"url\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract\",\"mainEntityOfPage\":{\"@id\":\"https://developer.demand-iq.com/api-reference/contracts/sign-a-contract#webpage\"},\"dateModified\":\"2026-11-02T19:16:29.856Z\",\"publisher\":{\"@id\":\"https://developer.demand-iq.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.demand-iq.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Demand IQ Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Demand IQ Docs","nav":{"global":null,"tabs":[{"tab":"Lead integrations","pages":[{"title":"Lead integrations","href":"/integrations/connecting-your-api"}]},{"tab":"Guides","icon":"book-open","pages":[{"title":"Guides","href":"/ai-presentations/introduction"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Endpoints","pages":[{"group":"Activity","expanded":false,"pages":[{"title":"List recent activity","deprecated":null,"version":null,"openapi":"/openapi.json get /api/activity","href":"/api-reference/activity/list-recent-activity"}]},{"group":"Engagement","expanded":false,"pages":[{"title":"Get engagement summary","deprecated":null,"version":null,"openapi":"/openapi.json get /api/engagement/summary","href":"/api-reference/engagement/get-engagement-summary"},{"title":"List homeowner questions","deprecated":null,"version":null,"openapi":"/openapi.json get /api/engagement/questions","href":"/api-reference/engagement/list-homeowner-questions"},{"title":"Get email template performance","deprecated":null,"version":null,"openapi":"/openapi.json get /api/delivery/template-performance","href":"/api-reference/engagement/get-email-template-performance"},{"title":"Remove an earlier email template version","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/delivery/template-performance/{versionId}","href":"/api-reference/engagement/remove-an-earlier-email-template-version"},{"title":"Activate an earlier email template version","deprecated":null,"version":null,"openapi":"/openapi.json post /api/delivery/template-performance/{versionId}/activate","href":"/api-reference/engagement/activate-an-earlier-email-template-version"}]},{"group":"Decks","expanded":false,"pages":[{"title":"List decks","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks","href":"/api-reference/decks/list-decks"},{"title":"Create a deck","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks","href":"/api-reference/decks/create-a-deck"},{"title":"Import a presentation as a deck","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks/import","href":"/api-reference/decks/import-a-presentation-as-a-deck"},{"title":"Get a deck","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}","href":"/api-reference/decks/get-a-deck"},{"title":"Update a deck","deprecated":null,"version":null,"openapi":"/openapi.json put /api/decks/{deckId}","href":"/api-reference/decks/update-a-deck"},{"title":"Delete a deck","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/decks/{deckId}","href":"/api-reference/decks/delete-a-deck"},{"title":"Get intro page config","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/intro","href":"/api-reference/decks/get-intro-page-config"},{"title":"Upsert intro page config","deprecated":null,"version":null,"openapi":"/openapi.json put /api/decks/{deckId}/intro","href":"/api-reference/decks/upsert-intro-page-config"},{"title":"Delete intro page config","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/decks/{deckId}/intro","href":"/api-reference/decks/delete-intro-page-config"}]},{"group":"Generation","expanded":false,"pages":[{"title":"Poll generation status for every deck","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/generation-status","href":"/api-reference/generation/poll-generation-status-for-every-deck"},{"title":"Start AI generation from images","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks/{deckId}/generate","href":"/api-reference/generation/start-ai-generation-from-images"},{"title":"Poll generation status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/generate/status","href":"/api-reference/generation/poll-generation-status"},{"title":"Analyze a slide image and generate content","deprecated":null,"version":null,"openapi":"/openapi.json post /api/slides/analyze-and-generate","href":"/api-reference/generation/analyze-a-slide-image-and-generate-content"},{"title":"Generate preview audio","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks/{deckId}/generate-preview","href":"/api-reference/generation/generate-preview-audio"},{"title":"Check preview audio status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/preview-status","href":"/api-reference/generation/check-preview-audio-status"}]},{"group":"Slides","expanded":false,"pages":[{"title":"List slides","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/slides","href":"/api-reference/slides/list-slides"},{"title":"Create a slide","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks/{deckId}/slides","href":"/api-reference/slides/create-a-slide"},{"title":"Reorder slides","deprecated":null,"version":null,"openapi":"/openapi.json put /api/decks/{deckId}/slides/reorder","href":"/api-reference/slides/reorder-slides"},{"title":"Update a slide","deprecated":null,"version":null,"openapi":"/openapi.json put /api/slides/{slideId}","href":"/api-reference/slides/update-a-slide"},{"title":"Delete a slide","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/slides/{slideId}","href":"/api-reference/slides/delete-a-slide"},{"title":"Get product pricing data","deprecated":null,"version":null,"openapi":"/openapi.json get /api/slides/{slideId}/product-data","href":"/api-reference/slides/get-product-pricing-data"},{"title":"Upsert product pricing data","deprecated":null,"version":null,"openapi":"/openapi.json put /api/slides/{slideId}/product-data","href":"/api-reference/slides/upsert-product-pricing-data"},{"title":"Remove product pricing data","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/slides/{slideId}/product-data","href":"/api-reference/slides/remove-product-pricing-data"}]},{"group":"FAQs","expanded":false,"pages":[{"title":"List FAQs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/faqs","href":"/api-reference/faqs/list-faqs"},{"title":"Create a FAQ","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks/{deckId}/faqs","href":"/api-reference/faqs/create-a-faq"},{"title":"Update a FAQ","deprecated":null,"version":null,"openapi":"/openapi.json put /api/faqs/{faqId}","href":"/api-reference/faqs/update-a-faq"},{"title":"Delete a FAQ","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/faqs/{faqId}","href":"/api-reference/faqs/delete-a-faq"}]},{"group":"Branding","expanded":false,"pages":[{"title":"Get branding","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/branding","href":"/api-reference/branding/get-branding"},{"title":"Upsert branding","deprecated":null,"version":null,"openapi":"/openapi.json put /api/decks/{deckId}/branding","href":"/api-reference/branding/upsert-branding"}]},{"group":"Q\u0026A","expanded":false,"pages":[{"title":"Get Q\u0026A settings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/qa-settings","href":"/api-reference/q\u0026a/get-q\u0026a-settings"},{"title":"Update Q\u0026A settings","deprecated":null,"version":null,"openapi":"/openapi.json put /api/decks/{deckId}/qa-settings","href":"/api-reference/q\u0026a/update-q\u0026a-settings"},{"title":"Answer a question","deprecated":null,"version":null,"openapi":"/openapi.json post /api/qa","href":"/api-reference/q\u0026a/answer-a-question"},{"title":"Stream the spoken audio for an answer","deprecated":null,"version":null,"openapi":"/openapi.json get /api/qa/audio","href":"/api-reference/q\u0026a/stream-the-spoken-audio-for-an-answer"},{"title":"Classify viewer intent after Q\u0026A","deprecated":null,"version":null,"openapi":"/openapi.json post /api/intent/continue","href":"/api-reference/q\u0026a/classify-viewer-intent-after-q\u0026a"}]},{"group":"Presentations","expanded":false,"pages":[{"title":"List presentations","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/presentations","href":"/api-reference/presentations/list-presentations"},{"title":"Create a presentation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks/{deckId}/presentations","href":"/api-reference/presentations/create-a-presentation"},{"title":"Update a presentation","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/presentations/{presentationId}","href":"/api-reference/presentations/update-a-presentation"},{"title":"Delete a presentation","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/presentations/{presentationId}","href":"/api-reference/presentations/delete-a-presentation"},{"title":"Get presentation status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presentations/{presentationId}/status","href":"/api-reference/presentations/get-presentation-status"},{"title":"Start a presentation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/{presentationId}/start","href":"/api-reference/presentations/start-a-presentation"},{"title":"Get presentation slides and Q\u0026A settings","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presentations/{presentationId}/content","href":"/api-reference/presentations/get-presentation-slides-and-q\u0026a-settings"},{"title":"Get product selections","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presentations/{presentationId}/product-selection","href":"/api-reference/presentations/get-product-selections"},{"title":"Save a product selection","deprecated":null,"version":null,"openapi":"/openapi.json put /api/presentations/{presentationId}/product-selection","href":"/api-reference/presentations/save-a-product-selection"},{"title":"Record a presentation event","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/{presentationId}/events","href":"/api-reference/presentations/record-a-presentation-event"},{"title":"Refresh an events token","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/{presentationId}/events-token","href":"/api-reference/presentations/refresh-an-events-token"},{"title":"Send a follow-up email for an ingested presentation","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/send","href":"/api-reference/presentations/send-a-follow-up-email-for-an-ingested-presentation"}]},{"group":"Narration","expanded":false,"pages":[{"title":"Synthesize narration for one slide","deprecated":null,"version":null,"openapi":"/openapi.json post /api/narration/single","href":"/api-reference/narration/synthesize-narration-for-one-slide"},{"title":"Synthesize narration for multiple slides","deprecated":null,"version":null,"openapi":"/openapi.json post /api/narration/batch","href":"/api-reference/narration/synthesize-narration-for-multiple-slides"},{"title":"Synthesize resume narration","deprecated":null,"version":null,"openapi":"/openapi.json post /api/narration/resume","href":"/api-reference/narration/synthesize-resume-narration"},{"title":"Synthesize narration for a slide","deprecated":null,"version":null,"openapi":"/openapi.json post /api/narration","href":"/api-reference/narration/synthesize-narration-for-a-slide"},{"title":"Synthesize Q\u0026A prompt audio","deprecated":null,"version":null,"openapi":"/openapi.json post /api/narration/qa-audio","href":"/api-reference/narration/synthesize-q\u0026a-prompt-audio"},{"title":"Generate a Q\u0026A resume prompt","deprecated":null,"version":null,"openapi":"/openapi.json post /api/narration/generate-prompt","href":"/api-reference/narration/generate-a-q\u0026a-resume-prompt"}]},{"group":"Images","expanded":false,"pages":[{"title":"List images","deprecated":null,"version":null,"openapi":"/openapi.json get /api/images","href":"/api-reference/images/list-images"},{"title":"Upload an image","deprecated":null,"version":null,"openapi":"/openapi.json post /api/images/upload","href":"/api-reference/images/upload-an-image"},{"title":"Delete an image","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/images/{imageId}","href":"/api-reference/images/delete-an-image"}]},{"group":"Voices","expanded":false,"pages":[{"title":"List available voices","deprecated":null,"version":null,"openapi":"/openapi.json get /api/voices/list","href":"/api-reference/voices/list-available-voices"}]},{"group":"Utility","expanded":false,"pages":[{"title":"Health check","deprecated":null,"version":null,"openapi":"/openapi.json get /api/health","href":"/api-reference/utility/health-check"},{"title":"Validate an address","deprecated":null,"version":null,"openapi":"/openapi.json post /api/address/validate","href":"/api-reference/utility/validate-an-address"}]},{"group":"Authentication","expanded":false,"pages":[{"title":"Log in","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/login","href":"/api-reference/authentication/log-in"},{"title":"Log out","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/logout","href":"/api-reference/authentication/log-out"},{"title":"Get current user","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/me","href":"/api-reference/authentication/get-current-user"},{"title":"Portal SSO via auth code exchange","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/sso","href":"/api-reference/authentication/portal-sso-via-auth-code-exchange"},{"title":"Portal SSO token-bearer exchange","deprecated":null,"version":null,"openapi":"/openapi.json post /api/auth/sso/exchange","href":"/api-reference/authentication/portal-sso-token-bearer-exchange"},{"title":"CORS preflight for the SSO exchange","deprecated":null,"version":null,"openapi":"/openapi.json options /api/auth/sso/exchange","href":"/api-reference/authentication/cors-preflight-for-the-sso-exchange"}]},{"group":"Company","expanded":false,"pages":[{"title":"Get company contact info","deprecated":null,"version":null,"openapi":"/openapi.json get /api/company/contact","href":"/api-reference/company/get-company-contact-info"},{"title":"Update company contact info","deprecated":null,"version":null,"openapi":"/openapi.json put /api/company/contact","href":"/api-reference/company/update-company-contact-info"},{"title":"Mark the welcome wizard as seen","deprecated":null,"version":null,"openapi":"/openapi.json post /api/company/welcome-seen","href":"/api-reference/company/mark-the-welcome-wizard-as-seen"},{"title":"Get knowledge base profile","deprecated":null,"version":null,"openapi":"/openapi.json get /api/company/kb/profile","href":"/api-reference/company/get-knowledge-base-profile"},{"title":"Update knowledge base profile","deprecated":null,"version":null,"openapi":"/openapi.json put /api/company/kb/profile","href":"/api-reference/company/update-knowledge-base-profile"},{"title":"List knowledge base documents","deprecated":null,"version":null,"openapi":"/openapi.json get /api/company/kb/documents","href":"/api-reference/company/list-knowledge-base-documents"},{"title":"Initiate document upload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/company/kb/documents/upload-init","href":"/api-reference/company/initiate-document-upload"},{"title":"Complete document upload","deprecated":null,"version":null,"openapi":"/openapi.json post /api/company/kb/documents/complete","href":"/api-reference/company/complete-document-upload"},{"title":"Get a knowledge base document","deprecated":null,"version":null,"openapi":"/openapi.json get /api/company/kb/documents/{documentId}","href":"/api-reference/company/get-a-knowledge-base-document"},{"title":"Delete a knowledge base document","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/company/kb/documents/{documentId}","href":"/api-reference/company/delete-a-knowledge-base-document"}]},{"group":"Contracts","expanded":false,"pages":[{"title":"Import a contract document","deprecated":null,"version":null,"openapi":"/openapi.json post /api/contracts/import","href":"/api-reference/contracts/import-a-contract-document"},{"title":"List action configs","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/action-configs","href":"/api-reference/contracts/list-action-configs"},{"title":"Create an action config","deprecated":null,"version":null,"openapi":"/openapi.json post /api/decks/{deckId}/action-configs","href":"/api-reference/contracts/create-an-action-config"},{"title":"Get an action config","deprecated":null,"version":null,"openapi":"/openapi.json get /api/decks/{deckId}/action-configs/{configId}","href":"/api-reference/contracts/get-an-action-config"},{"title":"Update an action config","deprecated":null,"version":null,"openapi":"/openapi.json put /api/decks/{deckId}/action-configs/{configId}","href":"/api-reference/contracts/update-an-action-config"},{"title":"Delete an action config","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/decks/{deckId}/action-configs/{configId}","href":"/api-reference/contracts/delete-an-action-config"},{"title":"Get contract for signing","description":"Returns the contract template, company branding, and product data needed to render the signing view. Requires an `x-presentation-token` scoped to this presentation, matching the sibling `events` and `appointment` routes. Obtain the token from `POST /api/presentations/{presentationId}/events-token`.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presentations/{presentationId}/sign-contract","href":"/api-reference/contracts/get-contract-for-signing"},{"title":"Sign a contract","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/{presentationId}/sign-contract","href":"/api-reference/contracts/sign-a-contract"}]},{"group":"Notifications","expanded":false,"pages":[{"title":"List notification subscriptions","description":"Returns all notification subscriptions for the organization.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/notifications/subscriptions","href":"/api-reference/notifications/list-notification-subscriptions"},{"title":"Create a notification subscription","deprecated":null,"version":null,"openapi":"/openapi.json post /api/notifications/subscriptions","href":"/api-reference/notifications/create-a-notification-subscription"},{"title":"Get a notification subscription","deprecated":null,"version":null,"openapi":"/openapi.json get /api/notifications/subscriptions/{subscriptionId}","href":"/api-reference/notifications/get-a-notification-subscription"},{"title":"Update a notification subscription","deprecated":null,"version":null,"openapi":"/openapi.json put /api/notifications/subscriptions/{subscriptionId}","href":"/api-reference/notifications/update-a-notification-subscription"},{"title":"Delete a notification subscription","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/notifications/subscriptions/{subscriptionId}","href":"/api-reference/notifications/delete-a-notification-subscription"},{"title":"List event log","deprecated":null,"version":null,"openapi":"/openapi.json get /api/notifications/events","href":"/api-reference/notifications/list-event-log"}]},{"group":"Fonts","expanded":false,"pages":[{"title":"List available fonts","deprecated":null,"version":null,"openapi":"/openapi.json get /api/fonts","href":"/api-reference/fonts/list-available-fonts"}]},{"group":"Appointments","expanded":false,"pages":[{"title":"Get available appointment slots","deprecated":null,"version":null,"openapi":"/openapi.json get /api/presentations/{presentationId}/appointment","href":"/api-reference/appointments/get-available-appointment-slots"},{"title":"Book an appointment","deprecated":null,"version":null,"openapi":"/openapi.json post /api/presentations/{presentationId}/appointment","href":"/api-reference/appointments/book-an-appointment"}]},{"group":"Roof Measurements","expanded":false,"pages":[{"title":"Request roof measurements","deprecated":null,"version":null,"openapi":"/openapi.json post /api/roof-measurements","href":"/api-reference/roof-measurements/request-roof-measurements"},{"title":"Get roof measurement status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/roof-measurements/{requestId}/status","href":"/api-reference/roof-measurements/get-roof-measurement-status"},{"title":"Cancel a roof measurement request","deprecated":null,"version":null,"openapi":"/openapi.json post /api/roof-measurements/{requestId}/cancel","href":"/api-reference/roof-measurements/cancel-a-roof-measurement-request"}]},{"group":"Actions","expanded":false,"pages":[{"title":"Detect a voice or text command","deprecated":null,"version":null,"openapi":"/openapi.json post /api/actions","href":"/api-reference/actions/detect-a-voice-or-text-command"}]},{"group":"Onboarding","expanded":false,"pages":[{"title":"Record a presentations onboarding completion or dismissal","deprecated":null,"version":null,"openapi":"/openapi.json post /api/onboarding/tour","href":"/api-reference/onboarding/record-a-presentations-onboarding-completion-or-dismissal"}]}]}]}]},"basePath":"","title":"Sign a contract - Demand IQ Docs","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CBsVopKK.js","utils-DZAk68jJ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D32AYZrP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D_A5_cny.js","snippetPresets-xNRfS9th.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BIB25-tq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CydJ4w4j.js","shallow-CYPBeQSG.js","getApiPlaygroundDisplay-A5xJVBOu.js","CodeSnippet-BVRTgi3m.js","CodeSnippets-DjD6BSlt.js","Page-Dr40SSJq.js","getPastedJson-D4V4JyrR.js","icon-uhcnG22T.js","MethodPill-CM-ZQdGH.js","DuplicateIcon-B_WnOiNf.js","createIcon-CJsb8utt.js","DynamicMarkdown-D-2HDKEp.js","SectionHeading-KP5xmMgQ.js","axios-vUo_bRtp.js","Markdown-D_k0dg6k.js","clsx-DK3K4Z1S.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DE3EVdvd.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-fN9H9n9g.js"]}