Latent APIlatent.space ↗
Access Latent Space podcast episodes, newsletters, full transcripts, and search across all posts via 5 structured API endpoints.
What is the Latent API?
The Latent Space API provides 5 endpoints covering the full content catalog of the Latent Space AI engineering publication — including podcast episodes, newsletters, and timestamped transcripts. The get_transcript endpoint returns word-level timing and speaker labels for podcast episodes, while search_posts lets you query across all content by keyword. Each post detail includes body HTML, metadata, and reaction counts.
curl -X GET 'https://api.parse.bot/scraper/521547f0-2179-4187-b87e-57eae46029c7/list_posts?sort=top&type=podcast&limit=5&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace latent-space-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Latent Space SDK — browse posts, search, fetch transcripts, homepage."""
from parse_apis.latent_space_api import LatentSpace, Sort, Type, TranscriptNotFound
client = LatentSpace()
# List newest posts, capped at 5 total items
for post in client.posts.list(sort=Sort.NEW, limit=5):
print(post.title, post.slug, post.reaction_count)
# Search for posts about "transformers", sorted by popularity
result = client.posts.search(query="transformers", sort=Sort.TOP, limit=1).first()
if result:
print(result.title, result.post_date, result.canonical_url)
# Get full post details by slug
episode = client.posts.get(slug="andon")
print(episode.title, episode.subtitle, episode.podcast_duration)
# Fetch transcript for a podcast episode — handle missing transcripts
try:
transcript = episode.transcript()
for segment in transcript.transcript[:3]:
print(segment.start, segment.end, segment.text, segment.speaker)
except TranscriptNotFound as exc:
print(f"No transcript for: {exc.slug}")
# Get homepage featured content
homepage = client.homepages.get()
for post in homepage.newPosts[:3]:
print(post.title, post.slug)
print("exercised: posts.list / posts.search / posts.get / post.transcript / homepages.get")
Fetch a paginated list of posts from the Latent Space archive. Returns post summaries sorted by date or popularity. Supports filtering by content type (e.g. 'podcast'). Paginate via offset; each page returns up to `limit` items.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results. |
| type | string | Content type filter. Known working value: 'podcast'. The upstream API may reject some type/sort combinations. |
| limit | integer | Maximum number of results per page. |
| offset | integer | Number of items to skip for pagination. |
{
"type": "object",
"fields": {
"items": "array of post summary objects"
},
"sample": {
"data": {
"items": [
{
"id": 200799194,
"slug": "bad-envs",
"type": "newsletter",
"title": "How to Stop Shipping Low-Quality RL Environments (with Examples)",
"subtitle": "Your broken harness is actively making the model worse.",
"post_date": "2026-06-05T18:49:40.461Z",
"cover_image": "https://substackcdn.com/image/fetch/...",
"canonical_url": "https://www.latent.space/p/bad-envs",
"reaction_count": 59
}
]
},
"status": "success"
}
}About the Latent API
Content Browsing and Search
The list_posts endpoint returns a paginated array of post summaries from the Latent Space archive. You can sort by date or popularity and filter by content type — the known working value for type is 'podcast'. Pagination is controlled via limit and offset parameters. The search_posts endpoint accepts a required query string and the same sort, limit, and offset parameters, returning matching post summaries. When offset exceeds the available results, the endpoint returns an empty array rather than an error.
Post Details and Transcripts
The get_post endpoint fetches a full post by its slug (obtained from list_posts or search_posts). The response includes id, title, slug, type, body_html, subtitle, post_date, canonical_url, reactions, and complete metadata. For podcast episodes, upload information is also present in the response.
The get_transcript endpoint returns the full timestamped transcript for a given podcast slug. Each segment in the transcript array carries start and end timestamps, text, word-level timing data, and speaker labels. If no transcript exists for a given slug, the endpoint returns a stale_input response with kind: 'input_not_found' rather than a blank or error.
Homepage Data
The get_homepage_data endpoint takes no parameters and returns the current homepage layout, including homeHeroPins, newPosts, topPosts, pinnedPosts, recommendations, and contentBlockData. This is useful for discovering the most recent and featured content without needing to paginate through the full archive.
The Latent API is a managed, monitored endpoint for latent.space — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when latent.space changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official latent.space API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a searchable index of AI engineering topics using
search_postswith keyword queries. - Extract speaker-attributed dialogue from podcast episodes via
get_transcriptfor NLP pipelines. - Sync a local content mirror using
list_postswith date sorting and incrementaloffsetpagination. - Pull full post body HTML from
get_postto feed a summarization or embedding pipeline. - Track featured and trending content changes over time by polling
get_homepage_data. - Filter the archive for podcast-only content using
list_postswithtype: 'podcast'. - Build a citation tool that resolves post slugs to
canonical_urland metadata viaget_post.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Latent Space have an official developer API?+
What does `get_transcript` return, and when does it fail?+
get_transcript returns a data object with post_id, slug, title, and a transcript array. Each segment includes start/end timestamps, text, word-level timing, and speaker labels. Not every post has a transcript — when none is available, the endpoint returns stale_input with kind: 'input_not_found' instead of a null body or HTTP error.Are there any known quirks with `list_posts` filtering?+
type filter has one documented working value: 'podcast'. Some combinations of type and sort parameters may be rejected by the upstream source. Test parameter combinations before assuming a given filter works at scale.Does the API expose individual newsletter subscriber counts or author profile data?+
Can I retrieve comments or discussion threads for a post?+
get_post endpoint returns reactions but does not include comment threads or reply data. You can fork this API on Parse and revise it to add a comments endpoint if that data is needed.