Pricing
Energy and credits, how they work on the API, and where to find exact rates
Per-model rates live at melious.ai/pricing — they're the source of truth. This page covers the shape of billing, which has a quirk worth knowing about for API users.
Two currencies: energy and credits
Melious accounts have two spendable balances:
- Energy — granted by your subscription plan. Refills on a cycle. Web (Studio) usage draws from this by default.
- Credits — euro-denominated, bought in top-ups or included in some plans. Don't expire unless your account closes.
A request can be paid from either, depending on plan benefits. The response tells you which one was charged:
{
"billing_cost": {
"energy": "0.0008",
"credits": "0.0",
"paid_with": "energy"
}
}paid_with is "energy" or "credits". The non-zero field is what we charged — the other one is zero.
The API-only wrinkle
If your plan doesn't include the api_usage benefit, API requests are paid in credits — not energy — even if your energy balance is positive. This is the most common billing surprise.
The rule in practice:
- Plans with
api_usage— API calls can draw from energy, same as Studio. If energy is exhausted, fall back to credits. - Plans without
api_usage— API calls arecredits_only, even if you have energy left. Energy stays reserved for Studio.
Which plans include it is on melious.ai/pricing. If you need API access without a subscription upgrade, credits are the path — buy a top-up, keep running. There's no subscription minimum to use the API, only a rate-limit difference.
Per-request cost
Response body gives you exact figures in billing_cost and environment_impact. A reasonable shape to log:
response = client.chat.completions.create(model="glm-4.7", messages=[...])
print(
f"tokens: {response.usage.total_tokens}",
f"cost_eur: {response.billing_cost.energy or response.billing_cost.credits}",
f"carbon_g: {response.environment_impact.carbon_g_co2}",
f"provider: {response.environment_impact.provider_id}",
)Costs come back as strings (arbitrary-precision decimals) to avoid float-drift on aggregation.
Streaming billing
A streamed response bills once, at the end. The billing chunk is internal — you get the final usage field on the last chunk, and billing_cost / environment_impact are populated there. Your client library's standard "accumulate the stream" pattern covers this.
Batch pricing
/v1/batches runs against the same per-token rates — batch isn't discounted today. The savings with batch come from routing (the :batch flavor picks cheaper providers) and from being outside the per-minute rate limit, not from a dedicated discount.
What isn't billed
A few things are free:
GET /v1/modelsandGET /v1/models/{id}— listing is free, you can poll it.POST /v1/messages/count_tokens— preflight token counts are free.- Tool lists (
GET /v1/tools) and schema fetches — free. - Failed requests that didn't reach a provider.
INFERENCE_3104(no providers available) or early validation errors don't charge.
Failed requests that did reach a provider (INFERENCE_3103) also don't bill — we absorb the cost internally. That's an explicit design choice, not a promise we'd retract quietly.
Refunds and withdrawal
EU consumer law grants a 14-day withdrawal window on subscriptions, within limits. Credits top-ups and consumed services are handled separately. See melious.ai/account/billing for the current policy.
Related
Paying for higher throughput without changing plans: see the :batch flavor in Routing and Batches. Plan benefits that gate advanced models: Authentication. Billing-related errors: Errors.