Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## 0.6.3

Generated from the API document of 2026-11-09.

- Transcript responses expose `base_language` and `translation_languages`.
- Search passages expose `match` (`phrase`, `all_words`, or `partial`) and nullable `line_start_seconds`. Watch links target the matching line when available.
- Refresh reference descriptions for search filters, transcript windows, alert delivery, and temporary service errors.
- Update package descriptions and README introductions for transcript search and monitoring.

## 0.6.2

- Lead the README with tested examples for transcript reads, quotes with source links, and company monitoring.
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Arcmira for Python

Pull YouTube transcripts, search spoken passages, and monitor company mentions with Arcmira. Results include timestamps and source links for research, citations, and agent workflows.
YouTube transcript search and monitoring for your AI: exact quotes, full transcripts and speakers.

[Arcmira](https://arcmira.com) · [Get an API key](https://arcmira.com/docs/authentication) · [API docs](https://arcmira.com/docs) · [Pricing](https://arcmira.com/pricing)

Expand Down Expand Up @@ -154,6 +154,8 @@ Entity filters take ids. Resolve names first; explain a `suggested` match and as

## Use Arcmira with an AI agent

Add "use arcmira" to any question to send it to Arcmira first.

For tasks such as "pull YouTube transcripts", "find quotes with timestamps", "research podcast sponsors", or "monitor company mentions", connect the [Arcmira MCP server](https://github.com/arcmira/mcp). The [agent index](https://arcmira.com/llms.txt) links to current API and citation guidance.

## Reference
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.6.2
0.6.3
118 changes: 90 additions & 28 deletions fern/openapi.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "hatchling.build"
[project]
name = "arcmira"
dynamic = ["version"]
description = "YouTube and podcast transcript search with the official Arcmira Python SDK. Find timestamped quotes, mentions, sponsors and recommendations."
description = "YouTube transcript search and monitoring for your AI: exact quotes, full transcripts and speakers."
readme = "README.md"
license = "Apache-2.0"
license-files = ["LICENSE"]
Expand Down
20 changes: 10 additions & 10 deletions reference.md

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions src/arcmira/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@
TranscriptResult_Pending,
TranscriptResult_Ready,
TranscriptSearchChunk,
TranscriptSearchChunkMatch,
TranscriptSearchResponse,
TranscriptSearchResponseAccess,
TranscriptSearchResponseAccessDetails,
Expand Down Expand Up @@ -582,6 +583,7 @@
"TranscriptResult_Pending": ".types",
"TranscriptResult_Ready": ".types",
"TranscriptSearchChunk": ".types",
"TranscriptSearchChunkMatch": ".types",
"TranscriptSearchResponse": ".types",
"TranscriptSearchResponseAccess": ".types",
"TranscriptSearchResponseAccessDetails": ".types",
Expand Down Expand Up @@ -913,6 +915,7 @@ def __dir__():
"TranscriptResult_Pending",
"TranscriptResult_Ready",
"TranscriptSearchChunk",
"TranscriptSearchChunkMatch",
"TranscriptSearchResponse",
"TranscriptSearchResponseAccess",
"TranscriptSearchResponseAccessDetails",
Expand Down
2 changes: 1 addition & 1 deletion src/arcmira/_package.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Written by scripts/install-generated.py from VERSION.
__version__ = '0.6.2'
__version__ = '0.6.3'
homepage = "https://arcmira.com"
docs = "https://arcmira.com/docs"
api_base = "https://api.arcmira.com/v1"
Expand Down
4 changes: 2 additions & 2 deletions src/arcmira/channels/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def coverage(
self, channel_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> ChannelCoverageResponse:
"""
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; channel backfill is not available yet. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; to ask for a channel, send feedback with its channel id. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down Expand Up @@ -104,7 +104,7 @@ async def coverage(
self, channel_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> ChannelCoverageResponse:
"""
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; channel backfill is not available yet. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; to ask for a channel, send feedback with its channel id. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down
4 changes: 2 additions & 2 deletions src/arcmira/channels/raw_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def coverage(
self, channel_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> HttpResponse[ChannelCoverageResponse]:
"""
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; channel backfill is not available yet. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; to ask for a channel, send feedback with its channel id. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down Expand Up @@ -143,7 +143,7 @@ async def coverage(
self, channel_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> AsyncHttpResponse[ChannelCoverageResponse]:
"""
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; channel backfill is not available yet. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
How many videos of a YouTube channel are searchable, the newest publish date among them, and the split by transcript source class. Call it when a search or mention lookup came back empty, before telling anyone we do not cover a show, and cite indexed_through as the as-of date for mentions and search_indexed_through for transcript search. It cannot request indexing; to ask for a channel, send feedback with its channel id. Free; uses no credits. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down
4 changes: 2 additions & 2 deletions src/arcmira/channels/videos/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def list(
request_options: typing.Optional[RequestOptions] = None,
) -> SyncPager[ChannelVideosResponseEpisodesItem, ChannelVideosResponse]:
"""
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; channel backfill is not available yet. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; this route cannot add a channel. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down Expand Up @@ -110,7 +110,7 @@ async def list(
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncPager[ChannelVideosResponseEpisodesItem, ChannelVideosResponse]:
"""
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; channel backfill is not available yet. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; this route cannot add a channel. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down
4 changes: 2 additions & 2 deletions src/arcmira/channels/videos/raw_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def list(
request_options: typing.Optional[RequestOptions] = None,
) -> SyncPager[ChannelVideosResponseEpisodesItem, ChannelVideosResponse]:
"""
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; channel backfill is not available yet. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; this route cannot add a channel. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down Expand Up @@ -199,7 +199,7 @@ async def list(
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncPager[ChannelVideosResponseEpisodesItem, ChannelVideosResponse]:
"""
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; channel backfill is not available yet. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.
The indexed videos of a YouTube channel, newest first, each with its video_id, title, publish date, duration, view count, and watch_url on arcmira.com. Pass next_cursor as cursor to continue. The signed token binds the route, filters, caller and visibility; invalid or old tokens return invalid_cursor. A first-page media ID fence excludes later insertions, including old-date backfills; edits and deletions to existing videos remain live. Call it for the latest or most recent episode of a show, or to list what a show published in a window, then pass a video_id to GET /v1/mentions/counts video_ids for what that episode mentions or to GET /v1/transcripts/{video_id} to read it. indexed_through is the newest date we hold for the channel. An empty list means nothing is indexed; this route cannot add a channel. Uses 4 credits per video returned past the first 5. Every gate is a typed error whose error.unlock.url names the plan that lifts it; pass src=mcp-tool only from the Arcmira MCP server.

Parameters
----------
Expand Down
2 changes: 1 addition & 1 deletion src/arcmira/core/client_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def get_headers(self) -> typing.Dict[str, str]:
import platform

headers: typing.Dict[str, str] = {
"User-Agent": "arcmira/0.6.2",
"User-Agent": "arcmira/0.6.3",
"X-Fern-Language": "Python",
"X-Fern-Runtime": f"python/{platform.python_version()}",
"X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
Expand Down
Loading
Loading