X-Audra-Commercial-Use header: production checklist — Audra
Two accounts call the same API and get different rights: the trial key may not publish what it renders; any paid key may. The X-Audra-Commercial-Use header is how you tell the API which side of that line your request is on — and how the platform enforces production intent consistently.
This post is the header's contract: when it is required, what flips your account to commercial, the 402 and how to fix it, and the production checklist.
The rule
- Free trial (25k characters, no card): evaluation only. Renders during trial may not be published anywhere.
- Any paid credit pack ($5 minimum = 200k chars) flips commercial on your account — GET /v2/usage shows the commercial field true.
- Once commercial, send X-Audra-Commercial-Use: true on production renders. It is a declaration of the render's use, aligned with the terms at /terms.
Sending it
curl
curl https://audratalks.com/v2/speech \
-H "Authorization: Bearer sk-audra-..." \
-H "X-Audra-Commercial-Use: true" \
-H "Content-Type: application/json" \
-d '{"model":"audra-essential","voice":"june","text":"Production episode audio.","format":"mp3"}' \
--output episode-12.mp3
Python
import requests
resp = requests.post(
"https://audratalks.com/v2/speech",
headers={
"Authorization": "Bearer sk-audra-...",
"X-Audra-Commercial-Use": "true",
},
json={"model": "audra-essential", "voice": "june", "text": text, "format": "mp3"},
timeout=3600,
)
resp.raise_for_status()
JavaScript
const res = await fetch("https://audratalks.com/v2/speech", {
method: "POST",
headers: {
Authorization: "Bearer sk-audra-...",
"X-Audra-Commercial-Use": "true",
"Content-Type": "application/json",
},
body: JSON.stringify({ model: "audra-essential", voice: "june", text, format: "mp3" }),
});
if (!res.ok) throw new Error(await res.text());
Checking your account state
GET /v2/usage returns the commercial boolean alongside your balance. Gate your pipeline on it at startup: if commercial is false, refuse to run the production job rather than rendering 40 episodes you cannot legally publish.
The 402, and its two causes
A 402 from /v2/speech means insufficient credits — purchase at /dashboard/billing. It also appears when a commercial-use declaration is sent from an account that has not unlocked commercial rights. The fix ordering matters: check /v2/usage first. If credits_chars is low, buy a pack (any pack also flips commercial on, solving the second cause). If credits are fine but commercial is false, the trial is the problem and the same $5 pack is the answer — there is no separate entitlement to buy.
Production checklist
- Paid pack purchased; /v2/usage shows commercial: true.
- X-Audra-Commercial-Use: true on every production render path (set it in the shared client, not per call site).
- Trial-era audio identified and excluded from anything published.
- Headers verified in one logged request before the first big batch.
Billing behavior including QA-gated refunds: the QA-gated billing post. Terms text: /terms. Packs and pricing: /pricing.