资源
Content API Pricing

Content API Pricing

What each Content API call costs in AI Credits, when the charge happens, and how to check the balance first.

本页内容

This page is the single source for Content API prices. Other pages link here instead of repeating the numbers.

Test keys never spend anything: priced routes answer with canned content and charge 0. With a live key, Content API calls spend the TutorFlow organization's normal AI Credit balance, the same balance shown in TutorFlow Billing and spent by the TutorFlow editor. The prices are the same as in the editor. Agent Platform credits (/v1/platform/**) are a separate balance and are never used as a fallback.

Price list

CallCreditsScope
Every read (GET), including GET /v1/content/credits0content:read
Create, update, and delete of modules, courses, chapters, lessons, videos, scenes, slides, tests, games, and simulations, with content you supply0content:write
Module copy into a course0content:write
Game or simulation version restore0content:write
Expansion job, any outputs (editable drafts; no model is called)0content:generate
Asset upload URL and upload0content:write
Test generation3content:generate
Module generation3content:generate
Course generation: outline3content:generate
Course generation: each lesson3content:generate
Slide deck generation: outline0content:generate
Slide deck generation: each text page1content:generate
Slide deck generation: each image page (every fourth page from the first)3content:generate
Game brief1content:generate
Game build40content:generate
Game revision40content:generate
Simulation brief1content:generate
Simulation build or revision, 2D plan (representation: "2d-canvas")20content:generate
Simulation build or revision, 3D plan (representation: "3d-three")30content:generate
Video scene narration (TTS from the scene script), per scene1content:generate
Video render to mp45content:generate
Video render cancel0content:generate

Expansion jobs are free: they turn your source JSON into editable drafts (a module with your text, an empty video, a test with your topic) without calling a model. Before 2026-09-30 each output was priced at 3, 1, and 3 credits. A game's metadata.dimension does not change its price; a simulation's price follows the representation its brief settled, so read it after the brief and before the build.

When the charge happens

CallBalance checkCharge
Game or simulation brief, build, reviseChecked before the stream opens, or before the 202 in async mode. Not enough returns 402.Charged once, after the new version is stored. A run that fails, or a stream you hang up on, costs nothing.
Video renderChecked when the render starts. Not enough returns 402.Charged when the render starts. A render that later fails is not refunded. A video with a scene that has no narration audio is refused with 400 before any charge, unless the request sets generateMissingNarration: then the balance check covers the narration (1 credit per scene) and the render together, and the narration is charged as each scene is narrated.
Scene narrationThe total for every scene to narrate is checked before the first one. Not enough returns 402.Charged per scene as it is narrated.
Test, module, course, or slide deck generationestimatedCredits is checked before the 202. A course checks again before each lesson, and a deck before each batch. Not enough returns 402 before the run starts, or fails the run partway.A test or module is charged when it is saved. A course is charged 3 for the outline, then 3 as each lesson is saved. A slide deck is charged per batch of four pages as it is written (6 for a full batch). What was written before a failure stays charged. See Credits.

Every check also applies the key's monthly credit limit, when it has one.

Retrying with the same Idempotency-Key never charges twice: async generation and render requests replay their first response, and expansions return the existing job. See Idempotency.

Check the balance

bash
curl "$TUTORFLOW_API_BASE_URL/v1/content/credits" \
  -H "Authorization: Bearer $TUTORFLOW_CONTENT_API_KEY"
JSON
{
  "credit": 500,
  "overdraftCredit": 0,
  "overdraftLimit": 100,
  "availableCredit": 500,
  "isPaymentFailed": false,
  "livemode": true
}
FieldMeaning
creditThe organization's credit balance.
overdraftCredit, overdraftLimitOverdraft used and allowed. Overdraft applies only to postpaid plans that are not canceled.
availableCreditWhat a priced call can spend now, after payment status and any overdraft allowance. Compare this with the price before a batch.
isPaymentFailedtrue when the organization has a failed payment. Priced calls then return 402 content_payment_failed until it is resolved in TutorFlow Billing.
livemodetrue for a live key. A test key gets false and a fixed sandbox balance instead of the organization's.

Per-key monthly limits

An admin can cap what one key spends in a UTC calendar month with monthlyCreditLimit. The key still spends the organization's balance; the limit only stops it from spending more than its share. A priced call that would take the key over its limit answers 402 content_key_budget_exceeded before any charge. The limit is checked when each action or step starts, so work already running can finish past it. See Monthly credit limit.

What was spent

GET /v1/content/credits/history lists every charge, refund, and adjustment, with the key that made each charge. See Credit history.

Payment errors

Statuserror.codeWhat to do
402content_payment_requiredAdd credits in TutorFlow Billing, then retry with the same Idempotency-Key.
402content_payment_failedResolve the failed payment in TutorFlow Billing, then retry.
402content_key_budget_exceededThe key reached its monthly limit. Wait until error.resetsAt, or ask an admin to raise the limit.

Retrying a 402 without changing the balance returns 402 again. See Errors.

这个页面对你有帮助吗?