Public API
Last updated: October 6, 2026
RiverScript has a public, read-only API for connecting transcripts and translations to other services.
Creating an API key
Go to Settings → API and click Create key. The key is shown once, at creation. If you lose it, revoke it and create a new one.
Send the key on every request as a bearer token:
Authorization: Bearer rs_live_...
A request without a valid key, or with a revoked one, returns 401 Unauthorized.
GET /api/v1/transcripts
Returns your completed transcripts and translations, newest first.
GET https://riverscript.com/api/v1/transcripts
GET https://riverscript.com/api/v1/transcripts?limit=15
limit is optional (default 15, maximum 100). The response is a JSON array:
[
{
"id": "b59cd1d1-f7a2-4e3a-b4b6-63bcd8972542",
"title": "Team meeting.mp3",
"text": "Speaker 1:\nLet's start with the roadmap.\n\nSpeaker 2:\nAgreed.",
"language": "eng",
"duration_minutes": 12.4,
"is_translation": false,
"created_at": "2026-08-16T20:41:04.269Z"
}
]id— unique per transcript or translation, stable across requests.title— the filename shown in RiverScript.text— the full text, including speaker labels when diarization was used, and timestamps when the recording was transcribed with timestamps enabled.language— the language code as detected, for exampleenoreng, depending on the model that made the transcription.duration_minutes— recording length.is_translation—trueif this entry is an AI translation of another transcript rather than an original recording.created_at— ISO 8601, UTC.
Total response size is capped at 4 MB. If more items would exceed that, only as many as fit are returned, newest first — the newest one is always included in full, however long it is.
GET /api/v1/transcripts/search
Finds transcripts and translations by what was said in them, and returns the passages around each match rather than the whole text.
GET https://riverscript.com/api/v1/transcripts/search?q=pricing
GET https://riverscript.com/api/v1/transcripts/search?q=pricing&limit=5&from=2026-09-01
q is required. limit is optional (default 10, maximum 25), and from and to take ISO dates.
[
{
"id": "b59cd1d1-f7a2-4e3a-b4b6-63bcd8972542",
"title": "Team meeting.mp3",
"language": "eng",
"duration_minutes": 12.4,
"is_translation": false,
"created_at": "2026-08-16T20:41:04.269Z",
"matched_in": ["text"],
"snippets": ["… we agreed to hold pricing until the next quarter …"]
}
]matched_in— where the phrase was found: the recording's name, its text, or both.snippets— the passages around each match, up to three per recording. Empty when only the name matched.
The search looks for the phrase as written, anywhere inside a word, and is case-insensitive in every language. Fetch the full text of a result with the endpoint below.
GET /api/v1/transcripts/{id}
Returns one transcript or translation with its full text.
GET https://riverscript.com/api/v1/transcripts/b59cd1d1-f7a2-4e3a-b4b6-63bcd8972542
The fields are the same as in the list, plus original_transcript_id, which names the transcript a translation was made from and is null for an original recording.
An id that does not exist, is not finished, or belongs to another account all return the same 404.
GET /api/v1/me
Identifies the account behind an API key.
{
"email": "[email protected]",
"plan": "premium"
}