---
title: "Bounded semantic-graph query. Resolve one entity and return its typed facts and both relationship directions, query one metric across entities, or query one predicate across the graph. Missing records mean unknown, never zero or false."
method: GET
path: "/api/v1/graph/query"
---

# Bounded semantic-graph query. Resolve one entity and return its typed facts and both relationship directions, query one metric across entities, or query one predicate across the graph. Missing records mean unknown, never zero or false.

`GET /api/v1/graph/query`

## Request

- Base URL: `https://veilpoint.ca`
- URL: `https://veilpoint.ca/api/v1/graph/query`
- Auth: none declared

## Query parameters

- `entity` string
- `geography` string
- `bundle` 'municipal-economic-profile-v1'
- `type` 'occupation' | 'municipality' | 'geography' | 'sector' | 'training-program' | 'noc-unit-group' | 'data-source' | 'data-provider' | 'economic-region' | 'census-division' | 'trade-region' | 'naics-industry' | 'industrial-facility' | 'open-source-signal' | 'organization' | 'project' | 'procurement-notice' | 'product-or-service' | 'job-posting' | 'employer' | 'business-source-observation' | 'establishment' | 'business'
- `metric` string
- `predicate` string
- `truthState` 'live' | 'snapshot' | 'measured_aggregate' | 'derived' | 'mixed' | 'metadata' | 'unavailable'
- `minimumConfidence` 'A' | 'B' | 'C' | 'D'
- `periodStart` string
- `periodEnd` string
- `limit` integer

## Response `200`

The envelope described above.

- PublicEnvelope
  - `meta` object, required
    - `platform` 'VeilPoint Opportunity Exchange', required
    - `canonical` string, uri, required
    - `retrievedAt` string, date-time, required
    - `dataStatus` string, required
    - `evidence` EvidenceSummary, required
      - `status` 'published' | 'derived' | 'mixed' | 'placeholder', required
      - `truthState` 'preview' | 'snapshot' | 'measured_aggregate' | 'mixed' | 'live' | 'metadata', required
      - `scenarioType` 'preview_scenario' | 'published_snapshot' | 'measured_aggregate' | 'mixed_evidence' | 'actionable_record' | 'observed_hiring_signal' | 'platform_metadata', required
      - `recordType` string, required
      - `isActionable` boolean, required
      - `synthetic` boolean, required
      - `confidence` 'A' | 'B' | 'C' | 'D', nullable, required
      - `sourceKinds` string[], required
      - `asOf` string, date-time, nullable, required
      - `qualification` string, required
      - `assumptions` string[], required
    - `provenance` object
    - `citeAs` string, required
  - `data` object, required

## Other responses

- `304`: Not modified (If-None-Match matched the data ETag).
- `400`: Invalid parameter value, with an error naming the parameter.
- `404`: Unknown id or missing required parameter, with an error hint.
- `429`: Rate limited. Retry-After and the RateLimit-Limit / RateLimit-Remaining / RateLimit-Reset headers state when to resume.

---

[API](https://skmtc.dev/veilpoint/apis/veilpoint-opportunity-exchange-public-api.md) · [All operations](https://skmtc.dev/veilpoint/apis/veilpoint-opportunity-exchange-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/veilpoint/apis/veilpoint-opportunity-exchange-public-api/revisions/fa1381cfa886?raw)
