Metro Counselling developer & agent documentation

Metro Counselling publishes its public pages in machine-readable form so that automated agents can read them accurately. This page describes what is available and how to request it.

Scope

This is a read-only content surface. There are no accounts, no bookings, and no write operations, and no authentication is required or accepted. Appointment, fee, coverage, and clinical questions must be routed to a person through the contact page. Do not infer availability, insurance coverage, or clinical suitability from these documents.

Machine-readable files

  • /api

    JSON discovery document: current version path, every machine-readable endpoint, the rate-limit policy, and the versioning contract.

  • /api/v1/pages

    Index of every public page with title, description, canonical URL, and Markdown address.

  • openapi.json

    OpenAPI 3.1 description of every documented operation, generated at build time.

  • llms.txt

    Scope, per-page usage guidance, contact routing, and safety boundaries.

  • sitemap.xml

    Canonical list of public pages. Authoritative source for which routes exist.

  • robots.txt

    Crawler access rules and excluded administrative routes.

Content negotiation

Every public page is prerendered as HTML and as Markdown. Send an Accept header to choose a representation. Standard q-values and wildcards are honoured, responses carry Vary: Accept, Accept-Encoding, and each page advertises its Markdown alternate through a Link header.

curl -H "Accept: text/markdown" https://metrocounselling.ca/services

The Markdown representation is also addressable directly, without negotiation:

curl https://metrocounselling.ca/services/index.md

Errors

Unknown paths return a real 404. Request JSON and the response is RFC 9457 problem details carrying a stable code and ordered resolution hints. A request whose Accept header matches no available representation returns 406 with the same shape.

curl -H "Accept: application/json" https://metrocounselling.ca/nope

JSON API

A small read-only JSON surface is served under /api/v1. Requests to any path under /api return JSON by default, whatever the Accept header says, including errors.

curl https://metrocounselling.ca/api
curl https://metrocounselling.ca/api/v1/pages

Versioning & deprecation

The surface is versioned in the URL path. The current major version is /api/v1, and every response carries an API-Version header.

  • Additive changes — new endpoints or new response fields — ship without a version bump.
  • Breaking changes ship under a new path such as /api/v2, leaving the previous version in place.
  • A deprecated version returns a Deprecation header with the announcement date, a Sunset header with the removal date, and a Link rel="successor-version" pointing at its replacement.
  • At least 180 days pass between the Deprecation header appearing and the Sunset date.

Rate limits

Every response carries RateLimit-Policy: default;q=600;w=60 — a published budget of 600 requests per 60 seconds. It is advisory: these are static resources and no per-client counter is enforced, so RateLimit-Remaining and RateLimit-Reset are deliberately not sent rather than reporting a quota that does not exist. If enforcement is ever added, a 429 will carry Retry-After. Please stay within the budget and honour robots.txt.