On this page

Billing and credits

Predictable export costs, subscription allowances and payment management.

Every signed-in customer has a workspace and one credit balance shared by the editor and all their API keys. Browser previews do not spend credits. Visit Billing to manage your balance, subscription, top-ups, payment method and invoices.

Plans

PlanPrice (USD)Included credits
Free$0100 once per account
Maker$19/month2,000 each paid month
Pro$49/month10,000 each paid month
Credit pack$10 once1,000, no expiry

Unused monthly credits expire at the end of their period. Credits closest to expiry are spent first. A paid upgrade adds the difference between allowances once for that period; downgrades and cancellation take effect at renewal. There are no automatic overage charges.

Estimate an export

Still image cost is the final output megapixel count, rounded up, with a one-credit minimum. Animation cost is ceil(output megapixels × loop seconds × 10) at 24 fps. SVG and CSS cost one credit. Final dimensions include pixel ratio.

POST /v1/billing/estimate
Authorization: Bearer YOUR_KEY
Content-Type: application/json

{"generator":"shader-gradient","format":"mp4","params":{"loopSeconds":6},"size":{"width":1920,"height":1080,"pixelRatio":1}}

The response includes credits (125 here), final width, height, seconds and pricingVersion. Parameters and format support are validated exactly as for rendering.

Balances and reservations

GET /v1/billing returns the plan, status, available, reserved, consumed, grants and recent activity. Credits are reserved atomically before a synchronous render, batch item or job starts. Success consumes its reservation once. Failure and cancellation release it. Interrupted synchronous work is refunded after restart; jobs retain their reservation during recovery.

Insufficient credit returns HTTP 402, code insufficient_credits. A refund or dispute can put an account into billing_review until support reconciles it. Downloading an existing job result is free. New rendering requests, including cache hits, spend credits.

Export files are retained for seven days. Download completed files promptly; expired or missing results return 410 result_missing. Export metadata stays in your account. Full storage returns 503 export_storage_full without spending credits.

Checkout and portal

These actions require a browser session and matching Origin header. API keys cannot manage payments.

EndpointBodyResult
POST /v1/billing/checkout{"product":"maker"} (or pro, credits)Hosted Stripe checkout URL
POST /v1/billing/portalnoneCurrent customer's Stripe portal URL

Payment details stay on Stripe. The server selects the customer and price; arbitrary price IDs, customer IDs and return URLs are rejected. Only verified payment webhooks grant credits. A successful browser redirect alone does not add credits.

Typed SDK

const balance = await client.billing.get();
const estimate = await client.billing.estimate('shader-gradient', {
  format: 'png',
  size: { width: 1080, height: 1920, pixelRatio: 2 },
});
console.log(balance.available, estimate.credits); // 9 credits for this output

All SDK methods accept { signal }. Aborting a request does not cancel an already accepted job; call client.jobs.cancel(id) explicitly.

Local preview

The explicit local workspace is unmetered and cannot purchase subscriptions. Real signed-in accounts use their own credits even on a local server. Test checkout uses Stripe test payment details and makes no real charge.