A Nexsko company
—
Total Credits
—
Active Keys
—
Tasks Run
—
Notifications
—
Total Users
API Keys
Loading…
Recent Notifications
Loading…
Total Available
—
No API keys yet. Add one above.
Total Characters Left
—
No ElevenLabs keys yet. Add one above.
Total Credit Balance
—
No Fish Audio keys yet. Add one above.
No data yet.
No API keys yet. Generate one above.
API Documentation

Use a generated key to call the AiVoicee voice generation API from any server-side program. Pass the key in the x-api-key header on every request.

Base URL
https://api.aivoicee.com
Authentication
HeaderValue
x-api-keyYour generated key, e.g. avk_live_xxxxxxxx
0. Three platforms, one API

AiVoicee gives you a choice of three underlying generation platforms, selected per-request with the provider field on POST /api/v1/tts. Each has its own voice catalog and its own voice_id namespace — a voice_id from one provider's catalog will not work with another.

providerCatalogVoice list endpointmodel_id options
genaipro (default)10,000+ ElevenLabs voicesGET /api/voiceseleven_flash_v2_5, eleven_multilingual_v2, eleven_turbo_v2_5, eleven_v3
elevenlabsElevenLabs' free premade voicesGET /api/voices/free-tiersame 4 as above
fishaudio50,000+ Fish Audio voicesGET /api/voices/fishaudios2.1-pro-free

genaipro tasks are async (queued, poll for the result). elevenlabs and fishaudio tasks are synchronous — the result is already completed the moment POST /api/v1/tts returns — GET is still there if you want it, but you don't have to poll.

1. List voices (no key required)
GET /api/voices?search=&gender=&language=

The GenAIPro catalog (10,000+ voices), served from our own database — a background job mirrors it locally and re-syncs daily, so this responds instantly with a real, exact total count rather than proxying the provider live. No API key required. Browse it to find a voice_id to use below. Each voice also includes a preview_url — a short sample clip, so you can let your users listen before picking one. No generation/credits needed to play it, it's a static file.

The other two catalogs work identically (same query params, same response shape, same total/has_more paging) at their own endpoints: GET /api/voices/free-tier (ElevenLabs direct, ~20 voices, no query params needed) and GET /api/voices/fishaudio (50,000+ voices, also takes gender/language/category filters).

Query paramNotes
pageDefault 0.
page_sizeDefault 30, max 100 per request.
searchMatches voice name/description, or an exact voice_id.
gender / age / accent / language / categoryExact-match filters.
featuredtrue/false (GenAIPro catalog only).

Response also includes total (exact count matching your filters) and has_more. To pull the whole catalog, page through with page_size=100 until has_more is false (~117 requests for the full 10,000+ list) — cache the result on your side rather than re-fetching it all on every load.

Node.js — fetch the whole catalog
async function fetchAllVoices() {
  const all = [];
  let page = 0;
  while (true) {
    const res = await fetch(`https://api.aivoicee.com/api/voices?page=${page}&page_size=100`);
    const { data } = await res.json();
    all.push(...data.voices);
    if (!data.has_more) break;
    page++;
  }
  return all; // ~11,000+ voices
}
JSON — voice object (trimmed)
{
  "voice_id": "y2H4TwIU5I2L0JXOdBeX",
  "name": "Aria",
  "gender": "female",
  "accent": "american",
  "preview_url": "https://files.genaipro.io/previews/y2H4TwIU5I2L0JXOdBeX.mp3",
  "image_url": "https://files.genaipro.io/avatars/y2H4TwIU5I2L0JXOdBeX.jpg"
}
HTML — play a preview
<audio controls src="VOICE.preview_url"></audio>
2. Generate voice (create a task)
POST /api/v1/tts
FieldTypeNotes
textstringRequired. Max 5000 characters.
voice_idstringRequired. From the matching voices list for your chosen provider — validated against our catalog before we ever call the provider, so an invalid ID fails instantly (see Errors below).
providerstringOptional. genaipro (default) / elevenlabs / fishaudio — see the platform table above.
model_idstringOptional. Default eleven_flash_v2_5. Use s2.1-pro-free for provider fishaudio.
speednumberOptional. 0.7–1.2, default 1.0.
stabilitynumberOptional. 0–1, default 0.75.
similaritynumberOptional. 0–1, default 0.5.
cURL
curl -X POST https://api.aivoicee.com/api/v1/tts \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello from AiVoicee!",
    "voice_id": "VOICE_ID_HERE"
  }'
cURL — Fish Audio instead (synchronous, result ready immediately)
curl -X POST https://api.aivoicee.com/api/v1/tts \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello from AiVoicee!",
    "voice_id": "FISH_VOICE_ID_HERE",
    "provider": "fishaudio",
    "model_id": "s2.1-pro-free"
  }'
Node.js
const res = await fetch('https://api.aivoicee.com/api/v1/tts', {
  method: 'POST',
  headers: {
    'x-api-key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    text: 'Hello from AiVoicee!',
    voice_id: 'VOICE_ID_HERE',
  }),
});
const { data } = await res.json();
console.log(data.task_id);
Python
import requests

res = requests.post(
    "https://api.aivoicee.com/api/v1/tts",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={"text": "Hello from AiVoicee!", "voice_id": "VOICE_ID_HERE"},
)
task_id = res.json()["data"]["task_id"]
print(task_id)

Response:

JSON
{
  "success": true,
  "message": "Task created — poll GET /api/v1/tts/:task_id for status",
  "data": { "task_id": "abc123", "char_count": 21 }
}
3. Poll for the result
GET /api/v1/tts/{task_id}

Poll every 1–2 seconds until status is completed. The result field then holds the audio URL.

cURL
curl https://api.aivoicee.com/api/v1/tts/abc123 \
  -H "x-api-key: YOUR_API_KEY"
Errors
StatusMeaning
400voice_id not found in the catalog for your chosen provider — a voice_id from one provider never works with another; call the matching voices endpoint from the platform table above
401Missing, invalid or disabled API key
404Task not found (wrong task_id or wrong key)
410Voice was in our catalog but the provider no longer has it (removed/renamed upstream) — we drop it from our catalog automatically so this self-heals; pick another voice
503No generation capacity available — try again shortly

Notes: keys are shown once at creation — store them securely on your own server, never in client-side / mobile app code. Disable or delete a key below to revoke access immediately.

Send New Notification
Info
Success
Warning
Promo
All Users
Specific User
Sent Notifications
No notifications sent yet.
Period
—
Total Users
—
Total Tasks (All)
—
Verified
—
New Signups
—
Active Users
—
Credits Used
—
Tasks Run
Active Subscriptions
Loading…
Top Users by Tasks
Loading…
🌐 Users by Country
Loading…
Potential Power Users Free users with most tasks — upgrade candidates
Loading…
Quick Credit Burners Users who exhausted 800+ credits in 1–3 tasks — high-value single generations
Loading…
Recent Signups
Email Country Status Plan Tasks Avg Chars Credits Joined
Loading…
Period
—
Buy Page Opens
—
Pay with Play (IAP)
—
Web Pay Clicks
—
Payment Success
—
Payment Failed
—
Cancelled
—
Crypto Selected
—
Razorpay Selected
Payment Intent Funnel
Loading…
Web Method BreakdownOf users who chose to pay on website
Loading…
Daily Breakdown
Date Opens IAP Clicks Web Clicks Success Failed
Loading…
User Event Log
User Country Event Method Date & Time
Loading…
Total Topups
—
—
Active Subscriptions
—
Reversed / Fraud
—
—
User Method Amount Reference Date
Loading…
Page 1

Add Promo

Loading...

Add Promo

Loading...

Add Plan

Loading…
Credit Settings
Credits given to new users on registration
Credits auto-added every week for free users
Credits earned per ad watched
Minimum wait between ad rewards
GenAIPro Access
Free-tier (direct ElevenLabs) and Fish Audio generation are never gated by this — they're always available to anyone with credits.
Force Update
When enabled, a non-dismissible update popup appears on app open
Shown in popup (optional)
If enabled, a "Later" button appears so user can close popup and use app
Opens when user taps "Update Now"
New Post
All Posts
Loading...
Run Migration

This endpoint checks your live database and applies only the missing tables and columns. It is safe to run multiple times — already existing items are skipped automatically.