openapi: 3.1.0 info: title: Ascend Advanced Therapies Content API (WordPress REST) Careers API version: wp/v2 summary: Public read surface of the Ascend Advanced Therapies corporate site content API. description: Ascend Advanced Therapies publishes its corporate website (ascend-adv.com) on WordPress with the core WordPress REST API enabled and anonymously readable. This specification was DERIVED by discovering the live route index at https://www.ascend-adv.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. The surface exposes the company's News & Insights posts, site pages, media library, taxonomy (categories and tags), site search, content-type and taxonomy metadata, and the `awsm_job_openings` custom post type that backs the Careers listings. Write operations exist on the same routes but require authentication (WordPress Application Passwords) and are not documented here. This is not a product API offered by Ascend to customers; it is the content API of their marketing site, captured for discovery purposes. contact: name: Ascend Advanced Therapies url: https://www.ascend-adv.com/contact-us/ email: hello@www.ascend-adv.com x-apis-io-provenance: method: derived source: https://www.ascend-adv.com/wp-json/ derived_on: '2026-07-19' note: Routes enumerated from the live wp-json discovery document (328 routes across 12 namespaces); each operation below was probed anonymously and returned 200. Schemas reflect fields observed in live responses. No fabricated operations. servers: - url: https://www.ascend-adv.com/wp-json description: Production tags: - name: Careers description: Job openings custom post type. paths: /wp/v2/awsm_job_openings: get: tags: - Careers operationId: listJobOpenings summary: List job openings description: Lists the `awsm_job_openings` custom post type that backs the Careers section of ascend-adv.com. Items carry the standard post envelope plus `meta` and `acf` custom field bags holding the role attributes. parameters: - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/perPage' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/orderby' responses: '200': description: A page of job openings headers: X-WP-Total: $ref: '#/components/headers/XWPTotal' X-WP-TotalPages: $ref: '#/components/headers/XWPTotalPages' content: application/json: schema: type: array items: $ref: '#/components/schemas/JobOpening' '400': $ref: '#/components/responses/InvalidParam' /wp/v2/awsm_job_openings/{id}: get: tags: - Careers operationId: getJobOpening summary: Get a job opening by ID parameters: - $ref: '#/components/parameters/idPath' responses: '200': description: The job opening content: application/json: schema: $ref: '#/components/schemas/JobOpening' '404': $ref: '#/components/responses/NotFound' components: schemas: RenderedText: type: object properties: rendered: type: string protected: type: boolean JobOpening: type: object description: An `awsm_job_openings` custom post type item backing the Careers listings. properties: id: type: integer date: type: string format: date-time date_gmt: type: string format: date-time guid: $ref: '#/components/schemas/RenderedText' modified: type: string format: date-time modified_gmt: type: string format: date-time slug: type: string status: type: string type: type: string link: type: string format: uri title: $ref: '#/components/schemas/RenderedText' content: $ref: '#/components/schemas/RenderedText' excerpt: $ref: '#/components/schemas/RenderedText' author: type: integer template: type: string meta: type: object description: Registered post meta for the job listing. class_list: type: array items: type: string acf: type: object description: Advanced Custom Fields payload for the role. yoast_head_json: type: object _links: type: object Error: type: object description: The WordPress REST error envelope. Not RFC 9457 problem+json; errors are returned as application/json with a machine-readable `code`, a human `message`, and a `data` object carrying the HTTP status and any per-parameter validation details. required: - code - message - data properties: code: type: string description: Machine-readable error code. examples: - rest_no_route - rest_post_invalid_id - rest_invalid_param - rest_forbidden message: type: string description: Human-readable error message. data: type: object properties: status: type: integer params: type: object additionalProperties: type: string details: type: object parameters: page: name: page in: query description: Current page of the collection. schema: type: integer minimum: 1 default: 1 perPage: name: per_page in: query description: Maximum number of items to return per page. schema: type: integer minimum: 1 maximum: 100 default: 10 order: name: order in: query schema: type: string enum: - asc - desc default: desc orderby: name: orderby in: query schema: type: string enum: - date - id - include - title - slug - modified - relevance default: date search: name: search in: query description: Limit results to those matching a string. schema: type: string idPath: name: id in: path required: true description: Unique identifier for the resource. schema: type: integer responses: NotFound: description: The requested resource 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) headers: XWPTotalPages: description: Total number of pages available at the current per_page size. schema: type: integer example: 55 XWPTotal: description: Total number of items in the unpaginated collection. schema: type: integer example: 55 securitySchemes: applicationPassword: type: http scheme: basic description: WordPress Application Passwords. Advertised by the API index at `authentication.application-passwords`, authorized at https://www.ascend-adv.com/wp-admin/authorize-application.php. Required only for write operations and for privileged reads (for example /wp/v2/settings, which returns 401 anonymously). All operations documented in this specification are anonymously readable.