openapi: 3.1.0 info: title: Hydrostor Pages API version: wp/v2 description: Public, unauthenticated read access to the static marketing and policy pages of hydrostor.ca — the company, technology and geology explainers, the project index, use cases, careers, contact, media kit, newsletter signup, Privacy Policy, Terms of Use and the California AB1305 climate disclosure. Verified live at 22 published pages 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: Pages description: Static marketing and policy pages. paths: /wp/v2/pages: get: operationId: listPages summary: List site pages description: Retrieve a paginated collection of published static pages. Verified live at 22 pages on 2026-08-22 — Company, Technology, Projects, Geology, Use Cases, Careers, Contact, Newsletter, Media Kit, Privacy Policy, Terms of Use and the AB1305 climate disclosure. tags: - Pages parameters: - name: after in: query description: Limit response to posts published after a given ISO8601 compliant date. schema: type: string format: date-time - name: author in: query description: Limit result set to posts assigned to specific authors. schema: type: array items: type: integer default: [] - name: author_exclude in: query description: Ensure result set excludes posts assigned to specific authors. schema: type: array items: type: integer default: [] - name: before in: query description: Limit response to posts published before a given ISO8601 compliant date. schema: type: string format: date-time - 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: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: menu_order in: query description: Limit result set to posts with a specific menu_order value. schema: type: integer - name: modified_after in: query description: Limit response to posts modified after a given ISO8601 compliant date. schema: type: string format: date-time - name: modified_before in: query description: Limit response to posts modified before a given ISO8601 compliant date. schema: type: string format: date-time - 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: desc - name: orderby in: query description: Sort collection by post attribute. schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title - menu_order default: date - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: parent in: query description: Limit result set to items with particular parent IDs. schema: type: array items: type: integer default: [] - name: parent_exclude in: query description: Limit result set to all items except those of a particular parent ID. schema: type: array items: type: integer default: [] - 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: 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: - post_title - post_content - post_excerpt default: [] - name: search_semantics in: query description: How to interpret the search input. schema: type: string enum: - exact - name: slug in: query description: Limit result set to posts with one or more specific slugs. schema: type: array items: type: string - name: status in: query description: Limit result set to posts assigned one or more statuses. schema: type: array items: type: string enum: - publish - future - draft - pending - private - trash - auto-draft - inherit - request-pending - request-confirmed - request-failed - request-completed - acf-disabled - any default: publish responses: '200': description: A page of site pages. content: application/json: schema: type: array items: &id001 $ref: '#/components/schemas/Page' 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: &id002 $ref: '#/components/schemas/Error' /wp/v2/pages/{id}: get: operationId: getPage summary: Get one site page description: Retrieve a single static page by its numeric identifier. tags: - Pages parameters: - name: id in: path required: true description: Unique identifier for the page. 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 - name: password in: query description: The password for the page if it is password protected. schema: type: string responses: '200': description: The page. content: application/json: schema: *id001 '400': description: Invalid request parameter (`rest_invalid_param`). content: application/json: schema: *id002 '404': description: No page exists with that identifier (`rest_post_invalid_id`). content: application/json: schema: *id002 components: schemas: Page: type: object title: Page properties: date: type: - string - 'null' description: The date the post was published, in the site's timezone. format: date-time date_gmt: type: - string - 'null' description: The date the post was published, as GMT. format: date-time guid: type: object description: The globally unique identifier for the post. properties: raw: type: string description: GUID for the post, as it exists in the database. readOnly: true rendered: type: string description: GUID for the post, transformed for display. readOnly: true readOnly: true id: type: integer description: Unique identifier for the post. readOnly: true link: type: string description: URL to the post. format: uri readOnly: true modified: type: string description: The date the post was last modified, in the site's timezone. format: date-time readOnly: true modified_gmt: type: string description: The date the post was last modified, as GMT. format: date-time readOnly: true slug: type: string description: An alphanumeric identifier for the post unique to its type. status: type: string description: A named status for the post. enum: - publish - future - draft - pending - private - acf-disabled type: type: string description: Type of post. readOnly: true password: type: string description: A password to protect access to the content and excerpt. permalink_template: type: string description: Permalink template for the post. readOnly: true generated_slug: type: string description: Slug automatically generated from the post title. readOnly: true class_list: type: array description: An array of the class names for the post container element. items: type: string readOnly: true parent: type: integer description: The ID for the parent of the post. title: type: object description: The title for the post. properties: raw: type: string description: Title for the post, as it exists in the database. rendered: type: string description: HTML title for the post, transformed for display. readOnly: true content: type: object description: The content for the post. properties: raw: type: string description: Content for the post, as it exists in the database. rendered: type: string description: HTML content for the post, transformed for display. readOnly: true block_version: type: integer description: Version of the content block format used by the post. readOnly: true protected: type: boolean description: Whether the content is protected with a password. readOnly: true author: type: integer description: The ID for the author of the post. excerpt: type: object description: The excerpt for the post. properties: raw: type: string description: Excerpt for the post, as it exists in the database. rendered: type: string description: HTML excerpt for the post, transformed for display. readOnly: true protected: type: boolean description: Whether the excerpt is protected with a password. readOnly: true featured_media: type: integer description: The ID of the featured media for the post. comment_status: type: string description: Whether or not comments are open on the post. enum: - open - closed ping_status: type: string description: Whether or not the post can be pinged. enum: - open - closed menu_order: type: integer description: The order of the post in relation to other posts. meta: type: object description: Meta fields. properties: _acf_changed: type: boolean _et_pb_use_builder: type: string _et_pb_old_content: type: string _et_gb_content_width: type: string footnotes: type: string template: type: string description: The theme file to use to display the post. acf: type: object description: ACF field data description: A static marketing or policy page on hydrostor.ca. 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.