Praxium Developers · API v1

A small public API with an explicit safety boundary.

Read the same published studio records people can browse on askprax.ai. The contract is anonymous, versioned, paginated, and deliberately has no write path into the Praxium platform.

1
documented operation
0
write operations
100
maximum page size

Quick start

One GET request, no setup.

List published studios

No authentication or API key is required. The endpoint supports cross-origin GET, HEAD, and OPTIONS requests and returns JSON.

curl --get "https://askprax.ai/api/v1/directory" \
  --data-urlencode "city=Austin, TX" \
  --data-urlencode "modality=cold-plunge" \
  --data-urlencode "page_size=10"

Request contract

Filtering and pagination stay predictable.

ParameterTypeMeaning
qstring · max 80Case-insensitive match across public names, cities, and modality slugs.
citystring · max 100Exact published city label, matched case-insensitively.
modalityslug · max 80Exact lowercase modality slug, such as cold-plunge.
pageinteger · min 1One-indexed page. Beyond the result set returns an empty data array.
page_sizeinteger · 1–100Records per page; defaults to 24.

Versioning

Stable operations carry a major version in the path: /api/v1. Backward-compatible fields may be added within v1; breaking changes require a new major path. Deprecated operations remain available for at least 12 months. Before removal, responses identify the policy with rel="deprecation", then publish RFC 9745 Deprecation and RFC 8594 Sunset dates.

Caching

Cache-Control reflects the active public-corpus mode. Follow it, retain ETags when an intermediary supplies them, and use the response links instead of inventing page URLs.

Rate limit posture

No contractual per-client rate limit is advertised today. Cache repeat reads, avoid bursts, and back off if edge protection returns 429. A future fixed quota will ship in this document and response headers before it becomes part of the API contract.

Responses

Success is narrow; failure explains the next move.

Stable public studio shape

Every item contains only the public slug, name, city, modality slugs, and canonical profile URL.

{
  "slug": "example-studio",
  "name": "Example Studio",
  "city": "Austin, TX",
  "modalities": ["cold-plunge"],
  "profile_url": "https://askprax.ai/studios/example-studio"
}

RFC 9457 problem details

API errors use application/problem+json, a stable code, a human-readable detail, and a concrete resolution hint. Internal exceptions and upstream bodies are never reflected.

{
  "type": "https://askprax.ai/developers#invalid_request",
  "title": "Invalid request parameters",
  "status": 400,
  "detail": "One or more query parameters are invalid.",
  "instance": "/api/v1/directory",
  "code": "invalid_request",
  "resolution": "Correct the named parameters and retry the same GET request."
}

invalid_request

HTTP 400

A named query parameter is malformed. Read invalid_params, correct it, and retry.

method_not_allowed

HTTP 405

The resource is read-only. Follow the Allow header and use GET, HEAD, or OPTIONS.

api_route_not_found

HTTP 404

The API path does not exist. Recover through the OpenAPI description or API catalog.

directory_temporarily_unavailable

HTTP 503

The public corpus could not be read safely. Honor Retry-After before retrying.

Safety boundary

Public discovery stays separate from the platform.

What this API can read

Only recovery-studio fields already visible on the public directory and studio profile pages. The API reuses the directory's admitted, cached projection, so the website and API cannot silently disagree about which studios are public.

What it cannot reach

No private member, tenant, workspace, operator, lead, protocol, assessment, billing, credential, or internal source data. There are no writes, webhooks, OAuth grants, API keys, or public MCP tools on this surface.