API Reference
Workspace
A token is minted for one workspace by one member. These endpoints tell you which, along with the plan, what is left to spend and where it went, so you can check a token works, watch the balance before queueing a batch of videos and account for what each one cost.
GET
/v1/workspaceGet workspace
Returns the workspace the token was minted for and the member who created it. Nothing to pass, the token identifies both.
Response fields
idrequirednumber
Workspace id, the same one shown in the app.namerequiredstring
Workspace name.planrequiredstring
One of free, starter, pro or premium, or a lifetime plan such as sumo_1. Rendering requires a paid plan.creditsrequirednumber
Credits left this billing period. Generating and rendering both spend them, so a create call fails once this hits zero.balancerequirednumber
Cash balance in US dollars, topped up separately from the plan. Only the gameplay marketplace and the AI tools spend it, videos never do.createdAtrequiredstring
ISO timestamp of when the workspace was created.userrequiredobject
The member who created the token, with id, name and email. Videos created with this token are owned by them.Request
curl "https://api.vsub.io/v1/workspace" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90"Response 200
{
"id": 1842,
"name": "Acme Studio",
"plan": "premium",
"credits": 4180,
"balance": 12.5,
"createdAt": "2025-11-02T09:14:33.000Z",
"user": {
"id": 933,
"name": "Alex Nguyen",
"email": "alex@acme.studio"
}
}GET
/v1/workspace/credit-logsList credit logs
Every credit movement in the workspace, newest first. Each entry says what spent or added the credits and what the balance was either side of it, so you can attribute a bill to the videos that ran up.
Query parameters
pagenumber, 1 to 10000
Page to read, counting from 1. Entries are ordered newest first.default:
1pageSizenumber, 1 to 200
How many entries a page holds.default:
50Response fields
logs[].idrequirednumber
Log entry id.logs[].amountrequirednumber
Credits added or, when negative, spent. Generation charges land as several small entries, one per model call.logs[].beforerequirednumber
Credit balance before the entry.logs[].afterrequirednumber
Credit balance after the entry.logs[].reasonrequiredstring
What the credits went on, such as Elevenlabs TTS, ChatGPT AI automation, Video rendering or Top-up. Treat it as a human readable label rather than a fixed set, new entries appear as features ship.logs[].videoIdstring
The video the charge belongs to, when there is one. Videos created in the app show up here too, so an id you don't recognise won't resolve on Video status.logs[].userIdrequirednumber
The member whose action caused the change.logs[].createdAtrequiredstring
ISO timestamp of the entry.pagerequirednumber
The page returned.pageSizerequirednumber
Entries a page holds.totalrequirednumber
Entries across every page. Keep requesting pages while page is below totalPages.totalPagesrequirednumber
Pages available at this page size.Request
curl "https://api.vsub.io/v1/workspace/credit-logs?page=1&pageSize=50" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90"Response 200
{
"logs": [
{
"id": 90412,
"amount": -30,
"before": 4210,
"after": 4180,
"reason": "Video rendering",
"videoId": "b4c1f0d2-7a55-4e0e-9a1f-2c8d3e5b7a10",
"userId": 933,
"createdAt": "2026-08-05T09:14:33.000Z"
},
{
"id": 90411,
"amount": -12,
"before": 4222,
"after": 4210,
"reason": "Elevenlabs TTS",
"videoId": "b4c1f0d2-7a55-4e0e-9a1f-2c8d3e5b7a10",
"userId": 933,
"createdAt": "2026-08-05T09:12:58.000Z"
}
],
"page": 1,
"pageSize": 50,
"total": 412,
"totalPages": 9
}GET
/v1/workspace/balance-logsList balance logs
The same history for the cash balance: top ups, gameplay purchases and conversions to credits. Amounts are in US dollars.
Query parameters
pagenumber, 1 to 10000
Page to read, counting from 1. Entries are ordered newest first.default:
1pageSizenumber, 1 to 200
How many entries a page holds.default:
50Response fields
logs[].idrequirednumber
Log entry id.logs[].amountrequirednumber
Dollars added or, when negative, spent.logs[].beforerequirednumber
Cash balance before the entry.logs[].afterrequirednumber
Cash balance after the entry.logs[].reasonrequiredstring
What the money went on, such as Top-up, Convert to credits or Buy game play.logs[].userIdrequirednumber
The member whose action caused the change.logs[].createdAtrequiredstring
ISO timestamp of the entry.pagerequirednumber
The page returned.pageSizerequirednumber
Entries a page holds.totalrequirednumber
Entries across every page. Keep requesting pages while page is below totalPages.totalPagesrequirednumber
Pages available at this page size.Request
curl "https://api.vsub.io/v1/workspace/balance-logs?page=1&pageSize=50" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90"Response 200
{
"logs": [
{
"id": 5120,
"amount": -1.5,
"before": 14,
"after": 12.5,
"reason": "Buy game play: 8821",
"userId": 933,
"createdAt": "2026-08-03T18:02:11.000Z"
},
{
"id": 5119,
"amount": 10,
"before": 4,
"after": 14,
"reason": "Top-up",
"userId": 933,
"createdAt": "2026-07-28T11:40:06.000Z"
}
],
"page": 1,
"pageSize": 50,
"total": 18,
"totalPages": 1
}A revoked or mistyped token answers 401 here, which makes this the cheapest call to verify credentials with. See Errors for the rest of the status codes.
