openapi: 3.1.0 info: title: Cresilon Discovery API version: wp/v2 summary: Self-describing site, content-type, taxonomy, status and author metadata for cresilon.com. description: 'Cresilon publishes its corporate website (cresilon.com) on WordPress (WordPress.com Atomic hosting, nginx) with the core WordPress REST API enabled and anonymously readable. This specification was DERIVED by discovering the live route index at https://cresilon.com/wp-json/ and probing each route for anonymous access; only routes verified to return HTTP 200 without credentials are documented here as public operations. Write operations exist on the same routes but require authentication (WordPress cookie + X-WP-Nonce, or Application Passwords) and are not documented here; anonymous requests to them return HTTP 401. This is NOT a product API offered by Cresilon to customers — Cresilon is a biotechnology and medical-device manufacturer, not a software vendor. This is the content API of their marketing site, captured for discovery purposes. This document covers the route index and the metadata routes that make the whole Cresilon content surface machine-readable, plus the anonymously-readable authors collection. The route index is the single best entry point for an agent: it names the site, its timezone, its registered namespaces and every route with its arguments.' contact: name: Cresilon url: https://cresilon.com/contact-us/ email: info@cresilon.com license: name: Site content — all rights reserved, see Terms of Use url: https://cresilon.com/terms-of-use/ x-apis-io-provenance: method: derived source: https://cresilon.com/wp-json/ derived_on: '2026-08-04' note: Routes enumerated from the live wp-json discovery document (1,021 routes across 45 namespaces); every operation below was probed anonymously and returned HTTP 200. Schemas reflect the field set observed in live responses on 2026-08-04, including the `acf` (Advanced Custom Fields), Jetpack and `yoast_head_json` extensions this site adds. No fabricated operations or parameters. servers: - url: https://cresilon.com/wp-json description: Production tags: - name: Discovery description: Route index and site/content-type/taxonomy/status metadata. - name: Authors description: Published authors — 1 at time of capture. paths: /: get: tags: - Discovery operationId: getRouteIndex summary: Get the WordPress REST route index description: 'Returns the self-describing API index for cresilon.com — site name, description, URL, timezone offset, the full list of registered namespaces and every route with its methods, args and endpoint metadata. Verified live 2026-08-04: 45 namespaces and 1,021 routes; `authentication` advertises WordPress Application Passwords with the authorization endpoint at https://cresilon.com/wp-admin/authorize-application.php.' parameters: - $ref: '#/components/parameters/context' - name: namespace in: query description: Limit the index to a single namespace, e.g. `wp/v2`. schema: type: string - $ref: '#/components/parameters/fields' responses: '200': description: The route index. content: application/json: schema: $ref: '#/components/schemas/RouteIndex' examples: live: summary: Live route index externalValue: https://cresilon.com/wp-json/ /wp/v2/types: get: tags: - Discovery operationId: listTypes summary: List registered content types description: Returns every registered post type with its REST base, taxonomies, supports map and capability hints. parameters: - $ref: '#/components/parameters/context' responses: '200': description: A map of post types keyed by type slug. content: application/json: schema: type: object additionalProperties: true /wp/v2/types/{type}: get: tags: - Discovery operationId: getType summary: Get a content type description: Returns a single registered post type by slug, e.g. `post`, `page`, `attachment`. parameters: - name: type in: path required: true description: Post type slug. schema: type: string - $ref: '#/components/parameters/context' responses: '200': description: The requested post type. content: application/json: schema: type: object additionalProperties: true '404': $ref: '#/components/responses/NotFound' /wp/v2/taxonomies: get: tags: - Discovery operationId: listTaxonomies summary: List registered taxonomies description: Returns every registered taxonomy with its REST base and the post types it applies to. parameters: - $ref: '#/components/parameters/context' - name: type in: query description: Limit results to taxonomies associated with a post type. schema: type: string responses: '200': description: A map of taxonomies keyed by taxonomy slug. content: application/json: schema: type: object additionalProperties: true /wp/v2/taxonomies/{taxonomy}: get: tags: - Discovery operationId: getTaxonomy summary: Get a taxonomy description: Returns a single registered taxonomy by slug, e.g. `category`, `post_tag`. parameters: - name: taxonomy in: path required: true description: Taxonomy slug. schema: type: string - $ref: '#/components/parameters/context' responses: '200': description: The requested taxonomy. content: application/json: schema: type: object additionalProperties: true '404': $ref: '#/components/responses/NotFound' /wp/v2/statuses: get: tags: - Discovery operationId: listStatuses summary: List publication statuses description: Returns the publication statuses visible anonymously — `publish` only. parameters: - $ref: '#/components/parameters/context' responses: '200': description: A map of statuses keyed by status slug. content: application/json: schema: type: object additionalProperties: true /wp/v2/users: get: tags: - Authors operationId: listUsers summary: List published authors description: 'Returns authors who have published content. Verified live 2026-08-04: anonymously readable, X-WP-Total: 1 (`cresilon`).' parameters: - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/perPage' - $ref: '#/components/parameters/context' - $ref: '#/components/parameters/fields' - $ref: '#/components/parameters/slugParam' responses: '200': description: A page of authors. headers: X-WP-Total: $ref: '#/components/headers/XWPTotal' content: application/json: schema: type: array items: $ref: '#/components/schemas/User' '400': $ref: '#/components/responses/InvalidParam' /wp/v2/users/{id}: get: tags: - Authors operationId: getUser summary: Get a published author description: Returns a single published author by numeric user ID. parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/context' responses: '200': description: The requested author. content: application/json: schema: $ref: '#/components/schemas/User' '404': $ref: '#/components/responses/NotFound' components: parameters: id: name: id in: path required: true description: Unique numeric identifier for the object. schema: type: integer page: name: page in: query description: Current page of the collection. Defaults to 1. schema: type: integer minimum: 1 default: 1 perPage: name: per_page in: query description: 'Maximum number of items to be returned in the result set. Verified live: values outside 1-100 return HTTP 400 `rest_invalid_param`.' schema: type: integer minimum: 1 maximum: 100 default: 10 search: name: search in: query description: Limit results to those matching a string. schema: type: string order: name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: desc orderby: name: orderby in: query description: Sort collection by object attribute. schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title default: date context: name: context in: query description: Scope under which the request is made; determines fields present in the response. Only `view` and `embed` are available anonymously — `edit` returns HTTP 401. schema: type: string enum: - view - embed default: view fields: name: _fields in: query description: Comma-separated list of fields to limit the response to. Verified live, e.g. `_fields=id,slug,link,title`. schema: type: string embed: name: _embed in: query description: Embed linked resources (author, featured media, terms) into the response. schema: type: boolean include: name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer exclude: name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer offset: name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer slugParam: name: slug in: query description: Limit results to items with one of the given slugs. schema: type: array items: type: string responses: NotFound: description: The requested object does not exist. content: application/json: schema: $ref: '#/components/schemas/Error' example: code: rest_post_invalid_id message: Invalid post ID. data: status: 404 InvalidParam: description: One or more query parameters 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) Unauthorized: description: 'The route exists but requires authentication. Verified live: anonymous requests to privileged routes return this envelope with HTTP 401.' content: application/json: schema: $ref: '#/components/schemas/Error' example: code: rest_forbidden message: Sorry, you are not allowed to do that. data: status: 401 schemas: RouteIndex: type: object description: The WordPress REST API self-description document served at the API root. properties: name: type: string example: Cresilon description: type: string example: Stops bleeding in seconds url: type: string format: uri example: https://cresilon.com home: type: string format: uri example: https://cresilon.com gmt_offset: type: - number - string example: -4 timezone_string: type: string site_logo: type: integer example: 16942 description: Media attachment ID of the site logo. namespaces: type: array items: type: string description: Registered namespaces. 45 observed on 2026-08-04, including wp/v2, oembed/1.0, yoast/v1, jetpack/v4, wpdm and wpdmpp/v1. authentication: type: object additionalProperties: true description: 'Advertised authentication methods. Observed: `application-passwords` with the authorization endpoint.' routes: type: object additionalProperties: true description: Every registered route keyed by path pattern, with methods, args and endpoint metadata. 1,021 observed. _links: type: object additionalProperties: true required: - name - description - url - namespaces - routes User: type: object description: 'A published author. Verified live 2026-08-04: the collection is anonymously readable and holds exactly 1 author (`cresilon`).' properties: id: type: integer example: 211412379 name: type: string example: cresilon url: type: string description: type: string link: type: string format: uri example: https://cresilon.com/author/cresilon/ slug: type: string example: cresilon avatar_urls: type: object additionalProperties: type: string meta: type: object additionalProperties: true _links: type: object additionalProperties: true required: - id - name - slug - link Error: type: object description: The WordPress REST error envelope, verified live against cresilon.com. Note this is NOT RFC 9457 application/problem+json — it is served as application/json with a WordPress-specific shape. properties: code: type: string description: Machine-readable WordPress error code, e.g. `rest_post_invalid_id`. message: type: string description: Human-readable message. data: type: object properties: status: type: integer description: HTTP status code, repeated in the body. params: type: object additionalProperties: type: string details: type: object additionalProperties: true required: - status required: - code - message - data headers: XWPTotal: description: Total number of items in the collection. schema: type: integer example: 1 XWPTotalPages: description: Total number of pages in the collection at the current per_page. schema: type: integer example: 1 LinkPagination: description: RFC 8288 Link header carrying `next` and `prev` pagination relations. schema: type: string example: ; rel="next"