openapi: 3.1.0 info: title: KSQ Therapeutics Media API version: wp/v2 summary: Anonymously readable WordPress REST content surface behind ksqtx.com. description: The read-only content surface KSQ Therapeutics exposes at https://ksqtx.com/wp-json. KSQ Therapeutics is a clinical-stage biotechnology company in Lexington, Massachusetts that applies genome-scale CRISPR/Cas9 functional genomic screening — its CRISPRomics platform — to identify therapeutic targets, and develops CRISPR/Cas9-engineered tumor-infiltrating lymphocyte (eTIL) therapies and small molecules in oncology. It runs no developer program and markets no product API. This document is an API Evangelist derivation of the WordPress REST route index the site publishes at /wp-json/, restricted to operations verified to return data anonymously on 2026-08-23. Every parameter below appears verbatim in that route index under the endpoint args. Write operations and the whole administrative surface — /wp/v2/settings, /wp/v2/users, /wp/v2/plugins, /wp/v2/themes, and the aioseo/v1, cky/v1, redirection/v1, divi/v1, wp-block-editor/v1, wp-site-health/v1 and wp-abilities/v1 namespaces — return HTTP 401 rest_forbidden anonymously and are deliberately excluded. contact: name: KSQ Therapeutics url: https://ksqtx.com/ email: info@ksqtx.com x-api-evangelist-provenance: 'Derived by the API Evangelist enrichment pipeline on 2026-08-23 from the live WordPress REST route index at https://ksqtx.com/wp-json/ (349 routes across 9 namespaces: oembed/1.0, aioseo/v1, cky/v1, redirection/v1, divi/v1, wp/v2, wp-site-health/v1, wp-block-editor/v1, wp-abilities/v1) and verified against live anonymous responses on that date. Collection counts quoted in descriptions were read from the X-WP-Total response header. KSQ Therapeutics publishes no OpenAPI, no developer documentation and no API reference for this surface; the humanURL in apis.yml points at the upstream WordPress REST handbook that defines the wp/v2 contract. Nothing here was obtained with credentials.' servers: - url: https://ksqtx.com/wp-json description: Production content API tags: - name: media description: Media API operations on the ksqtx.com WordPress deployment. paths: /wp/v2/media: get: tags: - media operationId: listMedia summary: List media attachments description: Lists the media library. 235 attachments returned anonymously on 2026-08-23 (X-WP-Total) — the site imagery, leadership and board headshots, pipeline graphics, poster PDFs and the homepage background video. responses: '200': description: Success. content: application/json: schema: type: array items: type: object headers: X-WP-Total: description: Total number of items in the unpaginated collection. schema: type: integer X-WP-TotalPages: 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 '400': description: Invalid parameter — one or more query arguments failed WordPress REST argument validation. content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: rest_forbidden — the requested scope or route requires authentication. Returned for context=edit and for every administrative namespace on this deployment. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: rest_no_route or rest_post_invalid_id — no route matched, or the requested item does not exist. content: application/json: schema: $ref: '#/components/schemas/Error' 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: 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: search in: query description: Limit results to those matching a string. schema: type: string - name: after in: query description: Limit response to posts published after a given ISO8601 compliant date. schema: type: string format: date-time - name: modified_after in: query description: Limit response to posts modified 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: modified_before in: query description: Limit response to posts modified before a given ISO8601 compliant date. schema: type: string format: date-time - 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: search_semantics in: query description: How to interpret the search input. schema: type: string enum: - exact - 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 default: date - 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: 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: 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: - inherit - private - trash default: inherit - name: media_type in: query description: Limit result set to attachments of a particular media type or media types. schema: type: array items: type: string enum: - image - video - text - application - audio - name: mime_type in: query description: Limit result set to attachments of a particular MIME type or MIME types. schema: type: array items: type: string /wp/v2/media/{id}: get: tags: - media operationId: getMediaItem summary: Get a media attachment by id description: Returns a single attachment including source_url, mime_type and the generated size variants under media_details.sizes. responses: '200': description: Success. content: application/json: schema: type: object '400': description: Invalid parameter — one or more query arguments failed WordPress REST argument validation. content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: rest_forbidden — the requested scope or route requires authentication. Returned for context=edit and for every administrative namespace on this deployment. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: rest_no_route or rest_post_invalid_id — no route matched, or the requested item does not exist. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: - name: id in: path required: true description: Unique identifier for the resource. schema: type: integer - name: id in: query description: Unique identifier for the post. 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 components: schemas: Error: type: object description: The WordPress REST API error envelope. Not RFC 9457 problem+json — served as application/json. required: - code - message - data properties: code: type: string description: Machine-readable error slug, e.g. rest_no_route, rest_forbidden, rest_post_invalid_id. examples: - rest_no_route message: type: string description: Human-readable message. examples: - No route was found matching the URL and request method. data: type: object description: Error payload. Always carries the HTTP status; parameter errors add params and details. properties: status: type: integer examples: - 404