This page is the single source for Content API prices. Other pages link here instead of repeating the numbers.
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
| Call | Credits | Scope |
|---|---|---|
Every read (GET), including GET /v1/content/credits | 0 | content:read |
| Create, update, and delete of modules, courses, chapters, lessons, videos, scenes, slides, tests, games, and simulations, with content you supply | 0 | content:write |
| Module copy into a course | 0 | content:write |
| Game or simulation version restore | 0 | content:write |
| Expansion job, any outputs (editable drafts; no model is called) | 0 | content:generate |
| Game brief | 1 | content:generate |
| Game build | 40 | content:generate |
| Game revision | 40 | content:generate |
| Simulation brief | 1 | content:generate |
Simulation build or revision, 2D plan (representation: "2d-canvas") | 20 | content:generate |
Simulation build or revision, 3D plan (representation: "3d-three") | 30 | content:generate |
| Video render to mp4 | 5 | content:generate |
| Video render cancel | 0 | content: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
| Call | Balance check | Charge |
|---|---|---|
| Game or simulation brief, build, revise | Checked 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 render | Checked 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. |
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
curl "$TUTORFLOW_API_BASE_URL/v1/content/credits" \
-H "Authorization: Bearer $TUTORFLOW_CONTENT_API_KEY"{
"credit": 500,
"overdraftCredit": 0,
"overdraftLimit": 100,
"availableCredit": 500,
"isPaymentFailed": false
}| Field | Meaning |
|---|---|
credit | The organization's credit balance. |
overdraftCredit, overdraftLimit | Overdraft used and allowed. Overdraft applies only to postpaid plans that are not canceled. |
availableCredit | What a priced call can spend now, after payment status and any overdraft allowance. Compare this with the price before a batch. |
isPaymentFailed | true when the organization has a failed payment. Priced calls then return 402 content_payment_failed until it is resolved in TutorFlow Billing. |
Payment errors
| Status | error.code | What to do |
|---|---|---|
402 | content_payment_required | Add credits in TutorFlow Billing, then retry with the same Idempotency-Key. |
402 | content_payment_failed | Resolve the failed payment in TutorFlow Billing, then retry. |
Retrying a 402 without changing the balance returns 402 again. See Errors.