Câu hỏi thường gặp
Số liệu cụ thể của từng gói (ký tự mỗi lần đọc, mỗi ngày, mỗi tháng, số job cùng lúc, số ngày giữ lịch sử, có API/MCP hay không) luôn xem ở bảng giá — trang đó lấy số trực tiếp từ hệ thống.
Ký tự được đếm thế nào
Trước khi đếm, văn bản được chuẩn hoá giống nhau ở mọi kênh:
- Chuẩn Unicode NFC (chữ có dấu gõ kiểu tổ hợp hay dựng sẵn đều tính như nhau).
- Bỏ ký tự điều khiển; xuống dòng kiểu Windows đổi thành
\n. - Nhiều dấu cách/tab liền nhau gộp thành một; tối đa một dòng trống liên tiếp.
- Cắt khoảng trắng ở đầu và cuối.
Sau đó mỗi ký tự đều được tính, kể cả dấu cách, dấu câu, xuống dòng và tag cảm xúc như [cười]. Nếu model không hỗ trợ tag cảm xúc, các tag đó bị bỏ khỏi văn bản trước khi đếm nên không bị tính.
Ví dụ: "Xin chào! " sau chuẩn hoá là "Xin chào!" → 9 ký tự.
Hạn mức reset lúc nào
Hạn mức ngày reset lúc 00:00 và hạn mức tháng reset ngày 1, đều theo giờ Việt Nam (Asia/Ho_Chi_Minh, UTC+7). Khi hết, lỗi QUOTA_EXCEEDED có trường reset_at cho biết thời điểm reset. Một job tạo trước nửa đêm nhưng xong sau nửa đêm vẫn được tính vào ngày đã giữ chỗ.
Lỗi hoặc huỷ thì có mất ký tự không
Không. Khi tạo job, số ký tự được giữ chỗ; job xong thì mới chốt; job lỗi hoặc bạn huỷ (DELETE /api/v1/tts/{id}) thì phần giữ chỗ được hoàn lại đầy đủ. Ký tự đang giữ chỗ vẫn tính vào phần đã dùng cho tới khi job kết thúc, nên nhiều job lớn chạy cùng lúc có thể chạm hạn mức sớm.
Tạo lại có tốn ký tự không
Tạo lại từ lịch sử (Studio hoặc POST /api/v1/tts/{id}/regenerate) được miễn ký tự khi bản gốc tạo trong vòng 24 giờ và bạn chưa dùng quá 3 lần miễn phí trong 24 giờ qua. Ngoài các điều kiện đó, tạo lại tính ký tự như một lần đọc mới.
Sao tôi không gọi được API hoặc MCP
403 API_DISABLED/403 MCP_DISABLED: gói hiện tại không có quyền API/MCP — xem bảng giá.403 SCOPE_MISSING: key thiếu scope (tts:generateđể đọc,tts:readđể xem kết quả) — tạo key mới với đủ scope.403 FORBIDDEN_MODEL: model này không có trong gói của bạn.429 CONCURRENCY_LIMIT: đang có quá nhiều job chạy cùng lúc — chờ job trước xong.
Đổi gói, huỷ gói, hoàn tiền
- Xem và chọn gói ở bảng giá. Thanh toán bằng USD qua cổng thanh toán Lemon Squeezy; thuế (nếu có) được cộng theo quốc gia của người mua lúc thanh toán.
- Huỷ gói: bạn vẫn dùng gói đã trả tới hết kỳ hiện tại, sau đó tài khoản về gói miễn phí.
- Hoàn tiền theo chính sách hoàn tiền và điều khoản.
Text và audio được lưu bao lâu
- Audio: không lưu lâu dài. Audio chỉ nằm trong kho tạm (mặc định khoảng 24 giờ, có thể bị xoá sớm hơn khi kho đầy). Hết hạn thì tải về trả
410 RESULT_EXPIRED— hãy tải file về máy nếu cần giữ. - Văn bản: lưu trong lịch sử để bạn tìm lại và tạo lại; số ngày giữ lịch sử tuỳ gói. Bạn có thể xoá từng mục hoặc xoá tất cả trong Lịch sử.
- Không muốn lưu: gửi
store_text: false/store_audio: falsekhi gọi API, hoặc đặt mặc định này cho API key. - Endpoint tương thích OpenAI mặc định không giữ audio trong kho tạm.
Studio, API và MCP có dùng chung hạn mức không
Có. Mọi kênh trừ vào cùng hạn mức ngày và tháng của tài khoản. Trang Lịch sử cho biết mỗi lần đọc đến từ Web, API hay MCP.
Frequently asked questions
The exact numbers of each plan (characters per request, per day, per month, concurrent jobs, days of history, API/MCP access) are always on the pricing page — it reads them straight from the system.
How characters are counted
Before counting, text is normalised the same way on every channel:
- Unicode NFC (accented letters typed as combining marks or as single characters count the same).
- Control characters removed; Windows line breaks become
\n. - Runs of spaces/tabs collapse into one; at most one blank line in a row.
- Leading and trailing whitespace trimmed.
Then every character counts, including spaces, punctuation, line breaks and emotion tags such as [cười]. When the model does not support emotion tags, those tags are removed before counting, so they are not charged.
Example: "Xin chào! " normalises to "Xin chào!" → 9 characters.
When does my quota reset
The daily quota resets at 00:00 and the monthly quota on the 1st, both in Vietnam time (Asia/Ho_Chi_Minh, UTC+7). When you run out, the QUOTA_EXCEEDED error carries a reset_at field with the reset time. A job created before midnight that finishes after midnight still counts toward the day it was reserved in.
Do I lose characters when a job fails or is cancelled
No. Creating a job reserves its characters; they are committed only when it succeeds; a failed job or one you cancel (DELETE /api/v1/tts/{id}) gets its reservation refunded in full. Reserved characters count as used until the job ends, so several large jobs at once can reach the limit sooner.
Does regenerating cost characters
Regenerating from history (Studio or POST /api/v1/tts/{id}/regenerate) is free of characters when the original was created within the last 24 hours and you have not used more than 3 free regenerations in the past 24 hours. Otherwise it is charged like a new reading.
Why can't I call the API or MCP
403 API_DISABLED/403 MCP_DISABLED: your plan does not include API/MCP — see pricing.403 SCOPE_MISSING: the key lacks a scope (tts:generateto speak,tts:readto fetch results) — create a key with both.403 FORBIDDEN_MODEL: that model is not in your plan.429 CONCURRENCY_LIMIT: too many jobs running at once — wait for earlier ones to finish.
Changing or cancelling a plan, refunds
- See and choose plans on the pricing page. Payment is in USD through the Lemon Squeezy checkout; tax, if any, is added for the buyer's country at checkout.
- Cancelling: you keep the paid plan until the end of the current period, then the account returns to the free plan.
- Refunds follow the refund policy and the terms.
How long are text and audio kept
- Audio: not kept for long. It only sits in a temporary store (about 24 hours by default, sooner when the store is full). After that, a download returns
410 RESULT_EXPIRED— save the file if you need it. - Text: kept in history so you can find and regenerate it; how many days depends on your plan. You can delete one item or everything in History.
- To store nothing: send
store_text: false/store_audio: falsewith API calls, or set these defaults on the API key. - The OpenAI-compatible endpoint does not keep audio in the temporary store by default.
Do Studio, API and MCP share the quota
Yes. Every channel spends the same daily and monthly quota of the account. The History page shows whether each reading came from Web, API or MCP.