Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, audioUrl usually points to GET /api/qa/audio, which streams the audio as it is synthesized.
deckId and presentationId must be valid UUIDs; other values are rejected with a 400. When a presentationId is provided, the answer is drawn from the deck that presentation belongs to; the body’s deckId is used only as a fallback when that deck has been deleted. If slideId doesn’t match a slide in the deck, the question is answered without slide context instead of failing.
When a presentationId is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics.
When a signed-in caller sends deckId without a presentationId, the deck must belong to the caller’s current organization. Otherwise the request is rejected with a 404 Deck not found. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with deckId and no presentationId is rejected with a 400.
Authentication: Accepts either a session cookie (admin) or a presentationId (public viewer).
Deck to answer from. Ignored when presentationId is provided — the deck is resolved from the presentation, and this value is used only as a fallback if that deck has been deleted. Without a presentationId, a session is required and the deck must belong to the caller's current organization.
Set by the viewer when a sales rep is driving the presentation rather than a homeowner. Optional. Omit the field when the client cannot determine it. An absent value is read as unknown, not as false.
The first screen the viewer showed on this visit. Optional. Omit the field when the client cannot determine it. Any value outside the enum is rejected with a 400.
URL for the spoken audio of the answer. Either an accessible stored file, or a relative /api/qa/audio?t=… URL that synthesizes the audio on request when audioStreamed is true.
{"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/q\u0026a/answer-a-question","slug":"/api-reference/q\u0026a/answer-a-question","pageMetadata":{"title":"Answer a question","description":"Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, `audioUrl` usually points to `GET /api/qa/audio`, which streams the audio as it is synthesized.\n\n`deckId` and `presentationId` must be valid UUIDs; other values are rejected with a 400. When a `presentationId` is provided, the answer is drawn from the deck that presentation belongs to; the body's `deckId` is used only as a fallback when that deck has been deleted. If `slideId` doesn't match a slide in the deck, the question is answered without slide context instead of failing.\n\nWhen a `presentationId` is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics.\n\nWhen a signed-in caller sends `deckId` without a `presentationId`, the deck must belong to the caller's current organization. Otherwise the request is rejected with a 404 `Deck not found`. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with `deckId` and no `presentationId` is rejected with a 400.\n\n**Authentication**: Accepts either a session cookie (admin) or a `presentationId` (public viewer).","deprecated":null,"version":null,"openapi":"/openapi.json post /api/qa","href":"/api-reference/q\u0026a/answer-a-question","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, \", _jsx(_components.code, {\n children: \"audioUrl\"\n }), \" usually points to \", _jsx(_components.code, {\n children: \"GET /api/qa/audio\"\n }), \", which streams the audio as it is synthesized.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"deckId\"\n }), \" and \", _jsx(_components.code, {\n children: \"presentationId\"\n }), \" must be valid UUIDs; other values are rejected with a 400. When a \", _jsx(_components.code, {\n children: \"presentationId\"\n }), \" is provided, the answer is drawn from the deck that presentation belongs to; the body’s \", _jsx(_components.code, {\n children: \"deckId\"\n }), \" is used only as a fallback when that deck has been deleted. If \", _jsx(_components.code, {\n children: \"slideId\"\n }), \" doesn’t match a slide in the deck, the question is answered without slide context instead of failing.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"When a \", _jsx(_components.code, {\n children: \"presentationId\"\n }), \" is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"When a signed-in caller sends \", _jsx(_components.code, {\n children: \"deckId\"\n }), \" without a \", _jsx(_components.code, {\n children: \"presentationId\"\n }), \", the deck must belong to the caller’s current organization. Otherwise the request is rejected with a 404 \", _jsx(_components.code, {\n children: \"Deck not found\"\n }), \". A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with \", _jsx(_components.code, {\n children: \"deckId\"\n }), \" and no \", _jsx(_components.code, {\n children: \"presentationId\"\n }), \" is rejected with a 400.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Authentication\"\n }), \": Accepts either a session cookie (admin) or a \", _jsx(_components.code, {\n children: \"presentationId\"\n }), \" (public viewer).\"]\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":"Answer a question","description":"Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, `audioUrl` usually points to `GET /api/qa/audio`, which streams the audio as it is synthesized.\n\n`deckId` and `presentationId` must be valid UUIDs; other values are rejected with a 400. When a `presentationId` is provided, the answer is drawn from the deck that presentation belongs to; the body's `deckId` is used only as a fallback when that deck has been deleted. If `slideId` doesn't match a slide in the deck, the question is answered without slide context instead of failing.\n\nWhen a `presentationId` is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics.\n\nWhen a signed-in caller sends `deckId` without a `presentationId`, the deck must belong to the caller's current organization. Otherwise the request is rejected with a 404 `Deck not found`. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with `deckId` and no `presentationId` is rejected with a 400.\n\n**Authentication**: Accepts either a session cookie (admin) or a `presentationId` (public viewer).","deprecated":null,"version":null,"openapi":"/openapi.json post /api/qa","href":"/api-reference/q\u0026a/answer-a-question","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Q\u0026A"],"summary":"Answer a question","description":"Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, `audioUrl` usually points to `GET /api/qa/audio`, which streams the audio as it is synthesized.\n\n`deckId` and `presentationId` must be valid UUIDs; other values are rejected with a 400. When a `presentationId` is provided, the answer is drawn from the deck that presentation belongs to; the body's `deckId` is used only as a fallback when that deck has been deleted. If `slideId` doesn't match a slide in the deck, the question is answered without slide context instead of failing.\n\nWhen a `presentationId` is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics.\n\nWhen a signed-in caller sends `deckId` without a `presentationId`, the deck must belong to the caller's current organization. Otherwise the request is rejected with a 404 `Deck not found`. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with `deckId` and no `presentationId` is rejected with a 400.\n\n**Authentication**: Accepts either a session cookie (admin) or a `presentationId` (public viewer).","requestBody":"4e8562e3-e35f-4076-9265-e24828956c11","responses":{"200":"4ad11aa5-20e4-4711-b9ea-42aece3fbfe9","400":"9f592fdd-4bcb-4876-9e21-1ece45d68934","401":"04bfba9d-2a8f-4580-9e70-13aa438b5e78","403":"ade3ef6a-5b67-4e3b-9c64-f0df1a8ec921","404":"72a8b36e-b499-4dc8-94b4-be8d7852a9ad","500":"a951b833-efc7-4799-89e7-5f23c5cdf2a5"},"method":"post","type":"path","servers":["8c1c298c-6efa-4eee-bbc2-ad374d34a17e","7c7f8449-1062-4369-8578-0037bf063220"],"security":[],"path":"/api/qa","baseUrlOptions":["https://app.demand-iq.com","http://localhost:3000"],"title":"Answer a question","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question","slideId"],"properties":{"question":{"type":"string","minLength":3,"isRequired":true,"uniqueKey":"question","typeLabel":"string"},"slideId":{"type":"string","minLength":1,"maxLength":100,"description":"Current slide ID for context. Accepts a slide UUID or a legacy semantic ID such as `slide-1`.","isRequired":true,"uniqueKey":"slideId","typeLabel":"string"},"deckId":{"type":"string","format":"uuid","description":"Deck to answer from. Ignored when `presentationId` is provided — the deck is resolved from the presentation, and this value is used only as a fallback if that deck has been deleted. Without a `presentationId`, a session is required and the deck must belong to the caller's current organization.","uniqueKey":"deckId","typeLabel":"string\u003cuuid>"},"presentationId":{"type":"string","format":"uuid","description":"Required for unauthenticated viewer access","uniqueKey":"presentationId","typeLabel":"string\u003cuuid>"},"history":{"type":"array","items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["user","assistant"],"isRequired":true,"uniqueKey":"history.items.[INDEX].role","typeLabel":"enum\u003cstring>"},"content":{"type":"string","isRequired":true,"uniqueKey":"history.items.[INDEX].content","typeLabel":"string"}},"uniqueKey":"history.items.[INDEX]","typeLabel":"object"},"uniqueKey":"history","typeLabel":"object[]"},"voiceId":{"type":"string","uniqueKey":"voiceId","typeLabel":"string"},"language":{"type":"string","example":"en","description":"BCP-47 language tag","uniqueKey":"language","typeLabel":"string"},"repMode":{"type":"boolean","description":"Set by the viewer when a sales rep is driving the presentation rather than a homeowner. Optional. Omit the field when the client cannot determine it. An absent value is read as unknown, not as `false`.","uniqueKey":"repMode","typeLabel":"boolean"},"firstScreen":{"type":"string","enum":["intro","loading","slides","pending_data"],"example":"intro","description":"The first screen the viewer showed on this visit. Optional. Omit the field when the client cannot determine it. Any value outside the enum is rejected with a 400.","uniqueKey":"firstScreen","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"question":"\u003cstring>","slideId":"\u003cstring>","deckId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","presentationId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","history":[{"content":"\u003cstring>"}],"voiceId":"\u003cstring>","language":"en","repMode":true,"firstScreen":"intro"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"4ad11aa5-20e4-4711-b9ea-42aece3fbfe9":{"description":"Answer with audio","content":{"application/json":{"schema":{"type":"object","properties":{"answer":{"type":"string","isRequired":true,"uniqueKey":"answer","typeLabel":"string"},"audioUrl":{"type":"string","description":"URL for the spoken audio of the answer. Either an accessible stored file, or a relative `/api/qa/audio?t=…` URL that synthesizes the audio on request when `audioStreamed` is `true`.","isRequired":true,"uniqueKey":"audioUrl","typeLabel":"string"},"source":{"type":"string","enum":["faq","cached","openai","fallback"],"isRequired":true,"uniqueKey":"source","typeLabel":"enum\u003cstring>"},"audioStreamed":{"type":"boolean","description":"`true` when `audioUrl` streams the audio as it is synthesized. Streamed audio can't be seeked while it plays.","uniqueKey":"audioStreamed","typeLabel":"boolean"},"wordTimings":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string","isRequired":true,"uniqueKey":"wordTimings.items.[INDEX].word","typeLabel":"string"},"startTime":{"type":"number","description":"Start time in milliseconds","isRequired":true,"uniqueKey":"wordTimings.items.[INDEX].startTime","typeLabel":"number"},"endTime":{"type":"number","description":"End time in milliseconds","isRequired":true,"uniqueKey":"wordTimings.items.[INDEX].endTime","typeLabel":"number"}},"required":["word","startTime","endTime"],"uniqueKey":"wordTimings.items.[INDEX]","typeLabel":"object"},"uniqueKey":"wordTimings","typeLabel":"object[]"},"relatedSlideId":{"oneOf":[{"type":"string","uniqueKey":"relatedSlideId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"relatedSlideId.oneOf.1","typeLabel":"null"}],"uniqueKey":"relatedSlideId","typeLabel":"string | null"}},"required":["answer","audioUrl","source"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"answer":"\u003cstring>","audioUrl":"\u003cstring>","source":"faq","audioStreamed":true,"wordTimings":[{"word":"\u003cstring>","startTime":123,"endTime":123}],"relatedSlideId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"9f592fdd-4bcb-4876-9e21-1ece45d68934":{"description":"Bad request","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"},"04bfba9d-2a8f-4580-9e70-13aa438b5e78":{"description":"Unauthorized","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"},"ade3ef6a-5b67-4e3b-9c64-f0df1a8ec921":{"description":"Forbidden","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"},"72a8b36e-b499-4dc8-94b4-be8d7852a9ad":{"description":"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"},"a951b833-efc7-4799-89e7-5f23c5cdf2a5":{"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":{},"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"}}},"originalFileLocation":"openapi.json"},"subdomain":"demandiq","siteName":"Demand IQ Docs","title":"Answer a question - Demand IQ Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T19:16:29.334Z","originalFileLocation":"api-reference/q\u0026a/answer-a-question.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=\"Answers a viewer question. Checks FAQs first (exact then semantic match at \u0026gt;= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, audioUrl usually points to GET /api/qa/audio, which streams the audio as it is synthesized. deckId and presentationId must be valid UUIDs; other values are rejected with a 400. When a presentationId is provided, the answer is drawn from the deck that presentation belongs to; the body\u0026#x27;s deckId is used only as a fallback when that deck has been deleted. If slideId doesn\u0026#x27;t match a slide in the deck, the question is answered without slide context instead of failing. When a presentationId is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics. When a signed-in caller sends deckId without a presentationId, the deck must belong to the caller\u0026#x27;s current organization. Otherwise the request is rejected with a 404 Deck not found. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with deckId and no presentationId is rejected with a 400. Authentication: Accepts either a session cookie (admin) or a presentationId (public viewer).\">\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=\"Answer a question - Demand IQ Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Answers a viewer question. Checks FAQs first (exact then semantic match at \u0026gt;= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, audioUrl usually points to GET /api/qa/audio, which streams the audio as it is synthesized. deckId and presentationId must be valid UUIDs; other values are rejected with a 400. When a presentationId is provided, the answer is drawn from the deck that presentation belongs to; the body\u0026#x27;s deckId is used only as a fallback when that deck has been deleted. If slideId doesn\u0026#x27;t match a slide in the deck, the question is answered without slide context instead of failing. When a presentationId is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics. When a signed-in caller sends deckId without a presentationId, the deck must belong to the caller\u0026#x27;s current organization. Otherwise the request is rejected with a 404 Deck not found. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with deckId and no presentationId is rejected with a 400. Authentication: Accepts either a session cookie (admin) or a presentationId (public viewer).\">\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/q\u0026amp;a/answer-a-question\">\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=Q%26A\u0026amp;title=Answer+a+question\u0026amp;description=Answers+a+viewer+question.+Checks+FAQs+first+%28exact+then+semantic+match+at+%3E%3D+0.6+confidence%29%2C+falls+back+to+GPT-4o+with+slide+context.+Returns+the+answer+text+\u0026amp;theme=6cb71c7b4cbe4450b6bff4c3\u0026amp;signature=b85320219209a39f54d2a2fc7ffd0894f4cb400c2687977037bb0ba7f4f5e4e4\">\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=\"Answer a question - Demand IQ Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Answers a viewer question. Checks FAQs first (exact then semantic match at \u0026gt;= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, audioUrl usually points to GET /api/qa/audio, which streams the audio as it is synthesized. deckId and presentationId must be valid UUIDs; other values are rejected with a 400. When a presentationId is provided, the answer is drawn from the deck that presentation belongs to; the body\u0026#x27;s deckId is used only as a fallback when that deck has been deleted. If slideId doesn\u0026#x27;t match a slide in the deck, the question is answered without slide context instead of failing. When a presentationId is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics. When a signed-in caller sends deckId without a presentationId, the deck must belong to the caller\u0026#x27;s current organization. Otherwise the request is rejected with a 404 Deck not found. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with deckId and no presentationId is rejected with a 400. Authentication: Accepts either a session cookie (admin) or a presentationId (public viewer).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://demandiq.mintlify.site/_mintlify/api/og/v2?division=Q%26A\u0026amp;title=Answer+a+question\u0026amp;description=Answers+a+viewer+question.+Checks+FAQs+first+%28exact+then+semantic+match+at+%3E%3D+0.6+confidence%29%2C+falls+back+to+GPT-4o+with+slide+context.+Returns+the+answer+text+\u0026amp;theme=6cb71c7b4cbe4450b6bff4c3\u0026amp;signature=b85320219209a39f54d2a2fc7ffd0894f4cb400c2687977037bb0ba7f4f5e4e4\">\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/q\u0026amp;a/answer-a-question\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/q%26a/answer-a-question.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/q\u0026a/answer-a-question#webpage\",\"url\":\"https://developer.demand-iq.com/api-reference/q\u0026a/answer-a-question\",\"name\":\"Answer a question\",\"description\":\"Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, audioUrl usually points to GET /api/qa/audio, which streams the audio as it is synthesized. deckId and presentationId must be valid UUIDs; other values are rejected with a 400. When a presentationId is provided, the answer is drawn from the deck that presentation belongs to; the body's deckId is used only as a fallback when that deck has been deleted. If slideId doesn't match a slide in the deck, the question is answered without slide context instead of failing. When a presentationId is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics. When a signed-in caller sends deckId without a presentationId, the deck must belong to the caller's current organization. Otherwise the request is rejected with a 404 Deck not found. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with deckId and no presentationId is rejected with a 400. Authentication: Accepts either a session cookie (admin) or a presentationId (public viewer).\",\"dateModified\":\"2026-11-02T19:16:29.334Z\",\"isPartOf\":{\"@id\":\"https://developer.demand-iq.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer.demand-iq.com/api-reference/q\u0026a/answer-a-question#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer.demand-iq.com/api-reference/q\u0026a/answer-a-question#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\":\"Q\u0026A\",\"item\":\"https://developer.demand-iq.com/api-reference/q\u0026a/get-q\u0026a-settings\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Answer a question\",\"item\":\"https://developer.demand-iq.com/api-reference/q\u0026a/answer-a-question\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer.demand-iq.com/api-reference/q\u0026a/answer-a-question#apireference\",\"headline\":\"Answer a question\",\"name\":\"Answer a question\",\"description\":\"Answers a viewer question. Checks FAQs first (exact then semantic match at >= 0.6 confidence), falls back to GPT-4o with slide context. Returns the answer text plus an audio URL. For ElevenLabs voices, audioUrl usually points to GET /api/qa/audio, which streams the audio as it is synthesized. deckId and presentationId must be valid UUIDs; other values are rejected with a 400. When a presentationId is provided, the answer is drawn from the deck that presentation belongs to; the body's deckId is used only as a fallback when that deck has been deleted. If slideId doesn't match a slide in the deck, the question is answered without slide context instead of failing. When a presentationId is provided, the question is recorded against the organization that owns the presentation, even when the caller is signed in to a different organization. A question asked from a signed-in browser is excluded from engagement metrics. When a signed-in caller sends deckId without a presentationId, the deck must belong to the caller's current organization. Otherwise the request is rejected with a 404 Deck not found. A missing deck and a deck owned by another organization return the same 404. Deck previews use this path. An unauthenticated request with deckId and no presentationId is rejected with a 400. Authentication: Accepts either a session cookie (admin) or a presentationId (public viewer).\",\"url\":\"https://developer.demand-iq.com/api-reference/q\u0026a/answer-a-question\",\"mainEntityOfPage\":{\"@id\":\"https://developer.demand-iq.com/api-reference/q\u0026a/answer-a-question#webpage\"},\"dateModified\":\"2026-11-02T19:16:29.334Z\",\"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","description":null,"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","description":"Synthesizes an answer that `POST /api/qa` already produced and streams MP3 audio as it is generated, so playback can start before the clip is complete. The response doesn't support byte ranges.\n\nOnce the clip has been stored for a cached answer, the same token redirects to the stored file. If synthesis can't start, the endpoint redirects to the default answer clip.\n\nYou don't build this URL yourself. Use the `audioUrl` returned by `POST /api/qa` when `audioStreamed` is `true`.\n\n**Authentication**: The sealed token in the `t` query parameter of `QaResponse.audioUrl`. Tokens expire after 6 hours.","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","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","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":"Answer a question - 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"]}