Public API · read-only beta · Q3 2026 · early-access keys available now

Build on the Manitoba STEM graph.

The CommunATI Public API is a read-only REST + JSON interface over the directory of organizations, programs, events, and public projects. Use it to embed Manitoba STEM listings on a school-division portal, power a regional discovery app, run research on access patterns, or feed your own classroom tools. Free for non-commercial use with attribution; paid tier for high-volume integrators.

Request an early-access key See the endpoints

Roadmap

Three phases, public dates.

The API ships in stages so we don't over-promise and under-deliver. Each phase has a public hard date; if we miss one, the page updates and the early-access list gets notified before anyone else.

Q3 2026 · Beta

Read-only directory

Organizations, programs, events. JSON only. Static API key auth. 60 requests / minute / key. Beta endpoints versioned as /v1beta.

Q4 2026 · Stable

v1 + projects

Stable /v1 namespace, project-showcase endpoint, geosearch, age-band filters, ETags + Last-Modified, OpenAPI 3.1 schema published.

Q1 2027 · Write

OAuth 2.0 + webhooks

OAuth 2.0 with org-scoped tokens. Write endpoints for member orgs to manage their own listings programmatically. Outbound webhooks for new programs and event changes.

Q2 2027 · Federated

Cross-province pilot

Federated search across CommunATI-compatible directories in other provinces (early MOUs with Saskatchewan and northwestern Ontario coordinators). Pilot scope; not GA.

Endpoints (planned)

Read-only resources at launch.

Base URL: https://api.communati.ca/v1beta (beta) → https://api.communati.ca/v1 (stable). Every endpoint returns application/json; application/geo+json is available on geo-enabled endpoints via Accept header.

GET/organizations

List approved organizations. Filterable by region, type, indigenous_led, has_active_programs. Paginated via ?cursor. Returns name, slug, region, lat/long, logo URL, summary, and the org's program count.

Auth: any tier · Rate: 60/min beta, 600/min stable · ETag supported

GET/organizations/{slug}

Detail view for one organization. Includes the full description, contact info, registration URL, program list (summary), and the org's currently advertised events.

Auth: any tier · Rate: 60/min beta · Cache-Control: public, max-age=300

GET/programs

List programs across all orgs. Filterable by age_band (under-5, 5-7, 8-10, 11-13, 14-16, 17-plus), type (robotics, code, science, maker, AI, etc.), region, format (in-person, virtual, hybrid), distance_km + near (lat,long). Returns the program summary plus the parent org's slug.

Auth: any tier · Rate: 60/min beta · Supports ?lang=fr for translated descriptions where available

GET/programs/{slug}

Detail view for one program. Includes schedule, location, age band, instructor names (if public), cost, registration link, and the related program count from the same org.

Auth: any tier · Rate: 60/min beta

GET/events

Upcoming public events from all orgs. Filterable by start_after, start_before, region, age_band, category. Supports format=icalendar for an .ics calendar feed instead of JSON.

Auth: any tier · Rate: 60/min beta · iCalendar format mirrors events.ics

GET/projects

Public project gallery — youth-submitted, moderator-approved projects from member orgs. Returns title, summary, hero image URL, contributing org, project tags, and submission date. No personal data about youth.

Auth: any tier · Rate: 60/min beta · Q4 2026 endpoint, gated until then

GET/sponsors

Current sponsor list — Founding, Network, and Anchor tiers — with logo URL, tier, and (when sponsor opts in) a public description. Excludes any sponsor that opts out of public listing.

Auth: any tier · Rate: 60/min beta · Q1 2027 endpoint

POST/organizations/{slug}/programs

Create or update a program owned by your organization. Requires an OAuth 2.0 access token with the programs:write scope, issued to a verified org admin.

Auth: OAuth 2.0 (org-scoped) · Rate: 30/min · Q1 2027 endpoint

Authentication

Static API keys at beta, OAuth 2.0 in 2027.

Beta keys are static, scoped per developer or organization, and rotated on request. Production write access uses OAuth 2.0 with org-scoped access tokens (the org admin authorizes the integration from the org dashboard).

# Beta: static API key in Authorization header
curl https://api.communati.ca/v1beta/programs?age_band=8-10&region=winnipeg \
  -H "Authorization: Bearer cmnt_pk_live_xxxxxxxxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"

# Stable: OAuth 2.0 client credentials (server-to-server)
curl https://api.communati.ca/oauth/token \
  -d grant_type=client_credentials \
  -d client_id=cmnt_ci_xxxxxxxxxxxx \
  -d client_secret=cmnt_cs_xxxxxxxxxxxx \
  -d scope=programs:read events:read

Tokens are JWTs signed with ES256. Public keys are published at /.well-known/jwks.json once the production endpoint is live. Token lifetime defaults to one hour for client-credentials and twelve hours for OAuth 2.0 user-scoped tokens.

Rate limits + fair use

Conservative at beta, generous at stable.

Beta limits sit at 60 requests per minute per key with bursting up to 120 RPM. Stable limits scale to 600 RPM on the free tier and 6,000 RPM on the paid tier. The paid tier also adds priority support, a 99.5% SLA on the read path, custom rate plans for school divisions, and webhook delivery guarantees.

All limits are advisory during beta — exceeding them returns HTTP 429 with a Retry-After header rather than blocking your key. Sustained abuse, scraping, or behaviour that degrades the service for other consumers can result in revocation. The full Terms of Use will live at /developers/terms at GA.

Schema + data model

OpenAPI 3.1 at stable, JSON Schema at beta.

The beta ships with per-endpoint JSON Schema fragments at /v1beta/_schema/{resource}.json. Stable ships a single openapi.yaml covering every public endpoint, plus generated client libraries for TypeScript, Python, and Swift. The schema is versioned independently from the runtime; non-breaking field additions don't bump the major version.

Core resource fields use snake_case. Timestamps are ISO 8601 in UTC. Lat/long use WGS 84 decimal degrees. Currency is CAD only. Language tags follow BCP 47 (en-CA, fr-CA).

Use cases

What people are building.

Confirmed early-access partners — concrete builds we've heard from organizations and have agreed to support:

If your build is on this list and we haven't reached you yet, write us — we'll fast-track your early-access key.

Early access

Get a beta key.

Beta keys are issued individually, not signed up via web form. Two reasons: we want to know who's building so we can keep the surface area aligned with real use, and we want to flag PIPEDA + Manitoba PHIA expectations for any builder whose tool touches kids or family data.

Email developers@communati.ca with:

Response time is usually under 48 hours. Approved keys arrive with a one-page quickstart, a sandbox endpoint pre-seeded with the five demo orgs, and a Slack invite to the small early-builder channel where API changes are previewed.

Open questions we're still resolving

Where your feedback shapes the surface.

A few API design questions we're publicly undecided on. If you have a preference, please write us — the call is open until stable cuts:

Stay current as the API ships.

The API changelog will publish at /developers/changelog at beta. Until then, write us and we'll add you to the developer-update list — short, infrequent, no marketing.

Join the updates list Contact us