Skip to content

Commit 767a144

Browse files
Chandler Caseyclaude
andcommitted
2.4.1: monitor billing in the docs (every check is 1 credit)
Since 2026-10-01 every monitor check costs 1 credit whether or not it finds new videos, and so does the read at creation that records what is already there; a failed listing stays free. The README and the create/check doc comments still said the baseline and quiet checks were free. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V2tZj5bJ3BQgp5mK97hq1A
1 parent 7afa14a commit 767a144

6 files changed

Lines changed: 25 additions & 12 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@
33
All notable changes to this project are documented here. This project follows
44
[Semantic Versioning](https://semver.org/).
55

6+
## [2.4.1] - 2026-10-02
7+
8+
### Fixed
9+
10+
- Monitor billing in the README and the `create` / `check` doc comments. Since
11+
2026-10-01 every monitor check costs 1 credit whether or not it finds new
12+
videos, and so does the read at creation that records what is already there;
13+
a check whose listing fails stays free. The docs still described the old
14+
rules (free baseline, free quiet checks). No code changes.
15+
616
## [2.4.0] - 2026-09-27
717

818
### Added

‎README.md‎

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,12 @@ await tf.health(); // unauthenticated livene
121121
## Monitors (2.4.0+)
122122

123123
Watch a YouTube channel or a TikTok/Instagram profile for new videos. Creating
124-
one records a free baseline and starts scheduled checks; existing videos are
125-
skipped. Checks with no new videos are free. A check finding videos costs
126-
1 credit, plus transcript charges when enabled. See [monitor docs](https://transcriptfetch.com/docs/monitors)
127-
for plan limits, audio billing, retention and webhook verification.
124+
one reads the target once to record what is already there (existing videos are
125+
skipped) and starts scheduled checks. Every check costs 1 credit whether or not
126+
it finds new videos, and so does that first read; caption transcripts cost 1
127+
credit more each when enabled. A check whose listing fails is free. See
128+
[monitor docs](https://transcriptfetch.com/docs/monitors) for plan limits, audio
129+
billing, retention and webhook verification.
128130

129131
```ts
130132
const tf = new TranscriptFetch({ timeout: 120_000 });
@@ -147,7 +149,7 @@ await tf.monitors.update(monitor.id, { status: "paused" });
147149
await tf.monitors.update(monitor.id, { webhookUrl: null, name: null, transcripts: false });
148150
// Omitted settings stay unchanged. null clears webhookUrl/name.
149151
await tf.monitors.update(monitor.id, { status: "active" });
150-
const check = await tf.monitors.check(monitor.id); // may spend credits
152+
const check = await tf.monitors.check(monitor.id); // 1 credit, found or not
151153
if (check.error) console.error(check.error); // listing failure, even with HTTP 200
152154
await tf.monitors.delete(monitor.id); // removes events too
153155
```

‎package-lock.json‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "transcriptfetch",
3-
"version": "2.4.0",
3+
"version": "2.4.1",
44
"description": "Official Node.js/TypeScript SDK for the TranscriptFetch API: a production transcript API for YouTube, TikTok, Instagram and direct media URLs - captions in about a second, automatic AI speech-to-text when none exist - plus search, channel and playlist listing, as clean typed data.",
55
"keywords": [
66
"youtube",

‎src/resources/monitors.ts‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ function settings(options: UpdateMonitorOptions): Record<string, unknown> {
5555
export class Monitors {
5656
constructor(private readonly client: TranscriptFetch) {}
5757

58-
/** Create a scheduled monitor. Baseline is free; only later videos produce events.
59-
* Save webhookSecret now: it is only returned on creation. */
58+
/** Create a scheduled monitor. Creation reads the target once (1 credit) and skips the
59+
* videos already there; only later videos produce events, and every later check costs
60+
* 1 credit, found or not. Save webhookSecret now: it is only returned on creation. */
6061
async create(target: string, options: CreateMonitorOptions = {}): Promise<Monitor> {
6162
const body = { ...settings(options), target, type: options.type, platform: options.platform, tab: options.tab };
6263
return normalizeMonitor(await this.client.request("POST", BASE, {
@@ -85,7 +86,7 @@ export class Monitors {
8586
return env.data as MonitorDeleted;
8687
}
8788

88-
/** Check now (even when paused). New videos cost credits; inspect error for listing failures. */
89+
/** Check now (even when paused): 1 credit, found or not; inspect error for listing failures. */
8990
async check(monitorId: string, options: { idempotencyKey?: string } = {}): Promise<MonitorCheck> {
9091
return normalizeMonitorCheck(await this.client.request("POST", `${path(monitorId)}/check`, {
9192
idempotent: true, idempotencyKey: options.idempotencyKey,

‎src/version.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
/** The SDK version, surfaced in the User-Agent header. Kept in sync with package.json. */
2-
export const VERSION = "2.4.0";
2+
export const VERSION = "2.4.1";

0 commit comments

Comments
 (0)