Wavo credits and limits
Last updated: May 19, 2026
Wavo credits and limits
Wavo usage is metered in credits: 1 credit = $0.001. Each message charged at input_cost + output_cost per 1K tokens (per model in chat-models.ts) with MARKUP 1.1× applied. Owner / admin set monthly cap via PUT /api/v1/chat/credits/cap. Top up via Stripe (POST checkout → purchase → confirm 3DS). View at /settings/team/billing.
Who is this for
Anyone wondering "how much does Wavo cost?" or "why am I out of credits?". Admins managing team usage caps.
The pricing model
Per-message cost
Each Wavo message charges based on:
Input tokens ×
input_cost_per_1k(model-specific)Output tokens ×
output_cost_per_1k(model-specific)MARKUP: 1.1× (10% on top of base provider cost)
Formula:
cost_credits = (input_tokens × input_cost + output_tokens × output_cost) × 1.1
Stored in chat_message.credits_used per message.
Model costs (verified chat-models.ts)
Approximate cost per 1K tokens in credits (input / output):
Provider | Model | Input | Output |
|---|---|---|---|
Anthropic | claude-opus-4-6 | 5 | 25 |
Anthropic | claude-sonnet-4-5-20250929 (DEFAULT) | 3 | 15 |
Anthropic | claude-haiku-4-5-20251001 | 1 | 5 |
gemini-2.5-pro | 1.25 | 10 | |
gemini-2.5-flash | 0.3 | 2.5 | |
DeepSeek | deepseek-chat | 0.27 | 1.1 |
DeepSeek | deepseek-reasoner (no tools) | 0.55 | 2.19 |
Moonshot | kimi-k2 | 0.6 | 2.5 |
OpenAI | gpt-4.1 | 2 | 8 |
OpenAI | gpt-4.1-mini | 0.4 | 1.6 |
These are credit values per 1K tokens (1 credit = $0.001). MARKUP 1.1× already factored.
Why some models cost more
Premium reasoning (Opus, GPT-4.1, Gemini Pro): better for complex analysis + multi-tool chains
Balanced (Sonnet — DEFAULT, GPT-4.1 mini): everyday use
Fast + cheap (Haiku, Flash, kimi-k2, deepseek-chat): simple questions, high volume
Pick model per task. For most daily mediabuyer questions: Sonnet (default) is the right balance.
The credit_balance table
Each team has one credit_balance row:
Field | What |
|---|---|
| team owner user_session_id |
| current credits |
| lifetime purchased |
| lifetime used |
| cap for current period (nullable) |
| used in current period |
| when monthly_used resets |
Same model as Creative Hub credits (ch-112) but separate ledger entries for chat messages.
View balance + history
/settings/team/billing shows:
Current balance (in credits + USD equivalent)
Monthly usage vs cap
Recent chat transactions (per-message cost, model, timestamp)
Top up button (opens Stripe)
GET /api/v1/chat/credits returns balance. GET /api/v1/chat/credits/history returns paginated transactions.
Top up via Stripe
For Stripe-enabled workspaces:
/settings/team/billing→ Top upPick amount or custom value
POST /api/v1/chat/credits/checkout→ Stripe checkout URLComplete payment (3DS confirm if required:
POST /confirm)Webhook →
credit_transactioncredit entry →credit_balance.balanceincrements
Visible at /settings/team/billing after webhook completes (usually < 1 min).
Monthly cap (admin)
Owner / admin can set a cap to limit per-period usage:
PUT /api/v1/chat/credits/cap body:
monthly_cap_credits(integer, in credits)cap_reset_at(typically first of month)
When monthly_used >= monthly_cap: chat messages return 402 with reason monthly_cap_reached.
Reset: at cap_reset_at timestamp, monthly_used resets to 0.
Per-user cap?
Currently: cap is per-team (owner-level), not per-individual-user. All team members draw from the same pool.
For per-user discipline: monitor usage in chat_message aggregations, or use Wevion roles to restrict who can use Wavo.
Cost-saving tips
Use cheaper models for iteration
Iterate prompts with Haiku / Flash / GPT-4.1 mini (1-5× cheaper)
Switch to Opus / GPT-4.1 / Gemini Pro for final / important questions
Per-session model override in chat UI; per-user preference at /settings → AI preferences.
Use project instructions
Setting context once via project instructions avoids re-typing context per session. Less input tokens = less cost.
Be specific in prompts
Vague prompt → Wavo follow-ups → multiple turns. Specific prompt → single turn, lower total cost.
Avoid unnecessary tool calls
If you already know the data, don't make Wavo re-query. Reference previous answer.
Memory facts persist context
Saving "ROAS target = 3 for ClientA" as a project fact means you don't restate it each session.
Limit output length
"In one sentence" or "Just the number" — reduces output tokens.
What charges, what doesn't
Action | Charges? |
|---|---|
User message (input tokens) | ✅ Charged |
Assistant message (output tokens) | ✅ Charged |
Tool call (input + output to model) | ✅ Charged (Wavo sends tool result back) |
Voice transcription (Whisper) | ✅ Charged (separate, via Whisper pricing) |
File upload | ✅ Charged (file content sent to model as part of prompt) |
Creating chat_session / project | ❌ Free |
Searching message history | ❌ Free |
Viewing approval card | ❌ Free |
Approving an action (executes downstream) | The action itself doesn't charge Wavo credits, but Creative Hub / Rules / etc. may have their own costs |
Failed messages
If a model call fails (provider outage, network):
chat_message.status = failedcredits_used = 0(no charge for failed completions)Wavo says "I couldn't complete that — please try again"
Partial outputs may or may not charge depending on what reached the user (typical: charge for tokens streamed).
Compliance + audit
credit_transaction is append-only:
Every charge: type + amount (negative) + chat_message_id reference
Every top-up: type + amount (positive) + stripe_payment_intent_id
Sort by date for monthly reports
For audit: export from /settings/team/billing → CSV.
Common surprises
"Used 1000 credits in a day": long sessions with many tool calls + Opus model add up; check usage breakdown
"Monthly cap hit early in month": usage spiked (large project audit); raise cap or wait reset
"Credit balance after top-up": Stripe webhook can take 1-2 min; refresh page
"Failed messages charged me": typically no charge; if charged, check
credits_usedon the message + contact support if anomalous
Common issues
402 monthly_cap_reached: cap hit; admin raises cap or wait reset
Out of balance: top up via Stripe
Top up failed: Stripe 3DS required → use POST /confirm flow
Different cost vs expected: model + length + tool calls all affect cost; review per-message breakdown in history
Related
Privacy + data usage — what's stored where
Pricing tiers — credit bundles in your plan
Creative Hub AI credits — sibling credit ledger