Docs / Billing & Credits
How to Read Your Credit Ledger
Every credit in and out is recorded and traceable line by line. This page teaches you how to read it.
Every credit in and out is recorded and traceable line by line. This page teaches you how to read it.
Entry point: the Billing / Usage page.
First, Look at the Balance: Two Buckets
Your credit balance is actually the sum of two independent buckets:
| Bucket | Where it comes from | Validity |
|---|---|---|
| Granted credits | Auto-issued monthly by your subscription | Valid for the current period, cleared when the next cycle refreshes |
| Top-up credits | Bought by you | 1 year |
Deduction Order: Grants First, Then Top-Ups
This order is in your favor — granted credits expire with the subscription cycle, while top-up credits last a year. Spending the expiring ones first means the ones you bought are less likely to go to waste.
So in the ledger, the same reading can appear as two deduction records: the granted bucket is depleted to its last credit, and the remainder comes out of the top-up bucket. This is normal, not a double charge.
Six Ledger Record Types
| Type | Meaning | Amount |
|---|---|---|
| Subscription grant | Auto-issued monthly when a subscription starts/renews | Positive |
| Top-up | Credits you purchased | Positive |
| Consumption | Reading deduction | Negative |
| Refund | Upstream synthesis failed; already-deducted credits returned | Positive |
| Expiry write-off | Granted credits cleared when the subscription cycle ends | Negative |
| Compensation | Manual reissue (e.g. outage compensation) | Positive |
What "Refund" Is About
If upstream synthesis fails, the already-deducted credits are automatically returned.
Soniva deducts "before synthesizing" (otherwise it couldn't prevent abuse), so when an upstream error or timeout occurs, the system marks that transaction as refunded and returns the credits to your balance.
You never pay for failed requests. If you notice a failed reading whose credits weren't returned, email soniva.cde@gmail.com to report it.
Note: a case where three-level failover kicked in and the text was successfully read with a fallback voice is NOT a failure — that time is charged normally (an upstream call did happen).
What Each Consumption Record Shows
- Time
- Brand and model — e.g. "Alibaba Cloud Bailian / cosyvoice-v3-flash"
- Voice
- Character count
- Credits deducted
These let you reconcile against the rate table:
Credits deducted ≈ character count ÷ 1000 × that tier's credits / 1,000 chars
Three Common Reasons It Doesn't Match
- MiniMax counts a CJK character as 2 billable characters — 1,000 CJK characters count as 2,000. This is the upstream's official rule; it's the only brand that does this across the whole site.
- Baidu and Doubao's small model bill per call — not a linear per-character charge; short content converts to a higher unit price (each call costs at least 1 credit).
- Long text is auto-segmented — a single 2,000-char reading becomes four 500-char records. The total is the same, only the number of records increases. See long-text reading.
Translation Isn't in This Ledger
Translation doesn't consume credits, so you won't see translation records in the credit ledger.
Translation runs on a separate daily/monthly char-count quota, with its own quota display in the translation workbench.
Free Features Aren't in the Ledger Either
These use cases produce no credit ledger records at all:
- System built-in voice reading
- Free previews
- Reading with your own API key (BYOK)
Searching by Time Range
The ledger supports filtering by date range and pagination. Want to know how much you spent last month, or exactly what you read on a given day — just filter it out.
Related Documents
Was this article helpful?
Anonymous feedback is enabled when you allow analytics and the service is available. You can also report an issue by email.
The email includes this article. You can also copy the details and send them to soniva.cde@gmail.com