usage-tab 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -30,13 +30,15 @@ __export(index_exports, {
30
30
  REGISTRY_VERSION: () => REGISTRY_VERSION,
31
31
  UnknownModelError: () => UnknownModelError,
32
32
  calculateCost: () => calculateCost,
33
+ createCostAggregator: () => createCostAggregator,
33
34
  createPriceCalculator: () => createPriceCalculator,
34
35
  createPriceOverride: () => createPriceOverride,
35
36
  normalizeAnthropicUsage: () => normalizeAnthropicUsage,
36
37
  normalizeGoogleUsage: () => normalizeGoogleUsage,
37
38
  normalizeOpenAICompatibleUsage: () => normalizeOpenAICompatibleUsage,
38
39
  normalizeOpenAIUsage: () => normalizeOpenAIUsage,
39
- resolveModel: () => resolveModel2
40
+ resolveModel: () => resolveModel2,
41
+ sumExactUsd: () => sumExactUsd
40
42
  });
41
43
  module.exports = __toCommonJS(index_exports);
42
44
 
@@ -122,8 +124,9 @@ function toCandidate(descriptor) {
122
124
  }
123
125
  function matchExact(pool, id, provider) {
124
126
  if (provider !== void 0) {
125
- const canonical = pool.find((d) => d.provider === provider && d.canonicalId === id);
126
- if (canonical !== void 0) return { unique: canonical };
127
+ const canonical = pool.filter((d) => d.provider === provider && d.canonicalId === id);
128
+ if (canonical.length === 1) return { unique: canonical[0] };
129
+ if (canonical.length > 1) return { ambiguous: canonical };
127
130
  const scoped = pool.filter((d) => d.provider === provider && d.aliases.includes(id));
128
131
  if (scoped.length === 1) return { unique: scoped[0] };
129
132
  if (scoped.length > 1) return { ambiguous: scoped };
@@ -151,16 +154,22 @@ function resolveModel(requestedId, registry, options = {}) {
151
154
  }
152
155
  }
153
156
  if (provider !== void 0) {
154
- const canonical = registry.find(
157
+ const canonical = registry.filter(
155
158
  (d) => d.provider === provider && d.canonicalId === requestedId
156
159
  );
157
- if (canonical !== void 0) {
158
- return {
159
- descriptor: canonical,
160
- matchedBy: "canonical-qualified",
161
- requestedId,
162
- requestedProvider: provider
163
- };
160
+ if (canonical.length === 1) {
161
+ const descriptor = canonical[0];
162
+ if (descriptor !== void 0) {
163
+ return {
164
+ descriptor,
165
+ matchedBy: "canonical-qualified",
166
+ requestedId,
167
+ requestedProvider: provider
168
+ };
169
+ }
170
+ }
171
+ if (canonical.length > 1) {
172
+ throw new AmbiguousAliasError(requestedId, canonical.map(toCandidate));
164
173
  }
165
174
  const scoped = registry.filter(
166
175
  (d) => d.provider === provider && d.aliases.includes(requestedId)
@@ -214,10 +223,16 @@ function resolveModel(requestedId, registry, options = {}) {
214
223
  }
215
224
 
216
225
  // ../../internal/model-registry/src/pricing-period.ts
226
+ var OFFSETLESS_ISO_DATETIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d+)?)?$/;
217
227
  function toTimestamp(value) {
218
- const ms = value instanceof Date ? value.getTime() : Date.parse(value);
228
+ if (value instanceof Date) {
229
+ const ms2 = value.getTime();
230
+ if (Number.isNaN(ms2)) throw new InvalidLookupDateError(String(value));
231
+ return ms2;
232
+ }
233
+ const ms = Date.parse(OFFSETLESS_ISO_DATETIME.test(value) ? `${value}Z` : value);
219
234
  if (Number.isNaN(ms)) {
220
- throw new InvalidLookupDateError(value instanceof Date ? value.toISOString() : value);
235
+ throw new InvalidLookupDateError(value);
221
236
  }
222
237
  return ms;
223
238
  }
@@ -250,7 +265,7 @@ function selectPricingPeriod(periods, at, identity) {
250
265
  }
251
266
 
252
267
  // ../../internal/model-registry/src/generated/registry.ts
253
- var REGISTRY_VERSION = "registry-5af85ce1a47be918";
268
+ var REGISTRY_VERSION = "registry-e5f4ec7eb681a235";
254
269
  var MODEL_REGISTRY = [
255
270
  {
256
271
  canonicalId: "claude-fable-5",
@@ -259,9 +274,30 @@ var MODEL_REGISTRY = [
259
274
  family: "fable",
260
275
  contextWindow: 1e6,
261
276
  pricing: [
262
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "10.00", "output": "50.00", "cachedInput": "1.00", "cacheWrite": "12.50", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
277
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "10.00", "output": "50.00", "cachedInput": "1.00", "cacheWrite": "12.50", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
278
+ ],
279
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
280
+ },
281
+ {
282
+ canonicalId: "claude-fable-5-1",
283
+ provider: "anthropic",
284
+ aliases: [],
285
+ family: "fable",
286
+ contextWindow: 1e6,
287
+ pricing: [
288
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "10.00", "output": "50.00", "cachedInput": "0.25", "cacheWrite": "12.50", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "Cache hits are priced at 0.025x base input on this model (page footnote 1), not the 0.1x every other model uses - cachedInput is read from the table, not derived.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
263
289
  ],
264
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05" }
290
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
291
+ },
292
+ {
293
+ canonicalId: "claude-haiku-3-5",
294
+ provider: "anthropic",
295
+ aliases: [],
296
+ family: "haiku",
297
+ pricing: [
298
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.80", "output": "4.00", "cachedInput": "0.08", "cacheWrite": "1.00", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "Retired on Anthropic-operated platforms; the pricing page still publishes its rate and notes it remains available on Amazon Bedrock and Google Cloud. Included so historical usage can still be priced.", "This model predates 2026, so the conservative 2026-01-01 effectiveFrom cannot price usage from its actual lifetime; no rollout date was published on the source page. A future pass should source real dates before relying on historical lookups for it.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
299
+ ],
300
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
265
301
  },
266
302
  {
267
303
  canonicalId: "claude-haiku-4-5-20251001",
@@ -270,9 +306,59 @@ var MODEL_REGISTRY = [
270
306
  family: "haiku",
271
307
  contextWindow: 2e5,
272
308
  pricing: [
273
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.00", "output": "5.00", "cachedInput": "0.10", "cacheWrite": "1.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
309
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.00", "output": "5.00", "cachedInput": "0.10", "cacheWrite": "1.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
310
+ ],
311
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["canonicalId is the dated snapshot id published on the models overview page; claude-haiku-4-5 is the alias that resolves to it."] }
312
+ },
313
+ {
314
+ canonicalId: "claude-mythos-5",
315
+ provider: "anthropic",
316
+ aliases: [],
317
+ family: "mythos",
318
+ pricing: [
319
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "10.00", "output": "50.00", "cachedInput": "1.00", "cacheWrite": "12.50", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "Limited availability model (page links it to anthropic.com/glasswing); its published rate is recorded as-is.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
274
320
  ],
275
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ['canonicalId is the full dated snapshot id; "claude-haiku-4-5" is the short alias Anthropic documents alongside it \u2014 a genuine alias/canonical-ID resolution case.'] }
321
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
322
+ },
323
+ {
324
+ canonicalId: "claude-mythos-5-1",
325
+ provider: "anthropic",
326
+ aliases: [],
327
+ family: "mythos",
328
+ pricing: [
329
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "10.00", "output": "50.00", "cachedInput": "0.25", "cacheWrite": "12.50", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "Limited availability model (page links it to anthropic.com/glasswing); its published rate is recorded as-is.", "Cache hits are priced at 0.025x base input on this model (page footnote 1), not the 0.1x every other model uses - cachedInput is read from the table, not derived.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
330
+ ],
331
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
332
+ },
333
+ {
334
+ canonicalId: "claude-opus-4",
335
+ provider: "anthropic",
336
+ aliases: [],
337
+ family: "opus",
338
+ pricing: [
339
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "15.00", "output": "75.00", "cachedInput": "1.50", "cacheWrite": "18.75", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "Retired on Anthropic-operated platforms; the pricing page still publishes its rate and notes it remains available on Google Cloud. Included so historical usage can still be priced.", "This model predates 2026, so the conservative 2026-01-01 effectiveFrom cannot price usage from its actual lifetime; no rollout date was published on the source page. A future pass should source real dates before relying on historical lookups for it.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
340
+ ],
341
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
342
+ },
343
+ {
344
+ canonicalId: "claude-opus-4-1",
345
+ provider: "anthropic",
346
+ aliases: [],
347
+ family: "opus",
348
+ pricing: [
349
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "15.00", "output": "75.00", "cachedInput": "1.50", "cacheWrite": "18.75", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "Retired on Anthropic-operated platforms; the pricing page still publishes its rate and notes it remains available on Amazon Bedrock and Google Cloud. Included so historical usage can still be priced.", "This model predates 2026, so the conservative 2026-01-01 effectiveFrom cannot price usage from its actual lifetime; no rollout date was published on the source page. A future pass should source real dates before relying on historical lookups for it.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
350
+ ],
351
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
352
+ },
353
+ {
354
+ canonicalId: "claude-opus-4-5",
355
+ provider: "anthropic",
356
+ aliases: [],
357
+ family: "opus",
358
+ pricing: [
359
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
360
+ ],
361
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
276
362
  },
277
363
  {
278
364
  canonicalId: "claude-opus-4-6",
@@ -281,9 +367,9 @@ var MODEL_REGISTRY = [
281
367
  family: "opus",
282
368
  contextWindow: 1e6,
283
369
  pricing: [
284
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
370
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
285
371
  ],
286
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05" }
372
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
287
373
  },
288
374
  {
289
375
  canonicalId: "claude-opus-4-7",
@@ -292,9 +378,9 @@ var MODEL_REGISTRY = [
292
378
  family: "opus",
293
379
  contextWindow: 1e6,
294
380
  pricing: [
295
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
381
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
296
382
  ],
297
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05" }
383
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
298
384
  },
299
385
  {
300
386
  canonicalId: "claude-opus-4-8",
@@ -303,9 +389,9 @@ var MODEL_REGISTRY = [
303
389
  family: "opus",
304
390
  contextWindow: 1e6,
305
391
  pricing: [
306
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
392
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
307
393
  ],
308
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05" }
394
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
309
395
  },
310
396
  {
311
397
  canonicalId: "claude-opus-5",
@@ -314,9 +400,29 @@ var MODEL_REGISTRY = [
314
400
  family: "opus",
315
401
  contextWindow: 1e6,
316
402
  pricing: [
317
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
403
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "25.00", "cachedInput": "0.50", "cacheWrite": "6.25", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
404
+ ],
405
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
406
+ },
407
+ {
408
+ canonicalId: "claude-sonnet-4",
409
+ provider: "anthropic",
410
+ aliases: [],
411
+ family: "sonnet",
412
+ pricing: [
413
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "cachedInput": "0.30", "cacheWrite": "3.75", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "Retired on Anthropic-operated platforms; the pricing page still publishes its rate and notes it remains available on Amazon Bedrock and Google Cloud. Included so historical usage can still be priced.", "This model predates 2026, so the conservative 2026-01-01 effectiveFrom cannot price usage from its actual lifetime; no rollout date was published on the source page. A future pass should source real dates before relying on historical lookups for it.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
318
414
  ],
319
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05" }
415
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
416
+ },
417
+ {
418
+ canonicalId: "claude-sonnet-4-5",
419
+ provider: "anthropic",
420
+ aliases: [],
421
+ family: "sonnet",
422
+ pricing: [
423
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "cachedInput": "0.30", "cacheWrite": "3.75", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
424
+ ],
425
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
320
426
  },
321
427
  {
322
428
  canonicalId: "claude-sonnet-4-6",
@@ -325,9 +431,9 @@ var MODEL_REGISTRY = [
325
431
  family: "sonnet",
326
432
  contextWindow: 1e6,
327
433
  pricing: [
328
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "cachedInput": "0.30", "cacheWrite": "3.75", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
434
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "cachedInput": "0.30", "cacheWrite": "3.75", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ["Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
329
435
  ],
330
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05" }
436
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
331
437
  },
332
438
  {
333
439
  canonicalId: "claude-sonnet-5",
@@ -336,10 +442,9 @@ var MODEL_REGISTRY = [
336
442
  family: "sonnet",
337
443
  contextWindow: 1e6,
338
444
  pricing: [
339
- { "effectiveFrom": "2026-01-01", "effectiveTo": "2026-09-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "10.00", "cachedInput": "0.20", "cacheWrite": "2.50", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Introductory rate, confirmed active through 2026-08-31. This is the golden fixture for effective-date selection (see test/pricing-period.test.ts): a lookup dated 2026-08-15 must select this period.", "effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true introductory-rate start date; only the 2026-08-31 end date was observed.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] },
340
- { "effectiveFrom": "2026-09-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "cachedInput": "0.30", "cacheWrite": "3.75", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Standard rate, effective 2026-09-01 immediately after the introductory-rate window (through 2026-08-31) ends. A lookup dated 2026-09-15 must select this period.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
445
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "10.00", "cachedInput": "0.20", "cacheWrite": "2.50", "batchMultiplier": "0.5", "sourceUrl": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07", "notes": ['$2.00/$10.00 launched as an introductory rate through 2026-08-31. On 2026-09-07 the pricing page states it "is now the standard price" and that "the previously scheduled increase to $3/$15 per million input/output tokens on September 1, 2026 will not occur", so the rate continues open-ended rather than ending 2026-08-31.', "Supersedes the two-period shape recorded on 2026-08-05 (introductory $2.00/$10.00 to 2026-09-01, then standard $3.00/$15.00). That second period was removed, not closed: the higher rate never took effect, so no date range may report it.", "Anthropic did not publish an explicit effective date for this rate as observed; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "cacheWrite reflects the 5-minute cache TTL (1.25x input). The 1-hour TTL write multiplier is 2x input and is not separately modeled by this schema (a single cacheWrite field)."] }
341
446
  ],
342
- source: { "url": "https://platform.claude.com/docs/en/about-claude/models/overview", "observedAt": "2026-08-05", "notes": ["Two pricing periods on purpose: an introductory rate ($2.00/$10.00) through 2026-08-31, then the standard rate ($3.00/$15.00) from 2026-09-01."] }
447
+ source: { "url": "https://platform.claude.com/docs/en/about-claude/pricing", "observedAt": "2026-09-07" }
343
448
  },
344
449
  {
345
450
  canonicalId: "amazon-nova-lite",
@@ -347,7 +452,7 @@ var MODEL_REGISTRY = [
347
452
  aliases: [],
348
453
  family: "amazon-nova",
349
454
  pricing: [
350
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.60", "output": "2.40", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Same cross-region/in-region caveat as amazon-nova-micro."] }
455
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.60", "output": "2.40", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Same cross-region/in-region caveat as amazon-nova-micro.", "Not surfaced by the 2026-09-07 fetch of the same page, whose accessible sections did not include this model. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal."] }
351
456
  ],
352
457
  source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
353
458
  },
@@ -357,7 +462,7 @@ var MODEL_REGISTRY = [
357
462
  aliases: [],
358
463
  family: "amazon-nova",
359
464
  pricing: [
360
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "1.20", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": [`AWS's own first-party model (Amazon publishes both Bedrock and Nova), so "aws-bedrock" is effectively first-party pricing here, unlike the resold third-party models in this file.`, "No explicit effective date published for this specific rate (unlike the Claude 3.5 Sonnet rows above, which do carry a stated Dec 2025 date); effectiveFrom is set conservatively to 2026-01-01.", `Bedrock's pricing page also distinguishes "Global cross-region" vs "in-region" inference pricing for Nova; this rate was not confirmed to be specifically the in-region (vs cross-region) figure \u2014 treat as the headline on-demand rate observed.`] }
465
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "1.20", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": [`AWS's own first-party model (Amazon publishes both Bedrock and Nova), so "aws-bedrock" is effectively first-party pricing here, unlike the resold third-party models in this file.`, "No explicit effective date published for this specific rate (unlike the Claude 3.5 Sonnet rows above, which do carry a stated Dec 2025 date); effectiveFrom is set conservatively to 2026-01-01.", `Bedrock's pricing page also distinguishes "Global cross-region" vs "in-region" inference pricing for Nova; this rate was not confirmed to be specifically the in-region (vs cross-region) figure \u2014 treat as the headline on-demand rate observed.`, "Not surfaced by the 2026-09-07 fetch of the same page, whose accessible sections did not include this model. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal."] }
361
466
  ],
362
467
  source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
363
468
  },
@@ -367,7 +472,7 @@ var MODEL_REGISTRY = [
367
472
  aliases: [],
368
473
  family: "amazon-nova",
369
474
  pricing: [
370
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.20", "output": "4.80", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Same cross-region/in-region caveat as amazon-nova-micro."] }
475
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.20", "output": "4.80", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Same cross-region/in-region caveat as amazon-nova-micro.", "Not surfaced by the 2026-09-07 fetch of the same page, whose accessible sections did not include this model. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal."] }
371
476
  ],
372
477
  source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
373
478
  },
@@ -377,9 +482,9 @@ var MODEL_REGISTRY = [
377
482
  aliases: [],
378
483
  family: "anthropic-claude",
379
484
  pricing: [
380
- { "effectiveFrom": "2025-12-01", "currency": "USD", "unit": "per-million-tokens", "input": "6.00", "output": "30.00", "batchMultiplier": "0.5", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": [`AWS Bedrock's own rate card for this Anthropic model, explicitly labeled "Effective 1 Dec 2025" on the pricing page \u2014 a real, confirmed effective date, not the conservative default used elsewhere in this file.`, "Batch: $3.00/$15.00 (confirmed 0.5x standard) as observed on the same page.", "This is Bedrock's own price for an older Claude generation (3.5 Sonnet), not the current claude-sonnet-5 model in anthropic.json \u2014 no comparable first-party entry exists in this registry for the same model, so no direct parity claim is possible or intended. Bedrock and Azure resell other vendors' models under their own rate cards, so a first-party price is never a safe proxy for theirs."] }
485
+ { "effectiveFrom": "2025-12-01", "currency": "USD", "unit": "per-million-tokens", "input": "6.00", "output": "30.00", "batchMultiplier": "0.5", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07", "notes": [`AWS Bedrock's own rate card for this Anthropic model, explicitly labeled "Effective 1 Dec 2025" on the pricing page \u2014 a real, confirmed effective date, not the conservative default used elsewhere in this file.`, "Batch: $3.00/$15.00 (confirmed 0.5x standard) as observed on the same page.", "This is Bedrock's own price for an older Claude generation (3.5 Sonnet), not the current claude-sonnet-5 model in anthropic.json \u2014 no comparable first-party entry exists in this registry for the same model, so no direct parity claim is possible or intended. Bedrock and Azure resell other vendors' models under their own rate cards, so a first-party price is never a safe proxy for theirs.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
381
486
  ],
382
- source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
487
+ source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07" }
383
488
  },
384
489
  {
385
490
  canonicalId: "claude-3.5-sonnet-v2",
@@ -387,9 +492,29 @@ var MODEL_REGISTRY = [
387
492
  aliases: [],
388
493
  family: "anthropic-claude",
389
494
  pricing: [
390
- { "effectiveFrom": "2025-12-01", "currency": "USD", "unit": "per-million-tokens", "input": "6.00", "output": "30.00", "cachedInput": "0.60", "cacheWrite": "7.50", "batchMultiplier": "0.5", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": [`AWS Bedrock's own rate card, explicitly labeled "Effective 1 Dec 2025" on the pricing page.`, "Batch: $3.00/$15.00 (confirmed 0.5x standard) as observed on the same page.", "Bedrock's own price for an older Claude generation; not comparable to any first-party entry currently in anthropic.json (which covers 4.x/5.x models only)."] }
495
+ { "effectiveFrom": "2025-12-01", "currency": "USD", "unit": "per-million-tokens", "input": "6.00", "output": "30.00", "cachedInput": "0.60", "cacheWrite": "7.50", "batchMultiplier": "0.5", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07", "notes": [`AWS Bedrock's own rate card, explicitly labeled "Effective 1 Dec 2025" on the pricing page.`, "Batch: $3.00/$15.00 (confirmed 0.5x standard) as observed on the same page.", "Bedrock's own price for an older Claude generation; not comparable to any first-party entry currently in anthropic.json (which covers 4.x/5.x models only).", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
391
496
  ],
392
- source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
497
+ source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07" }
498
+ },
499
+ {
500
+ canonicalId: "gemma-3-12b",
501
+ provider: "aws-bedrock",
502
+ aliases: [],
503
+ family: "gemma",
504
+ pricing: [
505
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.09", "output": "0.29", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07", "notes": ["Bedrock's own resale rate for this google model, read from Bedrock's pricing page - never copied from that vendor's first-party file.", "Added from the 2026-09-07 fetch; effectiveFrom is the observation date, since the 2026-08-05 fetch of the same page did not surface it.", "US East on-demand rate as printed; Bedrock prices some models per region and this schema has no region dimension."] }
506
+ ],
507
+ source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07" }
508
+ },
509
+ {
510
+ canonicalId: "gemma-3-27b",
511
+ provider: "aws-bedrock",
512
+ aliases: [],
513
+ family: "gemma",
514
+ pricing: [
515
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.23", "output": "0.38", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07", "notes": ["Bedrock's own resale rate for this google model, read from Bedrock's pricing page - never copied from that vendor's first-party file.", "Added from the 2026-09-07 fetch; effectiveFrom is the observation date, since the 2026-08-05 fetch of the same page did not surface it.", "US East on-demand rate as printed; Bedrock prices some models per region and this schema has no region dimension."] }
516
+ ],
517
+ source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07" }
393
518
  },
394
519
  {
395
520
  canonicalId: "gemma-4-31b",
@@ -397,9 +522,9 @@ var MODEL_REGISTRY = [
397
522
  aliases: [],
398
523
  family: "google-gemma",
399
524
  pricing: [
400
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.14", "output": "0.40", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): Together AI also lists "Gemma 4 31B" (together.json: gemma-4-31b) at a different, higher rate ($0.39/$0.97 as observed) \u2014 same underlying Google open-weight model, independently priced by each reseller; do not assume parity.'] }
525
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.14", "output": "0.40", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): Together AI also lists "Gemma 4 31B" (together.json: gemma-4-31b) at a different, higher rate ($0.39/$0.97 as observed) \u2014 same underlying Google open-weight model, independently priced by each reseller; do not assume parity.', "Re-confirmed unchanged on 2026-09-07 against the same page."] }
401
526
  ],
402
- source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
527
+ source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07" }
403
528
  },
404
529
  {
405
530
  canonicalId: "mistral-large-3",
@@ -407,9 +532,19 @@ var MODEL_REGISTRY = [
407
532
  aliases: [],
408
533
  family: "mistral",
409
534
  pricing: [
410
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Cross-provider alias/canonicalId collision (allowed, not an error): Mistral's own first-party pricing (mistral.json: mistral-large-3) shows the identical $0.50/$1.50 figure as independently observed \u2014 coincidental agreement between the two independently fetched sources, not assumed; both were confirmed directly."] }
535
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Cross-provider alias/canonicalId collision (allowed, not an error): Mistral's own first-party pricing (mistral.json: mistral-large-3) shows the identical $0.50/$1.50 figure as independently observed \u2014 coincidental agreement between the two independently fetched sources, not assumed; both were confirmed directly.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
411
536
  ],
412
- source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
537
+ source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07" }
538
+ },
539
+ {
540
+ canonicalId: "nemotron-3-super-120b",
541
+ provider: "aws-bedrock",
542
+ aliases: [],
543
+ family: "nemotron",
544
+ pricing: [
545
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.65", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07", "notes": ["Bedrock's own resale rate for this nvidia model, read from Bedrock's pricing page - never copied from that vendor's first-party file.", "Added from the 2026-09-07 fetch; effectiveFrom is the observation date, since the 2026-08-05 fetch of the same page did not surface it.", "US East on-demand rate as printed; Bedrock prices some models per region and this schema has no region dimension."] }
546
+ ],
547
+ source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-09-07" }
413
548
  },
414
549
  {
415
550
  canonicalId: "nemotron-nano-2",
@@ -417,7 +552,7 @@ var MODEL_REGISTRY = [
417
552
  aliases: [],
418
553
  family: "nvidia-nemotron",
419
554
  pricing: [
420
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.06", "output": "0.23", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
555
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.06", "output": "0.23", "sourceUrl": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05", "notes": ["No explicit effective date published for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Not surfaced by the 2026-09-07 fetch of the same page, whose accessible sections did not include this model. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal."] }
421
556
  ],
422
557
  source: { "url": "https://aws.amazon.com/bedrock/pricing/", "observedAt": "2026-08-05" }
423
558
  },
@@ -647,9 +782,9 @@ var MODEL_REGISTRY = [
647
782
  aliases: [],
648
783
  family: "gpt-5.6",
649
784
  pricing: [
650
- { "effectiveFrom": "2026-07-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "30.00", "cachedInput": "0.50", "cacheWrite": "6.25", "cheapestTier": true, "sourceUrl": "https://prices.azure.com/api/retail/prices?currencyCode='USD'&$filter=contains(productName,%20%27OpenAI%27)", "observedAt": "2026-08-05", "notes": ["retailPrice confirmed identical across all 24 Azure regions returned for this Global-deployment SKU (spot-checked programmatically, not just a couple of regions) \u2014 no regional price variation observed for the Global tier.", "No Batch API meter was found for this model/SKU in the Retail Prices API response; batchMultiplier is intentionally omitted rather than assumed.", `Matches OpenAI's own first-party rate for "gpt-5.6-sol" in openai.json exactly as observed ($5.00/$30.00/$0.50 cached) \u2014 no markup detected for this model on Azure's Global deployment tier.`, `canonicalId "gpt-5.6-sol" is deliberately identical to the same model's entry in openai.json \u2014 Azure genuinely resells the identical first-party OpenAI model, unlike AWS Bedrock's or OpenRouter's differently-branded catalogues. Following the aws-bedrock.json precedent (e.g. its "mistral-large-3" and "gemma-4-31b" entries) rather than OpenRouter's provider-prefixed-slug convention: this is an intentional cross-provider canonicalId collision, not an error. A bare lookup of this id without a provider qualifier is ambiguous by design and must fail, exactly as already documented for the aws-bedrock.json collisions, since a lookup with a duplicated canonicalId requires a provider qualifier to resolve unambiguously. Per this task's ownership boundary, openai.json itself was not modified to cross-reference this note; a follow-up pass should add a mirroring note there.`] }
785
+ { "effectiveFrom": "2026-07-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "30.00", "cachedInput": "0.50", "cacheWrite": "6.25", "cheapestTier": true, "sourceUrl": "https://prices.azure.com/api/retail/prices?currencyCode='USD'&$filter=contains(productName,%20%27OpenAI%27)", "observedAt": "2026-09-07", "notes": ["retailPrice confirmed identical across all 24 Azure regions returned for this Global-deployment SKU (spot-checked programmatically, not just a couple of regions) \u2014 no regional price variation observed for the Global tier.", "No Batch API meter was found for this model/SKU in the Retail Prices API response; batchMultiplier is intentionally omitted rather than assumed.", `canonicalId "gpt-5.6-sol" is deliberately identical to the same model's entry in openai.json \u2014 Azure genuinely resells the identical first-party OpenAI model, unlike AWS Bedrock's or OpenRouter's differently-branded catalogues. Following the aws-bedrock.json precedent (e.g. its "mistral-large-3" and "gemma-4-31b" entries) rather than OpenRouter's provider-prefixed-slug convention: this is an intentional cross-provider canonicalId collision, not an error. A bare lookup of this id without a provider qualifier is ambiguous by design and must fail, exactly as already documented for the aws-bedrock.json collisions, since a lookup with a duplicated canonicalId requires a provider qualifier to resolve unambiguously. Per this task's ownership boundary, openai.json itself was not modified to cross-reference this note; a follow-up pass should add a mirroring note there.`, `Re-observed 2026-09-07 via the Retail Prices API filtered to this model's meters ("5.6 sol ShortCo Inp Std Gl" $5.00, "5.6 sol ShortCo Opt Std Gl" $30.00, "5.6 sol ShortCo Cd Inp Std Gl" $0.50): unchanged.`, `NOW DIFFERS from OpenAI's own first-party rate in openai.json for the same canonicalId "gpt-5.6-sol". Both files recorded $5.00/$30.00/$0.50 on 2026-08-05; on 2026-09-07 OpenAI's pricing page published $4.00/$20.00/$0.40 while Azure's meters stayed at $5.00/$30.00/$0.50. Azure did not follow the first-party cut, so this joins gpt-5.6-terra and gpt-5.6-luna as a confirmed same-id price divergence rather than a transcription error.`, `The API also exposes "LongCo" (long-context) meters for this model at $10.00 input / $45.00 output Global Standard, alongside the "ShortCo" rates recorded here - the same context tiering OpenAI's page labels "<272K". This schema has no context-length dimension, so only the ShortCo tier is recorded.`] }
651
786
  ],
652
- source: { "url": "https://prices.azure.com/api/retail/prices?currencyCode='USD'&$filter=contains(productName,%20%27OpenAI%27)", "observedAt": "2026-08-05" }
787
+ source: { "url": "https://prices.azure.com/api/retail/prices?currencyCode='USD'&$filter=contains(productName,%20%27OpenAI%27)", "observedAt": "2026-09-07" }
653
788
  },
654
789
  {
655
790
  canonicalId: "gpt-5.6-terra",
@@ -747,9 +882,9 @@ var MODEL_REGISTRY = [
747
882
  aliases: [],
748
883
  family: "aya-expanse",
749
884
  pricing: [
750
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-08-05", "notes": ["Cohere's pricing page publishes an identical $0.50/$1.50 rate for both the 8B and 32B Aya Expanse sizes (confirmed by two independent re-fetches of the same page); this was double-checked rather than assumed to be an extraction error.", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published."] }
885
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-09-07", "notes": ["Cohere's pricing page publishes an identical $0.50/$1.50 rate for both the 8B and 32B Aya Expanse sizes (confirmed by two independent re-fetches of the same page); this was double-checked rather than assumed to be an extraction error.", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
751
886
  ],
752
- source: { "url": "https://cohere.com/pricing", "observedAt": "2026-08-05" }
887
+ source: { "url": "https://cohere.com/pricing", "observedAt": "2026-09-07" }
753
888
  },
754
889
  {
755
890
  canonicalId: "aya-expanse-8b",
@@ -757,9 +892,9 @@ var MODEL_REGISTRY = [
757
892
  aliases: [],
758
893
  family: "aya-expanse",
759
894
  pricing: [
760
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-08-05", "notes": ["Cohere's pricing page publishes an identical $0.50/$1.50 rate for both the 8B and 32B Aya Expanse sizes (confirmed by two independent re-fetches of the same page); this was double-checked rather than assumed to be an extraction error.", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published."] }
895
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-09-07", "notes": ["Cohere's pricing page publishes an identical $0.50/$1.50 rate for both the 8B and 32B Aya Expanse sizes (confirmed by two independent re-fetches of the same page); this was double-checked rather than assumed to be an extraction error.", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
761
896
  ],
762
- source: { "url": "https://cohere.com/pricing", "observedAt": "2026-08-05" }
897
+ source: { "url": "https://cohere.com/pricing", "observedAt": "2026-09-07" }
763
898
  },
764
899
  {
765
900
  canonicalId: "command",
@@ -767,9 +902,9 @@ var MODEL_REGISTRY = [
767
902
  aliases: [],
768
903
  family: "command",
769
904
  pricing: [
770
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.00", "output": "2.00", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-08-05", "notes": ["Cohere's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "This rate appears in the pricing page's FAQ/legacy-rates section, not a headline pricing table; it is nonetheless the only per-token price Cohere currently publishes for this model."] }
905
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.00", "output": "2.00", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-09-07", "notes": ["Cohere's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "This rate appears in the pricing page's FAQ/legacy-rates section, not a headline pricing table; it is nonetheless the only per-token price Cohere currently publishes for this model.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
771
906
  ],
772
- source: { "url": "https://cohere.com/pricing", "observedAt": "2026-08-05" }
907
+ source: { "url": "https://cohere.com/pricing", "observedAt": "2026-09-07" }
773
908
  },
774
909
  {
775
910
  canonicalId: "command-light",
@@ -777,9 +912,9 @@ var MODEL_REGISTRY = [
777
912
  aliases: [],
778
913
  family: "command",
779
914
  pricing: [
780
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "0.60", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-08-05", "notes": ["Cohere's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'FAQ/legacy-rates section pricing, per the same caveat as "command".'] }
915
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "0.60", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-09-07", "notes": ["Cohere's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'FAQ/legacy-rates section pricing, per the same caveat as "command".', "Re-confirmed unchanged on 2026-09-07 against the same page."] }
781
916
  ],
782
- source: { "url": "https://cohere.com/pricing", "observedAt": "2026-08-05" }
917
+ source: { "url": "https://cohere.com/pricing", "observedAt": "2026-09-07" }
783
918
  },
784
919
  {
785
920
  canonicalId: "command-r-03-2024",
@@ -787,9 +922,9 @@ var MODEL_REGISTRY = [
787
922
  aliases: [],
788
923
  family: "command-r",
789
924
  pricing: [
790
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-08-05", "notes": [`"03-2024" is Cohere's own dated-snapshot naming for this model, not a confirmed price-effective date; effectiveFrom is set conservatively to 2026-01-01 per this repository's convention (a too-early effectiveFrom is safe; the price could have applied earlier than 2026 but was not independently confirmed).`, "FAQ/legacy-rates section pricing."] }
925
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-09-07", "notes": [`"03-2024" is Cohere's own dated-snapshot naming for this model, not a confirmed price-effective date; effectiveFrom is set conservatively to 2026-01-01 per this repository's convention (a too-early effectiveFrom is safe; the price could have applied earlier than 2026 but was not independently confirmed).`, "FAQ/legacy-rates section pricing.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
791
926
  ],
792
- source: { "url": "https://cohere.com/pricing", "observedAt": "2026-08-05" }
927
+ source: { "url": "https://cohere.com/pricing", "observedAt": "2026-09-07" }
793
928
  },
794
929
  {
795
930
  canonicalId: "command-r-plus-04-2024",
@@ -797,9 +932,9 @@ var MODEL_REGISTRY = [
797
932
  aliases: [],
798
933
  family: "command-r-plus",
799
934
  pricing: [
800
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-08-05", "notes": [`"04-2024" is Cohere's own dated-snapshot naming for this model, not a confirmed price-effective date; effectiveFrom is set conservatively to 2026-01-01.`, `FAQ/legacy-rates section pricing. Superseded in Cohere's catalogue by "Command R+ 08-2024" (below), a distinct dated snapshot with its own price \u2014 the two are not the same PricingPeriod for one model, they are two different canonicalIds, matching how Cohere itself lists them.`] }
935
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-09-07", "notes": [`"04-2024" is Cohere's own dated-snapshot naming for this model, not a confirmed price-effective date; effectiveFrom is set conservatively to 2026-01-01.`, `FAQ/legacy-rates section pricing. Superseded in Cohere's catalogue by "Command R+ 08-2024" (below), a distinct dated snapshot with its own price \u2014 the two are not the same PricingPeriod for one model, they are two different canonicalIds, matching how Cohere itself lists them.`, "Re-confirmed unchanged on 2026-09-07 against the same page."] }
801
936
  ],
802
- source: { "url": "https://cohere.com/pricing", "observedAt": "2026-08-05" }
937
+ source: { "url": "https://cohere.com/pricing", "observedAt": "2026-09-07" }
803
938
  },
804
939
  {
805
940
  canonicalId: "command-r-plus-08-2024",
@@ -807,9 +942,9 @@ var MODEL_REGISTRY = [
807
942
  aliases: [],
808
943
  family: "command-r-plus",
809
944
  pricing: [
810
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.50", "output": "10.00", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-08-05", "notes": [`"08-2024" is Cohere's own dated-snapshot naming for this model, not a confirmed price-effective date; effectiveFrom is set conservatively to 2026-01-01.`, "FAQ/legacy-rates section pricing."] }
945
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.50", "output": "10.00", "sourceUrl": "https://cohere.com/pricing", "observedAt": "2026-09-07", "notes": [`"08-2024" is Cohere's own dated-snapshot naming for this model, not a confirmed price-effective date; effectiveFrom is set conservatively to 2026-01-01.`, "FAQ/legacy-rates section pricing.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
811
946
  ],
812
- source: { "url": "https://cohere.com/pricing", "observedAt": "2026-08-05" }
947
+ source: { "url": "https://cohere.com/pricing", "observedAt": "2026-09-07" }
813
948
  },
814
949
  {
815
950
  canonicalId: "gemini-2.5-flash",
@@ -817,9 +952,9 @@ var MODEL_REGISTRY = [
817
952
  aliases: [],
818
953
  family: "gemini-2.5",
819
954
  pricing: [
820
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "2.50", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05", "notes": ["Standard (paid) tier rate. Priority tier is $0.54/$4.50 (1.8x standard); not modeled as a separate field.", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published.", "cachedInput omitted: not confirmed per-model.", "batchMultiplier of 0.5 verified directly from this model's own Batch row ($0.15/$1.25 vs standard $0.30/$2.50)."] }
955
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "2.50", "cachedInput": "0.03", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Google's page does not state when this rate took effect; effectiveFrom is set conservatively to 2026-01-01.", "Input and context-caching rates are the text/image/video rates. The page prices audio input separately ($1.00 input, $0.10 context caching); this schema has no per-modality dimension, so the audio rate is not recorded.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.15 / $1.25), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] }
821
956
  ],
822
- source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05" }
957
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
823
958
  },
824
959
  {
825
960
  canonicalId: "gemini-2.5-flash-lite",
@@ -827,9 +962,9 @@ var MODEL_REGISTRY = [
827
962
  aliases: [],
828
963
  family: "gemini-2.5",
829
964
  pricing: [
830
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.40", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05", "notes": ["Standard (paid) tier rate.", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published.", "cachedInput omitted: not confirmed per-model.", "batchMultiplier of 0.5 verified directly from this model's own Batch row ($0.05/$0.20 vs standard $0.10/$0.40)."] }
965
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.40", "cachedInput": "0.01", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Google's page does not state when this rate took effect; effectiveFrom is set conservatively to 2026-01-01.", "Input and context-caching rates are the text/image/video rates. The page prices audio input separately ($0.30 input, $0.03 context caching); this schema has no per-modality dimension, so the audio rate is not recorded.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.05 / $0.20), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] }
831
966
  ],
832
- source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05" }
967
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
833
968
  },
834
969
  {
835
970
  canonicalId: "gemini-2.5-pro",
@@ -837,9 +972,19 @@ var MODEL_REGISTRY = [
837
972
  aliases: [],
838
973
  family: "gemini-2.5",
839
974
  pricing: [
840
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "cheapestTier": true, "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05", "notes": ["This is the standard-tier rate for prompts <= 200k tokens. For prompts > 200k tokens the page publishes a higher rate ($2.50 input / $15.00 output per 1M tokens) \u2014 this schema has no context-length-tiered pricing field, so only the <=200k (lower) tier is recorded here. Do not use this entry for long-context (>200k) requests.", "cachedInput and batchMultiplier are omitted: not confirmed for this Pro-tier model (the page states Batch/Flex give a general 50% reduction on input/output pricing, but no explicit per-model Batch row for this model was independently verified).", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published."] }
975
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "cachedInput": "0.125", "batchMultiplier": "0.5", "cheapestTier": true, "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Google's page does not state when this rate took effect; effectiveFrom is set conservatively to 2026-01-01.", "The page prices prompts >200k tokens higher ($2.50 input / $15.00 output / $0.25 context caching); only the <=200k tier is recorded, since this schema has no context-length dimension.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.625 / $5.00), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model.", "batchMultiplier and cachedInput added on 2026-09-07: the page now publishes this model's own Batch and context-caching rows, which were not confirmed per-model on 2026-08-05."] }
976
+ ],
977
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
978
+ },
979
+ {
980
+ canonicalId: "gemini-3.1-flash-lite",
981
+ provider: "google",
982
+ aliases: [],
983
+ family: "gemini-3.1",
984
+ pricing: [
985
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.25", "output": "1.50", "cachedInput": "0.025", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["New model: absent from the pricing page on 2026-08-05, present on 2026-09-07. effectiveFrom is the observation date rather than a backdated guess.", "Input and context-caching rates are the text/image/video rates. The page prices audio input separately ($0.50 input, $0.05 context caching); this schema has no per-modality dimension, so the audio rate is not recorded.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.125 / $0.75), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] }
841
986
  ],
842
- source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05" }
987
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
843
988
  },
844
989
  {
845
990
  canonicalId: "gemini-3.1-pro-preview",
@@ -847,9 +992,9 @@ var MODEL_REGISTRY = [
847
992
  aliases: [],
848
993
  family: "gemini-3.1",
849
994
  pricing: [
850
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "12.00", "cheapestTier": true, "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05", "notes": ["This is the standard-tier rate for prompts <= 200k tokens. For prompts > 200k tokens the page publishes a higher rate ($4.00 input / $18.00 output per 1M tokens) \u2014 this schema has no context-length-tiered pricing field, so only the <=200k (lower) tier is recorded here. Do not use this entry for long-context (>200k) requests.", "cachedInput and batchMultiplier are omitted: not confirmed for this Pro-tier model (unlike the Flash-tier models above, no explicit per-model Batch row was found for this model).", 'effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published. "-preview" in the model name suggests this may be short-lived/subject to change.', 'canonicalId uses the exact model name Google publishes on the pricing page ("Gemini 3.1 Pro Preview").'] }
995
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "12.00", "cachedInput": "0.20", "batchMultiplier": "0.5", "cheapestTier": true, "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Google's page does not state when this rate took effect; effectiveFrom is set conservatively to 2026-01-01.", "The page prices prompts >200k tokens higher ($4.00 input / $18.00 output / $0.40 context caching); only the <=200k tier is recorded, since this schema has no context-length dimension.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($1.00 / $6.00), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model.", "batchMultiplier and cachedInput added on 2026-09-07: the page now publishes this model's own Batch and context-caching rows, which were not confirmed per-model on 2026-08-05."] }
851
996
  ],
852
- source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05" }
997
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
853
998
  },
854
999
  {
855
1000
  canonicalId: "gemini-3.5-flash",
@@ -857,9 +1002,9 @@ var MODEL_REGISTRY = [
857
1002
  aliases: [],
858
1003
  family: "gemini-3.5",
859
1004
  pricing: [
860
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "9.00", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05", "notes": ["Standard (paid) tier rate. Priority tier is $2.70/$16.20 (1.8x standard); not modeled as a separate field.", 'effectiveFrom set conservatively to 2026-01-01; page shows a "Last Updated: July 30, 2026" stamp but not a rate-specific effective date.', "cachedInput omitted: not confirmed per-model (see gemini-3.6-flash notes for the same caveat).", "batchMultiplier of 0.5 verified directly from this model's own Batch row ($0.75/$4.50 vs standard $1.50/$9.00)."] }
1005
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "9.00", "cachedInput": "0.15", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Google's page does not state when this rate took effect; effectiveFrom is set conservatively to 2026-01-01.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.75 / $4.50), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model.", "cachedInput added on 2026-09-07: the page now publishes a per-model context-caching rate, which it did not on 2026-08-05."] }
861
1006
  ],
862
- source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05" }
1007
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
863
1008
  },
864
1009
  {
865
1010
  canonicalId: "gemini-3.5-flash-lite",
@@ -867,9 +1012,9 @@ var MODEL_REGISTRY = [
867
1012
  aliases: [],
868
1013
  family: "gemini-3.5",
869
1014
  pricing: [
870
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "2.50", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05", "notes": ["Standard (paid) tier rate. Priority tier is $0.54/$4.50 (1.8x standard); not modeled as a separate field.", "effectiveFrom set conservatively to 2026-01-01; exact rate-effective date not published.", "cachedInput omitted: not confirmed per-model.", "batchMultiplier of 0.5 verified directly from this model's own Batch row ($0.15/$1.25 vs standard $0.30/$2.50)."] }
1015
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "2.50", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Google's page does not state when this rate took effect; effectiveFrom is set conservatively to 2026-01-01.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.15 / $1.25), not from a blanket statement.", "No context-caching rate is published for this model; cachedInput is omitted rather than inferred from a sibling model."] }
871
1016
  ],
872
- source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05" }
1017
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
873
1018
  },
874
1019
  {
875
1020
  canonicalId: "gemini-3.6-flash",
@@ -877,9 +1022,33 @@ var MODEL_REGISTRY = [
877
1022
  aliases: [],
878
1023
  family: "gemini-3.6",
879
1024
  pricing: [
880
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "7.50", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05", "notes": ["Standard (paid) tier rate. The page also lists Flex and Priority tiers, which this schema does not model as separate fields: Flex is priced the same as Batch ($0.75/$3.75); Priority is $2.70/$13.50 (1.8x standard).", `Google's page shows "Last Updated: July 30, 2026 UTC" but does not state when this specific rate took effect; effectiveFrom is set conservatively to 2026-01-01.`, `cachedInput (context caching) is omitted: the page states a general "$0.15 per 1M cached input tokens" figure covering multiple models but does not confirm it is this specific model's rate, plus a separate per-hour storage fee this schema does not model. Recording an unconfirmed number would be worse than omitting it.`, "batchMultiplier of 0.5 was verified directly from this model's own Batch row ($0.75/$3.75 vs standard $1.50/$7.50)."] }
1025
+ { "effectiveFrom": "2026-01-01", "effectiveTo": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "7.50", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Supersedes the single $1.50 / $7.50 period recorded on 2026-08-05. That rate was live then and is scheduled to return on 2027-01-01, so it is kept as a closed historical period rather than deleted.", "Recorded 2026-08-05 at $1.50 / $7.50 with no cachedInput; the page did not then publish a per-model context-caching rate. Closed at the 2026-09-07 observation date, the last date the promotional rate is known not to have applied being 2026-08-05.", "Google's page does not state when this rate took effect; effectiveFrom is set conservatively to 2026-01-01."] },
1026
+ { "effectiveFrom": "2026-09-07", "effectiveTo": "2027-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.75", "output": "3.75", "cachedInput": "0.075", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Promotional rate published as running through 2026-12-31, with the standard rate resuming 2027-01-01 - both dates are stated on the page, so this period's effectiveTo and the next period's effectiveFrom are sourced, not conservative placeholders.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.375 / $1.875 promo, $0.75 / $3.75 standard), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] },
1027
+ { "effectiveFrom": "2027-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "7.50", "cachedInput": "0.15", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Standard rate resuming 2027-01-01, the date the page publishes for the end of the promotional rate.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.375 / $1.875 promo, $0.75 / $3.75 standard), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] }
881
1028
  ],
882
- source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-08-05" }
1029
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Three periods: the $1.50/$7.50 rate observed 2026-08-05, the $0.75/$3.75 promotional rate observed 2026-09-07 and published as running through 2026-12-31, then the standard rate resuming 2027-01-01."] }
1030
+ },
1031
+ {
1032
+ canonicalId: "gemini-3.7-flash",
1033
+ provider: "google",
1034
+ aliases: [],
1035
+ family: "gemini-3.7",
1036
+ pricing: [
1037
+ { "effectiveFrom": "2026-09-07", "effectiveTo": "2027-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.75", "output": "3.75", "cachedInput": "0.075", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["New model: absent from the pricing page on 2026-08-05, present on 2026-09-07. effectiveFrom is the observation date rather than a backdated guess.", "Promotional rate published as running through 2026-12-31, with the standard rate resuming 2027-01-01 - both dates are stated on the page, so this period's effectiveTo and the next period's effectiveFrom are sourced, not conservative placeholders.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.375 / $1.875 promo, $0.75 / $3.75 standard), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] },
1038
+ { "effectiveFrom": "2027-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "7.50", "cachedInput": "0.15", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Standard rate resuming 2027-01-01, the date the page publishes for the end of the promotional rate.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.375 / $1.875 promo, $0.75 / $3.75 standard), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] }
1039
+ ],
1040
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
1041
+ },
1042
+ {
1043
+ canonicalId: "gemini-3.8-flash",
1044
+ provider: "google",
1045
+ aliases: [],
1046
+ family: "gemini-3.8",
1047
+ pricing: [
1048
+ { "effectiveFrom": "2026-09-07", "effectiveTo": "2027-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.75", "output": "3.75", "cachedInput": "0.075", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["New model: absent from the pricing page on 2026-08-05, present on 2026-09-07. effectiveFrom is the observation date rather than a backdated guess.", "Promotional rate published as running through 2026-12-31, with the standard rate resuming 2027-01-01 - both dates are stated on the page, so this period's effectiveTo and the next period's effectiveFrom are sourced, not conservative placeholders.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.375 / $1.875 promo, $0.75 / $3.75 standard), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] },
1049
+ { "effectiveFrom": "2027-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "7.50", "cachedInput": "0.15", "batchMultiplier": "0.5", "sourceUrl": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Standard rate resuming 2027-01-01, the date the page publishes for the end of the promotional rate.", "batchMultiplier of 0.5 was verified from this model's own Batch rows ($0.375 / $1.875 promo, $0.75 / $3.75 standard), not from a blanket statement.", "cachedInput is this model's own published context-caching rate. The page also charges a separate per-hour cache storage fee, which this per-token schema does not model."] }
1050
+ ],
1051
+ source: { "url": "https://ai.google.dev/gemini-api/docs/pricing", "observedAt": "2026-09-07" }
883
1052
  },
884
1053
  {
885
1054
  canonicalId: "gpt-oss-120b",
@@ -887,9 +1056,9 @@ var MODEL_REGISTRY = [
887
1056
  aliases: [],
888
1057
  family: "gpt-oss",
889
1058
  pricing: [
890
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-08-05", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page.", "OpenAI's open-weight gpt-oss-120b model, hosted independently by Groq under Groq's own rate card (also hosted by Together AI, at the same $0.15/$0.60 rate as observed \u2014 coincidental agreement, not assumed parity)."] }
1059
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-09-07", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page.", "OpenAI's open-weight gpt-oss-120b model, hosted independently by Groq under Groq's own rate card (also hosted by Together AI, at the same $0.15/$0.60 rate as observed \u2014 coincidental agreement, not assumed parity).", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
891
1060
  ],
892
- source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-08-05" }
1061
+ source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-09-07" }
893
1062
  },
894
1063
  {
895
1064
  canonicalId: "gpt-oss-20b",
@@ -897,9 +1066,9 @@ var MODEL_REGISTRY = [
897
1066
  aliases: [],
898
1067
  family: "gpt-oss",
899
1068
  pricing: [
900
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.075", "output": "0.30", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-08-05", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page.", "Also hosted by Together AI at a different rate ($0.05/$0.20 as observed) \u2014 each host prices it independently; do not assume parity."] }
1069
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.075", "output": "0.30", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-09-07", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page.", "Also hosted by Together AI at a different rate ($0.05/$0.20 as observed) \u2014 each host prices it independently; do not assume parity.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
901
1070
  ],
902
- source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-08-05" }
1071
+ source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-09-07" }
903
1072
  },
904
1073
  {
905
1074
  canonicalId: "llama-3.1-8b-instant",
@@ -907,7 +1076,7 @@ var MODEL_REGISTRY = [
907
1076
  aliases: ["llama-3.1-8b"],
908
1077
  family: "llama-3.1",
909
1078
  pricing: [
910
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.05", "output": "0.08", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-08-05", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page, so cachedInput and batchMultiplier are omitted rather than assumed."] }
1079
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.05", "output": "0.08", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-08-05", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page, so cachedInput and batchMultiplier are omitted rather than assumed.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the gpt-oss and Qwen models with per-token prices. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
911
1080
  ],
912
1081
  source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-08-05" }
913
1082
  },
@@ -917,7 +1086,7 @@ var MODEL_REGISTRY = [
917
1086
  aliases: ["llama-3.3-70b"],
918
1087
  family: "llama-3.3",
919
1088
  pricing: [
920
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.59", "output": "0.79", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-08-05", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page, so cachedInput and batchMultiplier are omitted rather than assumed.", "This is Groq's own hosted rate for the same open-weight model Together AI also hosts (see together.json's llama-3.3-70b at a different, higher price) and AWS Bedrock resells \u2014 each host prices it independently; do not assume parity."] }
1089
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.59", "output": "0.79", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-08-05", "notes": ["Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No prompt-caching or Batch API discount is documented for Groq in the fetched page, so cachedInput and batchMultiplier are omitted rather than assumed.", "This is Groq's own hosted rate for the same open-weight model Together AI also hosts (see together.json's llama-3.3-70b at a different, higher price) and AWS Bedrock resells \u2014 each host prices it independently; do not assume parity.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the gpt-oss and Qwen models with per-token prices. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
921
1090
  ],
922
1091
  source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-08-05" }
923
1092
  },
@@ -927,19 +1096,29 @@ var MODEL_REGISTRY = [
927
1096
  aliases: [],
928
1097
  family: "qwen",
929
1098
  pricing: [
930
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.60", "output": "3.00", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-08-05", "notes": [`Listed under Groq's "Preview" models section, not "Production" \u2014 preview models on Groq are explicitly subject to change or removal without notice. Included because a real price was published, but treat this one as less stable than the production-tier entries in this file.`, "Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1099
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.60", "output": "3.00", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-09-07", "notes": [`Listed under Groq's "Preview" models section, not "Production" \u2014 preview models on Groq are explicitly subject to change or removal without notice. Included because a real price was published, but treat this one as less stable than the production-tier entries in this file.`, "Groq's docs page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
931
1100
  ],
932
- source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-08-05" }
1101
+ source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-09-07" }
1102
+ },
1103
+ {
1104
+ canonicalId: "qwen3.8-27b",
1105
+ provider: "groq",
1106
+ aliases: ["qwen/qwen3.8-27b"],
1107
+ family: "qwen3.8",
1108
+ pricing: [
1109
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.80", "output": "4.00", "sourceUrl": "https://console.groq.com/docs/models", "observedAt": "2026-09-07", "notes": ["New model: absent from this page on 2026-08-05, present on 2026-09-07. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the earlier fetch proves it was not listed then.", "Marked Preview on Groq's page - less stable than a Production model, and its price may move accordingly.", "No cached-input rate and no batch discount are published for Groq models; both fields are omitted rather than guessed."] }
1110
+ ],
1111
+ source: { "url": "https://console.groq.com/docs/models", "observedAt": "2026-09-07" }
933
1112
  },
934
1113
  {
935
1114
  canonicalId: "codestral",
936
1115
  provider: "mistral",
937
- aliases: [],
1116
+ aliases: ["codestral-latest"],
938
1117
  family: "codestral",
939
1118
  pricing: [
940
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "0.90", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1119
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "0.90", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page, which prints the API id as 'codestral-latest' (recorded as an alias)."] }
941
1120
  ],
942
- source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1121
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
943
1122
  },
944
1123
  {
945
1124
  canonicalId: "devstral-2",
@@ -947,7 +1126,7 @@ var MODEL_REGISTRY = [
947
1126
  aliases: [],
948
1127
  family: "devstral",
949
1128
  pricing: [
950
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.40", "output": "2.00", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1129
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.40", "output": "2.00", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the Medium/Small/Large, Ministral, Codestral, embedding and third-party GLM entries. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
951
1130
  ],
952
1131
  source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
953
1132
  },
@@ -957,7 +1136,7 @@ var MODEL_REGISTRY = [
957
1136
  aliases: [],
958
1137
  family: "devstral",
959
1138
  pricing: [
960
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.30", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1139
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.30", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the Medium/Small/Large, Ministral, Codestral, embedding and third-party GLM entries. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
961
1140
  ],
962
1141
  source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
963
1142
  },
@@ -967,7 +1146,7 @@ var MODEL_REGISTRY = [
967
1146
  aliases: [],
968
1147
  family: "magistral",
969
1148
  pricing: [
970
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "5.00", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Listed as a reasoning model on the pricing page; no separate "reasoning" surcharge is published, so the reasoning field is omitted.'] }
1149
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "5.00", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Listed as a reasoning model on the pricing page; no separate "reasoning" surcharge is published, so the reasoning field is omitted.', "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the Medium/Small/Large, Ministral, Codestral, embedding and third-party GLM entries. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
971
1150
  ],
972
1151
  source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
973
1152
  },
@@ -977,59 +1156,59 @@ var MODEL_REGISTRY = [
977
1156
  aliases: [],
978
1157
  family: "magistral",
979
1158
  pricing: [
980
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1159
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the Medium/Small/Large, Ministral, Codestral, embedding and third-party GLM entries. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
981
1160
  ],
982
1161
  source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
983
1162
  },
984
1163
  {
985
1164
  canonicalId: "ministral-3-14b",
986
1165
  provider: "mistral",
987
- aliases: [],
1166
+ aliases: ["ministral-14b-latest"],
988
1167
  family: "ministral-3",
989
1168
  pricing: [
990
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.20", "output": "0.20", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", `AWS Bedrock resells a "Ministral 14B 3.0" at the same $0.20/$0.20 figure as independently observed on Bedrock's pricing page \u2014 likely the same model, coincidental agreement not assumed; Bedrock's variant was not added to aws-bedrock.json in this pass since the version suffix ("3.0") was not cross-checked against this "ministral-3-14b" naming.`] }
1169
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.20", "output": "0.20", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", `AWS Bedrock resells a "Ministral 14B 3.0" at the same $0.20/$0.20 figure as independently observed on Bedrock's pricing page \u2014 likely the same model, coincidental agreement not assumed; Bedrock's variant was not added to aws-bedrock.json in this pass since the version suffix ("3.0") was not cross-checked against this "ministral-3-14b" naming.`, "Re-confirmed unchanged on 2026-09-07 against the same page, which prints the API id as 'ministral-14b-latest' (recorded as an alias)."] }
991
1170
  ],
992
- source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1171
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
993
1172
  },
994
1173
  {
995
1174
  canonicalId: "ministral-3-3b",
996
1175
  provider: "mistral",
997
- aliases: [],
1176
+ aliases: ["ministral-3b-latest"],
998
1177
  family: "ministral-3",
999
1178
  pricing: [
1000
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.10", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1179
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.10", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page, which prints the API id as 'ministral-3b-latest' (recorded as an alias)."] }
1001
1180
  ],
1002
- source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1181
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
1003
1182
  },
1004
1183
  {
1005
1184
  canonicalId: "ministral-3-8b",
1006
1185
  provider: "mistral",
1007
- aliases: [],
1186
+ aliases: ["ministral-8b-latest"],
1008
1187
  family: "ministral-3",
1009
1188
  pricing: [
1010
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.15", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1189
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.15", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page, which prints the API id as 'ministral-8b-latest' (recorded as an alias)."] }
1011
1190
  ],
1012
- source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1191
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
1013
1192
  },
1014
1193
  {
1015
1194
  canonicalId: "mistral-large-3",
1016
1195
  provider: "mistral",
1017
- aliases: [],
1196
+ aliases: ["mistral-large-latest"],
1018
1197
  family: "mistral-large",
1019
1198
  pricing: [
1020
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", `This is Mistral's own first-party rate. AWS Bedrock also resells "Mistral Large 3" under its own rate card at the same $0.50/$1.50 figure as independently observed on Bedrock's pricing page \u2014 coincidental agreement between the two sources, not assumed; see aws-bedrock.json.`] }
1199
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "cachedInput": "0.05", "batchMultiplier": "0.5", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", `This is Mistral's own first-party rate. AWS Bedrock also resells "Mistral Large 3" under its own rate card at the same $0.50/$1.50 figure as independently observed on Bedrock's pricing page \u2014 coincidental agreement between the two sources, not assumed; see aws-bedrock.json.`, "Re-confirmed unchanged on 2026-09-07 against the same page, which prints the API id as 'mistral-large-latest' (recorded as an alias).", `cachedInput and batchMultiplier added on 2026-09-07: the page publishes "Cached input: 90% discount" and "Batch: 50% discount" for this model, so cachedInput is 0.1x this model's own input rate (0.50 -> 0.05), computed as an exact decimal, and batchMultiplier is 0.5. Both come from this model's own row, not from a sibling's rate.`] }
1021
1200
  ],
1022
- source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1201
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
1023
1202
  },
1024
1203
  {
1025
1204
  canonicalId: "mistral-medium-3.5",
1026
1205
  provider: "mistral",
1027
- aliases: [],
1206
+ aliases: ["mistral-medium-latest"],
1028
1207
  family: "mistral-medium",
1029
1208
  pricing: [
1030
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "7.50", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No cachedInput or batchMultiplier is documented on the fetched page for this model; omitted rather than assumed."] }
1209
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.50", "output": "7.50", "cachedInput": "0.15", "batchMultiplier": "0.5", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "No cachedInput or batchMultiplier is documented on the fetched page for this model; omitted rather than assumed.", "Re-confirmed unchanged on 2026-09-07 against the same page, which prints the API id as 'mistral-medium-latest' (recorded as an alias).", `cachedInput and batchMultiplier added on 2026-09-07: the page publishes "Cached input: 90% discount" and "Batch: 50% discount" for this model, so cachedInput is 0.1x this model's own input rate (1.50 -> 0.15), computed as an exact decimal, and batchMultiplier is 0.5. Both come from this model's own row, not from a sibling's rate.`] }
1031
1210
  ],
1032
- source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1211
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
1033
1212
  },
1034
1213
  {
1035
1214
  canonicalId: "mistral-nemo",
@@ -1037,19 +1216,19 @@ var MODEL_REGISTRY = [
1037
1216
  aliases: [],
1038
1217
  family: "mistral-nemo",
1039
1218
  pricing: [
1040
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.15", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "An older model generation still listed with a live price on the current pricing page as fetched; included because it is confidently sourced, not because it is a current flagship."] }
1219
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.15", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "An older model generation still listed with a live price on the current pricing page as fetched; included because it is confidently sourced, not because it is a current flagship.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the Medium/Small/Large, Ministral, Codestral, embedding and third-party GLM entries. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
1041
1220
  ],
1042
1221
  source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1043
1222
  },
1044
1223
  {
1045
1224
  canonicalId: "mistral-small-4",
1046
1225
  provider: "mistral",
1047
- aliases: [],
1226
+ aliases: ["mistral-small-latest"],
1048
1227
  family: "mistral-small",
1049
1228
  pricing: [
1050
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1229
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "cachedInput": "0.015", "batchMultiplier": "0.5", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page, which prints the API id as 'mistral-small-latest' (recorded as an alias).", `cachedInput and batchMultiplier added on 2026-09-07: the page publishes "Cached input: 90% discount" and "Batch: 50% discount" for this model, so cachedInput is 0.1x this model's own input rate (0.15 -> 0.015), computed as an exact decimal, and batchMultiplier is 0.5. Both come from this model's own row, not from a sibling's rate.`] }
1051
1230
  ],
1052
- source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1231
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
1053
1232
  },
1054
1233
  {
1055
1234
  canonicalId: "mixtral-8x22b",
@@ -1057,7 +1236,7 @@ var MODEL_REGISTRY = [
1057
1236
  aliases: [],
1058
1237
  family: "mixtral",
1059
1238
  pricing: [
1060
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "6.00", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "An older model generation still listed with a live price on the current pricing page as fetched."] }
1239
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "6.00", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "An older model generation still listed with a live price on the current pricing page as fetched.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the Medium/Small/Large, Ministral, Codestral, embedding and third-party GLM entries. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
1061
1240
  ],
1062
1241
  source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1063
1242
  },
@@ -1067,19 +1246,29 @@ var MODEL_REGISTRY = [
1067
1246
  aliases: [],
1068
1247
  family: "mixtral",
1069
1248
  pricing: [
1070
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.70", "output": "0.70", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "An older model generation still listed with a live price on the current pricing page as fetched."] }
1249
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.70", "output": "0.70", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05", "notes": ["Mistral's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "An older model generation still listed with a live price on the current pricing page as fetched.", "Not surfaced by the 2026-09-07 fetch of the same page, which listed only the Medium/Small/Large, Ministral, Codestral, embedding and third-party GLM entries. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal. Re-check before relying on this entry."] }
1071
1250
  ],
1072
1251
  source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-08-05" }
1073
1252
  },
1253
+ {
1254
+ canonicalId: "zai-glm-5-2",
1255
+ provider: "mistral",
1256
+ aliases: [],
1257
+ family: "glm",
1258
+ pricing: [
1259
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "1.40", "output": "4.40", "cachedInput": "0.14", "sourceUrl": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07", "notes": ["New entry: absent from this page on 2026-08-05, present on 2026-09-07. effectiveFrom is the observation date rather than this file's conservative 2026-01-01.", `Listed under "Third-Party Models" on Mistral's own pricing page - a Z.ai GLM model resold through La Plateforme, so this is Mistral's resale rate, not Z.ai's first-party rate.`, "All three rates are printed per-model on the page. No batch discount is stated for the third-party section, so batchMultiplier is omitted rather than assumed from the first-party models' 50%."] }
1260
+ ],
1261
+ source: { "url": "https://mistral.ai/pricing/api", "observedAt": "2026-09-07" }
1262
+ },
1074
1263
  {
1075
1264
  canonicalId: "gpt-3.5-turbo",
1076
1265
  provider: "openai",
1077
1266
  aliases: [],
1078
1267
  family: "gpt-3.5",
1079
1268
  pricing: [
1080
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["Found on https://developers.openai.com/api/docs/pricing during a second confirmation pass.", "No cached-input rate is published for gpt-3.5-turbo on the current pricing page; cachedInput is intentionally omitted rather than guessed.", "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date."] }
1269
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "1.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Found on https://developers.openai.com/api/docs/pricing during a second confirmation pass.", "No cached-input rate is published for gpt-3.5-turbo on the current pricing page; cachedInput is intentionally omitted rather than guessed.", "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`] }
1081
1270
  ],
1082
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1271
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1083
1272
  },
1084
1273
  {
1085
1274
  canonicalId: "gpt-4.1",
@@ -1087,9 +1276,9 @@ var MODEL_REGISTRY = [
1087
1276
  aliases: [],
1088
1277
  family: "gpt-4.1",
1089
1278
  pricing: [
1090
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "8.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1279
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "8.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1091
1280
  ],
1092
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1281
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1093
1282
  },
1094
1283
  {
1095
1284
  canonicalId: "gpt-4.1-mini",
@@ -1097,9 +1286,9 @@ var MODEL_REGISTRY = [
1097
1286
  aliases: [],
1098
1287
  family: "gpt-4.1",
1099
1288
  pricing: [
1100
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.40", "output": "1.60", "cachedInput": "0.10", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1289
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.40", "output": "1.60", "cachedInput": "0.10", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1101
1290
  ],
1102
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1291
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1103
1292
  },
1104
1293
  {
1105
1294
  canonicalId: "gpt-4.1-nano",
@@ -1107,9 +1296,9 @@ var MODEL_REGISTRY = [
1107
1296
  aliases: [],
1108
1297
  family: "gpt-4.1",
1109
1298
  pricing: [
1110
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.40", "cachedInput": "0.025", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1299
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.40", "cachedInput": "0.025", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1111
1300
  ],
1112
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1301
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1113
1302
  },
1114
1303
  {
1115
1304
  canonicalId: "gpt-4o",
@@ -1117,9 +1306,9 @@ var MODEL_REGISTRY = [
1117
1306
  aliases: [],
1118
1307
  family: "gpt-4o",
1119
1308
  pricing: [
1120
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.50", "output": "10.00", "cachedInput": "1.25", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1309
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.50", "output": "10.00", "cachedInput": "1.25", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1121
1310
  ],
1122
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1311
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1123
1312
  },
1124
1313
  {
1125
1314
  canonicalId: "gpt-4o-mini",
@@ -1127,9 +1316,9 @@ var MODEL_REGISTRY = [
1127
1316
  aliases: [],
1128
1317
  family: "gpt-4o",
1129
1318
  pricing: [
1130
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "cachedInput": "0.075", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1319
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "cachedInput": "0.075", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1131
1320
  ],
1132
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1321
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1133
1322
  },
1134
1323
  {
1135
1324
  canonicalId: "gpt-5",
@@ -1137,9 +1326,9 @@ var MODEL_REGISTRY = [
1137
1326
  aliases: [],
1138
1327
  family: "gpt-5",
1139
1328
  pricing: [
1140
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "cachedInput": "0.125", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model.", "Lead-supplied verified table (observed 2026-08-05) matches this rate exactly; independently re-confirmed against https://developers.openai.com/api/docs/pricing on the same date."] }
1329
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "cachedInput": "0.125", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model.", "Lead-supplied verified table (observed 2026-08-05) matches this rate exactly; independently re-confirmed against https://developers.openai.com/api/docs/pricing on the same date."] }
1141
1330
  ],
1142
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1331
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1143
1332
  },
1144
1333
  {
1145
1334
  canonicalId: "gpt-5-mini",
@@ -1147,9 +1336,9 @@ var MODEL_REGISTRY = [
1147
1336
  aliases: [],
1148
1337
  family: "gpt-5",
1149
1338
  pricing: [
1150
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.25", "output": "2.00", "cachedInput": "0.025", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1339
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.25", "output": "2.00", "cachedInput": "0.025", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1151
1340
  ],
1152
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1341
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1153
1342
  },
1154
1343
  {
1155
1344
  canonicalId: "gpt-5-nano",
@@ -1157,9 +1346,9 @@ var MODEL_REGISTRY = [
1157
1346
  aliases: [],
1158
1347
  family: "gpt-5",
1159
1348
  pricing: [
1160
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.05", "output": "0.40", "cachedInput": "0.005", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1349
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.05", "output": "0.40", "cachedInput": "0.005", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1161
1350
  ],
1162
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1351
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1163
1352
  },
1164
1353
  {
1165
1354
  canonicalId: "gpt-5-pro",
@@ -1167,9 +1356,9 @@ var MODEL_REGISTRY = [
1167
1356
  aliases: [],
1168
1357
  family: "gpt-5",
1169
1358
  pricing: [
1170
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "15.00", "output": "120.00", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ['No cached-input rate is published for gpt-5-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier is intentionally omitted for this pro-tier model; not independently confirmed to apply."] }
1359
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "15.00", "output": "120.00", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ['No cached-input rate is published for gpt-5-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`] }
1171
1360
  ],
1172
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1361
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1173
1362
  },
1174
1363
  {
1175
1364
  canonicalId: "gpt-5.1",
@@ -1177,9 +1366,9 @@ var MODEL_REGISTRY = [
1177
1366
  aliases: [],
1178
1367
  family: "gpt-5.1",
1179
1368
  pricing: [
1180
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "cachedInput": "0.125", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1369
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "cachedInput": "0.125", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1181
1370
  ],
1182
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1371
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1183
1372
  },
1184
1373
  {
1185
1374
  canonicalId: "gpt-5.2",
@@ -1187,9 +1376,9 @@ var MODEL_REGISTRY = [
1187
1376
  aliases: [],
1188
1377
  family: "gpt-5.2",
1189
1378
  pricing: [
1190
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.75", "output": "14.00", "cachedInput": "0.175", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1379
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.75", "output": "14.00", "cachedInput": "0.175", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1191
1380
  ],
1192
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1381
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1193
1382
  },
1194
1383
  {
1195
1384
  canonicalId: "gpt-5.2-pro",
@@ -1197,9 +1386,9 @@ var MODEL_REGISTRY = [
1197
1386
  aliases: [],
1198
1387
  family: "gpt-5.2",
1199
1388
  pricing: [
1200
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "21.00", "output": "168.00", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ['No cached-input rate is published for gpt-5.2-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier is intentionally omitted for this pro-tier model; not independently confirmed to apply."] }
1389
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "21.00", "output": "168.00", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ['No cached-input rate is published for gpt-5.2-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`] }
1201
1390
  ],
1202
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1391
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1203
1392
  },
1204
1393
  {
1205
1394
  canonicalId: "gpt-5.4",
@@ -1207,9 +1396,9 @@ var MODEL_REGISTRY = [
1207
1396
  aliases: [],
1208
1397
  family: "gpt-5.4",
1209
1398
  pricing: [
1210
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.50", "output": "15.00", "cachedInput": "0.25", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1399
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.50", "output": "15.00", "cachedInput": "0.25", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model.", 'The pricing page qualifies this rate as the "<272K" context tier. A higher tier above 272K tokens is implied by that label but no rate for it was published in the fetched table, and this schema has no context-length dimension, so only the <272K rate is recorded.'] }
1211
1400
  ],
1212
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1401
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1213
1402
  },
1214
1403
  {
1215
1404
  canonicalId: "gpt-5.4-mini",
@@ -1217,9 +1406,9 @@ var MODEL_REGISTRY = [
1217
1406
  aliases: [],
1218
1407
  family: "gpt-5.4",
1219
1408
  pricing: [
1220
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.75", "output": "4.50", "cachedInput": "0.075", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1409
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.75", "output": "4.50", "cachedInput": "0.075", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1221
1410
  ],
1222
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1411
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1223
1412
  },
1224
1413
  {
1225
1414
  canonicalId: "gpt-5.4-nano",
@@ -1227,9 +1416,9 @@ var MODEL_REGISTRY = [
1227
1416
  aliases: [],
1228
1417
  family: "gpt-5.4",
1229
1418
  pricing: [
1230
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.20", "output": "1.25", "cachedInput": "0.02", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1419
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.20", "output": "1.25", "cachedInput": "0.02", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1231
1420
  ],
1232
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1421
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1233
1422
  },
1234
1423
  {
1235
1424
  canonicalId: "gpt-5.4-pro",
@@ -1237,9 +1426,9 @@ var MODEL_REGISTRY = [
1237
1426
  aliases: [],
1238
1427
  family: "gpt-5.4",
1239
1428
  pricing: [
1240
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "30.00", "output": "180.00", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ['No cached-input rate is published for gpt-5.4-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier is intentionally omitted for this pro-tier model; not independently confirmed to apply."] }
1429
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "30.00", "output": "180.00", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ['No cached-input rate is published for gpt-5.4-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`, 'The pricing page qualifies this rate as the "<272K" context tier. A higher tier above 272K tokens is implied by that label but no rate for it was published in the fetched table, and this schema has no context-length dimension, so only the <272K rate is recorded.'] }
1241
1430
  ],
1242
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1431
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1243
1432
  },
1244
1433
  {
1245
1434
  canonicalId: "gpt-5.5",
@@ -1247,9 +1436,9 @@ var MODEL_REGISTRY = [
1247
1436
  aliases: [],
1248
1437
  family: "gpt-5.5",
1249
1438
  pricing: [
1250
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "30.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1439
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "30.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model.", 'The pricing page qualifies this rate as the "<272K" context tier. A higher tier above 272K tokens is implied by that label but no rate for it was published in the fetched table, and this schema has no context-length dimension, so only the <272K rate is recorded.'] }
1251
1440
  ],
1252
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1441
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1253
1442
  },
1254
1443
  {
1255
1444
  canonicalId: "gpt-5.5-pro",
@@ -1257,9 +1446,9 @@ var MODEL_REGISTRY = [
1257
1446
  aliases: [],
1258
1447
  family: "gpt-5.5",
1259
1448
  pricing: [
1260
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "30.00", "output": "180.00", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ['No cached-input rate is published for gpt-5.5-pro (shown as "\u2014" on the pricing page); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is intentionally omitted for this pro-tier model: the pricing page's blanket "50% off Batch" statement was not independently confirmed to apply to the -pro tier, unlike the base tiers.`] }
1449
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "30.00", "output": "180.00", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ['No cached-input rate is published for gpt-5.5-pro (shown as "\u2014" on the pricing page); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`, 'The pricing page qualifies this rate as the "<272K" context tier. A higher tier above 272K tokens is implied by that label but no rate for it was published in the fetched table, and this schema has no context-length dimension, so only the <272K rate is recorded.'] }
1261
1450
  ],
1262
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1451
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1263
1452
  },
1264
1453
  {
1265
1454
  canonicalId: "gpt-5.6-luna",
@@ -1267,9 +1456,9 @@ var MODEL_REGISTRY = [
1267
1456
  aliases: [],
1268
1457
  family: "gpt-5.6",
1269
1458
  pricing: [
1270
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.20", "output": "1.20", "cachedInput": "0.02", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1459
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.20", "output": "1.20", "cachedInput": "0.02", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1271
1460
  ],
1272
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1461
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1273
1462
  },
1274
1463
  {
1275
1464
  canonicalId: "gpt-5.6-sol",
@@ -1277,9 +1466,10 @@ var MODEL_REGISTRY = [
1277
1466
  aliases: [],
1278
1467
  family: "gpt-5.6",
1279
1468
  pricing: [
1280
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "30.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": [`OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date (this model's naming implies a later release, but a conservative too-early effectiveFrom only ever makes a historical lookup succeed when it should return "no period found", never the reverse).`, `batchMultiplier reflects OpenAI's general Batch API policy ("a 50% discount to Standard pricing rates across all models") as stated on the pricing page; not independently confirmed per-model.`] }
1469
+ { "effectiveFrom": "2026-01-01", "effectiveTo": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "5.00", "output": "30.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": [`OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date (this model's naming implies a later release, but a conservative too-early effectiveFrom only ever makes a historical lookup succeed when it should return "no period found", never the reverse).`, `batchMultiplier reflects OpenAI's general Batch API policy ("a 50% discount to Standard pricing rates across all models") as stated on the pricing page; not independently confirmed per-model.`, "Closed on 2026-09-07: the pricing page published a lower rate (4.00 input / 20.00 output) on that date. The old rate was last confirmed 2026-08-05, so the true change date lies in (2026-08-05, 2026-09-07]; effectiveTo is the observation date, which keeps every confirmed observation correct and approximates only the unobserved gap, toward the last confirmed value."] },
1470
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "4.00", "output": "20.00", "cachedInput": "0.40", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Price cut observed on 2026-09-07: input 5.00 -> 4.00, output 30.00 -> 20.00, cached input 0.50 -> 0.40. OpenAI publishes no effective date, so effectiveFrom is the observation date rather than a guess at when the cut actually landed.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`] }
1281
1471
  ],
1282
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1472
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1283
1473
  },
1284
1474
  {
1285
1475
  canonicalId: "gpt-5.6-terra",
@@ -1287,9 +1477,19 @@ var MODEL_REGISTRY = [
1287
1477
  aliases: [],
1288
1478
  family: "gpt-5.6",
1289
1479
  pricing: [
1290
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "12.00", "cachedInput": "0.20", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1480
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "12.00", "cachedInput": "0.20", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1481
+ ],
1482
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1483
+ },
1484
+ {
1485
+ canonicalId: "gpt-6-astra",
1486
+ provider: "openai",
1487
+ aliases: [],
1488
+ family: "gpt-6",
1489
+ pricing: [
1490
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "10.00", "output": "50.00", "cachedInput": "1.00", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["New model: absent from the pricing page on 2026-08-05, present on 2026-09-07. effectiveFrom is the observation date rather than this file's usual conservative 2026-01-01 - the model demonstrably did not exist at that rate a month earlier, so backdating it would invent a period.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`] }
1291
1491
  ],
1292
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1492
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1293
1493
  },
1294
1494
  {
1295
1495
  canonicalId: "o1",
@@ -1297,9 +1497,9 @@ var MODEL_REGISTRY = [
1297
1497
  aliases: [],
1298
1498
  family: "o-series",
1299
1499
  pricing: [
1300
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "15.00", "output": "60.00", "cachedInput": "7.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1500
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "15.00", "output": "60.00", "cachedInput": "7.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1301
1501
  ],
1302
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1502
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1303
1503
  },
1304
1504
  {
1305
1505
  canonicalId: "o1-pro",
@@ -1307,9 +1507,9 @@ var MODEL_REGISTRY = [
1307
1507
  aliases: [],
1308
1508
  family: "o-series",
1309
1509
  pricing: [
1310
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "150.00", "output": "600.00", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["Found on https://developers.openai.com/api/docs/pricing during a second confirmation pass.", 'No cached-input rate is published for o1-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier is intentionally omitted for this pro-tier model; not independently confirmed to apply."] }
1510
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "150.00", "output": "600.00", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["Found on https://developers.openai.com/api/docs/pricing during a second confirmation pass.", 'No cached-input rate is published for o1-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`] }
1311
1511
  ],
1312
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1512
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1313
1513
  },
1314
1514
  {
1315
1515
  canonicalId: "o3",
@@ -1317,9 +1517,9 @@ var MODEL_REGISTRY = [
1317
1517
  aliases: [],
1318
1518
  family: "o-series",
1319
1519
  pricing: [
1320
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "8.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1520
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "8.00", "cachedInput": "0.50", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1321
1521
  ],
1322
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1522
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1323
1523
  },
1324
1524
  {
1325
1525
  canonicalId: "o3-mini",
@@ -1327,9 +1527,9 @@ var MODEL_REGISTRY = [
1327
1527
  aliases: [],
1328
1528
  family: "o-series",
1329
1529
  pricing: [
1330
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.10", "output": "4.40", "cachedInput": "0.55", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1530
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.10", "output": "4.40", "cachedInput": "0.55", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1331
1531
  ],
1332
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1532
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1333
1533
  },
1334
1534
  {
1335
1535
  canonicalId: "o3-pro",
@@ -1337,9 +1537,9 @@ var MODEL_REGISTRY = [
1337
1537
  aliases: [],
1338
1538
  family: "o-series",
1339
1539
  pricing: [
1340
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "20.00", "output": "80.00", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ['No cached-input rate is published for o3-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier is intentionally omitted for this pro-tier model; not independently confirmed to apply."] }
1540
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "20.00", "output": "80.00", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ['No cached-input rate is published for o3-pro (shown as "\u2014"); cachedInput is intentionally omitted rather than guessed.', "OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", `batchMultiplier is "0.5" per the pricing page's Batch API section, which states the 50% saving "applies to all text models listed above in the Standard table" - an explicit all-model statement, so the pro tiers are covered too.`] }
1341
1541
  ],
1342
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1542
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1343
1543
  },
1344
1544
  {
1345
1545
  canonicalId: "o4-mini",
@@ -1347,9 +1547,9 @@ var MODEL_REGISTRY = [
1347
1547
  aliases: [],
1348
1548
  family: "o-series",
1349
1549
  pricing: [
1350
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.10", "output": "4.40", "cachedInput": "0.275", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1550
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.10", "output": "4.40", "cachedInput": "0.275", "batchMultiplier": "0.5", "sourceUrl": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07", "notes": ["OpenAI's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01 pending confirmation of the true rollout date.", "batchMultiplier reflects OpenAI's general Batch API policy as stated on the pricing page; not independently confirmed per-model."] }
1351
1551
  ],
1352
- source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-08-05" }
1552
+ source: { "url": "https://developers.openai.com/api/docs/pricing", "observedAt": "2026-09-07" }
1353
1553
  },
1354
1554
  {
1355
1555
  canonicalId: "anthropic/claude-sonnet-5",
@@ -1357,9 +1557,9 @@ var MODEL_REGISTRY = [
1357
1557
  aliases: [],
1358
1558
  family: "anthropic-proxy",
1359
1559
  pricing: [
1360
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "10.00", "sourceUrl": "https://openrouter.ai/anthropic/claude-sonnet-5", "observedAt": "2026-08-05", "notes": ["UNCERTAIN \u2014 flagged explicitly: this rate ($2.00/$10.00) matches Anthropic's own INTRODUCTORY rate for claude-sonnet-5, which anthropic.json records as expiring 2026-08-31 and being replaced by a $3.00/$15.00 standard rate from 2026-09-01 (see anthropic.json). It is not clear from the OpenRouter page alone whether OpenRouter (a) has simply not yet updated its listing to the post-introductory rate, (b) is genuinely offering a different long-term rate than Anthropic's own API, or (c) this reflects a caching/rounding artifact in the page. Recorded as fetched and observed on 2026-08-05, but a follow-up reviewer should re-check this specific model close to and after 2026-09-01.", "OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", `canonicalId uses OpenRouter's own slug format, deliberately distinct from Anthropic's first-party canonicalId "claude-sonnet-5" (anthropic.json) to avoid a canonicalId collision; this is a legitimate cross-provider situation, not an error.`] }
1560
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "10.00", "cachedInput": "0.20", "cacheWrite": "2.50", "sourceUrl": "https://openrouter.ai/anthropic/claude-sonnet-5", "observedAt": "2026-09-07", "notes": ["Recorded 2026-08-05 flagged UNCERTAIN: $2.00/$10.00 matched what anthropic.json then held as an introductory rate expiring 2026-08-31, so it was unclear whether OpenRouter had simply not updated its listing. Resolved on 2026-09-07 - Anthropic's pricing page states the scheduled $3.00/$15.00 increase will not occur and $2.00/$10.00 is the standard rate, so this listing was correct all along and the flag is withdrawn.", "OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", `canonicalId uses OpenRouter's own slug format, deliberately distinct from Anthropic's first-party canonicalId "claude-sonnet-5" (anthropic.json) to avoid a canonicalId collision; this is a legitimate cross-provider situation, not an error.`, "Re-confirmed unchanged on 2026-09-07 against the same model page.", "cachedInput added on 2026-09-07: the model page now prints a Cache Read rate of 0.20 per million tokens for this model.", "cacheWrite added on 2026-09-07: the model page prints a 5-minute Cache Write rate of 2.50 per million tokens (and $4.00 for the 1-hour TTL, which this single-field schema does not model).", "Resolves the 2026-08-05 caveat on this entry: $2.00/$10.00 was flagged as possibly Anthropic's introductory rate, due to be superseded by $3.00/$15.00 on 2026-09-01. Anthropic's own pricing page now states that increase will not occur and $2.00/$10.00 is the standard rate, so OpenRouter's rate matches the first-party standard rate, not a stale introductory one.", "The page notes Google Vertex (US/Europe) and Amazon Bedrock (US) upstreams charge $2.20/$11.00 through OpenRouter; the default cross-provider rate is recorded, since this schema has no upstream dimension."] }
1361
1561
  ],
1362
- source: { "url": "https://openrouter.ai/anthropic/claude-sonnet-5", "observedAt": "2026-08-05" }
1562
+ source: { "url": "https://openrouter.ai/anthropic/claude-sonnet-5", "observedAt": "2026-09-07" }
1363
1563
  },
1364
1564
  {
1365
1565
  canonicalId: "google/gemini-3.1-pro-preview",
@@ -1367,9 +1567,9 @@ var MODEL_REGISTRY = [
1367
1567
  aliases: [],
1368
1568
  family: "google-proxy",
1369
1569
  pricing: [
1370
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "12.00", "cheapestTier": true, "sourceUrl": "https://openrouter.ai/google/gemini-3.1-pro-preview", "observedAt": "2026-08-05", "notes": ["OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", "Matches Google's own first-party <=200k-token-tier rate for gemini-3.1-pro-preview ($2.00/$12.00, see google.json) exactly as observed. Google's >200k-token tier ($4.00/$18.00) is not represented here (or, evidently, distinguished by OpenRouter's listing either) \u2014 same context-length-tiering limitation as google.json.", `canonicalId uses OpenRouter's own slug format, deliberately distinct from Google's first-party canonicalId "gemini-3.1-pro-preview" (google.json).`] }
1570
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "12.00", "cachedInput": "0.20", "cheapestTier": true, "sourceUrl": "https://openrouter.ai/google/gemini-3.1-pro-preview", "observedAt": "2026-09-07", "notes": ["OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", "Matches Google's own first-party <=200k-token-tier rate for gemini-3.1-pro-preview ($2.00/$12.00, see google.json) exactly as observed. Google's >200k-token tier ($4.00/$18.00) is not represented here (or, evidently, distinguished by OpenRouter's listing either) \u2014 same context-length-tiering limitation as google.json.", `canonicalId uses OpenRouter's own slug format, deliberately distinct from Google's first-party canonicalId "gemini-3.1-pro-preview" (google.json).`, "Re-confirmed unchanged on 2026-09-07 against the same model page.", "cachedInput added on 2026-09-07: the model page now prints a Cache Read rate of 0.20 per million tokens for this model."] }
1371
1571
  ],
1372
- source: { "url": "https://openrouter.ai/google/gemini-3.1-pro-preview", "observedAt": "2026-08-05" }
1572
+ source: { "url": "https://openrouter.ai/google/gemini-3.1-pro-preview", "observedAt": "2026-09-07" }
1373
1573
  },
1374
1574
  {
1375
1575
  canonicalId: "meta-llama/llama-3.3-70b-instruct",
@@ -1377,9 +1577,9 @@ var MODEL_REGISTRY = [
1377
1577
  aliases: [],
1378
1578
  family: "meta-proxy",
1379
1579
  pricing: [
1380
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.32", "sourceUrl": "https://openrouter.ai/meta-llama/llama-3.3-70b-instruct", "observedAt": "2026-08-05", "notes": ["OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", `Meta does not sell first-party API access to Llama, so there is no first-party "llama-3.3-70b" entry in this registry to compare against; Groq (groq.json: llama-3.3-70b-versatile, $0.59/$0.79) and Together AI (together.json: llama-3.3-70b, $1.04/$1.04) each host the same open-weight model at their own, different rates. OpenRouter's rate here is the lowest of the three observed, plausibly because OpenRouter itself proxies to one of several underlying hosts and shows a blended/lowest-cost route; not independently confirmed which underlying host this routes to.`] }
1580
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.10", "output": "0.32", "sourceUrl": "https://openrouter.ai/meta-llama/llama-3.3-70b-instruct", "observedAt": "2026-09-07", "notes": ["OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", `Meta does not sell first-party API access to Llama, so there is no first-party "llama-3.3-70b" entry in this registry to compare against; Groq (groq.json: llama-3.3-70b-versatile, $0.59/$0.79) and Together AI (together.json: llama-3.3-70b, $1.04/$1.04) each host the same open-weight model at their own, different rates. OpenRouter's rate here is the lowest of the three observed, plausibly because OpenRouter itself proxies to one of several underlying hosts and shows a blended/lowest-cost route; not independently confirmed which underlying host this routes to.`, "Re-confirmed unchanged on 2026-09-07 against the same model page.", 'The page labels this "the average price customers actually pay" and warns caching and discounts often put the effective price below it; recorded as printed.'] }
1381
1581
  ],
1382
- source: { "url": "https://openrouter.ai/meta-llama/llama-3.3-70b-instruct", "observedAt": "2026-08-05" }
1582
+ source: { "url": "https://openrouter.ai/meta-llama/llama-3.3-70b-instruct", "observedAt": "2026-09-07" }
1383
1583
  },
1384
1584
  {
1385
1585
  canonicalId: "openai/gpt-5",
@@ -1387,9 +1587,19 @@ var MODEL_REGISTRY = [
1387
1587
  aliases: [],
1388
1588
  family: "openai-proxy",
1389
1589
  pricing: [
1390
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "sourceUrl": "https://openrouter.ai/openai/gpt-5", "observedAt": "2026-08-05", "notes": ["OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", "Matches OpenAI's own first-party rate for gpt-5 ($1.25/$10.00, see openai.json) exactly as observed \u2014 no markup detected for this model.", `canonicalId uses OpenRouter's own slug format ("openai/gpt-5"), deliberately distinct from OpenAI's first-party canonicalId "gpt-5" (openai.json) \u2014 this avoids a canonicalId collision while still allowing a cross-provider alias collision if a caller looks up the bare id "gpt-5" without a provider qualifier; no bare "gpt-5" alias was added to this entry to keep that surface area minimal.`] }
1590
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "10.00", "cachedInput": "0.125", "sourceUrl": "https://openrouter.ai/openai/gpt-5", "observedAt": "2026-09-07", "notes": ["OpenRouter's per-model page does not publish an effective date; effectiveFrom is set conservatively to 2026-01-01.", "Matches OpenAI's own first-party rate for gpt-5 ($1.25/$10.00, see openai.json) exactly as observed \u2014 no markup detected for this model.", `canonicalId uses OpenRouter's own slug format ("openai/gpt-5"), deliberately distinct from OpenAI's first-party canonicalId "gpt-5" (openai.json) \u2014 this avoids a canonicalId collision while still allowing a cross-provider alias collision if a caller looks up the bare id "gpt-5" without a provider qualifier; no bare "gpt-5" alias was added to this entry to keep that surface area minimal.`, "Re-confirmed unchanged on 2026-09-07 against the same model page.", "cachedInput added on 2026-09-07: the model page now prints a Cache Read rate of 0.125 per million tokens for this model."] }
1591
+ ],
1592
+ source: { "url": "https://openrouter.ai/openai/gpt-5", "observedAt": "2026-09-07" }
1593
+ },
1594
+ {
1595
+ canonicalId: "deepseek-v4-flash-0731",
1596
+ provider: "together",
1597
+ aliases: [],
1598
+ family: "deepseek",
1599
+ pricing: [
1600
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.14", "output": "0.28", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1391
1601
  ],
1392
- source: { "url": "https://openrouter.ai/openai/gpt-5", "observedAt": "2026-08-05" }
1602
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1393
1603
  },
1394
1604
  {
1395
1605
  canonicalId: "deepseek-v4-pro",
@@ -1397,19 +1607,29 @@ var MODEL_REGISTRY = [
1397
1607
  aliases: [],
1398
1608
  family: "deepseek",
1399
1609
  pricing: [
1400
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.74", "output": "3.48", "cachedInput": "0.20", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1610
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.74", "output": "3.48", "cachedInput": "0.20", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Not re-confirmed on 2026-09-07: that fetch listed "DeepSeek V4 Pro 0813" at $1.32 / $3.96 and no undated "DeepSeek V4 Pro" row. Whether the dated build is this same model repriced or a separate snapshot is not stated on the page, so this entry keeps its 2026-08-05 rate and the dated build is recorded separately as deepseek-v4-pro-0813 rather than silently overwriting this one.'] }
1401
1611
  ],
1402
1612
  source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1403
1613
  },
1614
+ {
1615
+ canonicalId: "deepseek-v4-pro-0813",
1616
+ provider: "together",
1617
+ aliases: [],
1618
+ family: "deepseek",
1619
+ pricing: [
1620
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "1.32", "output": "3.96", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Dated build listed on the page on 2026-09-07; see deepseek-v4-pro's notes for why it is a separate entry rather than a reprice of that one.", "Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1621
+ ],
1622
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1623
+ },
1404
1624
  {
1405
1625
  canonicalId: "gemma-4-31b",
1406
1626
  provider: "together",
1407
1627
  aliases: [],
1408
1628
  family: "gemma",
1409
1629
  pricing: [
1410
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.39", "output": "0.97", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): AWS Bedrock also lists "Gemma 4 31B" (aws-bedrock.json: gemma-4-31b) at a different, lower rate ($0.14/$0.40 as observed on Bedrock) \u2014 same underlying Google open-weight model, independently priced by each reseller; do not assume parity.'] }
1630
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.39", "output": "0.97", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): AWS Bedrock also lists "Gemma 4 31B" (aws-bedrock.json: gemma-4-31b) at a different, lower rate ($0.14/$0.40 as observed on Bedrock) \u2014 same underlying Google open-weight model, independently priced by each reseller; do not assume parity.', "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1411
1631
  ],
1412
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1632
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1413
1633
  },
1414
1634
  {
1415
1635
  canonicalId: "glm-5.2",
@@ -1417,9 +1637,29 @@ var MODEL_REGISTRY = [
1417
1637
  aliases: [],
1418
1638
  family: "glm",
1419
1639
  pricing: [
1420
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.40", "output": "4.40", "cachedInput": "0.26", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1640
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.40", "output": "4.40", "cachedInput": "0.26", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1421
1641
  ],
1422
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1642
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1643
+ },
1644
+ {
1645
+ canonicalId: "glm-5.3",
1646
+ provider: "together",
1647
+ aliases: [],
1648
+ family: "glm",
1649
+ pricing: [
1650
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "1.40", "output": "4.40", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1651
+ ],
1652
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1653
+ },
1654
+ {
1655
+ canonicalId: "glm-5.3-flash",
1656
+ provider: "together",
1657
+ aliases: [],
1658
+ family: "glm",
1659
+ pricing: [
1660
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.50", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1661
+ ],
1662
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1423
1663
  },
1424
1664
  {
1425
1665
  canonicalId: "gpt-oss-120b",
@@ -1427,9 +1667,9 @@ var MODEL_REGISTRY = [
1427
1667
  aliases: [],
1428
1668
  family: "gpt-oss",
1429
1669
  pricing: [
1430
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): Groq also publishes a model with canonicalId "gpt-oss-120b" (groq.json), independently priced at the same $0.15/$0.60 figure as observed. The identical string "gpt-oss-120b" is used as the canonicalId on both providers because that is the actual model name each provider publishes; resolving "gpt-oss-120b" without a provider qualifier is ambiguous across providers by design and the resolver requires a provider qualifier to disambiguate it.'] }
1670
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.60", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): Groq also publishes a model with canonicalId "gpt-oss-120b" (groq.json), independently priced at the same $0.15/$0.60 figure as observed. The identical string "gpt-oss-120b" is used as the canonicalId on both providers because that is the actual model name each provider publishes; resolving "gpt-oss-120b" without a provider qualifier is ambiguous across providers by design and the resolver requires a provider qualifier to disambiguate it.', "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1431
1671
  ],
1432
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1672
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1433
1673
  },
1434
1674
  {
1435
1675
  canonicalId: "gpt-oss-20b",
@@ -1437,7 +1677,7 @@ var MODEL_REGISTRY = [
1437
1677
  aliases: [],
1438
1678
  family: "gpt-oss",
1439
1679
  pricing: [
1440
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.05", "output": "0.20", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): Groq also publishes "gpt-oss-20b" (groq.json) at a different rate ($0.075/$0.30 as observed) \u2014 same model name, independently priced by each host; do not assume parity.'] }
1680
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.05", "output": "0.20", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", 'Cross-provider alias/canonicalId collision (allowed, not an error): Groq also publishes "gpt-oss-20b" (groq.json) at a different rate ($0.075/$0.30 as observed) \u2014 same model name, independently priced by each host; do not assume parity.', "Not surfaced by the 2026-09-07 fetch of the same page. observedAt is deliberately left at 2026-08-05: the rate was not re-observed, and an absence in one page fetch is not evidence of a withdrawal."] }
1441
1681
  ],
1442
1682
  source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1443
1683
  },
@@ -1447,9 +1687,19 @@ var MODEL_REGISTRY = [
1447
1687
  aliases: [],
1448
1688
  family: "kimi",
1449
1689
  pricing: [
1450
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "cachedInput": "0.30", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1690
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "3.00", "output": "15.00", "cachedInput": "0.30", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1451
1691
  ],
1452
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1692
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1693
+ },
1694
+ {
1695
+ canonicalId: "llama-3-8b-instruct-lite",
1696
+ provider: "together",
1697
+ aliases: [],
1698
+ family: "llama",
1699
+ pricing: [
1700
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.14", "output": "0.14", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1701
+ ],
1702
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1453
1703
  },
1454
1704
  {
1455
1705
  canonicalId: "llama-3.3-70b",
@@ -1457,9 +1707,9 @@ var MODEL_REGISTRY = [
1457
1707
  aliases: [],
1458
1708
  family: "llama-3.3",
1459
1709
  pricing: [
1460
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.04", "output": "1.04", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Also hosted by Groq (groq.json: llama-3.3-70b-versatile, $0.59/$0.79) and resold by AWS Bedrock \u2014 each host prices this same open-weight model independently; do not assume parity across providers."] }
1710
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.04", "output": "1.04", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Also hosted by Groq (groq.json: llama-3.3-70b-versatile, $0.59/$0.79) and resold by AWS Bedrock \u2014 each host prices this same open-weight model independently; do not assume parity across providers.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1461
1711
  ],
1462
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1712
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1463
1713
  },
1464
1714
  {
1465
1715
  canonicalId: "minimax-m3",
@@ -1467,9 +1717,19 @@ var MODEL_REGISTRY = [
1467
1717
  aliases: [],
1468
1718
  family: "minimax",
1469
1719
  pricing: [
1470
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "1.20", "cachedInput": "0.06", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1720
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "1.20", "cachedInput": "0.06", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1471
1721
  ],
1472
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1722
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1723
+ },
1724
+ {
1725
+ canonicalId: "qwen2.5-7b-instruct-turbo",
1726
+ provider: "together",
1727
+ aliases: [],
1728
+ family: "qwen",
1729
+ pricing: [
1730
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.30", "output": "0.30", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1731
+ ],
1732
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1473
1733
  },
1474
1734
  {
1475
1735
  canonicalId: "qwen3.5-397b-a17b",
@@ -1477,9 +1737,29 @@ var MODEL_REGISTRY = [
1477
1737
  aliases: [],
1478
1738
  family: "qwen",
1479
1739
  pricing: [
1480
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.60", "output": "3.60", "cachedInput": "0.35", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1740
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "0.60", "output": "3.60", "cachedInput": "0.35", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1481
1741
  ],
1482
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1742
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1743
+ },
1744
+ {
1745
+ canonicalId: "qwen3.5-9b",
1746
+ provider: "together",
1747
+ aliases: [],
1748
+ family: "qwen",
1749
+ pricing: [
1750
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.17", "output": "0.25", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1751
+ ],
1752
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1753
+ },
1754
+ {
1755
+ canonicalId: "qwen3.6-plus",
1756
+ provider: "together",
1757
+ aliases: [],
1758
+ family: "qwen",
1759
+ pricing: [
1760
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.50", "output": "3.00", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1761
+ ],
1762
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1483
1763
  },
1484
1764
  {
1485
1765
  canonicalId: "qwen3.7-max",
@@ -1487,9 +1767,39 @@ var MODEL_REGISTRY = [
1487
1767
  aliases: [],
1488
1768
  family: "qwen",
1489
1769
  pricing: [
1490
- { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "3.75", "cachedInput": "0.13", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-08-05", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01."] }
1770
+ { "effectiveFrom": "2026-01-01", "currency": "USD", "unit": "per-million-tokens", "input": "1.25", "output": "3.75", "cachedInput": "0.13", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Together's pricing page does not publish an effective date for this rate; effectiveFrom is set conservatively to 2026-01-01.", "Re-confirmed unchanged on 2026-09-07 against the same page."] }
1491
1771
  ],
1492
- source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-08-05" }
1772
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1773
+ },
1774
+ {
1775
+ canonicalId: "qwen3.7-plus",
1776
+ provider: "together",
1777
+ aliases: [],
1778
+ family: "qwen",
1779
+ pricing: [
1780
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.32", "output": "1.28", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1781
+ ],
1782
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1783
+ },
1784
+ {
1785
+ canonicalId: "qwen3.8-2.4t-a95b",
1786
+ provider: "together",
1787
+ aliases: [],
1788
+ family: "qwen",
1789
+ pricing: [
1790
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "2.00", "output": "6.00", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1791
+ ],
1792
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1793
+ },
1794
+ {
1795
+ canonicalId: "qwen3.8-flash",
1796
+ provider: "together",
1797
+ aliases: [],
1798
+ family: "qwen",
1799
+ pricing: [
1800
+ { "effectiveFrom": "2026-09-07", "currency": "USD", "unit": "per-million-tokens", "input": "0.15", "output": "0.47", "sourceUrl": "https://www.together.ai/pricing", "observedAt": "2026-09-07", "notes": ["Added from the 2026-09-07 fetch. effectiveFrom is the observation date rather than this file's conservative 2026-01-01, since the 2026-08-05 fetch of the same page did not list it.", "Together publishes no cached-input rate or batch discount for serverless models; both fields are omitted rather than guessed."] }
1801
+ ],
1802
+ source: { "url": "https://www.together.ai/pricing", "observedAt": "2026-09-07" }
1493
1803
  }
1494
1804
  ];
1495
1805
 
@@ -1549,7 +1859,7 @@ var InvalidRateError = class extends Error {
1549
1859
  var ZERO = { numerator: 0n, scale: 0 };
1550
1860
  var DECIMAL_PATTERN = /^\d+(\.\d+)?$/;
1551
1861
  function parseDecimalRate(value, field) {
1552
- if (!DECIMAL_PATTERN.test(value)) {
1862
+ if (typeof value !== "string" || !DECIMAL_PATTERN.test(value)) {
1553
1863
  throw new InvalidRateError(field, value);
1554
1864
  }
1555
1865
  const dot = value.indexOf(".");
@@ -1983,6 +2293,59 @@ function createPriceOverride(input) {
1983
2293
  };
1984
2294
  }
1985
2295
 
2296
+ // src/aggregate.ts
2297
+ function sumExactUsd(values) {
2298
+ const amounts = [];
2299
+ for (const [index, value] of values.entries()) {
2300
+ amounts.push(parseDecimalRate(value, `values[${String(index)}]`));
2301
+ }
2302
+ return formatExact(addExact(amounts));
2303
+ }
2304
+ function modelKey(breakdown) {
2305
+ return `${breakdown.provider}:${breakdown.canonicalModel}`;
2306
+ }
2307
+ function newBucket() {
2308
+ return { count: 0, sum: ZERO, registryVersions: /* @__PURE__ */ new Set() };
2309
+ }
2310
+ function accumulate(bucket, amount, registryVersion) {
2311
+ bucket.count += 1;
2312
+ bucket.sum = addExact([bucket.sum, amount]);
2313
+ bucket.registryVersions.add(registryVersion);
2314
+ }
2315
+ function toTotal(bucket) {
2316
+ return {
2317
+ count: bucket.count,
2318
+ totalUsd: toDisplayNumber(bucket.sum),
2319
+ totalUsdExact: formatExact(bucket.sum),
2320
+ registryVersions: [...bucket.registryVersions].sort()
2321
+ };
2322
+ }
2323
+ function createCostAggregator() {
2324
+ const overall = newBucket();
2325
+ const byModelBuckets = /* @__PURE__ */ new Map();
2326
+ return {
2327
+ add(breakdown) {
2328
+ const amount = parseDecimalRate(breakdown.totalUsdExact, "totalUsdExact");
2329
+ const key = modelKey(breakdown);
2330
+ let bucket = byModelBuckets.get(key);
2331
+ if (bucket === void 0) {
2332
+ bucket = newBucket();
2333
+ byModelBuckets.set(key, bucket);
2334
+ }
2335
+ accumulate(bucket, amount, breakdown.registryVersion);
2336
+ accumulate(overall, amount, breakdown.registryVersion);
2337
+ },
2338
+ total() {
2339
+ return toTotal(overall);
2340
+ },
2341
+ byModel() {
2342
+ const result = /* @__PURE__ */ new Map();
2343
+ for (const [key, bucket] of byModelBuckets) result.set(key, toTotal(bucket));
2344
+ return result;
2345
+ }
2346
+ };
2347
+ }
2348
+
1986
2349
  // src/normalize/openai.ts
1987
2350
  var KNOWN_TOP_LEVEL = /* @__PURE__ */ new Set([
1988
2351
  "prompt_tokens",