वॉइस API
Voice Studio की आवाज़ों से अपने कोड से स्पीच बनाएँ: एक आवाज़ या पूरी स्क्रिप्ट, हर भाषा में हर बोले गए कैरेक्टर पर 0.4 क्रेडिट, पहले मुफ़्त अनुमान के साथ।
NueSpeak Apex से, यानी Voice Studio वाली ही आवाज़ों से, अपने कोड से स्पीच बनाएँ। रिक्वेस्ट आपके NueForm बैलेंस से क्रेडिट खर्च करती हैं: हर भाषा में हर बोले गए कैरेक्टर पर 0.4 क्रेडिट (हर 1,000 कैरेक्टर पर लगभग $0.04), हर रिक्वेस्ट पर एक बार पूरे क्रेडिट तक ऊपर राउंड किया जाता है। अनुमान मुफ़्त हैं।
सभी request और response bodies में snake_case field names होते हैं। आवाज़ों की पहचान nv_… IDs से और generations की gen_… IDs से होती है।
Voice keys हर प्लान पर काम करती हैं, जैसे ही आपका अकाउंट पहली बार क्रेडिट खरीद ले (या पेड प्लान पर हो) और अपना ईमेल वेरिफ़ाई कर ले। देखें वॉइस API keys।
स्पीच बनाएँ
/api/v1/voiceऑडियो बनाता है और तैयार होने पर जवाब देता है (synchronous, हर रिक्वेस्ट में ज़्यादा से ज़्यादा 5,000 बोले गए कैरेक्टर)। ऑडियो ही पाने के लिए Accept: audio/mpeg (या audio/wav, audio/ogg, audio/basic, audio/*) भेजें; वरना जवाब JSON होता है जिसमें authenticated audio.url होता है।
क्रेडिट रिक्वेस्ट शुरू होने पर कटते हैं। जो lines फ़ेल होती हैं उनके क्रेडिट अपने-आप लौटा दिए जाते हैं, और error पर खत्म होने वाली किसी भी चीज़ का चार्ज नहीं लगता। जिस रिक्वेस्ट का चार्ज लग चुका है वह कभी error पर खत्म नहीं होती: अगर उसका ऑडियो समय पर तैयार नहीं होता, तो वह Location header के साथ 202 लौटाती है। रिक्वेस्ट दोबारा भेजने के बजाय ऑडियो वहीं से लें।
Request Body
modestring"speak" (एक आवाज़ text पढ़ती है), "script" (कई आवाज़ें) या "estimate" (देखें लागत का अनुमान)
textstringspeak: पढ़े जाने वाले शब्द
voicestringआवाज़ों की सूची से एक nv_… आवाज़। speak के लिए ज़रूरी; script में, बिना speaker tag वाली lines की आवाज़
linesarrayscript: structured lines, हर एक {"speaker", "voice", "text"} या एक pause {"pause_ms": 800} (10,000 तक)
scriptstringscript: multi-voice format, हर speaker की एक line: [Maya] Did you hear that?
castarrayscript: हर tagged speaker के लिए एक आवाज़, [{"speaker": "Maya", "voice": "nv_…"}]
auto_convertbooleanपेस्ट की गई screenplay या chat log (MAYA: Hi) को पहले multi-voice format में बदलें। मुफ़्त, रोज़ की सीमा के भीतर
auto_castbooleanजिस speaker की कोई आवाज़ नहीं है, उसके लिए आवाज़ चुनें। मुफ़्त, रोज़ की सीमा के भीतर। अंग्रेज़ी के अलावा किसी भाषा की स्क्रिप्ट के लिए language भेजें
languagestringभाषा का नाम या कोड ("es", "Spanish")। डिफ़ॉल्ट: आवाज़ की अपनी भाषा
qualitystring"standard" (डिफ़ॉल्ट), "studio" या "phone"। कीमत एक ही
speednumber0.85 से 1.15 (डिफ़ॉल्ट 1)
formatstring"mp3" (डिफ़ॉल्ट), "wav", "ogg_opus" या "mulaw_8k"
max_creditsintegerअगर रिक्वेस्ट इससे ज़्यादा की होगी तो उसे मना करें (409, कोई चार्ज नहीं)
reusebooleanडिफ़ॉल्ट true: पिछले 30 दिनों में की गई बिल्कुल वैसी ही रिक्वेस्ट का जवाब उसी ऑडियो से 0 क्रेडिट में दिया जाता है
savebooleantrue ऑडियो को तब तक रखता है जब तक आप उसे न हटाएँ। डिफ़ॉल्ट: 30 दिन बाद हट जाता है
retake_ofstringकिसी generation को दोबारा बनाएँ (देखें Retakes)
titlestringआपकी Library में उसका title
Response Fields
idstringGeneration (gen_…)
statusstring"ready", "rendering" (202: अभी बन रहा है), "partial" (कुछ lines फ़ेल हुईं और उनका कोई चार्ज नहीं) या "failed"
audioobject or nullurl (अपनी API key भेजें), format, sample_rate, duration_seconds, retained_until
creditsobjectestimated, charged (इस रिक्वेस्ट ने कितना चार्ज किया) और remaining
linesarrayसिर्फ़ script: हर line के speaker, voice, text, status, start_ms, end_ms और credits
retakes_remainingintegerइस क्लिप के बचे हुए मुफ़्त retakes
reusedbooleanपहले की बिल्कुल वैसी ही रिक्वेस्ट का ऑडियो, 0 क्रेडिट में
Code Examples
curl -X POST https://nueform.io/api/v1/voice \
-H "Authorization: Bearer $NUEFORM_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: audio/mpeg" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"mode": "speak",
"voice": "nv_7QmS2xK9aLpe3vT8a",
"text": "Fresh bread every morning at seven. Croissants too. See you on Main Street."
}' \
--output speech.mp3 --dump-header -
इस टेक्स्ट में 75 बोले गए कैरेक्टर हैं, इसलिए इसकी कीमत 30 क्रेडिट है (75 × 0.4)।
Response Headers
HTTP/1.1 200 OK
Content-Type: audio/mpeg
NueForm-Generation-Id: gen_2cH4kXyQ9vLmNp3Rs
NueForm-Credits-Estimated: 30
NueForm-Credits-Charged: 30
NueForm-Credits-Remaining: 48730
NueForm-Rate-Card: 1
NueForm-Retakes-Remaining: 2
NueForm-Audio-Duration: 4.8
Idempotent-Replayed: false
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 2026-11-04T18:13:00.000Z
JSON Response
{
"data": {
"id": "gen_2cH4kXyQ9vLmNp3Rs",
"object": "voice.generation",
"status": "ready",
"mode": "speak",
"source": "api",
"voice": { "id": "nv_7QmS2xK9aLpe3vT8a", "name": "Amara" },
"language": "English",
"characters": 75,
"audio": {
"url": "https://nueform.io/api/v1/voice/generations/gen_2cH4kXyQ9vLmNp3Rs/audio?format=mp3",
"format": "mp3",
"sample_rate": 24000,
"duration_seconds": 4.8,
"retained_until": "2026-12-04T18:12:00.000Z"
},
"credits": { "estimated": 30, "charged": 30, "remaining": 48730 },
"retakes_remaining": 2,
"reused": false,
"created_at": "2026-11-04T18:12:00.000Z"
},
"meta": { "rate_card": "1" }
}
स्क्रिप्ट्स
स्क्रिप्ट एक ही ऑडियो फ़ाइल में कई आवाज़ों में बोलती है। Structured lines भेजें (कोई parsing नहीं) या multi-voice format में script उसके cast के साथ भेजें। Pauses ({"pause_ms": 800}, या स्क्रिप्ट में (pause 2s)) का कोई चार्ज नहीं; सिर्फ़ बोले गए कैरेक्टर बिल होते हैं।
जवाब में lines जुड़ती हैं: हर line ऑडियो में कहाँ शुरू और खत्म होती है, उसका status और उसके कैरेक्टर कितने के होते हैं (credits, दशमलव में)। रिक्वेस्ट एक बार चार्ज होती है, ऊपर राउंड करके। फ़ेल हुई line "credits": 0 दिखाती है और उसका कोई चार्ज नहीं होता।
auto_convert से पेस्ट की गई screenplay या chat log पहले बदली जाती है; auto_cast से बिना आवाज़ वाले हर speaker को एक आवाज़ मिलती है।
Request Example
{
"mode": "script",
"lines": [
{ "speaker": "Maya", "voice": "nv_7QmS2xK9aLpe3vT8a", "text": "Did you hear that?" },
{ "speaker": "Leo", "voice": "nv_P3vT8aLeQ2mwX4kZ9", "text": "Hear what?" },
{ "pause_ms": 800 },
{ "speaker": "Maya", "voice": "nv_7QmS2xK9aLpe3vT8a", "text": "Exactly. Nothing." }
],
"format": "wav"
}
या multi-voice format
{
"mode": "script",
"script": "[Maya] Did you hear that?\n[Leo] Hear what?\n(pause 1s)\n[Maya] Exactly. Nothing.",
"auto_cast": true
}
लागत का अनुमान
/api/v1/voice"mode": "estimate" वही body लेता है जो speak या script लेते हैं, और कुछ भी बनाए बिना सटीक लागत बताता है। यह मुफ़्त है और आपकी generation सीमाओं में नहीं गिना जाता (हर key पर हर मिनट 300 तक)।
Response Fields
charactersintegerबोले गए कैरेक्टर: जिन पर बिल बनता है
creditsintegerरिक्वेस्ट ठीक-ठीक कितना चार्ज करेगी
seconds_estimatednumberऑडियो लगभग कितना लंबा होगा
balanceintegerअभी आपका बैलेंस
enoughbooleanआपका बैलेंस (और key की मासिक सीमा, अगर है) इसे कवर करता है
Example
curl -X POST https://nueform.io/api/v1/voice \
-H "Authorization: Bearer $NUEFORM_API_KEY" \
-d '{"mode": "estimate", "voice": "nv_7QmS2xK9aLpe3vT8a", "text": "Fresh bread every morning at seven. Croissants too. See you on Main Street."}'
{
"data": {
"object": "voice.estimate",
"characters": 75,
"credits": 30,
"seconds_estimated": 4.8,
"balance": 48760,
"enough": true
},
"meta": { "rate_card": "1" }
}
स्पीच स्ट्रीम करें
/api/v1/voice/streamऑडियो बनते-बनते ही भेजता है, ताकि आपका ऐप पूरी क्लिप का इंतज़ार करने के बजाय लगभग एक सेकंड में चलना शुरू कर दे: कोई agent, voice bot या reader। एक आवाज़ text पढ़ती है। Voice engine warm हो तो पहला ऑडियो आम तौर पर 1–2 सेकंड में आ जाता है, टेक्स्ट कितना भी लंबा हो।
कीमत स्पीच बनाएँ वाली ही है: हर बोले गए कैरेक्टर पर 0.4 क्रेडिट, हर रिक्वेस्ट में एक बार ऊपर की ओर पूर्णांकित, और stream शुरू होते ही कटती है। एक stream में लगभग 200 सेकंड तक की स्पीच आती है: अंग्रेज़ी के लगभग 3,100 कैरेक्टर, धीमे बोली जाने वाली भाषाओं में कम (इससे लंबा टेक्स्ट max_characters के साथ 413 TEXT_TOO_LONG देता है)। लंबे टेक्स्ट के लिए कई streams भेजें या POST /api/v1/voice इस्तेमाल करें।
पहले byte से पहले हर failure एक सामान्य error है और उसका कोई चार्ज नहीं लगता: अगर voice engine किसी भी ऑडियो से पहले फ़ेल हो जाए, तो चार्ज लौटा दिया जाता है (500, या engine शुरू होते समय Retry-After के साथ 503 WARMING_UP)। पहले byte के बाद status बदल नहीं सकता, इसलिए बीच में फ़ेल होने वाली stream अपने अंत से पहले रुक जाती है: आपका HTTP client अधूरी body बताता है। सेव की गई कॉपी और उसकी कीमत देखने के लिए NueForm-Generation-Id को एक generation पाएँ के साथ इस्तेमाल करें। अगर आप कनेक्शन छोड़ दें, तब भी stream पूरी बनकर सेव होती है, और उसके क्रेडिट नहीं लौटते।
हर stream एक generation के रूप में भी सेव होती है: वह आपकी Library में दिखती है और ऑडियो डाउनलोड करें उसे देता है, हर क्लिप की तरह normalize की हुई।
Stream या /voice? जब कोई सुनने का इंतज़ार कर रहा हो तब stream करें (agents, voice bots, पढ़कर सुनाना)। Files, कई आवाज़ों वाली scripts, speed, retakes और अनुमानों के लिए POST /api/v1/voice इस्तेमाल करें। MCP tools stream नहीं करते: वे /voice के तरीके से ऑडियो बनाते हैं।
Request Body
voicestringआवाज़ों की सूची से कोई nv_… आवाज़
textstringपढ़े जाने वाले शब्द
formatstring"mp3" (डिफ़ॉल्ट, browsers के लिए), "pcm_24k" (24,000 Hz पर raw 16-bit little-endian mono PCM, agents के लिए) या "mulaw_8k" (8 kHz G.711 μ-law, टेलीफ़ोनी के लिए; "ulaw_8000" भी चलता है)
languagestringभाषा का नाम या कोड। डिफ़ॉल्ट: आवाज़ की अपनी भाषा
qualitystring"standard" (डिफ़ॉल्ट; mulaw_8k के लिए "phone"), "studio" या "phone"। कीमत वही
max_creditsintegerअगर रिक्वेस्ट इससे ज़्यादा की होगी तो उसे मना करें (409, कोई चार्ज नहीं)
savebooleantrue सेव की गई कॉपी को तब तक रखता है जब तक आप उसे न हटाएँ। डिफ़ॉल्ट: 30 दिन बाद हट जाती है
titlestringआपकी Library में उसका title
speed, scripts, retake_of और reuse stream पर उपलब्ध नहीं हैं (400, reason: "not_on_stream")।
Code Examples
curl -N -X POST https://nueform.io/api/v1/voice/stream \
-H "Authorization: Bearer $NUEFORM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"voice": "nv_7QmS2xK9aLpe3vT8a", "text": "Fresh bread every morning at seven.", "format": "mp3"}' \
--output stream.mp3
इस टेक्स्ट में 35 बोले गए कैरेक्टर हैं, इसलिए इसकी कीमत 14 क्रेडिट है (35 × 0.4)।
Response Headers
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Transfer-Encoding: chunked
NueForm-Generation-Id: gen_2cH4kXyQ9vLmNp3Rs
NueForm-Credits-Estimated: 14
NueForm-Credits-Charged: 14
NueForm-Credits-Remaining: 48716
NueForm-Rate-Card: 1
NueForm-Audio-Format: pcm_24k
NueForm-Audio-Encoding: pcm_s16le
NueForm-Audio-Sample-Rate: 24000
NueForm-Audio-Channels: 1
X-Accel-Buffering: no
Retakes
किसी generation को उन्हीं शब्दों, आवाज़ों, भाषा, quality और speed के साथ दोबारा बनाने के लिए {"mode": "speak", "retake_of": "gen_…"} भेजें। retake_of के साथ सिर्फ़ mode, format, max_credits और save जाते हैं।
- मुफ़्त generation के 24 घंटों के भीतर दो बार, बशर्ते इस महीने key के मुफ़्त retakes उन कैरेक्टरों के एक चौथाई से ज़्यादा न हों जिनका इस महीने उस key पर बिल बना। मुफ़्त retake वही
gen_…ID रखता है। - वरना यह एक नया generation होता है, जो किसी भी रिक्वेस्ट की तरह चार्ज होता है (हर कैरेक्टर पर 0.4 क्रेडिट), और
retake_ofउस generation का नाम बताता है जिसका retake हुआ।
पहले देखने के लिए retake_of के साथ "mode": "estimate" भेजें: जवाब "free": true या लागत बताता है।
Idempotency
speak और script रिक्वेस्ट के साथ Idempotency-Key header (1–255 कैरेक्टर, जैसे कोई UUID) भेजें, तो कोई retry कभी दो बार चार्ज नहीं कर सकता:
- वही key और वही body पहली रिक्वेस्ट ने जो बनाया उसी से फिर जवाब देती है, बिना चार्ज (
Idempotent-Replayed: true,NueForm-Credits-Charged: 0); - वही key और अलग body पर
409 CONFLICTके साथreason: "idempotency_conflict"; - जब तक पहली रिक्वेस्ट चल रही है,
409 CONFLICTके साथreason: "request_in_progress"औरRetry-After।
Keys हर API key के लिए 24 घंटे याद रखी जाती हैं।
Stream पर, वही key और वही body JSON में जवाब देती है: पहली रिक्वेस्ट ने जो generation बनाया (वह दोबारा stream नहीं होता)।
Response Headers
हर जवाब बताता है कि उसकी कीमत क्या रही:
| Header | मतलब |
|---|---|
NueForm-Generation-Id | Generation (gen_…) |
NueForm-Credits-Estimated | रिक्वेस्ट के लिए बताई गई कीमत |
NueForm-Credits-Charged | इस रिक्वेस्ट ने कितना चार्ज किया, किसी भी अपने-आप लौटाए गए क्रेडिट के बाद (अनुमान, reuse की गई क्लिप, मुफ़्त retake, replay और हर error के लिए 0) |
NueForm-Credits-Remaining | बाद में आपका बैलेंस |
NueForm-Rate-Card | जिस rate card version पर कीमत तय हुई |
NueForm-Retakes-Remaining | इस क्लिप के बचे हुए मुफ़्त retakes |
NueForm-Audio-Duration | ऑडियो की लंबाई सेकंड में |
Idempotent-Replayed | Idempotency-Key के साथ: क्या यह किसी पिछली रिक्वेस्ट का जवाब है |
NueForm-Audio-Format, NueForm-Audio-Encoding, NueForm-Audio-Sample-Rate, NueForm-Audio-Channels | Stream का ऑडियो: उसका format, encoding, sample rate और channels |
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset | इस मिनट में इस key की रिक्वेस्ट (देखें Rate Limits) |
आवाज़ों की सूची
/api/v1/voice/voicesNueForm की stock आवाज़ें, फिर आपकी अपनी और आपकी टीमों की आवाज़ें, हर एक अपनी nv_… ID, भाषा, मुफ़्त preview और बोलने की रफ़्तार के साथ। मुफ़्त।
Query Parameters
sourcestring"all" (डिफ़ॉल्ट), "stock" या "mine"
languagestringभाषा का नाम या कोड
genderstringजैसे "female"
qstringनाम, style और labels में खोजें
featuredbooleantrue: सिर्फ़ featured stock आवाज़ें
Response
{
"data": [
{
"id": "nv_7QmS2xK9aLpe3vT8a",
"object": "voice",
"name": "Amara",
"source": "stock",
"type": "clone",
"language": "English",
"language_label": "English (US)",
"gender": "female",
"age": null,
"style": "Warm",
"featured": true,
"preview_url": "https://nueform.io/voice-previews/amara.mp3",
"team_id": null,
"can_delete": false,
"chars_per_second": 15.5,
"created_at": null
}
],
"meta": { "count": 1 }
}
आवाज़ हटाएँ
/api/v1/voice/voices/:idआपकी किसी आवाज़ को हमेशा के लिए हटाता है: उसका sample, prompts और preview, फिर आवाज़ खुद। क्रेडिट वापस नहीं होते। जब तक forms या फ़ोन नंबर उस आवाज़ का इस्तेमाल कर रहे हैं, जवाब 409 CONFLICT होता है, reason: "voice_in_use" और उनकी गिनती के साथ; उन्हें पहले किसी दूसरी आवाज़ पर ले जाने के लिए ?replacement=nv_… भेजें।
Response
{
"data": {
"id": "nv_9LmQ2xT4aPe7vK3sW",
"object": "voice",
"deleted": true,
"switched": { "forms": 2, "numbers": 1 },
"forms_to_republish": 1
}
}
Generations की सूची
/api/v1/voice/generationsआपके generations, सबसे नए पहले। meta.next_cursor से अगला पेज लें।
Query Parameters
limitinteger1 से 100 (डिफ़ॉल्ट 20)
cursorstringपिछले पेज का next_cursor
sourcestringसिर्फ़ वे जो "api", "studio", "mcp" या "app" से बने
Response
{
"data": [
{ "id": "gen_2cH4kXyQ9vLmNp3Rs", "object": "voice.generation", "status": "ready", "credits": { "charged": 30 } }
],
"meta": { "next_cursor": null, "has_more": false }
}
एक generation पाएँ
/api/v1/voice/generations/:idएक generation, स्क्रिप्ट हो तो उसकी lines के साथ। यहाँ credits.charged बताता है कि किसी भी अपने-आप लौटाए गए क्रेडिट के बाद उसकी कुल कीमत क्या रही।
ऑडियो डाउनलोड करें
/api/v1/voice/generations/:id/audioऑडियो खुद, आपकी API key से stream किया जाता है (byte ranges समर्थित)। ?format= में mp3 (डिफ़ॉल्ट), wav, ogg_opus या mulaw_8k। Ogg/Opus और 8 kHz μ-law पहली बार माँगने पर बनते हैं: 202 का मतलब है "Retry-After सेकंड बाद फिर माँगें"। मुफ़्त।
Generation हटाएँ
/api/v1/voice/generations/:idGeneration और उसके ऑडियो को हमेशा के लिए हटाता है। क्रेडिट वापस नहीं होते। जो generation अभी बन रहा है, वह 409 CONFLICT और reason: "still_rendering" से जवाब देता है।
अपने क्रेडिट देखें
/api/v1/creditsवह बैलेंस जिससे आपकी key खर्च करती है, key का यह महीना और rate card। सिर्फ़ पढ़ने के लिए, Voice key या full-access key से।
Response Fields
balanceintegerअभी खर्च किए जा सकने वाले क्रेडिट (10,000 क्रेडिट = $1)
approxstringडॉलर में बैलेंस
keyobjectइस key की monthly_credit_limit (null = कोई सीमा नहीं), spent_this_month, paused और resets_at (महीने की 1 तारीख, UTC)
voice_apiobjectcredits_per_character (0.4), राउंडिंग का तरीका, और यह कि अनुमान मुफ़्त हैं
rate_cardobjectहर action की हर कीमत
Response
{
"data": {
"object": "credits",
"balance": 48730,
"approx": "≈ $4.87",
"currency": "usd",
"frozen": false,
"key": {
"id_prefix": "nf_a1b2c3d4",
"monthly_credit_limit": 100000,
"spent_this_month": 1240,
"paused": false,
"resets_at": "2026-12-01T00:00:00.000Z"
},
"voice_api": { "credits_per_character": 0.4, "rounding": "up_per_request", "estimate_free": true }
},
"meta": { "rate_card": "1" }
}
कीमतें
| क्या | क्रेडिट | डॉलर में |
|---|---|---|
| वॉइस API से स्पीच | हर बोले गए कैरेक्टर पर 0.4, हर भाषा में | हर 1,000 कैरेक्टर पर लगभग $0.04 |
| एक अनुमान | 0 | मुफ़्त |
reuse की गई क्लिप (reuse) | 0 | मुफ़्त |
| एक retake | 24 घंटों में दो बार 0 (fair use), फिर हर कैरेक्टर पर 0.4 |
क्रेडिट packs में मिलते हैं ($5 में 50,000 क्रेडिट से शुरू) और कभी expire नहीं होते। किसी key की मासिक क्रेडिट सीमा हो सकती है: उतना खर्च होते ही, अगले महीने की 1 तारीख तक उसकी speech और delete रिक्वेस्ट को 403 FORBIDDEN और reason: "key_limit_reached" मिलता है (उसने जो बनाया उसे वह अब भी list और download कर सकती है), और आपकी बाकी keys काम करती रहती हैं। रिक्वेस्ट का भुगतान उन क्रेडिट से होता है जो key के मालिक ने वॉलेट में Voice Studio का भुगतान किससे करें में चुने हैं: उनके अपने, जब तक उन्होंने कोई टीम न चुनी हो। जो टीम भुगतान नहीं कर सकती, उसकी जगह कभी अपने क्रेडिट इस्तेमाल नहीं होते: रिक्वेस्ट को 403 FORBIDDEN और reason: "team_payer_unavailable" मिलता है, या सदस्य के रूप में मासिक सीमा पूरी होने पर reason: "member_cap_reached", और कुछ भी चार्ज नहीं होता।
Errors
हर error standard error format में होता है, और error पर खत्म होने वाली किसी भी चीज़ का चार्ज नहीं लगता। सबसे आम errors:
| Status | code | कब |
|---|---|---|
| 402 | INSUFFICIENT_CREDITS | आपका बैलेंस रिक्वेस्ट को कवर नहीं करता (credits_required, credits_available, top_up_url; जब key के मालिक की चुनी टीम के क्रेडिट कम हों, तब payer: "team", और तब top_up_url Wallet खोलता है, जहाँ Voice Studio का भुगतान किससे करें को अपने क्रेडिट पर बदला जा सकता है) |
| 403 | FORBIDDEN | reason: key_limit_reached, account_gate, scope_not_allowed, cooldown, voice_studio_suspended, wallet_frozen, member_cap_reached, team_payer_unavailable |
| 409 | CONFLICT | reason: quote_exceeds_max_credits, idempotency_conflict, request_in_progress, unit_rendering |
| 413 | TEXT_TOO_LONG | 5,000 से ज़्यादा बोले गए कैरेक्टर (max_characters) |
| 422 | CONTENT_BLOCKED, VOICE_UNAVAILABLE, LANGUAGE_NOT_SUPPORTED_BY_VOICE, INVALID_SCRIPT | टेक्स्ट या आवाज़ें जैसे भेजी गईं वैसे बोली नहीं जा सकतीं |
| 429 | RATE_LIMITED, CONCURRENCY_LIMIT | बहुत ज़्यादा रिक्वेस्ट (देखें Rate Limits) |
| 503 | CAPACITY, WARMING_UP, MODERATION_UNAVAILABLE, AI_UNAVAILABLE | Retry-After सेकंड बाद फिर कोशिश करें |