Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/juvenescence-posts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Juvenescence Content API (WordPress REST API) Posts API
version: wp/v2
description: Anonymously readable content API for juvlabs.com, the corporate site of Juvenescence Limited, derived from the WordPress REST route index the site publishes at https://juvlabs.com/wp-json/. It exposes Juvenescence's news stream (57 posts across Press Releases, In the News, Juv on the Road, Publications and Videos), the 35 corporate, science, pipeline and leadership-biography pages, a 466-item media library, the category and tag taxonomies, cross-content search, and the site's registered `portfolio` custom post type (registered and publicly queryable, but empty at the time of derivation). Juvenescence runs no developer program and publishes no hand-authored specification; this document is a faithful derivation of the routes, parameters, defaults and enums the site itself advertises, restricted to the read operations verified to return HTTP 200 without credentials on 2026-08-23. Write operations are registered on the same routes but are authenticated administrative endpoints, not a public API offering, and are deliberately not modelled here. The routes that require credentials on this install (`/wp/v2/users`, `/wp/v2/settings`, `/wp/v2/plugins`, `/wp/v2/themes`, `/wp/v2/block-types`, `/wp/v2/menu-locations` and the whole `wp-abilities/v1` namespace) are likewise excluded, and are recorded in the repository's authentication and conformance artifacts instead.
contact:
name: Juvenescence Limited
url: https://juvlabs.com/contact-us/
termsOfService: https://juvlabs.com/terms-of-service/
x-derived-from: https://juvlabs.com/wp-json/
x-derived-on: '2026-08-23'
x-api-evangelist-note: Derived by the API Evangelist enrichment pipeline from the provider-published WordPress REST route index at https://juvlabs.com/wp-json/ and https://juvlabs.com/wp-json/wp/v2; not authored or endorsed by Juvenescence Limited. Every operation was verified to return HTTP 200 without credentials on 2026-08-23.
servers:
- url: https://juvlabs.com/wp-json
description: Production
security:
- {}
tags:
- name: Posts
description: Juvenescence press releases, in-the-news items, conference reports, publications and videos
paths:
/wp/v2/posts:
get:
operationId: listPosts
tags:
- Posts
summary: List news posts
description: Lists Juvenescence's news stream. 57 posts were published at derivation, distributed across the categories In the News (17), Juv on the Road (17), Press Releases (13), Publications (5) and Videos (5). Returns `X-WP-Total`, `X-WP-TotalPages` and an RFC 8288 `Link` header. Only `status=publish` is readable without credentials.
security:
- {}
responses:
'200':
description: A page of news posts.
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 carrying `rel="next"` and `rel="prev"`.
schema:
type: string
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Post'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
parameters:
- $ref: '#/components/parameters/context'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/per_page'
- $ref: '#/components/parameters/search'
- $ref: '#/components/parameters/after'
- $ref: '#/components/parameters/before'
- $ref: '#/components/parameters/modified_after'
- $ref: '#/components/parameters/modified_before'
- $ref: '#/components/parameters/author'
- $ref: '#/components/parameters/author_exclude'
- $ref: '#/components/parameters/exclude'
- $ref: '#/components/parameters/include'
- $ref: '#/components/parameters/search_semantics'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/order'
- $ref: '#/components/parameters/postOrderby'
- $ref: '#/components/parameters/search_columns'
- $ref: '#/components/parameters/slugFilter'
- $ref: '#/components/parameters/statusFilter'
- $ref: '#/components/parameters/tax_relation'
- name: categories
in: query
description: Limit result set to items with specific terms assigned in the categories taxonomy. Populated category IDs on this site are 5 (Press Releases), 6 (In the News), 50 (Juv on the Road), 52 (Publications) and 53 (Videos).
schema:
type: array
items:
type: integer
- name: categories_exclude
in: query
description: Limit result set to items except those with specific terms assigned in the categories taxonomy.
schema:
type: array
items:
type: integer
- name: tags
in: query
description: Limit result set to items with specific terms assigned in the tags taxonomy. The populated tags on this site name Juvenescence portfolio companies and collaborators — 21 (Juvenescence), 25 (MDI Therapeutics), 28 (Napa Therapeutics), 35 (Souvien Therapeutics), 36 (The Buck Institute).
schema:
type: array
items:
type: integer
- name: tags_exclude
in: query
description: Limit result set to items except those with specific terms assigned in the tags taxonomy.
schema:
type: array
items:
type: integer
- name: sticky
in: query
description: Limit result set to items that are sticky.
schema:
type: boolean
- name: ignore_sticky
in: query
description: Whether to ignore sticky posts or not.
schema:
type: boolean
default: true
- name: format
in: query
description: Limit result set to items assigned one or more given formats.
schema:
type: array
items:
type: string
/wp/v2/posts/{id}:
get:
operationId: getPost
tags:
- Posts
summary: Get a news post
description: Retrieves a single news post by ID, including its rendered `title`, `content` and `excerpt`, its category and tag assignments, and its `_links` relations.
security:
- {}
responses:
'200':
description: The requested news post.
content:
application/json:
schema:
$ref: '#/components/schemas/Post'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
parameters:
- $ref: '#/components/parameters/id'
- $ref: '#/components/parameters/context'
- $ref: '#/components/parameters/password'
components:
parameters:
include:
name: include
in: query
description: Limit result set to specific IDs.
schema:
type: array
items:
type: integer
author_exclude:
name: author_exclude
in: query
description: Ensure result set excludes posts assigned to specific authors.
schema:
type: array
items:
type: integer
author:
name: author
in: query
description: Limit result set to posts assigned to specific authors.
schema:
type: array
items:
type: integer
id:
name: id
in: path
description: Unique identifier for the resource.
schema:
type: integer
required: true
exclude:
name: exclude
in: query
description: Ensure result set excludes specific IDs.
schema:
type: array
items:
type: integer
order:
name: order
in: query
description: Order sort attribute ascending or descending.
schema:
type: string
default: desc
enum:
- asc
- desc
postOrderby:
name: postOrderby
in: query
description: Sort collection by post attribute.
schema:
type: string
default: date
enum:
- author
- date
- id
- include
- modified
- parent
- relevance
- slug
- include_slugs
- title
search_columns:
name: search_columns
in: query
description: Array of column names to be searched.
schema:
type: array
items:
type: string
offset:
name: offset
in: query
description: Offset the result set by a specific number of items.
schema:
type: integer
search_semantics:
name: search_semantics
in: query
description: How to interpret the search input.
schema:
type: string
enum:
- exact
slugFilter:
name: slugFilter
in: query
description: Limit result set to items with one or more specific slugs.
schema:
type: array
items:
type: string
search:
name: search
in: query
description: Limit results to those matching a string.
schema:
type: string
before:
name: before
in: query
description: Limit response to posts published before a given ISO8601 compliant date.
schema:
type: string
format: date-time
modified_before:
name: modified_before
in: query
description: Limit response to posts modified before a given ISO8601 compliant date.
schema:
type: string
format: date-time
statusFilter:
name: statusFilter
in: query
description: Limit result set to posts assigned one or more statuses. Only `publish` is readable without credentials on this install.
schema:
type: array
items:
type: string
default:
- publish
after:
name: after
in: query
description: Limit response to posts published after a given ISO8601 compliant date.
schema:
type: string
format: date-time
tax_relation:
name: tax_relation
in: query
description: Limit result set based on relationship between multiple taxonomies.
schema:
type: string
enum:
- AND
- OR
modified_after:
name: modified_after
in: query
description: Limit response to posts modified after a given ISO8601 compliant date.
schema:
type: string
format: date-time
page:
name: page
in: query
description: Current page of the collection.
schema:
type: integer
default: 1
minimum: 1
password:
name: password
in: query
description: The password for the post if it is password protected.
schema:
type: string
per_page:
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
context:
name: context
in: query
description: Scope under which the request is made; determines fields present in response.
schema:
type: string
default: view
enum:
- view
- embed
- edit
schemas:
Post:
type: object
description: A Juvenescence news item — press release, in-the-news pickup, conference report, publication abstract or video.
properties:
id:
type: integer
description: Unique identifier for the post.
date:
type: string
format: date-time
description: The date the post was published, in the site's timezone.
date_gmt:
type: string
format: date-time
description: The date the post was published, as GMT.
guid:
$ref: '#/components/schemas/Rendered'
modified:
type: string
format: date-time
description: The date the post was last modified, in the site's timezone.
modified_gmt:
type: string
format: date-time
description: The date the post was last modified, as GMT.
slug:
type: string
description: An alphanumeric identifier for the post unique to its type.
status:
type: string
description: A named status for the post.
examples:
- publish
type:
type: string
description: Type of post.
examples:
- post
link:
type: string
format: uri
description: URL to the post on juvlabs.com.
title:
$ref: '#/components/schemas/Rendered'
content:
$ref: '#/components/schemas/Rendered'
excerpt:
$ref: '#/components/schemas/Rendered'
author:
type: integer
description: The ID for the author of the post.
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.
ping_status:
type: string
description: Whether or not the post can be pinged.
sticky:
type: boolean
description: Whether or not the post should be treated as sticky.
format:
type: string
description: The format for the post.
categories:
type: array
items:
type: integer
description: The terms assigned to the post in the category taxonomy.
tags:
type: array
items:
type: integer
description: The terms assigned to the post in the post_tag taxonomy.
_links:
$ref: '#/components/schemas/Links'
Rendered:
type: object
description: A WordPress rendered-content object.
properties:
rendered:
type: string
description: HTML for the field, transformed for display.
Error:
type: object
description: The WordPress REST error envelope. This API does NOT use RFC 9457 application/problem+json; errors are returned as application/json with this shape.
required:
- code
- message
- data
properties:
code:
type: string
description: A machine-readable error code.
examples:
- rest_post_invalid_id
- rest_invalid_param
- rest_no_route
- rest_forbidden
message:
type: string
description: A human-readable error message.
data:
type: object
description: Error detail. Always carries the HTTP status; validation errors also carry `params` and `details` keyed by the offending parameter.
properties:
status:
type: integer
description: The HTTP status code.
params:
type: object
additionalProperties:
type: string
description: Per-parameter validation messages.
details:
type: object
additionalProperties: true
description: Per-parameter structured validation detail.
additionalProperties: true
Links:
type: object
description: HAL-style `_links` relations WordPress attaches to every resource — `self`, `collection`, `about`, `author`, `replies`, `wp:featuredmedia`, `wp:term` and `curies`.
additionalProperties: true
responses:
NotFound:
description: No such resource, or no route matching the URL and method.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
invalidId:
value:
code: rest_post_invalid_id
message: Invalid post ID.
data:
status: 404
noRoute:
value:
code: rest_no_route
message: No route was found matching the URL and request method.
data:
status: 404
BadRequest:
description: Invalid parameter. Returned with code `rest_invalid_param` and a per-parameter `data.params` map, e.g. `per_page must be between 1 (inclusive) and 100 (inclusive)`.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
invalidParam:
value:
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 requested context or route requires credentials. Returned with code `rest_forbidden` when `context=edit` is requested anonymously.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
forbidden:
value:
code: rest_forbidden
message: Sorry, you are not allowed to do that.
data:
status: 401