{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Praxium Public Directory API","version":"1.0.0","summary":"Read published recovery-studio directory records.","description":"A public, anonymous, read-only API over the same admitted studio records shown on askprax.ai. It does not expose member, tenant, operator, lead, protocol, or credential data. The major version is carried in the URL. Breaking changes use a new major path; deprecated operations receive at least 12 months of overlap and advertise RFC 9745 Deprecation plus RFC 8594 Sunset metadata before removal.","contact":{"name":"Praxium","email":"hello@askprax.ai","url":"https://askprax.ai/contact"},"termsOfService":"https://askprax.ai/terms"},"externalDocs":{"description":"Praxium API versioning and deprecation policy","url":"https://askprax.ai/developers#versioning"},"servers":[{"url":"https://askprax.ai","description":"The origin that served this contract."}],"security":[],"tags":[{"name":"Directory","description":"Published recovery-studio discovery records only."}],"paths":{"/api/v1/directory":{"get":{"tags":["Directory"],"operationId":"listPublicDirectoryStudios","summary":"List published recovery studios","description":"Returns a stable, paginated projection of studios already visible in the public Praxium directory. Filters are combined with AND; free text matches public names, cities, and modality slugs.","security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"Case-insensitive free text matched against name, city, and modality slugs.","schema":{"type":"string","maxLength":80}},{"name":"city","in":"query","required":false,"description":"Exact public city label, matched case-insensitively, for example Austin, TX.","schema":{"type":"string","maxLength":100}},{"name":"modality","in":"query","required":false,"description":"Exact lowercase modality slug, for example cold-plunge.","schema":{"type":"string","maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},{"name":"page","in":"query","required":false,"description":"One-indexed result page. A page beyond the result set returns an empty data array.","schema":{"type":"integer","minimum":1,"maximum":1000000,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Number of records per page.","schema":{"type":"integer","minimum":1,"maximum":100,"default":24}}],"responses":{"200":{"description":"A page of published recovery studios, which may be empty.","headers":{"Link":{"description":"Schema, documentation, catalog, and available pagination relations.","schema":{"type":"string"}},"Cache-Control":{"description":"Deployment-aware cache policy for the public corpus.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectoryPage"}}}},"400":{"description":"One or more named query parameters are invalid.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The published directory corpus is temporarily unavailable.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"PublicStudio":{"type":"object","additionalProperties":false,"required":["slug","name","city","modalities","profile_url"],"properties":{"slug":{"type":"string","description":"Stable public studio slug."},"name":{"type":"string","description":"Published studio name."},"city":{"type":"string","description":"Published city and region label."},"modalities":{"type":"array","description":"Published modality slugs offered by the studio.","items":{"type":"string"}},"profile_url":{"type":"string","format":"uri","description":"Canonical public profile."}}},"Pagination":{"type":"object","additionalProperties":false,"required":["page","page_size","total_items","total_pages","has_next","has_previous"],"properties":{"page":{"type":"integer","minimum":1},"page_size":{"type":"integer","minimum":1,"maximum":100},"total_items":{"type":"integer","minimum":0},"total_pages":{"type":"integer","minimum":0},"has_next":{"type":"boolean"},"has_previous":{"type":"boolean"}}},"DirectoryLinks":{"type":"object","additionalProperties":false,"required":["self","next","previous","documentation","open_api"],"properties":{"self":{"type":"string","format":"uri"},"next":{"type":["string","null"],"format":"uri"},"previous":{"type":["string","null"],"format":"uri"},"documentation":{"type":"string","format":"uri"},"open_api":{"type":"string","format":"uri"}}},"DirectoryPage":{"type":"object","additionalProperties":false,"required":["data","pagination","links"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicStudio"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"links":{"$ref":"#/components/schemas/DirectoryLinks"}}},"InvalidParam":{"type":"object","additionalProperties":false,"required":["name","reason"],"properties":{"name":{"type":"string"},"reason":{"type":"string"}}},"Problem":{"type":"object","additionalProperties":false,"required":["type","title","status","detail","instance","code","resolution"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string"},"resolution":{"type":"string"},"invalid_params":{"type":"array","items":{"$ref":"#/components/schemas/InvalidParam"}}}}}}}