Get the credit balance
get_creditsGET/v1/creditsBeta
Returns the credits the account can spend now, split between this month's plan credits and the top-up, the API bonus, and today's daily limits.
Beta. This endpoint is supported and can gain new fields. If a change would break your code, we tell you before it takes effect and list it in the changelog.
About
Call this before you start an analysis or an export, to know whether the account can pay for it. remaining is what a charge can use right now, as long as planRequired is false: this month's plan credits first, then the top-up. Through the API, the plan credits and the top-up are spent only on the Creator and Studio plans. On any other plan a call through the API spends only the API bonus, and a charge the bonus cannot pay answers PLAN_REQUIRED. The plan credits start again from included on the 1st of each month (UTC) and are not carried over. Top-up credits you bought do not expire. Credits that the GPT-Video app granted to a new account without a purchase expire after a set number of days and are spent only in the app. planRequired is true when the account must choose a plan in the GPT-Video app before it can spend its credits. The API bonus is shown apart, in bonus, and is not part of remaining: while it is active, a call through the API spends the bonus first, even when planRequired is true. Exports, Editor Assistant turns, tool runs and fake text scripts have daily limits, shown in dailyLimits. To see how the balance moved, call list_ledger_entries (GET /v1/credits/ledger).
Example use
Before it works through its queue each night, a script on a Studio account reads remaining and the exports left today in dailyLimits. Analyses and exports that these numbers cannot cover wait for the next night.
Endpoint
GET https://api.gpt-video.com/v1/credits- Scope
clips:read. - Rate limit 120 requests a minute for each key and 240 for each account, shared by every
readcall. See rate limits. - No
Idempotency-Key.
Parameters
This operation takes no parameters.
Request
Check the balance before an analysis.
curl "https://api.gpt-video.com/v1/credits" \
-H "Authorization: Bearer $GPT_VIDEO_API_KEY"const res = await fetch("https://api.gpt-video.com/v1/credits", {
method: "GET",
headers: {
"Authorization": `Bearer ${process.env.GPT_VIDEO_API_KEY}`,
},
});
const data = await res.json();
console.log(data);import os
import requests
r = requests.get(
"https://api.gpt-video.com/v1/credits",
headers={
"Authorization": f"Bearer {os.environ['GPT_VIDEO_API_KEY']}",
},
)
data = r.json()
print(data){
"method": "tools/call",
"params": {
"name": "get_credits",
"arguments": {}
}
}Response
A successful call answers HTTP 200.
Fields to check
| Name | Type | Description |
|---|---|---|
bonus.status | string | active: calls through the API spend it now. used_up: no credits are left. expired: expiresAt has passed, and what was left can no longer be spent. paused: it cannot be spent for now; resumesAt says when it starts again. cancelled: it was cancelled, as the API terms allow for a bonus obtained by misuse. |
Response example
{
"plan": "creator",
"planRequired": false,
"credits": {
"period": "2026-09",
"periodEndsAt": "2026-10-01T00:00:00.000Z",
"included": 800,
"remaining": 1020,
"remainingFromPlan": 770,
"topUp": 250
},
"bonus": null,
"dailyLimits": {
"resetsAt": "2026-09-02T00:00:00.000Z",
"exports": {
"limit": 100,
"used": 1,
"remaining": 99
},
"assistantTurns": {
"limit": 500,
"used": 12,
"remaining": 488
},
"toolRuns": {
"limit": 100,
"used": 2,
"remaining": 98
},
"fakeTextScripts": {
"limit": 100,
"used": 0,
"remaining": 100
},
"assistantTurnsThroughApi": {
"limit": 100,
"used": 4,
"remaining": 96
}
}
}All response fields
| Name | Type | Required | Description |
|---|---|---|---|
plan | string | Required | The plan of the account. One of free, starter, creator, studio, unlimited. |
planRequired | boolean | Required | true when the account must choose a plan before it can spend its credits or export; reading works either way. While bonus.status is active, a call through the API still spends the bonus. It does not say whether the API may spend the plan credits: only the Creator and Studio plans can. |
credits | object | Required | The plan credits and the top-up of the account. Analyses are paid in credits. |
credits.period | string | Required | The calendar month the plan credits belong to, as YYYY-MM (UTC). |
credits.periodEndsAt | string | Required | When the month ends and the plan credits start again from included: the 1st of the next month at 00:00 UTC. |
credits.included | integer | Required | How many credits the plan gives each month. |
credits.remaining | integer | Required | How many credits a charge can use right now: remainingFromPlan plus topUp. While planRequired is true, these credits cannot be spent, even when this is above 0. Through the API, they can be spent only on the Creator and Studio plans. The API bonus is not part of it: see bonus. |
credits.remainingFromPlan | integer | Required | What is left of this month's plan credits, never below 0. They are spent first. |
credits.topUp | integer | Required | Credits on top of the plan, never below 0. They are spent after the plan credits. Credits you bought do not expire. Credits that the GPT-Video app granted to a new account without a purchase expire after a set number of days and are spent only in the app. |
bonus | object or null | Required | The API bonus: credits given once to the account for using the API. It is not part of remaining. While status is active, a call through the API that costs credits spends the bonus before the plan credits and the top-up, even when planRequired is true; on any plan but Creator and Studio the bonus also pays for exports, Editor Assistant turns, tool runs and fake text scripts, within its own daily limits. A charge the bonus cannot cover in full is never split: on the Creator and Studio plans the plan pays it, and on any other plan it is refused. Every account can receive the bonus, whatever its plan. Calls from the GPT-Video app never spend it. null when the account never received one. |
bonus.status | string | Required | active: calls through the API spend it now. used_up: no credits are left. expired: expiresAt has passed, and what was left can no longer be spent. paused: it cannot be spent for now; resumesAt says when it starts again. cancelled: it was cancelled, as the API terms allow for a bonus obtained by misuse. One of active, used_up, expired, paused, cancelled. |
bonus.granted | integer | Required | How many credits the bonus gave. |
bonus.remaining | integer | Required | How many bonus credits are left, never below 0. They can be spent only while status is active. |
bonus.grantedAt | string | Required | When the bonus was given. |
bonus.expiresAt | string | Required | When the bonus ends. Bonus credits left after this time are lost. |
bonus.resumesAt | string or null | Required | When a paused bonus can be spent again: the next 00:00 UTC, when the bonus has reached today's spending limit. null in every other case, also when it was paused with no set end. |
dailyLimits | object | Required | The limits that count per day instead of per month. |
dailyLimits.resetsAt | string | Required | When the daily limits start again: the next 00:00 UTC. |
dailyLimits.exports | object | Required | Exports use no credits: they count against this daily limit. |
dailyLimits.assistantTurns | object | Required | Turns of the Editor Assistant. |
dailyLimits.toolRuns | object | Required | Tool runs: voiceovers, audio separations and brainstorms. |
dailyLimits.fakeTextScripts | object | Required | Fake text scripts: a story written by the model, or a request for the voices of a story. |
dailyLimits.assistantTurnsThroughApi | object or null | Required | On the Creator and Studio plans, the part of assistantTurns that calls through the API may use. null on any other plan: its turns through the API are paid by the API bonus and counted in assistantTurns. |
Fields of dailyLimits.exports
| Name | Type | Required | Description |
|---|---|---|---|
dailyLimits.exports.limit | integer | Required | How many exports can start each day through the API. On the Creator and Studio plans, the plan's limit. On any other plan, the API bonus's limit while the bonus is active (the account's own limit when it is lower), and 0 when the bonus is not active. |
dailyLimits.exports.used | integer | Required | How many exports started today, from the API and from the GPT-Video app. |
dailyLimits.exports.remaining | integer | Required | How many more exports can start today, never below 0. |
Fields of dailyLimits.assistantTurns
| Name | Type | Required | Description |
|---|---|---|---|
dailyLimits.assistantTurns.limit | integer | Required | How many Editor Assistant turns can start each day through the API. On the Creator and Studio plans, the plan's limit. On any other plan, the API bonus's limit while the bonus is active (the account's own limit when it is lower), and 0 when the bonus is not active. |
dailyLimits.assistantTurns.used | integer | Required | How many Editor Assistant turns started today, from the API and from the GPT-Video app. |
dailyLimits.assistantTurns.remaining | integer | Required | How many more Editor Assistant turns can start today, never below 0. |
Fields of dailyLimits.toolRuns
| Name | Type | Required | Description |
|---|---|---|---|
dailyLimits.toolRuns.limit | integer | Required | How many tool runs can start each day through the API. On the Creator and Studio plans, the plan's limit. On any other plan, the API bonus's limit while the bonus is active (the account's own limit when it is lower), and 0 when the bonus is not active. |
dailyLimits.toolRuns.used | integer | Required | How many tool runs started today, from the API and from the GPT-Video app. |
dailyLimits.toolRuns.remaining | integer | Required | How many more tool runs can start today, never below 0. |
Fields of dailyLimits.fakeTextScripts
| Name | Type | Required | Description |
|---|---|---|---|
dailyLimits.fakeTextScripts.limit | integer | Required | How many fake text scripts can start each day through the API. On the Creator and Studio plans, the plan's limit. On any other plan, the API bonus's limit while the bonus is active (the account's own limit when it is lower), and 0 when the bonus is not active. |
dailyLimits.fakeTextScripts.used | integer | Required | How many fake text scripts started today, from the API and from the GPT-Video app. |
dailyLimits.fakeTextScripts.remaining | integer | Required | How many more fake text scripts can start today, never below 0. |
Fields of dailyLimits.assistantTurnsThroughApi
| Name | Type | Required | Description |
|---|---|---|---|
dailyLimits.assistantTurnsThroughApi.limit | integer | Required | How many Editor Assistant turns can start through the API each day: a fifth of the plan's assistantTurns limit, rounded up. |
dailyLimits.assistantTurnsThroughApi.used | integer | Required | How many turns started through the API today. |
dailyLimits.assistantTurnsThroughApi.remaining | integer | Required | How many more turns can start through the API today, never below 0. Each of them also needs room in assistantTurns. |
More examples
Check the balance with the API bonus
GET /v1/credits
{
"plan": "free",
"planRequired": true,
"credits": {
"period": "2026-09",
"periodEndsAt": "2026-10-01T00:00:00.000Z",
"included": 0,
"remaining": 0,
"remainingFromPlan": 0,
"topUp": 0
},
"bonus": {
"status": "active",
"granted": 50,
"remaining": 47,
"grantedAt": "2026-09-01T08:00:00.000Z",
"expiresAt": "2026-10-01T08:00:00.000Z",
"resumesAt": null
},
"dailyLimits": {
"resetsAt": "2026-09-02T00:00:00.000Z",
"exports": {
"limit": 5,
"used": 1,
"remaining": 4
},
"assistantTurns": {
"limit": 20,
"used": 1,
"remaining": 19
},
"toolRuns": {
"limit": 10,
"used": 0,
"remaining": 10
},
"fakeTextScripts": {
"limit": 10,
"used": 0,
"remaining": 10
},
"assistantTurnsThroughApi": null
}
}Errors
Every call can also answer these errors. VALIDATION_FAILED, UNKNOWN_PARAMETER, UNAUTHORIZED, SCOPE_MISSING, RATE_LIMITED, INTERNAL, UNAVAILABLE.
Cost
No credits are used.
Related operations
get_me(GET /v1/me) Get the current keylist_ledger_entries(GET /v1/credits/ledger) List the credit movementsestimate_analysis(POST /v1/projects/{projectId}/analyze/estimate) Estimate the credits of an analysis or a buildadd_timeline_clip(POST /v1/projects/{projectId}/timeline/clips) Add a video to an edit
Questions
Which credits are spent first?
Through the API, the API bonus while it is active. Then, on the Creator and Studio plans, this month's plan credits. The top-up is used only for what the plan credits do not cover, and what is left of it stays for the next months. On any other plan the plan credits and the top-up are not spent through the API.
Who can spend through the API after the bonus?
The Creator and Studio plans. An account on any other plan, or on no plan, spends only its API bonus through the API. A charge that would touch the plan credits or the top-up of such an account answers PLAN_REQUIRED. The GPT-Video app is not affected: there the plan works as usual.
Can an account without a plan spend through the API?
Only its API bonus, within the daily limits of the account. Credits that the GPT-Video app granted to a new account without a purchase are spent only in the app, and through the API they do not count.
When do the plan credits start again?
On the 1st of each calendar month at 00:00 UTC, at periodEndsAt. Plan credits left at the end of a month are not carried over.
Is remaining exactly what the next charge can use?
Yes, at the moment of the call, while planRequired is false and, through the API, on the Creator and Studio plans: a charge reads the same balance. Another charge made in between, from the API or from the app, lowers it. While the API bonus is active, a call through the API spends the bonus first and leaves remaining as it is.
Does remaining include the API bonus?
No. remaining is the plan credits and the top-up. The bonus has its own block, bonus, with what is left of it and when it ends.
Which daily limits apply through the API on a plan other than Creator or Studio?
While its API bonus is active, the bonus's: 5 exports, 20 Editor Assistant turns, 10 tool runs and 10 fake text scripts a day, or the account's own limits where they are lower. When the bonus is not active the limits are 0, and these calls are refused. The Creator and Studio plans have their own limits.