{"schemaVersion":"1.0.0","id":"https://veilpoint.ca/api/v1/actions","name":"VeilPoint OEX action catalog","purpose":"Outcome-first entry points that tell an assistant when to use OEX, what input is needed, exactly how to invoke the existing capability, and what can logically be done next.","selectionRule":"Match the user intent to one action, satisfy any resolveFirst prerequisite, invoke the listed REST or MCP operation, read its evidence and limitations, then offer only listed or result-supported next actions.","authorityRule":"This catalog grants no authority and widens no capability. The underlying endpoint or MCP tool remains the executable and authorization contract.","actions":[{"id":"check-business-health","label":"Check my business","whenToUse":"Use when a person wants to know what is missing, inconsistent or improvable in how a business appears in public data and on its own website.","access":"keyless, no account, nothing stored","needs":["business name","website recommended"],"execution":{"rest":{"method":"GET","endpoint":"/api/v1/business-health","example":"/api/v1/business-health?name=Your+Business&website=yourdomain.ca"},"mcp":{"tool":"check_business_health"}},"boundaries":["The public check assesses details supplied in the request and stores nothing.","A check that could not run is unable-to-verify, never a pass.","The report is not a numeric score and does not assert ownership or authority over the business."],"nextActions":["study-business","check-procurement-relevance"]},{"id":"study-business","label":"Study my business","whenToUse":"Use when the user wants a deeper business analysis that connects Business Health with expected-but-missing evidence, website-to-record fractures and the highest-leverage next change.","access":"keyless GET for supplied real-business details; MCP study is sandbox-gated","needs":["business name","website strongly recommended","objective optional"],"execution":{"rest":{"method":"GET","endpoint":"/api/v1/business-study","example":"/api/v1/business-study?name=Your+Business&website=yourdomain.ca&objective=what+you+are+trying+to+do"},"mcp":{"tool":"run_business_study","note":"The MCP tool operates on synthetic sandbox subjects. Use the REST GET above for a real business described in the request."}},"boundaries":["Every conclusion must cite the evidence beneath it; conclusions without evidence are withheld.","Unknown evidence is not converted to zero or absence.","Changing what OEX publishes requires the separate human claim/authority flow."],"nextActions":["check-business-health","investigate-economic-question"]},{"id":"investigate-economic-question","label":"Investigate an economic question","whenToUse":"Use for an open-ended question spanning businesses, places, workforce, procurement, demand, supply or economic relationships.","access":"keyless, no account, request-scoped and not stored","needs":["natural-language question"],"execution":{"rest":{"method":"POST","endpoint":"/api/v1/investigate","example":"/api/v1/investigate","bodyExample":"{ \"question\": \"What is changing in this regional economy?\" }"},"mcp":{"tool":"investigate_economic_question"}},"boundaries":["OEX plans and retrieves governed evidence deterministically; prose synthesis remains with the calling assistant.","Read the returned limitations, evidence metadata and citations before synthesizing an answer.","The operation does not infer unavailable facts or turn compatibility into a relationship claim."],"nextActions":["inspect-knowledge-frontier","compare-communities","assess-workforce-demand"]},{"id":"inspect-knowledge-frontier","label":"See what OEX has not resolved, and what to ask next","whenToUse":"Use when the user needs to know the limits of what OEX can currently establish about a subject — what it asked, what it could not conclude, why, and which registered question logically follows.","access":"keyless, no account, no governed-state writes; standard request telemetry applies","needs":["a canonical subject identifier, such as a municipality slug"],"resolveFirst":"/api/v1/entities/resolve?q=Warman&type=municipality","execution":{"rest":{"method":"GET","endpoint":"/api/v1/frontier","example":"/api/v1/frontier?subjectKind=municipality&subjectId=warman"},"mcp":{"tool":"inspect_knowledge_frontier"}},"boundaries":["Every field is a typed governed value or a fixed catalogue constant; nothing is derived from prose and no model is invoked.","Not a task list. There are no identifiers to act on, no ordering that implies priority, and OEX accepts no report that a dependency was addressed.","A dependency is named only where every instance of its scope kind is public by nature; an empty list is never evidence that none exist.","A subject with no projected resolution has no registered inquiry type asking about its kind — a statement about the question catalogue, never about the subject."],"nextActions":["investigate-economic-question","compare-communities"]},{"id":"compare-communities","label":"Compare places","whenToUse":"Use when the user wants the same economic facts compared across two to ten communities rather than separate unaligned profiles.","access":"keyless, no account","needs":["two to ten community names, slugs or SGC identifiers"],"resolveFirst":"/api/v1/entities/resolve?q=Swift+Current&type=municipality","execution":{"rest":{"method":"GET","endpoint":"/api/v1/graph/municipalities/compare","example":"/api/v1/graph/municipalities/compare?entity=swift-current&entity=saskatoon"},"mcp":{"tool":"compare_communities"}},"boundaries":["OEX only compares a metric when units and reference periods are comparable.","Missing data remains missing and is not ranked as zero.","Community evidence-tier letters and per-record confidence letters are different scales."],"nextActions":["investigate-economic-question","assess-workforce-demand"]},{"id":"find-potential-suppliers","label":"Find possible suppliers","whenToUse":"Use when a business has published categories it buys and the user wants businesses whose published supply categories correspond to them.","access":"keyless over published business capability data","needs":["canonical OEX business id"],"resolveFirst":"/api/v1/entities/resolve?q=Business+Name&type=business","execution":{"rest":{"method":"GET","endpoint":"/api/v1/businesses/suppliers","example":"/api/v1/businesses/suppliers?businessId=business:canonical-id"},"mcp":{"tool":"find_potential_suppliers"}},"boundaries":["A match means potential category compatibility only.","Neither business is asserted to know, use or have transacted with the other.","Withheld categories are excluded and industry similarity is not used as a substitute."],"nextActions":["find-potential-customers","check-procurement-relevance"]},{"id":"find-potential-customers","label":"Find possible customers","whenToUse":"Use when a business has published supply categories and the user wants businesses whose published needs correspond to them.","access":"keyless over published business capability data","needs":["canonical OEX business id"],"resolveFirst":"/api/v1/entities/resolve?q=Business+Name&type=business","execution":{"rest":{"method":"GET","endpoint":"/api/v1/businesses/customers","example":"/api/v1/businesses/customers?businessId=business:canonical-id"},"mcp":{"tool":"find_potential_customers"}},"boundaries":["A match means potential category compatibility only, not expressed buyer interest.","No customer relationship, transaction or awareness is asserted.","Withheld categories cannot produce a match."],"nextActions":["find-potential-suppliers","check-procurement-relevance"]},{"id":"check-procurement-relevance","label":"Check procurement relevance","whenToUse":"Use when the user wants to know whether categories a business publicly supplies overlap categories appearing in public procurement notices.","access":"keyless over published business capability and public procurement evidence","needs":["canonical OEX business id"],"resolveFirst":"/api/v1/entities/resolve?q=Business+Name&type=business","execution":{"rest":{"method":"GET","endpoint":"/api/v1/businesses/procurement-relevance","example":"/api/v1/businesses/procurement-relevance?businessId=business:canonical-id&limit=25"},"mcp":{"tool":"assess_procurement_relevance"}},"boundaries":["Category overlap is not qualification, eligibility, competitiveness or likelihood of award.","A public notice is not evidence of spending, award or supplier relationship.","Only categories the business publishes can participate in the comparison."],"nextActions":["check-business-health","find-potential-suppliers"]},{"id":"assess-workforce-demand","label":"Assess workforce demand","whenToUse":"Use when the user asks what labour demand is visible, which occupations or sectors are active, or how different demand measures should be interpreted.","access":"keyless, no account","needs":[],"execution":{"rest":{"method":"GET","endpoint":"/api/v1/labour-demand","example":"/api/v1/labour-demand"},"mcp":{"tool":"get_labour_demand"}},"boundaries":["Advertised openings, statistical vacancies, live listings and modelled allocations remain distinct measures.","Advertisement counts are not counts of people needed or unfilled positions unless the source explicitly says so.","A labour-shortage claim requires supply-side evidence that demand evidence alone does not establish."],"nextActions":["compare-communities","investigate-economic-question"]}]}