Prepaid TTS refunds: QA auto-refund vs unused packs — Audra
Audra's refund behavior has two distinct layers that get conflated: automatic per-render refunds when quality assurance fails, and the human-reviewed refund path for unused prepaid packs. Knowing which layer applies is the difference between 'check your balance' and 'email us'.
Layer 1: QA-gated auto-refunds (no request needed)
Every render goes through reserve → render → QA → finalize. Your credits reserve at render start, but they only finalize after automated QA passes — checks for silence gaps, corrupt output, and audio that is suspiciously short for the character count. When a render fails QA, the reserved characters return to your balance automatically. There is no form and no waiting period; the refund is the default outcome of a failed gate.
How you observe it: refunds appear as restored credits_chars on your next GET /v2/usage poll — there is no separate refund line item in v1. In code, the response carries an X-QA-Passed header on speech responses, so you can log gate outcomes per render and reconcile your usage polling against them. A QA-failed render in a long pipeline is not an error state; it is a retried render with the same Idempotency-Key that bills at most once.
Layer 2: pack refunds (human, 7-day window)
- Refundable within 7 days of purchase on request — if no commercial audio has been generated on the account. That is the bright line: once commercial audio exists, the pack is generally non-refundable except where the law requires otherwise.
- Requests go to hello@audratalks.com. Include the account email and the pack purchase date; refunds are issued via the original Stripe payment method.
- Charge-level refunds are processed through Stripe's charge.refunded webhook and are reflected in the credit ledger — a partial refund claws back a proportional share of the granted characters, a full refund removes the grant.
- Prepaid credits never expire while the account is open, so 'buy now, decide later' has a full week of slack before the commercial-audio line is crossed.
Checking before you escalate
Before writing support, poll GET /v2/usage: if credits_chars is higher than you expected, you likely already received a QA auto-refund. If usage shows a render consumed characters but your pipeline never got audio, check the status page (/status) and the render's X-QA-Passed value before assuming a billing error — those two checks resolve most refund questions without an email round-trip. Full billing mechanics are at /refund and /blog/tts-api-billing-qa-gated.