---
title: "Credits, Plans & Limits"
canonical_url: https://docs.zvid.io/docs/credits-and-plans/
source: docs/credits-and-plans.md
content_revision: 6338386a1dd87e4a
---

# 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 with `width × height ≤ 2,073,600` pixels | `ceil(duration × 1)` credits                                      |
| Video with `width × height > 2,073,600` pixels | `ceil(duration × 4)` credits                                      |
| Image                                          | **1 credit per image**, including bulk renders, at any resolution |

`duration` is the resolved output length in seconds. Multiply by the rate,
then round the total up to a whole credit. A 10-second 1920×1080 video costs
10 credits; a 2.1-second video above that pixel-area threshold costs 9.
Resolution presets resolve before pricing, so `tiktok` (1080×1920) uses the
same rate as 1920×1080. Your plan's dimension limits still apply independently.

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/render/validate/api-key` and read
`creditsRequired`. [Validation and estimation](https://docs.zvid.io/docs/validate-and-estimate/)
are free and do not queue a job or reserve credits.

## Credit pools

Your balance has two pools, spent in this order:

1. **Subscription credits** — replenished every billing cycle.
2. **Add-on credits** — one-time [credit packs](https://app.zvid.io/credits)
   that never expire with the cycle.

```bash
curl -X GET https://api.zvid.io/api/credits/balance \
  -H "x-api-key: YOUR_API_KEY"
```

```json
{
  "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](https://docs.zvid.io/docs/dashboard/credits-and-billing/).

## Plan limits

Limits scale with your plan. The enforced dimensions:

| Limit                                                | Meaning                                                                                 |
| ---------------------------------------------------- | --------------------------------------------------------------------------------------- |
| `maxDuration`                                        | Output length in seconds                                                                |
| `maxInputDuration`                                   | Complete video/GIF source length: 7,200 seconds (2 hours), independent of output length |
| `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`](https://docs.zvid.io/docs/templates/dynamic-content/) expansion                      |
| `maxIterateItems`                                    | Items per iterated scene                                                                |
| `maxTemplates`                                       | Stored templates                                                                        |
| `maxBulkItems`                                       | Items per [bulk render](https://docs.zvid.io/docs/automation/bulk-rendering/)                                 |
| `maxWebhooks`                                        | Registered [webhooks](https://docs.zvid.io/docs/automation/webhooks/) (Free: 1)                               |

Retrieve your current account-aware limits through the
[render schema endpoint](https://docs.zvid.io/docs/validate-and-estimate/). Render validation
errors include a `planLimits` object with your plan's active values:

```json
{
  "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](https://zvid.io/pricing);
manage your subscription and buy credit packs from the
[dashboard](https://docs.zvid.io/docs/dashboard/credits-and-billing/).

## Related

- [Quick Start](https://docs.zvid.io/docs/quick-start/)
- [Credits & billing in the dashboard](https://docs.zvid.io/docs/dashboard/credits-and-billing/)
- [API Reference — Credits](https://docs.zvid.io/docs/endpoints/get-credit-balance/)
