Credits, Plans & Limits
Every render costs credits, drawn from your subscription allowance plus any one-time credit packs. Plans also set limits — maximum duration, resolution, element counts — that are enforced at submit time.
What a render costs
| Output | Cost |
|---|---|
| Video up to Full HD (≤ 1920×1080) | 1 credit per second of output, rounded up |
| Video above Full HD (up to 4K) | 4 credits per second, rounded up |
| Image | 1 credit per 10 images, rounded up (a single image render = 1 credit) |
Resolution presets resolve to their pixel dimensions before pricing — a
tiktok (1080×1920) video is Full HD-priced.
Credits are reserved when a job is queued (creditsReserved in the submit
response) and refunded automatically if the render fails or is cancelled.
Estimate before submitting with POST /api/credits/estimate.
Credit pools
Your balance has two pools, spent in this order:
- Subscription credits — replenished every billing cycle.
- Add-on credits — one-time credit packs that never expire with the cycle.
curl -X GET https://api.zvid.io/api/credits/balance \
-H "x-api-key: YOUR_API_KEY"
{
"balance": 1164,
"subscriptionCredits": 1064,
"addonCredits": { "balance": 100, "totalEarned": 200, "totalSpent": 100 }
}
GET /api/credits/transactions returns the ledger and
GET /api/credits/usage-stats aggregates usage over 24 h / 7 d / 30 d — both
are also visualized on the
dashboard's Credits page.
Plan limits
Limits scale with your plan. The enforced dimensions:
| Limit | Meaning |
|---|---|
maxDuration | Output length in seconds |
maxOutputResolution | Output width/height in pixels |
maxVisualElements | Total visual elements per project |
maxImagesCount / maxVideosCount / maxGifsCount | Per-type element counts |
maxAudioElements | Audio tracks |
maxCaptionElements | Subtitle cues |
maxScenes | Scenes after iterate expansion |
maxIterateItems | Items per iterated scene |
maxTemplates | Stored templates |
maxBulkItems | Items per bulk render |
maxWebhooks | Registered webhooks (Free: 1) |
You never have to guess your numbers: every limit violation returns them.
A 400 validation error includes a planLimits object with your plan's
active values:
{
"error": "Validation failed",
"details": [
{
"field": "payload.duration",
"message": "Duration cannot exceed 1800 seconds (30 minutes) based on your Startup plan"
}
],
"planLimits": {
"planName": "Startup",
"maxDuration": 1800,
"maxOutputResolution": 3820,
"maxScenes": 150,
"…": "…"
}
}
Current plans and pricing live at zvid.io/pricing; manage your subscription and buy credit packs from the dashboard.