{"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":["compare-communities","assess-workforce-demand"]},{"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"]}]}