Skip to content

Chat billing ​

The API uses prepaid credits. Open Wallet → Add credits in the console to top up, or choose a subscription. Subscribing is optional. Wallet also shows your API balance and transaction history.

Price ​

The Pricing page and GET /v1/chat/catalog show the same current prices used for billing. Chat has separate input and output prices per million tokens; speech is priced per 1,000 characters. Each model has its own rate. Read the catalogue rather than hardcoding prices. Chat responses contain standard usage; check Usage history or Credit transactions for actual credits. Only speech responses include billing.

Charges and refunds ​

  • Chat reserves credits before calling the provider and settles the actual token usage when it returns. Unused reserved credits are returned.
  • Input includes history and persona. All input tokens, including cache hits, use the input sale price; reasoning is included in output, never charged twice.
  • The total is rounded up once to 8 decimal places. A missing or invalid usage report releases the reservation and returns 503.
  • Speech charges separately from chat, even when reading a chat reply aloud.
  • If the upstream request fails, the charge is refunded automatically.
  • Insufficient balance returns 402 insufficient_balance.
  • Chat replies are synchronous and are not listed as generation tasks.

In wallet activity, hold reserves funds, refund releases unused funds, and charge records the final usage settled from the reservation. Do not add reservations to usage charges. Speech uses consume.

Text chat: OpenAI-compatible chat. Speech and voice IDs: Speech and catalogue.

Speech charges ​

Speech is charged by the normalized text's billable character count, rounded up to eight decimals; there is no minimum 1,000-character block. Speech Light, Speech Pro and Speech Expressive count UTF-16 code units, matching the upstream provider: ordinary Chinese/English characters count as one and supplementary characters such as 😀 count as two. Speech Standard uses Unicode code points. Check speechModels[].characterCounting or billing.character_counting for the rule. At a sample rate of 0.7 credits / 1,000 units, 100 billable units cost 0.07 credits. Failed synthesis is refunded. Unknown or unavailable models are rejected before charging.

Local test balance ​

Stripe test payments credit a separate sandbox balance, which cannot pay for real API calls. For local integration testing, an administrator can top up a test user's API balance. A 402 response refers to that API balance, not the sandbox payment balance. Live payments fund the API balance after confirmation.

© 2026 GirlLab. All rights reserved.