{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"The Decision Economy API","version":"1.0.0","summary":"Decision Economy Institute assessment and discovery API","description":"One main offer; seven owner-reported readiness areas; exactly three ordered actions. Results are BY YOUR ACCOUNT, not an audit, certification or prediction. Missing answers stay unknown. REST assessment execution is read-only and requires no account or personal information. The separate plan-email operation sends a message only when explicitly requested. No DSN management key belongs in this API.","contact":{"name":"Decision Economy Institute","email":"hello@decisioneconomyinstitute.com","url":"https://decisioneconomyinstitute.com"}},"servers":[{"url":"https://decisioneconomyinstitute.com"}],"security":[],"tags":[{"name":"Assessment"},{"name":"Discovery"},{"name":"Plan email"},{"name":"Telemetry"},{"name":"MCP"}],"externalDocs":{"description":"Method, boundaries and interface evidence","url":"https://decisioneconomyinstitute.com/machine-access"},"paths":{"/api/v1/assessment":{"post":{"operationId":"assessDecisionEconomyReadiness","tags":["Assessment"],"summary":"Generate a readiness result","description":"Supply only approved answer codes for one offer. No query string is allowed. JSON request limit: 16 KiB. Unknown or additional fields are rejected. Applicability and scoped contradictions are validated by the fixed ruleset. Results are not stored by the application; responses use no-store and noindex. Rate limits are shared per isolate; callers should handle 429. Cross-origin browser CORS access is not advertised.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentInput"},"example":{"rulesetVersion":"de-readiness-1.0.0","answers":{}}}}},"responses":{"200":{"description":"Complete versioned result, including exactly three actions and seven profiles.","headers":{"Cache-Control":{"schema":{"type":"string"},"description":"no-store, max-age=0"},"X-Robots-Tag":{"schema":{"type":"string"},"description":"noindex, nofollow"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentResult"},"example":{"rulesetVersion":"de-readiness-1.0.0","apiVersion":"1","generatedAt":"2026-09-10T00:00:00.000Z","evidenceScope":"BY YOUR ACCOUNT","completeness":"Preliminary picture","knownAnswers":0,"disclaimer":"Based on your answers, this assessment suggests improvement priorities; it does not independently verify your business or predict AI recommendations, sales, or business quality.","actions":[{"id":"AC01","title":"Check: Make the offer and fit clear","kind":"Check","questionIds":["U1"],"finding":"These conditions need checking: A clear offer.","reason":"Check this fact before deciding on a repair","firstTask":"Review A clear offer for this offer. Record what is present, missing, or still uncertain, then update your answer.","afterCheck":"If a gap is confirmed: write a short statement of what you provide, whom it helps, and the practical limits; place it where customers first look.","done":"What is present, missing, or still uncertain is recorded, and your answer is updated.","effort":"Focused review or small edit","evidenceScope":"BY YOUR ACCOUNT"},{"id":"AC07","title":"Check: Choose one customer decision to help with","kind":"Check","questionIds":["F1"],"finding":"These conditions need checking: The recurring decision.","reason":"Check this fact before deciding on a repair","firstTask":"Review The recurring decision for this offer. Record what is present, missing, or still uncertain, then update your answer.","afterCheck":"If a gap is confirmed: write the customer's actual choice, plausible alternatives, and the circumstances that make it difficult.","done":"What is present, missing, or still uncertain is recorded, and your answer is updated.","effort":"Focused review or small edit","evidenceScope":"BY YOUR ACCOUNT"},{"id":"AC16","title":"Check: Give the customer a clear next step","kind":"Check","questionIds":["C1"],"finding":"These conditions need checking: A clear next step.","reason":"Check this fact before deciding on a repair","firstTask":"Review A clear next step for this offer. Record what is present, missing, or still uncertain, then update your answer.","afterCheck":"If a gap is confirmed: show what the customer can appropriately do next, including preparation, comparison, waiting, or making contact.","done":"What is present, missing, or still uncertain is recorded, and your answer is updated.","effort":"Focused review or small edit","evidenceScope":"BY YOUR ACCOUNT"}],"profiles":[{"name":"Understandable","status":"Needs checking","evidenceScope":"BY YOUR ACCOUNT","why":"Customers—and the AI they ask for help—need to understand what you do and when you fit before they can compare you fairly. Clear public facts give them something useful to work with.","applicable":4,"known":0,"counts":{"inPlace":0,"partlyInPlace":0,"absent":0,"unknown":4},"exclusions":[],"foundationGap":null,"questionIds":["U1","U2","U3","U4"]},{"name":"Evidence-Rich","status":"Needs checking","evidenceScope":"BY YOUR ACCOUNT","why":"Important promises are easier to evaluate when their support can be checked. A source or example should show what the evidence actually establishes and where its limits are.","applicable":4,"known":0,"counts":{"inPlace":0,"partlyInPlace":0,"absent":0,"unknown":4},"exclusions":[],"foundationGap":null,"questionIds":["E1","E2","E3","E4"]},{"name":"Useful","status":"Needs checking","evidenceScope":"BY YOUR ACCOUNT","why":"Customers need help working through a choice, not just more descriptions of your business. A useful guide or tool explains options, tradeoffs, and next steps, including when buying is not the right next move.","applicable":4,"known":0,"counts":{"inPlace":0,"partlyInPlace":0,"absent":0,"unknown":4},"exclusions":[],"foundationGap":null,"questionIds":["F1","F2","F3","F4"]},{"name":"Accessible","status":"Needs checking","evidenceScope":"BY YOUR ACCOUNT","why":"Good information helps only when people can reach and use it. A tested machine path may also let an assistant use an interactive tool, but availability alone does not make the guidance valuable.","applicable":4,"known":0,"counts":{"inPlace":0,"partlyInPlace":0,"absent":0,"unknown":4},"exclusions":[],"foundationGap":null,"questionIds":["A1","A2","A3","A4"]},{"name":"Trustworthy","status":"Needs checking","evidenceScope":"BY YOUR ACCOUNT","why":"Customers need to see limits, commercial interests, alternatives, and how their information is handled. Clear boundaries help a person or assistant judge how much to rely on the guidance.","applicable":4,"known":0,"counts":{"inPlace":0,"partlyInPlace":0,"absent":0,"unknown":4},"exclusions":[],"foundationGap":null,"questionIds":["T1","T2","T3","T4"]},{"name":"Actionable","status":"Needs checking","evidenceScope":"BY YOUR ACCOUNT","why":"A useful answer should make the next appropriate step clear. Customers and authorized agents must understand what that step commits them to and who has permission to act.","applicable":4,"known":0,"counts":{"inPlace":0,"partlyInPlace":0,"absent":0,"unknown":4},"exclusions":[],"foundationGap":null,"questionIds":["C1","C2","C3","C4"]},{"name":"Measurable","status":"Needs checking","evidenceScope":"BY YOUR ACCOUNT","why":"Views and clicks do not tell the whole story. Separating completed help, decision feedback, and actual AI use makes it easier to decide what to improve next.","applicable":3,"known":0,"counts":{"inPlace":0,"partlyInPlace":0,"absent":0,"unknown":3},"exclusions":[],"foundationGap":null,"questionIds":["M1","M2","M3"]}],"risks":[],"findings":[{"questionId":"U1","title":"A clear offer","question":"On the page customers are most likely to find, how clearly do you explain what you do and who it is for?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Basic meaning comes before useful comparison.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"U2","title":"Fit and boundaries","question":"Can customers see the practical limits of your offer—such as service area, customer type, job size, or situations you do not handle?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Suitability depends on the actual customer's circumstances.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"U3","title":"Consistent public facts","question":"When did you last compare your main public page with the listings or profiles customers actually use?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Conflicting contact details, services, or locations make identification harder.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"U4","title":"Cost and commitment","question":"Before contacting you, can customers understand what they may need to pay or commit—and what changes that?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A customer needs a usable basis for comparing options.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"E1","title":"Support for important claims","question":"For the important claims you make about this offer, can you point to specific support?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Claims need relevant evidence, not repeated assertions.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"E2","title":"Checkable credentials","question":"For qualifications you claim or need for this work, can a customer find who issued them and how to check their current status?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A credential claim should point to its issuer and scope.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"E3","title":"Evidence maintenance","question":"How do you keep the evidence behind important claims current?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Once-correct support can become outdated.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"E4","title":"Examples with context","question":"Do you show examples that help customers understand your work without making one person's result sound guaranteed?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Concrete examples can explain an offer while preserving uncertainty.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"F1","title":"The recurring decision","question":"Can you name one important choice customers repeatedly need help making before they work with you?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"The resource should begin with a decision, not a preferred technology.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"F2","title":"Help before a sales conversation","question":"What can a customer use to work through that choice before a sales conversation?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Customers need usable help, not a particular format.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"F3","title":"What changes the answer","question":"Does your decision help explain which circumstances could lead someone to a different option?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A relevant choice depends on context and alternatives.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"F4","title":"Reasons and limits","question":"When your resource gives an answer, score, or suggested path, does it explain why and what the customer should verify?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A result must be interpretable to support a choice.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"A1","title":"An open public path","question":"Can a new customer reach your essential offer information without creating an account, paying, or contacting you first?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A person or assistant needs an initial path to assess relevance.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"A2","title":"A usable customer journey","question":"What checks have you made that customers can read and use the main page and help on a phone and without relying only on a mouse?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Availability is not enough if someone cannot use the experience.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"A3","title":"Essential information as text","question":"Is the information needed to understand your offer available as readable page text, rather than only inside pictures, scanned files, or video?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Text and meaningful alternatives support more people and retrieval methods.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"A4","title":"A demonstrated machine-use path","question":"Has someone demonstrated that an AI assistant can use your interactive tool and return a correct, useful result?","answerLabel":"Skip for now","state":"unresolved_applicability","condition":"Unknown","why":"A claimed connection is different from demonstrated use.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"T1","title":"Clear limits","question":"Do you clearly explain what your offer or decision help cannot determine or promise?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Customers need to know where reliance should stop.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"T2","title":"An appropriate alternative","question":"What happens when waiting, choosing another approach, or speaking with another professional would better fit the customer's situation?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"The customer can benefit even when no sale follows.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"T3","title":"Visible commercial interests","question":"If your recommendations promote your own offer or bring you sponsorship, referral, or affiliate income, is that clear to the customer?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Factual accuracy and alignment with the customer are separate.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"T4","title":"Proportionate information requests","question":"When someone uses your decision help, how do you handle the information you ask them to provide?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Useful assistance should not impose unnecessary privacy costs.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"C1","title":"A clear next step","question":"After someone understands your offer or finishes your decision help, is the appropriate next step clear?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Orientation should lead to an achievable choice.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"C2","title":"A working contact or request route","question":"Have you recently tested the route a customer would use to take that step?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Interest can be lost in a broken handoff.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"C3","title":"Permission before commitment","question":"Before a customer is charged, booked, enrolled, or committed to something, how do they confirm what they are agreeing to?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Asking for help is not permission to spend or commit.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"C4","title":"Realistic expectations","question":"Can customers tell what happens after their request and whether availability or response time still needs confirmation?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A request is different from a confirmed appointment or capacity.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"M1","title":"Completed steps","question":"Can you distinguish someone viewing your information from completing the useful next step?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Activity and completed assistance are different observations.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"M2","title":"Evidence of decision help","question":"Do you collect feedback or observations about whether your help made the customer's decision clearer?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Conversion alone cannot establish a Better Choice.","verificationOpportunity":"Gather proportionate, consented observations; do not infer causation."},{"questionId":"M3","title":"Observed AI behavior","question":"Have you kept repeatable records of how AI responds to the customer questions you care about?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"An owner needs a record, not an anecdote or assumed recommendation.","verificationOpportunity":"Gather proportionate, consented observations; do not infer causation."}],"strengths":[],"gaps":[],"unknowns":[{"questionId":"U1","title":"A clear offer","question":"On the page customers are most likely to find, how clearly do you explain what you do and who it is for?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Basic meaning comes before useful comparison.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"U2","title":"Fit and boundaries","question":"Can customers see the practical limits of your offer—such as service area, customer type, job size, or situations you do not handle?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Suitability depends on the actual customer's circumstances.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"U3","title":"Consistent public facts","question":"When did you last compare your main public page with the listings or profiles customers actually use?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Conflicting contact details, services, or locations make identification harder.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"U4","title":"Cost and commitment","question":"Before contacting you, can customers understand what they may need to pay or commit—and what changes that?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A customer needs a usable basis for comparing options.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"E1","title":"Support for important claims","question":"For the important claims you make about this offer, can you point to specific support?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Claims need relevant evidence, not repeated assertions.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"E2","title":"Checkable credentials","question":"For qualifications you claim or need for this work, can a customer find who issued them and how to check their current status?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A credential claim should point to its issuer and scope.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"E3","title":"Evidence maintenance","question":"How do you keep the evidence behind important claims current?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Once-correct support can become outdated.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"E4","title":"Examples with context","question":"Do you show examples that help customers understand your work without making one person's result sound guaranteed?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Concrete examples can explain an offer while preserving uncertainty.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"F1","title":"The recurring decision","question":"Can you name one important choice customers repeatedly need help making before they work with you?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"The resource should begin with a decision, not a preferred technology.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"F2","title":"Help before a sales conversation","question":"What can a customer use to work through that choice before a sales conversation?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Customers need usable help, not a particular format.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"F3","title":"What changes the answer","question":"Does your decision help explain which circumstances could lead someone to a different option?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A relevant choice depends on context and alternatives.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"F4","title":"Reasons and limits","question":"When your resource gives an answer, score, or suggested path, does it explain why and what the customer should verify?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A result must be interpretable to support a choice.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"A1","title":"An open public path","question":"Can a new customer reach your essential offer information without creating an account, paying, or contacting you first?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A person or assistant needs an initial path to assess relevance.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"A2","title":"A usable customer journey","question":"What checks have you made that customers can read and use the main page and help on a phone and without relying only on a mouse?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Availability is not enough if someone cannot use the experience.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"A3","title":"Essential information as text","question":"Is the information needed to understand your offer available as readable page text, rather than only inside pictures, scanned files, or video?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Text and meaningful alternatives support more people and retrieval methods.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"A4","title":"A demonstrated machine-use path","question":"Has someone demonstrated that an AI assistant can use your interactive tool and return a correct, useful result?","answerLabel":"Skip for now","state":"unresolved_applicability","condition":"Unknown","why":"A claimed connection is different from demonstrated use.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"T1","title":"Clear limits","question":"Do you clearly explain what your offer or decision help cannot determine or promise?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Customers need to know where reliance should stop.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"T2","title":"An appropriate alternative","question":"What happens when waiting, choosing another approach, or speaking with another professional would better fit the customer's situation?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"The customer can benefit even when no sale follows.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"T3","title":"Visible commercial interests","question":"If your recommendations promote your own offer or bring you sponsorship, referral, or affiliate income, is that clear to the customer?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Factual accuracy and alignment with the customer are separate.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"T4","title":"Proportionate information requests","question":"When someone uses your decision help, how do you handle the information you ask them to provide?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Useful assistance should not impose unnecessary privacy costs.","verificationOpportunity":"Review the actual practice and its limits."},{"questionId":"C1","title":"A clear next step","question":"After someone understands your offer or finishes your decision help, is the appropriate next step clear?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Orientation should lead to an achievable choice.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"C2","title":"A working contact or request route","question":"Have you recently tested the route a customer would use to take that step?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Interest can be lost in a broken handoff.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"C3","title":"Permission before commitment","question":"Before a customer is charged, booked, enrolled, or committed to something, how do they confirm what they are agreeing to?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Asking for help is not permission to spend or commit.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"C4","title":"Realistic expectations","question":"Can customers tell what happens after their request and whether availability or response time still needs confirmation?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"A request is different from a confirmed appointment or capacity.","verificationOpportunity":"Check the current public material and the support behind it."},{"questionId":"M1","title":"Completed steps","question":"Can you distinguish someone viewing your information from completing the useful next step?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Activity and completed assistance are different observations.","verificationOpportunity":"Run a scoped, authorized technical or accessibility test and record its limits."},{"questionId":"M2","title":"Evidence of decision help","question":"Do you collect feedback or observations about whether your help made the customer's decision clearer?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"Conversion alone cannot establish a Better Choice.","verificationOpportunity":"Gather proportionate, consented observations; do not infer causation."},{"questionId":"M3","title":"Observed AI behavior","question":"Have you kept repeatable records of how AI responds to the customer questions you care about?","answerLabel":"Skip for now","state":"skipped","condition":"Unknown","why":"An owner needs a record, not an anecdote or assumed recommendation.","verificationOpportunity":"Gather proportionate, consented observations; do not infer causation."}],"scopeQualifications":[],"clarificationsNeeded":[],"applicability":{"A4":"unresolved","E2":"applicable"},"inactiveAnswerHistory":null,"blockedActions":[{"id":"AC16","title":"Give the customer a clear next step","unmetPrerequisites":["U1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC09","title":"Make essential information publicly readable","unmetPrerequisites":["U1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC08","title":"Build or improve one useful decision aid","unmetPrerequisites":["U1","F1","E1","T1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC19","title":"Define and record a useful completed step","unmetPrerequisites":["C1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC10","title":"Test the customer path","unmetPrerequisites":["A1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC20","title":"Learn whether the help clarified the choice","unmetPrerequisites":["F2","C1","M1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC02","title":"Align the public facts","unmetPrerequisites":["U1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC21","title":"Keep a repeatable record of AI responses","unmetPrerequisites":["U1","A1","E1"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."},{"id":"AC11","title":"Verify whether the interactive tool can be used through AI","unmetPrerequisites":["U1","U2","E1","F1","F4","A1","A2","A3","T1","T4","C1","C3","F2","E2"],"note":"Later opportunity. These prerequisites must be established before this becomes an immediate action."}],"selectionTrace":[{"id":"AC01","questionIds":["U1","U2"],"eligible":true,"tier":2,"severity":1,"dependencyReach":5,"decisionValue":3,"evidenceBasis":0,"effort":1,"selected":true},{"id":"AC16","questionIds":["C1"],"eligible":false,"tier":2,"severity":1,"dependencyReach":2,"decisionValue":3,"evidenceBasis":0,"effort":1,"selected":true},{"id":"AC04","questionIds":["E1"],"eligible":true,"tier":2,"severity":1,"dependencyReach":2,"decisionValue":3,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC09","questionIds":["A1","A3"],"eligible":false,"tier":2,"severity":1,"dependencyReach":2,"decisionValue":3,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC07","questionIds":["F1"],"eligible":true,"tier":2,"severity":1,"dependencyReach":1,"decisionValue":3,"evidenceBasis":0,"effort":1,"selected":true},{"id":"AC12","questionIds":["T1"],"eligible":true,"tier":2,"severity":1,"dependencyReach":1,"decisionValue":3,"evidenceBasis":0,"effort":1,"selected":false},{"id":"AC08","questionIds":["F2","F3","F4"],"eligible":false,"tier":2,"severity":1,"dependencyReach":1,"decisionValue":3,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC19","questionIds":["M1"],"eligible":false,"tier":2,"severity":1,"dependencyReach":1,"decisionValue":2,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC03","questionIds":["U4"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":3,"evidenceBasis":0,"effort":1,"selected":false},{"id":"AC13","questionIds":["T2"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":3,"evidenceBasis":0,"effort":1,"selected":false},{"id":"AC14","questionIds":["T3"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":3,"evidenceBasis":0,"effort":1,"selected":false},{"id":"AC10","questionIds":["A2","C2"],"eligible":false,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":3,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC15","questionIds":["T4"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":3,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC17","questionIds":["C3"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":3,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC20","questionIds":["M2"],"eligible":false,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":3,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC02","questionIds":["U3"],"eligible":false,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":2,"evidenceBasis":0,"effort":1,"selected":false},{"id":"AC05","questionIds":["E2"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":2,"evidenceBasis":0,"effort":1,"selected":false},{"id":"AC18","questionIds":["C4"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":2,"evidenceBasis":0,"effort":1,"selected":false},{"id":"AC06","questionIds":["E3","E4"],"eligible":true,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":2,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC21","questionIds":["M3"],"eligible":false,"tier":4,"severity":1,"dependencyReach":0,"decisionValue":2,"evidenceBasis":0,"effort":2,"selected":false},{"id":"AC11","questionIds":["A4"],"eligible":false,"tier":5,"severity":1,"dependencyReach":0,"decisionValue":1,"evidenceBasis":0,"effort":3,"selected":false}],"summary":"Priorities: Check: Make the offer and fit clear; Check: Choose one customer decision to help with."}}}},"400":{"description":"Invalid JSON, fields, answer codes, applicability, or prohibited query string.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Unsupported ruleset version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds 16 KiB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Content-Type must be application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Retry later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Execution failed; browser-local assessment remains available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"assessmentMethodNotAllowed","tags":["Assessment"],"summary":"GET is not supported","responses":{"405":{"description":"Use POST; never send answers in a URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/schema":{"get":{"operationId":"getAssessmentSchemas","tags":["Discovery"],"summary":"Get exact assessment schemas and question bank","description":"This is a JSON Schema bundle, not an OpenAPI document. Use /openapi.json for OpenAPI.","responses":{"200":{"description":"Versioned schemas, dimensions, questions, choice codes, and output guidance.","content":{"application/json":{"schema":{"type":"object","required":["apiVersion","rulesetVersion","inputSchema","outputSchema","questions","dimensions","output"],"properties":{"apiVersion":{"const":"1"},"rulesetVersion":{"const":"de-readiness-1.0.0"},"inputSchema":{"type":"object"},"outputSchema":{"type":"object"},"questions":{"type":"array","items":{"type":"object"}},"dimensions":{"type":"array","items":{"type":"object"}},"output":{"type":"object"}}}}}}}}},"/api/v1/capabilities":{"get":{"operationId":"getCapabilities","tags":["Discovery"],"summary":"Get current interface and evidence status","responses":{"200":{"description":"Capabilities, versions, permissions, invocation URLs, DSN and telemetry status.","content":{"application/json":{"schema":{"type":"object","required":["name","rulesetVersion","interfaces","permissions","telemetry"],"additionalProperties":true}}}}}}},"/capability-manifest.json":{"get":{"operationId":"getCapabilityManifest","tags":["Discovery"],"summary":"Get DSN-compatible capability manifest","responses":{"200":{"description":"Manifest with human, REST, MCP and conditional WebMCP declarations.","content":{"application/json":{"schema":{"type":"object","required":["name","organization","humanUrl","restApi","remoteMcp","webmcp"],"additionalProperties":true}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","tags":["Discovery"],"summary":"Get this OpenAPI 3.1 document","responses":{"200":{"description":"OpenAPI 3.1 specification.","content":{"application/json":{"schema":{"type":"object","required":["openapi","info","paths"],"additionalProperties":true}}}}}}},"/api/v1/plan-email":{"get":{"operationId":"getPlanEmailAvailability","tags":["Plan email"],"summary":"Check whether plan delivery is available","responses":{"200":{"description":"Availability only; no recipient data.","content":{"application/json":{"schema":{"type":"object","required":["available","updatesAvailable"],"properties":{"available":{"type":"boolean"},"updatesAvailable":{"const":false}},"additionalProperties":false}}}}}},"post":{"operationId":"emailCompletedPlan","tags":["Plan email"],"summary":"Explicitly request delivery of a completed plan","description":"Consequential operation: sends a transactional email through Resend. Only use after the user has received their free result and explicitly asks for a copy to their own address. No marketing subscription is created. Email, optional first name, plan and optional offer label are passed to Resend, not DSN telemetry. No contact details in query strings. Application recomputes the assessment. Max body 16 KiB. Burst limit 5/minute per isolate and aggregate delivery budget 30/hour. Reuse requestId for the same intended provider operation; retries still consume application budget.","parameters":[{"name":"Origin","in":"header","required":true,"description":"The browser sends the site origin. This is an origin check, not authentication.","schema":{"type":"string","const":"https://decisioneconomyinstitute.com"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanEmailInput"}}}},"responses":{"202":{"description":"Provider accepted the request; this does not confirm inbox delivery.","content":{"application/json":{"schema":{"type":"object","required":["status","deliveryConfirmed"],"properties":{"status":{"const":"accepted"},"deliveryConfirmed":{"const":false}},"additionalProperties":false}}}},"400":{"description":"Invalid request or prohibited query string.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Required site origin missing or disallowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds 16 KiB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported media type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Delivery budget or burst limit exhausted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Service error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Provider failure or acceptance could not be confirmed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Delivery is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/telemetry":{"post":{"operationId":"reportBrowserAction","tags":["Telemetry"],"summary":"First-party browser reporting boundary","description":"Site integration endpoint, not an assessment tool. Only fixed event/action labels are accepted. No raw answers, email, name, URL, session replay, or arbitrary metadata. Always returns 204, including when invalid, disabled or reporting fails. A 204 is not ingestion proof. Do not fabricate human activity from agent calls.","parameters":[{"name":"Origin","in":"header","required":true,"description":"The browser sends the site origin. This is an origin check, not authentication.","schema":{"type":"string","const":"https://decisioneconomyinstitute.com"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserEvent"}}}},"responses":{"204":{"description":"No content; acceptance and receipt intentionally not disclosed."}}}},"/api/mcp":{"post":{"operationId":"mcpJsonRpc","tags":["MCP"],"summary":"Stateless Streamable HTTP MCP endpoint","description":"JSON-RPC 2.0, MCP protocol 2025-11-25. Methods: initialize, ping, tools/list, tools/call. Tool: assess_decision_economy_readiness; arguments use AssessmentInput and structuredContent uses AssessmentResult. Notifications initialized/cancelled receive 202. Other protocol/parameter errors may be JSON-RPC errors inside HTTP 200. Invalid tool input is result.isError=true. GET/SSE streams and DELETE sessions are not supported. Supply Accept: application/json, text/event-stream; this implementation returns JSON. Site-origin restrictions apply when Origin is present. No raw answers in telemetry.","parameters":[{"name":"MCP-Protocol-Version","in":"header","schema":{"type":"string","const":"2025-11-25"},"required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpRequest"},"example":{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"assess_decision_economy_readiness","arguments":{"rulesetVersion":"de-readiness-1.0.0","answers":{}}}}}}},"responses":{"200":{"description":"JSON-RPC result or error envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}}}},"202":{"description":"Recognized notification acknowledged; no body."},"400":{"description":"Invalid protocol/header/request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}}}},"403":{"description":"Origin not permitted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}}}},"406":{"description":"Accept must include both application/json and text/event-stream.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}}}},"413":{"description":"Body exceeds 16 KiB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}}}},"415":{"description":"Unsupported media type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}}}},"429":{"description":"Shared request rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-required-accept":"application/json, text/event-stream"}}},"components":{"schemas":{"AssessmentInput":{"type":"object","additionalProperties":false,"required":["rulesetVersion","answers"],"properties":{"rulesetVersion":{"type":"string","const":"de-readiness-1.0.0"},"answers":{"type":"object","additionalProperties":false,"properties":{"U1":{"type":"string","enum":["2","1","0","NS","SK"],"description":"On the page customers are most likely to find, how clearly do you explain what you do and who it is for?"},"U2":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Can customers see the practical limits of your offer—such as service area, customer type, job size, or situations you do not handle?"},"U3":{"type":"string","enum":["2","1","0","NS","SK"],"description":"When did you last compare your main public page with the listings or profiles customers actually use?"},"U4":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Before contacting you, can customers understand what they may need to pay or commit—and what changes that?"},"E1":{"type":"string","enum":["2","1","0","0H","NS","SK"],"description":"For the important claims you make about this offer, can you point to specific support?"},"E2":{"type":"string","enum":["2","1","0","NA","NS","SK"],"description":"For qualifications you claim or need for this work, can a customer find who issued them and how to check their current status?"},"E3":{"type":"string","enum":["2","1","0","NS","SK"],"description":"How do you keep the evidence behind important claims current?"},"E4":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Do you show examples that help customers understand your work without making one person's result sound guaranteed?"},"F1":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Can you name one important choice customers repeatedly need help making before they work with you?"},"F2":{"type":"string","enum":["2I","2G","1I","1G","0","NS","SK"],"description":"What can a customer use to work through that choice before a sales conversation?"},"F3":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Does your decision help explain which circumstances could lead someone to a different option?"},"F4":{"type":"string","enum":["2","1","0","NS","SK"],"description":"When your resource gives an answer, score, or suggested path, does it explain why and what the customer should verify?"},"A1":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Can a new customer reach your essential offer information without creating an account, paying, or contacting you first?"},"A2":{"type":"string","enum":["2","1","0","NS","SK"],"description":"What checks have you made that customers can read and use the main page and help on a phone and without relying only on a mouse?"},"A3":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Is the information needed to understand your offer available as readable page text, rather than only inside pictures, scanned files, or video?"},"A4":{"type":"string","enum":["2","1","0","NS","SK","NA"],"description":"Has someone demonstrated that an AI assistant can use your interactive tool and return a correct, useful result?"},"T1":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Do you clearly explain what your offer or decision help cannot determine or promise?"},"T2":{"type":"string","enum":["2","1","0","NS","SK"],"description":"What happens when waiting, choosing another approach, or speaking with another professional would better fit the customer's situation?"},"T3":{"type":"string","enum":["2","1","0","0H","NS","SK"],"description":"If your recommendations promote your own offer or bring you sponsorship, referral, or affiliate income, is that clear to the customer?"},"T4":{"type":"string","enum":["2","1","0","0H","NS","SK"],"description":"When someone uses your decision help, how do you handle the information you ask them to provide?"},"C1":{"type":"string","enum":["2","1","0","NS","SK"],"description":"After someone understands your offer or finishes your decision help, is the appropriate next step clear?"},"C2":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Have you recently tested the route a customer would use to take that step?"},"C3":{"type":"string","enum":["2","1","0","0H","NS","SK"],"description":"Before a customer is charged, booked, enrolled, or committed to something, how do they confirm what they are agreeing to?"},"C4":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Can customers tell what happens after their request and whether availability or response time still needs confirmation?"},"M1":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Can you distinguish someone viewing your information from completing the useful next step?"},"M2":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Do you collect feedback or observations about whether your help made the customer's decision clearer?"},"M3":{"type":"string","enum":["2","1","0","NS","SK"],"description":"Have you kept repeatable records of how AI responds to the customer questions you care about?"}}},"clarifications":{"type":"object","additionalProperties":false,"properties":{"resource":{"type":"string","enum":["different","unsure"]},"public_path":{"type":"string","enum":["different","unsure"]},"claim":{"type":"string","enum":["different","same","unsure"]}}}}},"AssessmentResult":{"type":"object","required":["rulesetVersion","apiVersion","generatedAt","evidenceScope","completeness","knownAnswers","disclaimer","actions","profiles","risks","findings","strengths","gaps","unknowns","scopeQualifications","clarificationsNeeded","applicability","blockedActions","selectionTrace","summary"],"properties":{"rulesetVersion":{"const":"de-readiness-1.0.0"},"apiVersion":{"const":"1"},"generatedAt":{"type":"string","format":"date-time"},"evidenceScope":{"const":"BY YOUR ACCOUNT"},"completeness":{"enum":["Preliminary picture","Full seven-dimension orientation"]},"knownAnswers":{"type":"integer","minimum":0,"maximum":27},"disclaimer":{"type":"string"},"actions":{"type":"array","minItems":3,"maxItems":3,"items":{"type":"object","required":["id","title","kind","questionIds","finding","reason","firstTask","done","effort","evidenceScope"],"properties":{"id":{"type":"string","pattern":"^(AC[0-2][0-9]|V0[1-5])$"},"title":{"type":"string"},"kind":{"enum":["Reported risk","Check","Repair","Validation or maintenance"]},"questionIds":{"type":"array","items":{"type":"string"}},"finding":{"type":"string"},"reason":{"type":"string"},"firstTask":{"type":"string"},"afterCheck":{"type":"string"},"done":{"type":"string"},"effort":{"type":"string"},"evidenceScope":{"const":"BY YOUR ACCOUNT"},"flags":{"type":"array","items":{"type":"string"}}}}},"profiles":{"type":"array","minItems":7,"maxItems":7,"items":{"type":"object","required":["name","status","evidenceScope","why","applicable","known","counts","exclusions","foundationGap","questionIds"],"properties":{"name":{"enum":["Understandable","Evidence-Rich","Useful","Accessible","Trustworthy","Actionable","Measurable"]},"status":{"enum":["Needs checking","Needs attention","Partly in place","In place by your account"]},"evidenceScope":{"const":"BY YOUR ACCOUNT"},"why":{"type":"string"},"applicable":{"type":"integer","minimum":0},"known":{"type":"integer","minimum":0},"counts":{"type":"object","required":["inPlace","partlyInPlace","absent","unknown"],"properties":{"inPlace":{"type":"integer","minimum":0},"partlyInPlace":{"type":"integer","minimum":0},"absent":{"type":"integer","minimum":0},"unknown":{"type":"integer","minimum":0}},"additionalProperties":false},"exclusions":{"type":"array","items":{"type":"string"}},"foundationGap":{"type":["string","null"]},"questionIds":{"type":"array","items":{"type":"string"}}}}},"risks":{"type":"array","items":{"type":"object","required":["questionId","practice","note"],"properties":{"questionId":{"enum":["E1","T3","T4","C3"]},"practice":{"type":"string"},"note":{"type":"string"}}}},"findings":{"type":"array","minItems":27,"maxItems":27,"items":{"$ref":"#/components/schemas/AssessmentResult/$defs/finding"}},"strengths":{"type":"array","maxItems":3,"items":{"$ref":"#/components/schemas/AssessmentResult/$defs/finding"}},"gaps":{"type":"array","items":{"$ref":"#/components/schemas/AssessmentResult/$defs/finding"}},"unknowns":{"type":"array","items":{"$ref":"#/components/schemas/AssessmentResult/$defs/finding"}},"scopeQualifications":{"type":"array","items":{"type":"object","required":["id","questionIds","note"],"properties":{"id":{"type":"string"},"questionIds":{"type":"array","items":{"type":"string"}},"note":{"type":"string"}}}},"clarificationsNeeded":{"type":"array","items":{"type":"object","required":["id","ids","question"],"properties":{"id":{"type":"string"},"ids":{"type":"array","items":{"type":"string"}},"question":{"type":"string"}}}},"applicability":{"type":"object","required":["A4","E2"],"properties":{"A4":{"enum":["unresolved","applicable","excluded"]},"E2":{"enum":["applicable","excluded"]}}},"inactiveAnswerHistory":{"type":["object","null"],"properties":{"A4":{"type":"string"}}},"blockedActions":{"type":"array","items":{"type":"object","required":["id","title","unmetPrerequisites","note"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"unmetPrerequisites":{"type":"array","items":{"type":"string"}},"note":{"type":"string"}}}},"selectionTrace":{"type":"array","items":{"type":"object","required":["id","questionIds","eligible","tier","severity","dependencyReach","decisionValue","evidenceBasis","effort","selected"],"properties":{"id":{"type":"string"},"questionIds":{"type":"array","items":{"type":"string"}},"eligible":{"type":"boolean"},"tier":{"type":"integer","minimum":0,"maximum":5},"severity":{"type":"integer","minimum":0},"dependencyReach":{"type":"integer","minimum":0},"decisionValue":{"type":"integer","minimum":0},"evidenceBasis":{"type":"integer","minimum":0},"effort":{"type":"integer","minimum":0},"selected":{"type":"boolean"}}}},"summary":{"type":"string"}},"$defs":{"finding":{"type":"object","required":["questionId","title","question","answerLabel","state","condition","why","verificationOpportunity"],"properties":{"questionId":{"type":"string"},"title":{"type":"string"},"question":{"type":"string"},"answerLabel":{"type":"string"},"state":{"enum":["reported","not_sure","skipped","disputed","unresolved_applicability","not_applicable"]},"condition":{"enum":["In place","Partly in place","Absent","Unknown","Excluded"]},"why":{"type":"string"},"verificationOpportunity":{"type":"string"}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"type":"string"}}}},"supportedRulesetVersion":{"type":"string"}}},"PlanEmailInput":{"type":"object","additionalProperties":false,"required":["email","generatedAt","requestId","assessment"],"properties":{"email":{"type":"string","format":"email","maxLength":254},"firstName":{"type":"string","maxLength":60,"pattern":"^[^\\r\\n<>]*$","default":""},"scope":{"type":"string","maxLength":80,"default":"","description":"Optional offer label; omitted from telemetry."},"generatedAt":{"type":"string","format":"date-time"},"requestId":{"type":"string","format":"uuid"},"assessment":{"$ref":"#/components/schemas/AssessmentInput"}}},"BrowserEvent":{"type":"object","additionalProperties":false,"required":["eventName"],"properties":{"eventName":{"enum":["dsa_view","assessment_start","assessment_complete","cta_click","lead_start","lead_complete","webmcp_tool_call","webmcp_tool_complete"]},"success":{"type":"boolean"},"action":{"enum":["plan_email_request","self_help","deeper_check","implementation_help","plan_export"]}}},"McpRequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number","null"]},"method":{"type":"string"},"params":{"type":"object"}}},"McpResponse":{"type":"object","required":["jsonrpc","id"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number","null"]},"result":{"type":"object"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{}}}},"oneOf":[{"required":["result"]},{"required":["error"]}]}}}}