A public, read-only HTTP API over ארכיון טייכר וזרחוביץ׳. No authentication, no API key, no rate limit beyond CDN caching. Responses are JSON except /feed.xml, which is RSS.
Use the MCP endpoint instead of this REST API. It wraps the same catalogue in five read-only tools with descriptions written for a model, handles the recall problem described under Limits, and returns a playable link with every result.
Endpoints
Public endpoints. Anything under /admin is local-only and not part of this API.
Podcast RSS for the 300 most recent playable items.
s-maxage=3600, SWR 24h
POST
/api/mcp
Model Context Protocol endpoint for AI agents.
no-store
Endpoints backing in-app behaviour rather than integration — playback counts, text-to-speech, listening statistics, feedback, reels — are omitted deliberately. They are shaped for this app's UI and may change without notice.
GET /api/search
Every parameter is optional. An unrecognised enum value is silently ignored and the filter falls back to its default — source=spotify returns the whole catalogue rather than an error — so check this table before assuming a wide result set means wide data. The agent tools reject unknown values instead, and name the accepted ones in the error.
Accepted values are generated from the app's own parameter vocabulary, so this table cannot drift from what the endpoint accepts.
Parameter
Type
Description & accepted values
q
string
Free-text query. Every term must substring-match; see Limits below.
Whether media can actually be played. allplayablemetadata_only
format
enum
Segment format. characterduoensemble
eraFilter
Item projections
GET /api/episode/{id}
The full published document for one item, or 404. Ids are theid field from search results; they are stable and safe to store.
GET /api/episode/{id}/related
Returns { parent, parts }. A broadcast split across several recordings exposes its siblings here; unplayable parts are filtered out.
GET /api/episodes
Requires a bounded scope: overview (era and year counts plus segment lifespans), calendar with year, calendar-undated, or era with an era id. An unbounded request is rejected with 400 — the full catalogue is not served in one response. Pass the version from a previous response as v to receive an immutable, cacheable reply.
Resolves up to 250 ids, preserving input order. Aliases are followed; ids that do not resolve come back as null in place rather than being dropped.
Vocabulary and state
/api/catalog/vocabularies returns every distinct value with a usage count, across five kinds: characters, people, tags, contentKinds, segmentIds. /api/catalog/entities serves one kind at a time with kind, q, sort, limit and offset.
Filters like character, actor and tag are exact matches, so read the value from one of these endpoints rather than typing it by hand — a near-miss returns zero results with no indication that the spelling was the problem.
/api/catalog/state returns the catalogue revision, item counts and publication time. Use its version to invalidate anything you cache.
Agent tools
The MCP endpoint exposes these five read-only tools. They run over the same catalogue as the REST endpoints above.
Generated from the tool registry, so this list is exactly what the server advertises.
Tool
Purpose
search_archive
Search ארכיון טייכר וזרחוביץ׳ (about 12,000 items from nine sources, 1990s to today).
sample_actor_characters
Return one distinct playable audio item for each canonical character associated with one performer.
get_episode
Full detail for a single archive item by id, including its untruncated
list_entities
The real values behind the archive's filters, with how many items use each one.
get_archive_overview
How the archive is distributed across eras and calendar years, plus the first and
get_archive_stats
Headline totals for the whole archive: item counts by source, type and
Errors
Errors are JSON with an error string. Some carry a requestId worth quoting if you report a problem.
Status
Meaning
400
Invalid or unbounded request — a bad scope, era id, calendar year, or id batch.
403
The item is not downloadable.
404
No such item, payload, or method.
429
Rate limited. Applies to /api/mcp only.
500
Server error.
502
An upstream audio source failed.
504
The catalogue database did not answer in time.
Limits worth knowing before you build
Search is lexical, not semantic. Query text is normalised (Hebrew final letters folded, geresh and hyphens stripped) and then every term must substring-match. There is no fuzzy matching, stemming or embedding, so a paraphrase of an item's subject will not find it.
There are no transcripts. Only titles, descriptions and AI summaries are searchable. Something said on air but never written down is not findable through this API at any quality of query.
Descriptions are short. They average roughly 200 characters, and a substantial minority of items have none at all. Use aiSummary=true to restrict to items with a written summary.
Foreign names are usually transliterated. Hebrew spellings dominate; searching Latin script alone will miss most matches.
Dates are not all equal. An item carries a broadcast date, an archival date, or a publication date, distinguished by calendar_date_basis and calendar_date_precision. Do not present an approximate archival date as a broadcast fact.
Not everything is playable. Items with availability: "metadata_only" are catalogued but have no media. Filter with availability=playable when that matters.
total is the authoritative filtered count before pagination — derive page counts from it rather than from the length of results.
Integrations may send X-Archive-Client: your-client-name. This optional, self-reported analytics label appears in the private usage report and is not authentication.
Examples
# Free-text search, most relevant first
curl -s -H "X-Archive-Client: my-integration" "/api/search?q=קולדפליי&sort=relevance"
# One character within a date range, playable items only
curl -s "/api/search?character=דודה עדה&from=2024-01-01&to=2024-12-31&availability=playable"
# Long items, second page, no facet block
curl -s "/api/search?minDur=3600&sort=longest&page=2&facets=0"