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
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 0.4.3

Generated from the API document of 2026-10-04, evening, whose descriptions lead with credits. `MeResponse.period_resets_at` is a string on every plan.

## 0.4.2

Generated from the v1 document of 2026-10-04, which prices every read in credits. `PremiumQuote` replaces the `TranscriptPurchaseQuote` type.
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.4.2
0.4.3
23 changes: 10 additions & 13 deletions fern/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -983,7 +983,7 @@
},
"rows": {
"type": "integer",
"description": "Rows the whole video uses, 75 rows per 15-minute block. A row is 4 credits, so Premium uses 300 credits per block."
"description": "Credits the whole video uses, in rows: 300 credits per 15-minute block (75 rows; a row is 4 credits)."
}
},
"required": [
Expand Down Expand Up @@ -1263,11 +1263,8 @@
"description": "The account email with the local part masked after its first character, e.g. z***@example.com. Null when the account has none."
},
"period_resets_at": {
"type": [
"string",
"null"
],
"description": "ISO 8601 time the plan credits reset: 00:00 UTC on the first of next month. Null on the free plan, whose 1,000 credits a month reset on usage.credits.plan.resets_at."
"type": "string",
"description": "ISO 8601 time the plan credits reset: 00:00 UTC on the first of next month, on every plan."
},
"tier": {
"type": "string",
Expand All @@ -1293,15 +1290,15 @@
"properties": {
"rows_used": {
"type": "integer",
"description": "Plan credits used this month, in rows: usage.credits.plan.used divided by 4, rounded up. A row is 4 credits."
"description": "Plan credits used this month, in rows (a row is 4 credits): usage.credits.plan.used divided by 4, rounded up."
},
"rows_remaining": {
"type": "integer",
"description": "Credits left from the plan, grants and top-ups, on-demand excluded, in rows: divided by 4, rounded up. A row is 4 credits."
"description": "Credits left from the plan, grants and top-ups, on-demand excluded, in rows (a row is 4 credits): divided by 4, rounded up."
},
"monthly_rows": {
"type": "integer",
"description": "The plan credits a month, in rows: usage.credits.plan.credits divided by 4 when the plan has a limit. A row is 4 credits."
"description": "Plan credits a month, in rows (a row is 4 credits): usage.credits.plan.credits divided by 4 when the plan has a limit."
},
"current_spend_cents": {
"type": "integer",
Expand Down Expand Up @@ -1524,7 +1521,7 @@
},
"rows_allotted": {
"type": "integer",
"description": "On a paid plan, its monthly allowance in rows; a row is 4 credits. On the free plan, the account's row allotment from before credits (1,000 for a new account). The free plan uses 1,000 credits a month, read from usage.credits on GET /v1/me."
"description": "Plan credits a month, in rows (a row is 4 credits), on a paid plan. On the free plan, the account's allotment from before credits (1,000 for a new account). The free plan has 1,000 credits a month; read the balance from usage.credits on GET /v1/me."
},
"next": {
"type": "string",
Expand Down Expand Up @@ -3762,7 +3759,7 @@
},
"watch_url": {
"type": "string",
"description": "Site-relative watch URL with the timestamp, e.g. /watch?v=...&t=4787."
"description": "Absolute watch URL on arcmira.com with the timestamp, e.g. https://arcmira.com/watch?v=...&t=4787."
},
"cite_line": {
"type": [
Expand Down Expand Up @@ -5907,7 +5904,7 @@
},
"rows_billed": {
"type": "integer",
"description": "Rows this captions read used: 1 row per started 15 minutes, and a row is 4 credits. 0 on a repeat of the same video, quality, language, and range inside the 7 day dedupe window. Premium reads report 0, because the Premium transcript job carries their charge."
"description": "Credits this captions read used, in rows (a row is 4 credits): 4 credits per started 15 minutes. 0 on a repeat of the same video, quality, language, and range inside the 7 day dedupe window. Premium reads report 0, because the Premium transcript job carries their charge."
},
"as_of": {
"type": [
Expand Down Expand Up @@ -10791,7 +10788,7 @@
],
"operationId": "quote_transcription",
"summary": "Quote a whole-video Premium transcript",
"description": "Optional free quote: what a Premium read of this video would use right now, as rows and credits (a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.",
"description": "Optional free quote: what a Premium read of this video would use right now, as credits (charge; quote.rows restates it in rows, and a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.",
"security": [
{
"bearerAuth": []
Expand Down
2 changes: 1 addition & 1 deletion reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -1373,7 +1373,7 @@ client.transcripts.get(
<dl>
<dd>

Optional free quote: what a Premium read of this video would use right now, as rows and credits (a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.
Optional free quote: what a Premium read of this video would use right now, as credits (charge; quote.rows restates it in rows, and a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.
</dd>
</dl>
</dd>
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.4.2'
__version__ = '0.4.3'
homepage = "https://arcmira.com"
docs = "https://arcmira.com/docs"
api_base = "https://api.arcmira.com/v1"
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.4.2",
"User-Agent": "arcmira/0.4.3",
"X-Fern-Language": "Python",
"X-Fern-Runtime": f"python/{platform.python_version()}",
"X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
Expand Down
4 changes: 2 additions & 2 deletions src/arcmira/transcripts/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ def get(

def quote(self, video_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> PremiumQuote:
"""
Optional free quote: what a Premium read of this video would use right now, as rows and credits (a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.
Optional free quote: what a Premium read of this video would use right now, as credits (charge; quote.rows restates it in rows, and a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.

Parameters
----------
Expand Down Expand Up @@ -469,7 +469,7 @@ async def main() -> None:

async def quote(self, video_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> PremiumQuote:
"""
Optional free quote: what a Premium read of this video would use right now, as rows and credits (a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.
Optional free quote: what a Premium read of this video would use right now, as credits (charge; quote.rows restates it in rows, and a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.

Parameters
----------
Expand Down
4 changes: 2 additions & 2 deletions src/arcmira/transcripts/raw_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ def quote(
self, video_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> HttpResponse[PremiumQuote]:
"""
Optional free quote: what a Premium read of this video would use right now, as rows and credits (a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.
Optional free quote: what a Premium read of this video would use right now, as credits (charge; quote.rows restates it in rows, and a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.

Parameters
----------
Expand Down Expand Up @@ -1002,7 +1002,7 @@ async def quote(
self, video_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> AsyncHttpResponse[PremiumQuote]:
"""
Optional free quote: what a Premium read of this video would use right now, as rows and credits (a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.
Optional free quote: what a Premium read of this video would use right now, as credits (charge; quote.rows restates it in rows, and a row is 4 credits), where the credits would come from, and max_on_demand_cents, the on-demand budget the read would need beyond the plan's credits within the account limit. It does not reserve credits or budget and does not start a transcript. A video with no known duration, or one past the 12 hour cap, answers 400 invalid_query with param video_id.

Parameters
----------
Expand Down
4 changes: 2 additions & 2 deletions src/arcmira/types/me_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ class MeResponse(UniversalBaseModel):
The account email with the local part masked after its first character, e.g. z***@example.com. Null when the account has none.
"""

period_resets_at: typing.Optional[str] = pydantic.Field(default=None)
period_resets_at: str = pydantic.Field()
"""
ISO 8601 time the plan credits reset: 00:00 UTC on the first of next month. Null on the free plan, whose 1,000 credits a month reset on usage.credits.plan.resets_at.
ISO 8601 time the plan credits reset: 00:00 UTC on the first of next month, on every plan.
"""

tier: str = pydantic.Field()
Expand Down
6 changes: 3 additions & 3 deletions src/arcmira/types/me_response_usage.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@
class MeResponseUsage(UniversalBaseModel):
rows_used: int = pydantic.Field()
"""
Plan credits used this month, in rows: usage.credits.plan.used divided by 4, rounded up. A row is 4 credits.
Plan credits used this month, in rows (a row is 4 credits): usage.credits.plan.used divided by 4, rounded up.
"""

rows_remaining: int = pydantic.Field()
"""
Credits left from the plan, grants and top-ups, on-demand excluded, in rows: divided by 4, rounded up. A row is 4 credits.
Credits left from the plan, grants and top-ups, on-demand excluded, in rows (a row is 4 credits): divided by 4, rounded up.
"""

monthly_rows: int = pydantic.Field()
"""
The plan credits a month, in rows: usage.credits.plan.credits divided by 4 when the plan has a limit. A row is 4 credits.
Plan credits a month, in rows (a row is 4 credits): usage.credits.plan.credits divided by 4 when the plan has a limit.
"""

current_spend_cents: int = pydantic.Field()
Expand Down
2 changes: 1 addition & 1 deletion src/arcmira/types/signup_verified_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class SignupVerifiedResponse(UniversalBaseModel):

rows_allotted: int = pydantic.Field()
"""
On a paid plan, its monthly allowance in rows; a row is 4 credits. On the free plan, the account's row allotment from before credits (1,000 for a new account). The free plan uses 1,000 credits a month, read from usage.credits on GET /v1/me.
Plan credits a month, in rows (a row is 4 credits), on a paid plan. On the free plan, the account's allotment from before credits (1,000 for a new account). The free plan has 1,000 credits a month; read the balance from usage.credits on GET /v1/me.
"""

next: str = pydantic.Field()
Expand Down
2 changes: 1 addition & 1 deletion src/arcmira/types/transcript_quote.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class TranscriptQuote(UniversalBaseModel):

rows: int = pydantic.Field()
"""
Rows the whole video uses, 75 rows per 15-minute block. A row is 4 credits, so Premium uses 300 credits per block.
Credits the whole video uses, in rows: 300 credits per 15-minute block (75 rows; a row is 4 credits).
"""

if IS_PYDANTIC_V2:
Expand Down
2 changes: 1 addition & 1 deletion src/arcmira/types/transcript_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class TranscriptResponse(UniversalBaseModel):

rows_billed: int = pydantic.Field()
"""
Rows this captions read used: 1 row per started 15 minutes, and a row is 4 credits. 0 on a repeat of the same video, quality, language, and range inside the 7 day dedupe window. Premium reads report 0, because the Premium transcript job carries their charge.
Credits this captions read used, in rows (a row is 4 credits): 4 credits per started 15 minutes. 0 on a repeat of the same video, quality, language, and range inside the 7 day dedupe window. Premium reads report 0, because the Premium transcript job carries their charge.
"""

as_of: typing.Optional[str] = pydantic.Field(default=None)
Expand Down
2 changes: 1 addition & 1 deletion src/arcmira/types/transcript_search_chunk.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class TranscriptSearchChunk(UniversalBaseModel):

watch_url: str = pydantic.Field()
"""
Site-relative watch URL with the timestamp, e.g. /watch?v=...&t=4787.
Absolute watch URL on arcmira.com with the timestamp, e.g. https://arcmira.com/watch?v=...&t=4787.
"""

cite_line: typing.Optional[str] = pydantic.Field(default=None)
Expand Down
Loading