{"meta":{"platform":"VeilPoint Opportunity Exchange","canonical":"https://veilpoint.ca/api/v1/catalog","retrievedAt":"2026-11-11T07:11:10.727Z","dataStatus":"Factual metadata: this catalogue documents public datasets, identifiers, relationships, methodologies, endpoints, and versioning contracts.","evidence":{"status":"published","truthState":"metadata","scenarioType":"platform_metadata","recordType":"metadata","isActionable":false,"synthetic":false,"confidence":null,"sourceKinds":[],"asOf":null,"qualification":"Factual self-description of the platform, current as served.","assumptions":[]},"citeAs":"VeilPoint Opportunity Exchange, \"Public data and agent contract\", https://veilpoint.ca/api/v1/catalog, retrieved 2026-11-11."},"data":{"apiVersion":"v1","catalogVersion":"1.18.0","identity":"VeilPoint Opportunity Exchange is economic-intelligence infrastructure for businesses, places, industries, workforce, demand and supply, with governed public evidence, a structured economic graph, and AI-ready access. It connects municipal economies, industries, businesses, workforce demand, wages, housing, trade, facilities, training and emerging activity; job postings are analyzed as labour-demand evidence rather than marketplace inventory. The model is geographically extensible; Saskatchewan is the current evidence footprint, alongside national occupational, wage, vacancy and housing reference data.","updateContract":"meta.retrievedAt is the response time; dataset observation and verification dates live in record provenance and /api/v1/sources. ETags change only when data changes.","crossLinkContract":{"version":"1.0.0","field":"links[]","rule":"Every first-class entity emits typed links to the related entities it can support. Reciprocal links are published when the inverse relationship is materialized; unresolved or merely possible relationships are never promoted to links.","target":"target.type + target.id + target.scheme form the stable entity or query-set reference.","navigation":"href is the human route when one exists; api is the machine route when one exists.","strengths":{"direct":"Explicit identity or source relationship.","mapped":"Relationship produced by a governed classification or identifier mapping.","derived":"Relationship produced by a declared computation or query."}},"identifiers":[{"entity":"occupation","primary":"noc","scheme":"NOC 2021 v1.0 unit-group code","localAlias":"id"},{"entity":"municipality","primary":"sgcCode","scheme":"Statistics Canada SGC 2021 census-subdivision code","localAlias":"id"},{"entity":"naics-industry","primary":"code","scheme":"NAICS 2022 sector code","localAlias":null},{"entity":"sector","primary":"id","scheme":"OEX stable sector-group identifier"},{"entity":"job-posting","primary":"id","scheme":"Source-stable hiring-activity observation identifier; recordPurpose=hiring_activity_evidence and isActionable=false"},{"entity":"business","primary":"id","scheme":"Provider or registry-stable business identifier"},{"entity":"organization","primary":"id","scheme":"Official-source or registry-stable organization identifier"},{"entity":"industry","primary":"naics2022","scheme":"NAICS 2022 classification code"},{"entity":"geography","primary":"code","scheme":"Statistics Canada SGC 2021 province code","localAlias":"name"},{"entity":"region","primary":"code","scheme":"Published geographic code where available; normalized source label otherwise"},{"entity":"procurement-notice","primary":"id","scheme":"Source-stable CanadaBuys notice identifier"},{"entity":"product-or-service","primary":"code","scheme":"UNSPSC","localAlias":"label"},{"entity":"procurement-award","primary":"id","scheme":"Source-stable award event identifier"},{"entity":"project","primary":"id","scheme":"Source-stable project event identifier"},{"entity":"employment-event","primary":"id","scheme":"Provider-stable hiring or employment observation identifier"},{"entity":"community-outcome","primary":"id","scheme":"Provider-stable measured outcome identifier"},{"entity":"training-program","primary":"id","scheme":"Provider-stable training-program identifier"},{"entity":"industrial-facility","primary":"id","scheme":"sk-industrial-mining-facilities-id","localAlias":"sourceObjectId"},{"entity":"data-source","primary":"id","scheme":"OEX governed upstream source-register identifier"},{"entity":"data-provider","primary":"id","scheme":"OEX runtime provider identifier"},{"entity":"source-release","primary":"id","scheme":"Registered-source id plus checked artifact name"},{"entity":"rental-market-centre","primary":"cmhcCode","scheme":"CMHC/StatCan geography code (CMA, CA, CSD, or provincial part — see geoLevel)"},{"entity":"open-source-signal","primary":"id","scheme":"OEX source-stable event identifier","localAlias":"contentFingerprint"}],"datasets":[{"id":"occupations","entity":"occupation","html":"/role/{id}","markdown":"/roles.md","endpoint":"/api/v1/roles","bulk":"/data/occupations.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Occupation catalogue","description":"Saskatchewan roles, NOC codes, wages, requirements and pathways.","mcpTools":["list_roles","get_role","compare_roles"]},{"id":"noc-2021","entity":"noc-unit-group","markdown":"/noc.md","endpoint":"/api/v1/noc","bulk":"/data/noc.json","includeInLlmsStart":true,"title":"NOC 2021","description":"All 516 Canadian occupational unit groups with bilingual titles and TEER.","mcpTools":["list_noc_groups"]},{"id":"municipalities","entity":"municipality","html":"/directory","markdown":"/directory.md","endpoint":"/api/v1/municipalities","bulk":"/data/municipalities.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Communities","description":"Saskatchewan municipality profiles, identifiers and business directories.","mcpTools":["get_community_profile","compare_communities"]},{"id":"agent-knowledge-graph","entity":"knowledge-graph-record","endpoint":"/api/v1/graph/query","includeInLlmsStart":true,"title":"Agent knowledge graph","description":"Canonical entity resolution plus bounded fact and relationship traversal with truth state, confidence, period and provenance filters.","mcpTools":["investigate_economic_question","resolve_entity","get_entity","search_entities","query_knowledge_graph","get_knowledge_graph_status","compare_communities","traverse_relationships","find_connected_entities","check_comparability"]},{"id":"governed-knowledge-frontier","entity":"municipality","endpoint":"/api/v1/frontier","includeInLlmsStart":true,"title":"Governed knowledge frontier","description":"For one subject: the registered questions OEX asked, what it could not conclude and why, the governed dependency in the way where naming it is safe, what class of evidence would resolve it, and which registered question follows. Typed governed values and fixed catalogue constants only.","mcpTools":["inspect_knowledge_frontier"]},{"id":"citation-layer","entity":"knowledge-citation","endpoint":"/api/v1/citations/{citationId}","title":"OEX citation layer","description":"Stable machine resolution from a public graph assertion id to its canonical entities, source, observation time, truth state, confidence, publication scope, methodology and provenance.","mcpTools":["resolve_citation"]},{"id":"sectors","entity":"sector","html":"/sectors","markdown":"/sectors.md","endpoint":"/api/v1/sectors","bulk":"/data/sectors.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Sectors","description":"Sector rollups derived from occupations and provider-qualified hiring records; response evidence identifies the current truth state.","mcpTools":["list_sectors","get_sector"]},{"id":"hiring-activity","entity":"job-posting-evidence","html":"/labour-demand","markdown":"/labour-demand.md","endpoint":"/api/v1/jobs","bulk":"/data/jobs.json","includeInLlmsStart":true,"title":"Hiring activity evidence","description":"Source-attributed records with recordPurpose=hiring_activity_evidence, observation and verification dates, provenance, and isActionable=false. OEX does not host applications or other hiring transactions.","sourceId":"jobs","mcpTools":["search_hiring_activity"]},{"id":"advertised-demand","entity":"job-demand-observation","bulk":"/data/advertised-demand.json","title":"Measured advertised demand","description":"Monthly Job Bank aggregate evidence; real and measured, but neither current nor actionable.","sourceId":"job-demand"},{"id":"labour-demand-engine","entity":"labour-demand-variable","html":"/labour-demand","endpoint":"/api/v1/labour-demand","includeInLlmsStart":true,"title":"Labour-demand variables","description":"Observed SaskJobs opening marginals, Job Bank detail distributions, modelled sector variables and a GDP composition sensitivity scenario with low-opening sector tilts suppressed and unvalidated parameters identified.","mcpTools":["get_labour_demand"]},{"id":"occupational-profiles","entity":"occupational-profile","bulk":"/data/occupational-profiles.json","title":"Occupational profiles","description":"Published OaSIS skills, abilities, work activities and requirements on the NOC spine.","sourceId":"occupational-profiles"},{"id":"licensed-businesses","entity":"business","html":"/directory/{id}","markdown":"/directory/saskatoon.md","endpoint":"/api/v1/municipalities/saskatoon/businesses","includeInLlmsStart":true,"title":"Licensed businesses","description":"Named businesses holding a municipal licence on the snapshot reference date, with NAICS subsector and commercial address. Existence and industry only — never hiring, size or ownership. Home-based licences carry no address.","sourceId":"city-saskatoon-business-licences-2025","mcpTools":["search_businesses","get_business_evidence"]},{"id":"industrial-facilities","entity":"industrial-facility","html":"/facilities","markdown":"/facilities.md","endpoint":"/api/v1/graph/query?type=industrial-facility","includeInLlmsStart":true,"title":"Industrial and mining facilities","description":"Named Saskatchewan industrial and mining sites with operator, sector, type, region and coordinates. Records roster membership, not current operating, permitting, production or hiring status.","sourceId":"sk-industrial-mining-facilities","mcpTools":["query_knowledge_graph"]},{"id":"business-counts","entity":"business-count-observation","bulk":"/data/business-counts.json","title":"Community business counts","description":"Statistics Canada businesses-with-employees aggregates by geography and industry.","sourceId":"business-counts"},{"id":"cost-baskets","entity":"cost-basket-observation","bulk":"/data/cost-baskets.json","title":"Market Basket Measure costs","description":"Published Saskatchewan MBM regional components and household totals.","sourceId":"cost-baskets"},{"id":"housing-evidence","entity":"housing-evidence-observation","bulk":"/data/housing-evidence.json","title":"Housing evidence","description":"Published housing value and supply observations used by community analysis.","sourceId":"housing-evidence"},{"id":"occupational-outlook","entity":"occupational-outlook-observation","bulk":"/data/occupational-outlook.json","title":"Occupational outlook","description":"COPS 2024–2033 projections by NOC, explicitly published as Canada-wide context rather than Saskatchewan forecasts.","sourceId":"occupational-outlook"},{"id":"education-pipeline","entity":"education-pipeline-observation","bulk":"/data/education-pipeline.json","title":"Education and apprenticeship pipeline","description":"Statistics Canada Saskatchewan enrolment, graduate and trade-certification aggregates; not seats or available workers.","sourceId":"education-pipeline"},{"id":"training-pathways","entity":"training-pathway-evidence","bulk":"/data/training-pathways.json","title":"Training pathways and crosswalks","description":"Published OaSIS requirements plus transparent empirical NOC–CIP and reviewed Saskatchewan trade links; not seats or eligibility rules.","sourceId":"training-pathways"},{"id":"procurement-activity","entity":"procurement-observation","endpoint":"/api/v1/procurement","includeInLlmsStart":true,"title":"Procurement activity evidence","description":"Official CanadaBuys buyer, notice, UNSPSC product/service, geography, lifecycle, amendment, and provenance observations. Current and historical records are non-actionable and do not imply supplier fit or award.","sourceId":"open-source-signals","mcpTools":["inspect_procurement_activity"]},{"id":"procurement-relevance","entity":"business","endpoint":"/api/v1/businesses/procurement-relevance","title":"Business procurement relevance","description":"Category overlap between the supply categories a business has published and the categories official buyers request. Compatibility only: it establishes no qualification, eligibility, supplier relationship, competitiveness, or likelihood of award.","sourceId":"open-source-signals","mcpTools":["assess_procurement_relevance"]},{"id":"workforce-demand","entity":"occupation","endpoint":"/api/v1/workforce-demand","title":"Workforce demand, credentials and training routes","description":"Occupational demand, credential demand, training availability and a constraint indicator, reported separately. Never combined into a shortage claim: that needs a credential-holder denominator OEX does not hold.","sourceId":"oasis-2025","mcpTools":["assess_workforce_demand"]},{"id":"supplier-compatibility","entity":"business","endpoint":"/api/v1/businesses/suppliers","title":"Potential supplier compatibility","description":"Businesses whose published supply categories match what another business has published as things it buys. Compatibility between two published statements: no relationship is asserted, and nothing is matched on industry.","sourceId":"oex-business-participation","mcpTools":["find_potential_suppliers"]},{"id":"customer-compatibility","entity":"business","endpoint":"/api/v1/businesses/customers","title":"Potential customer compatibility","description":"Businesses whose published purchasing categories match what another business says it can supply. Not a customer list: a business appearing in it has expressed no interest in anything.","sourceId":"oex-business-participation","mcpTools":["find_potential_customers"]},{"id":"open-source-signals","entity":"open-source-signal","html":"/signals","markdown":"/signals.md","endpoint":"/api/v1/signals","bulk":"/data/signals.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Economic signals (OSINT)","description":"Governed official-source signal lifecycle; non-actionable and excluded from rankings.","sourceId":"open-source-signals","mcpTools":["list_economic_signals","get_economic_signal"]},{"id":"housing","entity":"municipal-housing-market","html":"/real-estate","markdown":"/real-estate.md","endpoint":"/api/v1/real-estate","bulk":"/data/real-estate.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Housing","description":"Community housing views and the own-versus-rent model.","mcpTools":["get_real_estate"]},{"id":"economy","entity":"community-gdp-estimate","html":"/economy","markdown":"/economy.md","endpoint":"/api/v1/economy","bulk":"/data/economy.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Saskatchewan economy and community GDP","description":"Official provincial headline indicators plus modeled community GDP reconciled to official Saskatchewan sector totals.","mcpTools":["get_economy_overview","get_municipality_evidence_coverage","get_community_economy"]},{"id":"trade","entity":"provincial-trade-flow","html":"/trade","markdown":"/trade.md","endpoint":"/api/v1/trade","bulk":"/data/trade.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Trade","description":"Published Saskatchewan merchandise exports; restricted grain detail excluded.","mcpTools":["get_trade_overview"]},{"id":"wages","entity":"wage-observation","html":"/wages","markdown":"/wages.md","endpoint":"/api/v1/wages","bulk":"/data/wages.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Wages and measured vacancies","description":"LFS wages and JVWS measured vacancy estimates on the NOC spine.","mcpTools":["get_wage_evidence"]},{"id":"rents","entity":"rental-market-centre","html":"/rents","markdown":"/rents.md","endpoint":"/api/v1/rents","bulk":"/data/rents.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Rents","description":"CMHC measured rents and rental vacancy rates by surveyed centre.","mcpTools":["get_rents"]},{"id":"sources","entity":"data-source","html":"/about/data","markdown":"/sources.md","endpoint":"/api/v1/sources","bulk":"/data/sources.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Source registry","description":"Governed upstream publishers, datasets, licences, checked releases and materialization bindings.","mcpTools":["get_data_sources","get_source_provenance","get_evidence","explain_confidence","explain_truth_state"]},{"id":"providers","entity":"data-provider","html":"/about/data","markdown":"/sources.md","endpoint":"/api/v1/providers","bulk":"/data/providers.json","includeInLlmsStart":true,"title":"Provider registry","description":"Runtime delivery contracts separated into evidence, preview, planned, first-party and derived providers.","mcpTools":["get_data_providers"]},{"id":"models","entity":"registered-model","html":"/about/models","markdown":"/models.md","endpoint":"/api/v1/models","bulk":"/data/models.json","includeInLlmsStart":true,"includeInFullCorpus":true,"title":"Derived intelligence model registry","description":"Versioned formulas, inputs, assumptions, sensitivity limits, validation state and prohibited interpretations for published derived outputs."}],"relationships":[{"from":"occupation.noc","to":"noc-unit-group.code","resource":"/api/v1/noc"},{"from":"wage-observation.noc","to":"noc-unit-group.code","resource":"/api/v1/wages?noc={code}"},{"from":"job-posting.occupationId","to":"occupation.id","resource":"/api/v1/jobs"},{"from":"job-posting.municipality","to":"municipality.name|municipality.aliases[]","relationship":"located_in","resource":"/api/v1/jobs","evidenceRule":"Resolve the published location through /api/v1/entities/resolve; a place-name match does not override an available SGC code."},{"from":"occupation.outcomesByCommunity[].municipalityId","to":"municipality.id","resource":"/api/v1/roles/{id}"},{"from":"occupation.trainingPrograms[].id","to":"training-program.id","resource":"/api/v1/roles/{id}"},{"from":"training-program.occupationId","to":"occupation.id","relationship":"trains_for","resource":"/api/v1/roles/{id}"},{"from":"industrial-facility.id","to":"data-source.id","relationship":"sourced_from","resource":"/api/v1/graph/query?type=industrial-facility","evidenceRule":"The source point establishes the published label, type, sector and coordinates only; it does not establish current operating status, legal-company identity, municipality or NAICS."},{"from":"sector.occupations[].id","to":"occupation.id","resource":"/api/v1/sectors/{id}"},{"from":"municipality.businesses[].id","to":"business.id","resource":"/api/v1/municipalities/{id}"},{"from":"economy-community.sgcCode","to":"municipality.sgcCode","relationship":"profile_of","resource":"/api/v1/economy/{code}"},{"from":"municipality.primarySectors[]","to":"sector.id","relationship":"has_primary_sector","resource":"/api/v1/municipalities/{id}","evidenceRule":"Raw source labels require the governed sector mapping; unresolved labels remain aliases rather than edges."},{"from":"procurement-observation.notice.id","to":"procurement-notice.id","relationship":"observes","resource":"/api/v1/procurement","evidenceRule":"The notice remains a dated demand observation after closing; isCurrentlyOpen distinguishes current from historical lifecycle state."},{"from":"procurement-observation.buyer.id","to":"organization.id","relationship":"issued_by","resource":"/api/v1/procurement","evidenceRule":"Source-scoped official buyer identity; no legal-entity merge is inferred."},{"from":"procurement-observation.requestedProductsOrServices[].code","to":"product-or-service.code","relationship":"requests","resource":"/api/v1/procurement","evidenceRule":"Official UNSPSC classification on the notice; not evidence that a business can supply, is eligible for, or won the work."},{"from":"open-source-signal.subjects[entityType=organization].id","to":"organization.id","relationship":"issued_by","resource":"/api/v1/signals","evidenceRule":"Official-source identity only; unresolved identifiers remain null."},{"from":"open-source-signal.geography.code","to":"geography.code","relationship":"located_in","resource":"/api/v1/signals","evidenceRule":"A province or delivery-region edge does not establish a municipality or project site."},{"from":"open-source-signal.naics2022[]","to":"industry.naics2022","relationship":"classified_as_industry","resource":"/api/v1/signals","evidenceRule":"Classification does not establish local business involvement."},{"from":"open-source-signal.graphEdges[relationship=mapped_to_sector].target.id","to":"sector.id","relationship":"mapped_to_sector","resource":"/api/v1/signals","evidenceRule":"The edge remains unresolved until a governed NAICS-to-OEX-sector crosswalk is published."},{"from":"open-source-signal.noc2021[]","to":"noc-unit-group.code","relationship":"associated_with_occupation","resource":"/api/v1/signals","evidenceRule":"Occupational mapping is not evidence that hiring occurred."},{"from":"open-source-signal.corroboratingSignalIds[]","to":"open-source-signal.id","relationship":"corroborated_by","resource":"/api/v1/signals"},{"from":"open-source-signal.graphEdges[relationship=represents_award].target.id","to":"procurement-award.id","relationship":"represents_award","resource":"/api/v1/signals","evidenceRule":"Unresolved until an official award record is linked."},{"from":"open-source-signal.graphEdges[relationship=may_enable_project].target.id","to":"project.id","relationship":"may_enable_project","resource":"/api/v1/signals","evidenceRule":"Proposal or approval evidence does not prove implementation."},{"from":"open-source-signal.graphEdges[relationship=involves_business].target.id","to":"business.id","relationship":"involves_business","resource":"/api/v1/signals","evidenceRule":"Unknown until a participating or awarded business is independently resolved."},{"from":"open-source-signal.graphEdges[relationship=may_influence_hiring].target.id","to":"employment-event.id","relationship":"may_influence_hiring","resource":"/api/v1/signals","evidenceRule":"Unknown until provider-backed hiring evidence is linked."},{"from":"open-source-signal.graphEdges[relationship=may_contribute_to_outcome].target.id","to":"community-outcome.id","relationship":"may_contribute_to_outcome","resource":"/api/v1/signals","evidenceRule":"Unknown until a measured outcome is linked."},{"from":"*.provenance.sources[].name","to":"data-provider.label","resource":"/api/v1/providers"},{"from":"data-provider.provenance.registeredSourceIds[]","to":"data-source.id","relationship":"governed_by","resource":"/api/v1/providers"},{"from":"data-source.materialization.releases[].id","to":"source-release.id","relationship":"materializes","resource":"/api/v1/sources"},{"from":"data-source.materialization.providerIds[]","to":"data-provider.id","relationship":"serves","resource":"/api/v1/sources"}],"methodologies":[{"id":"discretionary-income-v1","resource":"/api/v1/outcomes","description":"Hourly wage to monthly after-tax income, housing, utilities, commuting, and discretionary remainder."},{"id":"pathway-feasibility-v1","resource":"/api/v1/evaluate","description":"Three-state constraint evaluation: meets, does not meet, or needs review."},{"id":"credential-demand-v1","resource":"/api/v1/insights/credential-demand","description":"Provider-qualified hiring-record counts associated with normalized occupational credential requirements."},{"id":"municipal-influence-v1","resource":"/api/admin/demand-intelligence","description":"Authenticated decision actions and linked outcomes aggregated by municipality; operational traffic excluded.","access":"admin"}],"operations":{"liveness":"/api/health","trafficReadiness":"/api/readiness","publicServiceReadiness":"/api/public-service-readiness","publicLaunchStatus":"/api/public-launch-status","legacyPublicLaunchAlias":"/api/ready"},"truthStates":{"preview":"Synthetic demonstration records — structurally realistic, never actionable.","snapshot":"Authoritative data published for a stated reporting period; real, dated, and not real-time.","measured_aggregate":"Statistical survey estimates — measurements of a market, not individual actionable records.","mixed":"Derived from inputs of differing strength; inherits the weakest material input.","live":"Current records from a production-backed provider. Read isActionable separately; live evidence can still be observational and non-transactional.","metadata":"Factual self-description of the platform or its governed contracts."},"evidenceContract":{"reasoningRules":[{"id":"hiring-observation-boundary","appliesTo":["job-posting","posting-evidence","hiring-activity-observation"],"instruction":"Treat hiring records as dated evidence of advertised labour demand. They are not OEX application inventory, proof that a vacancy remains open, or proof that a hire occurred.","prohibitedInferences":["OEX application route","current vacancy without freshness evidence","completed hire"]},{"id":"licensed-business-presence","appliesTo":["licensed-business"],"instruction":"A licensed-business record establishes presence in the authorized municipal snapshot only.","prohibitedInferences":["current operating health","employment","ownership","hiring"]},{"id":"business-verification-scope","appliesTo":["business-verified-field"],"instruction":"A business-verified field was confirmed by the participating business under recorded consent; it does not override a stronger independent measurement when the concepts differ.","prohibitedInferences":["independent measurement","legal-registry status outside the verified field"]},{"id":"do-not-sum-unreconciled-populations","appliesTo":["posting-evidence","licensed-business-count"],"instruction":"Do not add posting-evidenced employers to licensed-business counts unless OEX marks the underlying entities reconciled.","prohibitedInferences":["combined business population"]},{"id":"comparison-boundary","appliesTo":["numeric-observation"],"instruction":"Do not compare or combine values whose periods, units, concepts, geographic levels, or boundaries differ unless OEX marks them comparable.","prohibitedInferences":["rankings from mismatched observations","time trends from incompatible vintages"]},{"id":"modelled-opportunity-boundary","appliesTo":["modelled-opportunity","derived-signal"],"instruction":"A modelled opportunity is a hypothesis for validation, not an observed fact or a purchasing commitment.","prohibitedInferences":["observed demand","confirmed buyer","investment recommendation"]}],"comparability":{"requiredMatches":["concept","unit","geographic level and boundary","reference period"],"missingRule":"A missing fact is unknown, never zero or false.","resultRule":"OEX marks a comparison comparable only when every material observation has compatible concepts, units, geography, and periods."},"citations":{"version":"1.0.0","requiredFields":["stable citation id and resolver","canonical entity identity","value and unit","geography","reference period","truth state","confidence","source or provenance","canonical URL and citeAs text"],"instruction":"Read meta.evidence before quoting a result, preserve material qualifications, and cite the canonical URL returned with the resource. Atomic public graph assertions also carry citation.id and citation.resolver; resolve either through /api/v1/citations/{citationId} or resolve_citation instead of reconstructing provenance from display text.","boundary":"The resolver is a projection of the governed graph assertion, not a second truth store or an immutable historical evidence lock. Private, aggregate-only, withdrawn and absent assertions are never disclosed."}},"discovery":{"agentDocumentation":"/use-with-ai","legacyAgentDocumentation":"/agents","agentDocumentationTwin":"/agents.md","agentCapabilityManifest":"/.well-known/agent-capabilities.json","llmsText":"/llms.txt","llmsFullText":"/llms-full.txt","machineIndex":"/index.md","openapi":"/api/v1/openapi.json","jsonCatalog":"/api/v1/catalog","mcp":"/mcp"},"agentNavigation":{"investigate":"POST /api/v1/investigate with { question, entities?, minimumConfidence?, depth?, maxEvidenceCalls? }","resolve":"/api/v1/entities/resolve?q={name, slug, or official code}","context":"/api/v1/entities/context?type={entity type}&id={name, slug, or official code}","graphQuery":"/api/v1/graph/query?entity={name or code}&metric={metric}&predicate={predicate}","citationResolver":"/api/v1/citations/{citationId}","municipalityIndustryFacts":"/api/v1/graph/query?entity={NAICS code}&type=naics-industry&geography={municipality name or SGC}&metric={metric}","municipalEconomicProfile":"/api/v1/graph/query?entity={municipality name or SGC}&bundle=municipal-economic-profile-v1","municipalityComparison":"/api/v1/graph/municipalities/compare?entity={municipality one}&entity={municipality two}","graphStatus":"/api/v1/graph/status","mcpTools":["investigate_economic_question","resolve_entity","get_entity","search_entities","query_knowledge_graph","get_knowledge_graph_status","compare_communities","check_comparability","resolve_citation"],"rule":"Use investigate for prompt-shaped composition, or resolve user language to a canonical identity before joining datasets directly. Investigation plans are deterministic and expose every evidence call; context responses reuse governed entity resources and retain their evidence envelopes.","knowledgeGraph":{"entityKey":"entityType + canonicalScheme + canonicalId","aliasKey":"scheme + normalizedValue","edgeKey":"subjectEntityId + predicate + objectEntityId + sourceId","factKey":"entityId + metric + geographyEntityId + referencePeriod + sourceId + modelVersion","factRule":"Every fact has exactly one typed value, an explicit unit where applicable, reference/observation dates, truth state, confidence, source id, and model version when derived.","missingRule":"A missing fact or edge is unknown, never zero or false. Possible and unresolved relationships are not materialized.","bundles":{"municipal-economic-profile-v1":{"entityType":"municipality","description":"One municipality profile spanning Census scale and growth, business structure, publishable GDP, confidence, and audited fiscal context where available.","metrics":["population","population_change","population_density","private_dwellings_total","private_dwellings_occupied","land_area","businesses_with_employees","businesses_per_1000_residents","industry_concentration_hhi","owner_estimated_dwelling_value_average","owner_estimated_dwelling_value_median","advertised_job_records","advertised_vacancies","advertised_noc_unit_groups","gdp_current_dollars_estimate","gdp_current_dollars_lower_bound","gdp_current_dollars_upper_bound","gdp_per_capita_estimate","confidence_tier","point_estimate_published","municipal_actual_revenue","municipal_actual_expenses","municipal_long_term_debt","municipal_net_financial_position","municipal_tangible_capital_assets"]}}}}}}