Understanding AI credits

Last updated: May 19, 2026

Understanding AI credits

AI generation is metered by credits deducted from your team's credit_balance. Each creative_job records cost_cents (integer cents). Three tables: credit_balance (current balance per session), credit_transaction (debit / credit ledger), team_credit_cap (per-team caps to prevent runaway). View balance + transactions at /settings/team/billing. Top up via Stripe (see acc-* billing cluster).

Who is this for

Anyone wondering "what does this cost?" + admins managing team budget for AI generation.

How credits work

Every successful generation deducts cost from the team's credit balance:

  1. You submit a generation (POST /api/v1/creative-hub/generate/{type})

  2. Worker performs the generation — pays the upstream provider (Flux, Runway, HeyGen, ElevenLabs, etc.)

  3. Worker records cost_cents on the creative_job row

  4. A credit_transaction debit entry is written

  5. credit_balance decrements by cost_cents

Failed generations do not charge. cost_cents stays at 0 for failed jobs.

The three tables

credit_balance

One row per session. Fields:

  • user_session_id

  • balance_cents (current balance, Int)

  • updated_at

Read by /settings/team/billing for the headline number.

credit_transaction

Append-only ledger. Fields:

  • id, owner_id, user_id

  • amount_cents (positive = credit, negative = debit)

  • reason (top_up_stripe / generation_image / generation_video / etc.)

  • metadata (JSON — references to creative_job_id or Stripe charge_id)

  • created_at

Use case: audit "where did our credits go this month?" — sort by amount_cents descending of debits.

team_credit_cap

Optional per-team cap to prevent runaway spend. Fields:

  • team_id, user_session_id (member of team)

  • monthly_cap_cents

  • current_month_usage_cents

  • effective_until

When current_month_usage_cents >= monthly_cap_cents: generation requests for that member return 403 with reason team_credit_cap_reached. Admin must raise cap or wait for next month reset.

Cost varies by provider + type + duration + resolution

Wevion doesn't publish fixed per-generation credit prices because:

  • Provider pricing changes (Flux, Runway, HeyGen update prices independently)

  • Cost depends on parameters (1024×1024 image cheaper than 2048×2048; 5s video cheaper than 10s)

  • Workspace plan may include credit bundles + overage rates

For the current cost of a specific generation: see the cost estimate in the generation form before submitting OR check cost_cents in the resulting creative_job row.

Where to view + manage credits

/settings/team/billing shows:

  • Current balance in credits / dollars

  • Monthly usage broken down by generation type

  • Recent transactions (paginated; filter by date / type)

  • Team caps (if set) with current usage vs cap

  • Top up button (opens Stripe checkout for credit purchase)

Top up via Stripe

For Stripe-enabled workspaces:

  1. /settings/team/billingTop up

  2. Pick amount or custom value

  3. Stripe checkout opens

  4. Confirm payment

  5. credit_transaction credit entry written via Stripe webhook

  6. credit_balance increments

For Enterprise customers: credit bundles often included in plan; overage billed separately. See acc-108 pricing tiers.

Team credit caps (admin)

Owners / super_admin can set per-member caps to prevent one member from burning team budget:

  1. /settings/team/billingMember caps

  2. Per-member input: monthly cap in credits / dollars

  3. Save → enforced going forward

Existing usage in current month preserved. Cap applies to month-to-date usage only.

To remove a cap: clear the value + save.

Credits in generation flow

Before submitting a generation, the form may show an estimated cost based on your parameters. Final cost recorded after generation completes (small variance possible due to upstream provider pricing).

After completion:

  • Generation card shows actual cost_cents charged

  • Linked to the credit_transaction entry

  • Subtracted from credit_balance

Failed jobs are free

If a generation fails (provider error, content moderation rejection, network):

  • creative_job.status = failed

  • cost_cents remains 0

  • No credit_transaction debit

  • No charge to balance

Same logic for partial completions (e.g. requested 3 image variants, only 2 succeeded — typically charged for 2 with explicit cost_cents per variant).

Compliance + audit

credit_transaction is append-only. Every charge has a metadata link to the creative_job_id or Stripe charge_id.

For monthly audits: export transactions from /settings/team/billing → review largest debits → identify cost drivers (specific providers, specific users).

Best practices

Set team caps before runaway

Don't wait until a member burns the budget. Set conservative caps + raise as needed.

Top up in bundles

Stripe bundles often offer volume discounts. Top up in larger chunks (with budget approval).

Review monthly usage

Quarterly trend on /settings/team/billing tells you whether AI generation is paying off (campaign performance vs cost).

Prefer cheaper providers for iteration

Iterating on prompts: use cheaper providers (openai_tts over elevenlabs, baseline image providers over high-end). Switch to premium when concept locked.

Common mistakes

  • Surprised by bill: didn't set team caps, member generated freely. Cap is the fix.

  • Topping up small amounts repeatedly: less efficient than bundle top-ups. Plan ahead.

  • Ignoring failed jobs: they cost nothing — but their existence may indicate content issues (prompt rejections); review patterns.

  • Mixing personal + team credits: Wevion's credits are team-scoped, not user. Member usage debits team balance.

Related