SexyVoice Docs

API

Authenticate and generate speech with SexyVoice API.

Base URL

Use https://sexyvoice.ai as the API host.

Authentication

All endpoints require a Bearer API key that you create in Dashboard -> API Keys.

curl -X GET 'https://sexyvoice.ai/api/v1/models' \
  -H 'Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Request ID

Every response includes a server-generated request-id header (format: req_sv_<hex>). Use it when contacting support or debugging failures.

Quick Start

Speech requests can identify a voice by voice + model, or by voiceId from GET /api/v1/voices. Use voiceId when you want a stable ID or when a voice name exists for more than one model.

Optional generation parameters:

  • temperature (02) — sampling temperature for Gemini voices (gpro/gpro31); higher is more expressive. Ignored by other models.
  • speed (0.71.5) — speech speed multiplier for Grok (xai) voices, per the xAI TTS API. Ignored by other models.

curl

curl -X POST 'https://sexyvoice.ai/api/v1/speech' \
  -H 'Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gpro",
    "voice": "achernar",
    "input": "Hello from SexyVoice API",
    "style": "calm",
    "seed": 1234,
    "temperature": 1.2
  }'

curl with voiceId

curl -X POST 'https://sexyvoice.ai/api/v1/speech' \
  -H 'Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "voiceId": "390f5864-111b-4795-81ea-7026a1e64cfc",
    "input": "Hello from SexyVoice API",
    "style": "calm"
  }'

Do not include voice or model when you pass voiceId; the API derives the model from the voice.

TypeScript (gpro)

const response = await fetch('https://sexyvoice.ai/api/v1/speech', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SEXYVOICE_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'gpro',
    voice: 'achernar',
    input: 'Hello from TypeScript',
    style: 'happy',
    seed: 42,
    temperature: 1.2,
  }),
});

const requestId = response.headers.get('request-id');
const json = await response.json();

TypeScript (Grok)

const response = await fetch('https://sexyvoice.ai/api/v1/speech', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SEXYVOICE_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'xai',
    voice: 'eve',
    input: 'Hello from Grok! [laugh] This sounds great.',
    response_format: 'wav',
    speed: 1.2,
  }),
});

const json = await response.json();
// json.url contains the generated audio URL

Check Billing Balance

curl -X GET 'https://sexyvoice.ai/api/v1/billing' \
  -H 'Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Python (gpro)

import requests

response = requests.post(
    'https://sexyvoice.ai/api/v1/speech',
    headers={
        'Authorization': f'Bearer {API_KEY}',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'gpro',
        'voice': 'achernar',
        'input': 'Hello from Python',
        'style': 'warm',
        'seed': 42,
        'temperature': 1.2,
    },
    timeout=30,
)

request_id = response.headers.get('request-id')
print(request_id, response.status_code, response.json())

Python (Grok)

import requests

response = requests.post(
    'https://sexyvoice.ai/api/v1/speech',
    headers={
        'Authorization': f'Bearer {API_KEY}',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'xai',
        'voice': 'eve',
        'input': 'Hello from Grok! <whisper>This is a secret.</whisper>',
        'response_format': 'mp3',
        'speed': 1.2,
    },
    timeout=30,
)

print(response.status_code, response.json())

Next Steps

  • Use the endpoint pages in this section for each request/response contract.
  • See Grok Voices & Speech Tags for the full Grok tag reference.
  • See Error Codes for the centralized error taxonomy.

On this page