openapi: 3.1.0 info: title: Hydrostor Discovery API version: wp/v2 description: Public, unauthenticated discovery metadata for hydrostor.ca — the self-describing route index (340 routes across 18 namespaces at capture), the registered content types and taxonomies, the publication statuses, and the public author records. This is the surface that makes the rest of the API machine-readable in the complete absence of any published documentation, and it is what every other artifact in this profile was derived from on 2026-08-22. contact: name: Hydrostor url: https://hydrostor.ca/contact/ x-derived-from: https://hydrostor.ca/wp-json/ route index + per-route HTTP OPTIONS schema documents x-derived-on: '2026-08-22' x-api-evangelist-note: Third-party profile by API Evangelist. Hydrostor publishes no developer program; this document describes the anonymously readable WordPress REST content API served from hydrostor.ca, which the site exposes as a self-describing route index. Every path, parameter and schema here was read from the server's own route index and HTTP OPTIONS documents on 2026-08-22 — nothing is invented. servers: - url: https://hydrostor.ca/wp-json description: Hydrostor WordPress REST API tags: - name: Discovery description: 'Self-describing metadata: routes, types, taxonomies, statuses, authors.' paths: /: get: operationId: getApiIndex summary: Get the API root index description: 'Retrieve the self-describing root document: site name and description, the registered namespaces, the advertised authentication scheme, and the full route index with per-route methods and argument schemas. Verified live at 340 routes across 18 namespaces on 2026-08-22. This is the document every other artifact in this profile was derived from.' tags: - Discovery parameters: - name: context in: query description: Scope under which the request is made. schema: type: string enum: - view - embed - help default: view responses: '200': description: The root index document. content: application/json: schema: type: object properties: name: type: string description: type: string url: type: string format: uri home: type: string format: uri gmt_offset: type: number timezone_string: type: string namespaces: type: array items: type: string authentication: type: object routes: type: object site_icon_url: type: string format: uri /wp/v2/types: get: operationId: listContentTypes summary: List registered content types description: Retrieve every registered post type with its REST base, namespace and attached taxonomies. Verified live at 12 types on 2026-08-22, of which `project` is the only Hydrostor-specific one. tags: - Discovery parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view responses: '200': description: A map of content type name to definition. content: application/json: schema: type: object additionalProperties: $ref: '#/components/schemas/ContentType' '400': description: Invalid request parameter (`rest_invalid_param`). content: application/json: schema: &id001 $ref: '#/components/schemas/Error' /wp/v2/types/{type}: get: operationId: getContentType summary: Get one content type description: Retrieve a single registered post type definition. tags: - Discovery parameters: - name: type in: path required: true description: An alphanumeric identifier for the post type. schema: type: string - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view responses: '200': description: The content type definition. content: application/json: schema: $ref: '#/components/schemas/ContentType' '400': description: Invalid request parameter (`rest_invalid_param`). content: application/json: schema: *id001 '404': description: No such post type (`rest_type_invalid`). content: application/json: schema: *id001 /wp/v2/taxonomies: get: operationId: listTaxonomyDefinitions summary: List registered taxonomies description: Retrieve every registered taxonomy with its REST base, the post types it applies to, and whether it is hierarchical. Verified live at 6 taxonomies on 2026-08-22. tags: - Discovery parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: type in: query description: Limit results to taxonomies associated with a specific post type. schema: type: string responses: '200': description: A map of taxonomy name to definition. content: application/json: schema: type: object additionalProperties: $ref: '#/components/schemas/TaxonomyDefinition' '400': description: Invalid request parameter (`rest_invalid_param`). content: application/json: schema: *id001 /wp/v2/statuses: get: operationId: listPostStatuses summary: List publication statuses description: Retrieve the publication statuses visible to an anonymous caller. Verified live at `publish` and `acf-disabled` on 2026-08-22. tags: - Discovery parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view responses: '200': description: A map of status name to definition. content: application/json: schema: type: object additionalProperties: $ref: '#/components/schemas/PostStatus' '400': description: Invalid request parameter (`rest_invalid_param`). content: application/json: schema: *id001 /wp/v2/users: get: operationId: listAuthors summary: List public authors description: Retrieve the public author records that have published content. Verified live at 3 authors on 2026-08-22. Anonymous callers see the public `view` projection only — email and role fields require authentication. tags: - Discovery parameters: - name: capabilities in: query description: Limit result set to users matching at least one specific capability provided. Accepts csv list or single capability. schema: type: array items: type: string - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer default: [] - name: has_published_posts in: query description: Limit result set to users who have published posts. schema: type: - boolean - array items: type: string enum: post: post page: page attachment: attachment nav_menu_item: nav_menu_item wp_block: wp_block wp_template: wp_template wp_template_part: wp_template_part wp_global_styles: wp_global_styles wp_navigation: wp_navigation wp_font_family: wp_font_family wp_font_face: wp_font_face project: project - name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: asc - name: orderby in: query description: Sort collection by user attribute. schema: type: string enum: - id - include - name - registered_date - slug - include_slugs - email - url default: name - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: per_page in: query description: Maximum number of items to be returned in result set. schema: type: integer default: 10 minimum: 1 maximum: 100 - name: roles in: query description: Limit result set to users matching at least one specific role provided. Accepts csv list or single role. schema: type: array items: type: string - name: search in: query description: Limit results to those matching a string. schema: type: string - name: search_columns in: query description: Array of column names to be searched. schema: type: array items: type: string enum: - email - name - id - username - slug default: [] - name: slug in: query description: Limit result set to users with one or more specific slugs. schema: type: array items: type: string - name: who in: query description: Limit result set to users who are considered authors. schema: type: string enum: - authors responses: '200': description: A page of author records. content: application/json: schema: type: array items: $ref: '#/components/schemas/Author' headers: X-WP-Total: description: Total number of items in the collection. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the requested page size. schema: type: integer Link: description: RFC 8288 pagination links (`rel="next"` / `rel="prev"`). schema: type: string '400': description: Invalid request parameter (`rest_invalid_param`). content: application/json: schema: *id001 /wp/v2/users/{id}: get: operationId: getAuthor summary: Get one public author description: Retrieve a single public author record by identifier. tags: - Discovery parameters: - name: id in: path required: true description: Unique identifier for the author. schema: type: integer - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view responses: '200': description: The author record. content: application/json: schema: $ref: '#/components/schemas/Author' '400': description: Invalid request parameter (`rest_invalid_param`). content: application/json: schema: *id001 '404': description: No such author (`rest_user_invalid_id`). content: application/json: schema: *id001 components: schemas: ContentType: type: object title: ContentType properties: capabilities: type: object description: All capabilities used by the post type. readOnly: true description: type: string description: A human-readable description of the post type. readOnly: true hierarchical: type: boolean description: Whether or not the post type should have children. readOnly: true viewable: type: boolean description: Whether or not the post type can be viewed. readOnly: true labels: type: object description: Human-readable labels for the post type for various contexts. readOnly: true name: type: string description: The title for the post type. readOnly: true slug: type: string description: An alphanumeric identifier for the post type. readOnly: true supports: type: object description: All features, supported by the post type. readOnly: true has_archive: type: - string - boolean description: If the value is a string, the value will be used as the archive slug. If the value is false the post type has no archive. readOnly: true taxonomies: type: array description: Taxonomies associated with post type. items: type: string readOnly: true rest_base: type: string description: REST base route for the post type. readOnly: true rest_namespace: type: string description: REST route's namespace for the post type. readOnly: true visibility: type: object description: The visibility settings for the post type. properties: show_ui: type: boolean description: Whether to generate a default UI for managing this post type. show_in_nav_menus: type: boolean description: Whether to make the post type available for selection in navigation menus. readOnly: true icon: type: - string - 'null' description: The icon for the post type. readOnly: true template: type: array description: The block template associated with the post type. readOnly: true template_lock: type: - string - boolean description: The template_lock associated with the post type, or false if none. enum: - all - insert - contentOnly - false readOnly: true TaxonomyDefinition: type: object title: TaxonomyDefinition properties: capabilities: type: object description: All capabilities used by the taxonomy. readOnly: true description: type: string description: A human-readable description of the taxonomy. readOnly: true hierarchical: type: boolean description: Whether or not the taxonomy should have children. readOnly: true labels: type: object description: Human-readable labels for the taxonomy for various contexts. readOnly: true name: type: string description: The title for the taxonomy. readOnly: true slug: type: string description: An alphanumeric identifier for the taxonomy. readOnly: true show_cloud: type: boolean description: Whether or not the term cloud should be displayed. readOnly: true types: type: array description: Types associated with the taxonomy. items: type: string readOnly: true rest_base: type: string description: REST base route for the taxonomy. readOnly: true rest_namespace: type: string description: REST namespace route for the taxonomy. readOnly: true visibility: type: object description: The visibility settings for the taxonomy. properties: public: type: boolean description: Whether a taxonomy is intended for use publicly either via the admin interface or by front-end users. publicly_queryable: type: boolean description: Whether the taxonomy is publicly queryable. show_ui: type: boolean description: Whether to generate a default UI for managing this taxonomy. show_admin_column: type: boolean description: Whether to allow automatic creation of taxonomy columns on associated post-types table. show_in_nav_menus: type: boolean description: Whether to make the taxonomy available for selection in navigation menus. show_in_quick_edit: type: boolean description: Whether to show the taxonomy in the quick/bulk edit panel. readOnly: true PostStatus: type: object title: PostStatus properties: name: type: string description: The title for the status. readOnly: true private: type: boolean description: Whether posts with this status should be private. readOnly: true protected: type: boolean description: Whether posts with this status should be protected. readOnly: true public: type: boolean description: Whether posts of this status should be shown in the front end of the site. readOnly: true queryable: type: boolean description: Whether posts with this status should be publicly-queryable. readOnly: true show_in_list: type: boolean description: Whether to include posts in the edit listing for their post type. readOnly: true slug: type: string description: An alphanumeric identifier for the status. readOnly: true date_floating: type: boolean description: Whether posts of this status may have floating published dates. readOnly: true Author: type: object title: Author properties: id: type: integer description: Unique identifier for the user. readOnly: true username: type: string description: Login name for the user. name: type: string description: Display name for the user. first_name: type: string description: First name for the user. last_name: type: string description: Last name for the user. email: type: string description: The email address for the user. format: email url: type: string description: URL of the user. format: uri description: type: string description: Description of the user. link: type: string description: Author URL of the user. format: uri readOnly: true locale: type: string description: Locale for the user. enum: - '' - en_US nickname: type: string description: The nickname for the user. slug: type: string description: An alphanumeric identifier for the user. registered_date: type: string description: Registration date for the user. format: date-time readOnly: true roles: type: array description: Roles assigned to the user. items: type: string password: type: string description: Password for the user (never included). capabilities: type: object description: All capabilities assigned to the user. readOnly: true extra_capabilities: type: object description: Any extra capabilities assigned to the user. readOnly: true meta: type: object description: Meta fields. properties: persisted_preferences: type: object properties: _modified: type: string description: The date and time the preferences were updated. format: date-time acf: type: object description: ACF field data Error: type: object title: WordPress REST error description: The error envelope returned by every route on this surface. Observed live on 2026-08-22; it is a WordPress-native envelope, not RFC 9457 problem+json. properties: code: type: string description: Machine-readable error code, e.g. `rest_post_invalid_id`, `rest_invalid_param`, `rest_forbidden`. message: type: string description: Human-readable error message. data: type: object description: Error detail. properties: status: type: integer description: HTTP status code, repeated inside the body. params: type: object description: Per-parameter validation messages, present on `rest_invalid_param`. details: type: object description: Per-parameter structured validation detail, present on `rest_invalid_param`. securitySchemes: applicationPassword: type: http scheme: basic description: WordPress application passwords. Issued from https://hydrostor.ca/wp-admin/authorize-application.php and advertised by the API's own root document under `authentication.application-passwords`. Required only for write and administrative routes; every read operation described in this document answers anonymously.