openapi: 3.2.0 info: title: Arbor Biotechnologies Content API (WordPress REST) Posts API version: 1.0.0 summary: Read-only, anonymously accessible content API served by the Arbor Biotechnologies corporate site. description: 'Arbor Biotechnologies publishes no product or developer API. This document was DERIVED by API Evangelist from the live WordPress REST route index at https://arbor.bio/wp-json (18 namespaces, 341 declared routes) on 2026-07-31, and reduced to only those operations that were individually probed WITHOUT credentials and observed returning HTTP 200. It is an incidental content-management surface, not a supported API product: Arbor issues no keys, publishes no developer documentation, offers no support channel for it, and its terms of use do not mention API access. Every write, administrative and site-configuration route declared in the route index is excluded here because anonymous callers receive 401 (`rest_forbidden`, `rest_cannot_view_plugins`, `rest_cannot_view_themes`, `rest_user_cannot_view`) or 403 (`rest_comment_disabled`). Observed collection sizes on 2026-07-31: 59 posts (press releases, 2018-2026), 11 pages, 11 categories, 0 tags, 394 media items reported by X-WP-Total of which 4 are returned to anonymous callers, 60 searchable objects, 1 contact form.' contact: name: Arbor Biotechnologies url: https://arbor.bio/get-in-touch/ license: name: Proprietary — see Arbor Biotechnologies Terms of Use url: https://arbor.bio/terms-of-use/ x-derived-by: API Evangelist enrichment pipeline x-derived-from: https://arbor.bio/wp-json x-derived-on: '2026-07-31' x-provider-published: false x-api-posture: incidental-cms-surface servers: - url: https://arbor.bio/wp-json description: Production WordPress REST API on the Arbor Biotechnologies corporate site. security: [] tags: - name: posts description: Press releases and company announcements. paths: /wp/v2/posts: get: operationId: listPosts summary: List press releases description: List published posts — Arbor's press releases and company announcements. 59 items observed on 2026-07-31, spanning 2018 to 2026. Paginated; total count and page count are returned in the X-WP-Total and X-WP-TotalPages headers. tags: - posts parameters: - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/perPage' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/after' - $ref: '#/components/parameters/before' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/orderbyPost' - $ref: '#/components/parameters/slug' - $ref: '#/components/parameters/fields' - $ref: '#/components/parameters/embed' - name: categories in: query description: Limit to posts assigned to these category ids. schema: type: array items: type: integer style: form explode: false responses: '200': description: A page of posts. headers: X-WP-Total: $ref: '#/components/headers/XWPTotal' X-WP-TotalPages: $ref: '#/components/headers/XWPTotalPages' Link: $ref: '#/components/headers/Link' content: application/json: schema: type: array items: $ref: '#/components/schemas/Post' '400': $ref: '#/components/responses/InvalidParam' /wp/v2/posts/{id}: get: operationId: getPost summary: Get a press release description: Retrieve a single published post by its integer id. tags: - posts parameters: - $ref: '#/components/parameters/idPath' - $ref: '#/components/parameters/fields' - $ref: '#/components/parameters/embed' responses: '200': description: The post. content: application/json: schema: $ref: '#/components/schemas/Post' '404': $ref: '#/components/responses/InvalidPostId' components: schemas: Post: type: object description: A published press release or company announcement. properties: id: type: integer date: type: string format: date-time description: Publication date in site local time. date_gmt: type: string format: date-time modified: type: string format: date-time modified_gmt: type: string format: date-time guid: $ref: '#/components/schemas/RenderedText' slug: type: string status: type: string enum: - publish type: type: string const: post link: type: string format: uri title: $ref: '#/components/schemas/RenderedText' content: $ref: '#/components/schemas/RenderedText' excerpt: $ref: '#/components/schemas/RenderedText' author: type: integer description: Author user id. The users collection itself is 401 to anonymous callers. featured_media: type: integer description: Media id 0 when none.: null categories: type: array items: type: integer tags: type: array items: type: integer sticky: type: boolean format: type: string template: type: string comment_status: type: string ping_status: type: string meta: type: object acf: description: Advanced Custom Fields payload. Present but empty on this site. type: - object - array class_list: type: array items: type: string yoast_head: type: string description: Rendered SEO head block. yoast_head_json: type: object description: Structured SEO metadata including schema.org graph. _links: $ref: '#/components/schemas/Links' RenderedText: type: object description: WordPress renders text fields into an object with a `rendered` HTML string. properties: rendered: type: string Error: type: object description: The WordPress REST error envelope. This is NOT RFC 9457 Problem Details — the media type is application/json, there is no `type` URI, and the HTTP status is repeated inside `data.status`. required: - code - message - data properties: code: type: string description: Machine-readable error code e.g. rest_post_invalid_id.: null message: type: string description: Human-readable message. data: type: object properties: status: type: integer params: type: object details: type: object Links: type: object description: HAL-style relation map (self, collection, about, author, wp:featuredmedia, wp:attachment, wp:term, replies). Appending `_embed` inlines these under `_embedded`. additionalProperties: type: array items: type: object properties: href: type: string format: uri embeddable: type: boolean templated: type: boolean parameters: perPage: name: per_page in: query description: Items per page. The server rejects values outside 1-100 with HTTP 400. schema: type: integer minimum: 1 maximum: 100 default: 10 fields: name: _fields in: query description: Comma-separated allowlist of response fields. Strongly recommended — a full post object carries rendered HTML content plus a `yoast_head` block and is large. schema: type: string example: id,date,slug,link,title embed: name: _embed in: query description: Inline linked resources (author, featured media, terms) under `_embedded`, resolving relationships in one round trip. schema: type: boolean before: name: before in: query description: Limit to items published before an ISO 8601 date. schema: type: string format: date-time order: name: order in: query schema: type: string enum: - asc - desc default: desc page: name: page in: query description: 1-based page number. schema: type: integer minimum: 1 default: 1 idPath: name: id in: path required: true description: Integer object id. schema: type: integer slug: name: slug in: query description: Limit results to one or more slugs. schema: type: array items: type: string style: form explode: false orderbyPost: name: orderby in: query schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - title default: date search: name: search in: query description: Limit results to those matching a string. schema: type: string after: name: after in: query description: Limit to items published after an ISO 8601 date. schema: type: string format: date-time headers: XWPTotal: description: Total number of items in the collection, before pagination. schema: type: integer XWPTotalPages: description: Total number of pages available at the current per_page. schema: type: integer Link: description: RFC 8288 pagination links (rel=next, rel=prev). schema: type: string responses: InvalidPostId: description: No object exists with that id, or it is not publicly readable. content: application/json: schema: $ref: '#/components/schemas/Error' example: code: rest_post_invalid_id message: Invalid post ID. data: status: 404 InvalidParam: description: A query parameter failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' example: code: rest_invalid_param message: 'Invalid parameter(s): per_page' data: status: 400 params: per_page: per_page must be between 1 (inclusive) and 100 (inclusive) securitySchemes: applicationPassword: type: http scheme: basic description: WordPress application passwords (HTTP Basic per RFC 7617), advertised by the site's own route index. Required only for the write and administrative routes, none of which appear in this document. Arbor Biotechnologies issues no public credentials, so this scheme is declared by the platform but unreachable for third parties. externalDocs: description: WordPress REST API handbook — the upstream reference for these routes and parameters. url: https://developer.wordpress.org/rest-api/reference/