API and MCP
The archive’s search, for your code: free during the beta
The same search the site runs, as a read-only REST API and as an MCP server for AI assistants. Every count, time and citation matches what the site shows.
Quick start
- REST
https://api.govtube.us/v1- MCP
https://api.govtube.us/mcp(streamable HTTP)- Reference
- https://api.govtube.us/docs
- Key
- No key needed during the beta.
curl 'https://api.govtube.us/v1/search?q=appropriations&max_videos=1&max_instances_per_video=1'Endpoints
Six public GET endpoints. All are read-only and return JSON.
| Endpoint | Returns | Parameters | Limits |
|---|---|---|---|
GET /v1/search | Every instance of a query, grouped by video, newest first | q (required); speaker, source, from, to (dates); max_videos; max_instances_per_video; sort; cursor | q up to 200 characters and 12 tokens; max_videos 1–25 (default 10); max_instances_per_video 1–20 (default 5); sort newest (default) or most_instances |
GET /v1/videos/{video_id} | One video: metadata, playback asset, rights and use restrictions | video_id | — |
GET /v1/videos/{video_id}/instances | Page through one video’s matches by passage | q (required); offset; limit; speaker | offset ≥ 0 (default 0); limit 1–100 (default 20); both count passages |
GET /v1/videos/{video_id}/transcript | Speaker turns in a time window | from_ms, to_ms (both required) | at most 5 minutes per request |
GET /v1/citations/{citation_id} | Resolve a citation: status after corrections, quoted words, context | citation_id (gt2.… or gd2.…; older gt1.… and gd1.… still work) | — |
GET /v1/coverage | What the archive holds: sessions, totals, last update, gaps | none | — |
Connect an AI assistant (MCP)
GovTube works as a connector in Claude, ChatGPT and coding tools. No sign-in or key is needed. Every tool only reads from the archive, so it is safe to allow and to retry.
Claude (web, desktop and mobile)
- Open Customize, then Connectors.
- Choose Add custom connector.
- Paste https://api.govtube.us/mcp as the server URL.
- If you’re asked how people sign in, choose No sign-in.
- Choose Add. In a chat, turn GovTube on from the + menu, under Connectors.
ChatGPT
- On chatgpt.com, open Plugins and choose the + button, then Add custom MCP server.
- Name it GovTube and paste https://api.govtube.us/mcp as the URL.
- For authentication, choose No authentication.
- Confirm the warning, then choose Create as a plugin.
Claude Code
claude mcp add --transport http govtube https://api.govtube.us/mcpOr share it with a project in .mcp.json:
{
"mcpServers": {
"govtube": {
"type": "http",
"url": "https://api.govtube.us/mcp"
}
}
}Cursor
Or add it to ~/.cursor/mcp.json:
{
"mcpServers": {
"govtube": {
"url": "https://api.govtube.us/mcp"
}
}
}VS Code
Add it to .vscode/mcp.json in your workspace, or run MCP: Add Server from the Command Palette and choose HTTP:
{
"servers": {
"govtube": {
"type": "http",
"url": "https://api.govtube.us/mcp"
}
}
}Any other client
- URL
https://api.govtube.us/mcp- Transport
- Streamable HTTP
- Sign-in
- None
If we gave you an API key for higher limits, send it as Authorization: Bearer gtk_…. Keep it out of prompts and shared files.
Try asking
- Using GovTube, find every time “no tax on tips” was said on the House floor this year. Quote each one exactly and link to the moment.
- What was said about tariffs in Congress last week? Use GovTube, give the speaker and time for each quote, and say which speakers are confirmed.
- Is this GovTube citation still accurate after corrections? gt2.…
- What does GovTube cover right now, and when was it last updated?
| Tool | Purpose | Key arguments and limits |
|---|---|---|
govtube_search_instances | Spoken instances of a query, grouped by video, one small page at a time | query; speaker (confirmed speakers; include_unreviewed to add on-screen-name matches), source, date_from, date_to; detail compact (default: 5 videos × 3 passages) or full (10 × 5, up to 25 × 20); max_videos; max_instances_per_video; sort newest (default) or most_instances; cursor |
govtube_list_video_instances | Page through one video by passage | video_id, query, offset, limit 1–100 (default 10; both count passages); speaker, include_unreviewed; detail |
govtube_get_transcript_window | Speaker turns around a moment | video_id, start_ms, end_ms (at most 5 minutes) |
govtube_get_video | Metadata, speakers, playback asset, rights and use restrictions | video_id |
govtube_resolve_citation | Check a cited instance after corrections; returns context and a share link | citation_id (gt2.… or gd2.…; older gt1.… and gd1.… still work) |
govtube_get_coverage | Totals by source, date range, last update, items awaiting review, gaps | none |
govtube_list_sessions | The indexed sessions, newest first, one page at a time | source, date_from, date_to; limit 1–100 (default 25); cursor |
Before you build
Counts and paging
counts covers the whole result set. When counts.exact is false, the numbers are lower bounds: show “at least”.
Videos come newest first. Pass next_cursor back as cursor to continue; it only works with the same query and sort. Page inside one video with /instances, by passage.
Playback and citations
play_from_ms is 5 seconds before the words. When playable is false, the timing isn’t verified: don’t play it, but you can still show and cite it.
Every instance id is a durable citation. /v1/citations/{id} says whether it is still exact after corrections. Signed ids (gt2.…, gd2.…) come only from GovTube. Older unsigned ids (gt1.…, gd1.…) keep working: their answer has signed false, shows only words found in the current transcript, and gives a canonical_id to share instead.
Official transcripts have no timing (timing_granularity is document): their times are null, position gives the paragraph and word, document_url links the text, document_highlight_url (when not null) opens it at the matched words, and their ids start with gd2. (unsigned: gd1.).
Show the rights
/v1/videos/{id} returns rights: the source, its rights in a few words, and its use_restrictions.
Show them next to any clip you publish. House floor video, for example, may not be used for any political purpose.