API documentation
Video generation, speech synthesis, image generation and voice cloning. One API key, one base URL: https://seslab.com.tr/api/v1
Getting started (3 steps)
Open an account and create a new key from the “My keys” page in the panel. Your key starts with sk_ (e.g. sk_a1b2c3…) and is shown only once — copy it and store it safely.
Add the Authorization: Bearer sk_… header to every request and send the data as JSON. The easiest first request: GET /me — it returns your account and balance.
Images and video can take a while: you first get an id, then ask for the status with that id. Credits are charged on success and refunded automatically on failure.
Authentication
Add the Authorization: Bearer sk_… header to every request. You create the key in the panel; an invalid or missing key returns 401, and too many failed attempts return 429. There is no per-minute request limit on a valid key.
curl https://seslab.com.tr/api/v1/me \ -H "Authorization: Bearer sk_YOUR_API_KEY"
Desktop app token
Rule: sk_ is used only for the exchange; it is never stored permanently inside the desktop app. The desktop app uses the sk_ API key only on the first exchange request. Store the dsk_ token from the POST /api/desktop/auth/token response securely in the macOS Keychain or Windows Credential Manager. Only a hash of that token is kept in the SesLab database.
curl -X POST https://seslab.com.tr/api/desktop/auth/token \
-H "Authorization: Bearer sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"device_label":"Ufuk Mac M4","app_version":"1.0.0"}'
# Response: { "desktop_token": "dsk_...", "expires_in": 2592000 }Endpoints
/videoStart a video generation (async, 202 + id)by tier/video?id=IDQuery a video’s status / resultfree/ttsTurn text into speech (sync if ready in ≤45 s, otherwise 202 + id)1.0 cr/char · v3: 1.5 cr/char/tts?id=IDQuery a TTS job’s status / audiofree/api/image-generateStart an image generation (async, 202 + id)by model/api/image-generate/status?id=IDQuery a long-running image jobfree/voicesAvailable voice cataloguefree/voice-cloneCreate a voice clone (multipart/form-data)free/voice-cloneList your voice clones and their voice_idsfree/voice-clone?voice_id=IDDelete a voice clonefree/meAccount details and balancefree/creditsCredit balancefree/statusSystem status (no auth required)free/desktop/auth/tokenExchange an sk_ key for a short-lived dsk_ token for the desktop appfreeVideo generation
POST /video
Returns 202 (async). Poll the result with GET /video?id=. Credits are refunded automatically on failed jobs.
| Field | Type | State | Description |
|---|---|---|---|
| prompt | string (10–1000) | required | Describe what you want to see in the video. English prompts usually give better results. |
| model | string | opt. · def. standard-video | Video package: standard-video (Fast) or hd-video (Premium). Leave it empty and standard-video is used. Old package names have been removed; if you send one you get a clear error telling you what to use instead. |
| resolution | string | opt. · def. 720p | Resolution: 720p (default) or 1080p. 1080p costs more credits within the same package. |
| aspect_ratio | string | opt. · def. 16:9 | Only 16:9 landscape video is supported. |
| duration | number | opt. · def. 8 | The duration is fixed: every video package produces 8 s, and the value you send is ignored. |
Quality tiers and credits
| Tier | model = | Credits | Notes |
|---|---|---|---|
| Fast default | standard-video | 19,500 | 16:9 · 720p · 8 s |
| Fast (1080p) | standard-video | 29,250 | 16:9 · 1080p · 8 s · send resolution=1080p |
| Premium | hd-video | 25,500 | 16:9 · 720p · 8 s |
| Premium (1080p) | hd-video | 38,250 | 16:9 · 1080p · 8 s · send resolution=1080p |
Note: the video endpoint currently supports 16:9 landscape only. If aspect_ratio is left empty, 16:9 is used.
Speech synthesis (TTS)
POST /tts
If it is ready within 45 seconds you get a synchronous audio_url. Long texts return 202 + id; poll with GET /tts?id=. For ElevenLabs send one of the voice-natural packages, or voice-economy as the budget option.
| Field | Type | State | Description |
|---|---|---|---|
| text | string (1–31000) | required | The text to turn into speech. |
| voice_id | string | required | Which voice reads it. Fetch the voice list with GET /voices and put the id from there here. |
| voice_package | string | opt. · def. voice-natural | ElevenLabs: voice-natural, voice-natural-fast, voice-natural-live or voice-natural-latest. Budget option: voice-economy. |
| language | string | optional | Language of the text, e.g. tr (Turkish). Only valid for voice-natural and voice-fast. |
| voice_settings | object | optional | Fine tuning (voice-natural only): stability 0–100, similarity_boost 0–100, speed 0.7–1.2, style 0–100, use_speaker_boost: true/false. |
Image generation
POST /api/image-generate
A SesLab-compatible endpoint. Only the verified active image model is open right now. Returns 202 + id; poll the result with the status endpoint. Credits are refunded automatically on failure.
| Field | Type | State | Description |
|---|---|---|---|
| prompt | string (1–20000) | required | What should be in the image? Describe it freely (Turkish works too). |
| model | string | required | Model ID: only nano-banana-2-lite is active right now. image-standard is accepted as a legacy alias. |
| aspect_ratio | string | optional | Aspect-ratio choice for the active model. |
| resolution | string | disabled | The active model runs natively at 1K; extra resolution choices are disabled. |
| mode | string | disabled | Image services that are not active are disabled. |
| quality | string | disabled | Image services that are not active are disabled. |
| image_input | string[] | optional | Reference images: base64 data URI or http(s) URL. Alias: reference_images. Up to 4 on the active model. |
| negative_prompt | string | optional | Things to avoid. |
Image models
nano-banana-2-liteNano Banana 2 Lite2,000 crverified active model · 1K · 4 referencesGET /api/image-generate/status?id=ID
Returns the status, image_url, image_urls and error fields for long-running image jobs.
Voice cloning
POST /voice-clone — multipart/form-data
Free. Returns a voice_id — use it in TTS calls.
| Field | Type | State | Description |
|---|---|---|---|
| file | file | required | The voice sample to clone — MP3/M4A/WAV/OGG/FLAC, max 10 MB (10 seconds to 5 minutes of clean audio). |
| voice_name | string (≤100) | required | The name you give the clone (visible to you). |
| language_tag | string | opt. · def. Turkish | Language of the voice, e.g. Turkish. |
| gender_tag | string | opt. · def. female | Gender of the voice: female or male. |
GET /voice-clone
Lists every voice clone on your account, newest first, with their voice_id fields. Takes no parameters.
{
"success": true,
"voices": [
{
"id": "b7c1e0a2-4f10-4a91-9c2e-1d5b7a0e33af",
"voice_id": "2630054",
"cloned_voice_id": "2630054",
"name": "My voice",
"created_at": "2026-08-12T09:14:22.000Z"
}
]
}Speaking with a clone: send the voice_id (or id) you get here as voice_id in your POST /tts call — no package/model field is needed, and it is ignored for clone voices. The text limit is 5,000 characters.
DELETE /voice-clone?voice_id=ID
Deletes the clone. The voice_id query parameter is required; if the clone is not found you get a 404.
Code samples
# Basic auth check
curl https://seslab.com.tr/api/v1/me \
-H "Authorization: Bearer sk_YOUR_API_KEY"
# Start a video — packages: standard-video (Fast) / hd-video (Premium), 16:9, 720p|1080p, 8 s
curl -X POST https://seslab.com.tr/api/v1/video \
-H "Authorization: Bearer sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Cinematic product showcase, smooth camera move",
"aspect_ratio": "16:9",
"model": "standard-video",
"resolution": "720p"
}'
# Query the video status (free, poll repeatedly)
curl "https://seslab.com.tr/api/v1/video?id=VIDEO_ID" \
-H "Authorization: Bearer sk_YOUR_API_KEY"
# Turn text into speech
curl -X POST https://seslab.com.tr/api/v1/tts \
-H "Authorization: Bearer sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello, this voice was generated with Seslab.",
"voice_id": "VOICE_ID",
"voice_package": "voice-natural",
"language": "en"
}'
# Generate an image — returns 202 + id, poll the result from the status endpoint
curl -X POST https://seslab.com.tr/api/image-generate \
-H "Authorization: Bearer sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Premium product photo with blue lighting on a dark background",
"aspect_ratio": "1:1",
"model": "nano-banana-2-lite"
}'Error codes
401UnauthorizedThe Authorization header is missing or the key is wrong.402Insufficient CreditsNot enough credits. Top up from the panel.422Validation ErrorMalformed request body or unsupported value.429Too Many Attempts10+ failed authentication attempts in a minute.404Not FoundThe requested generation (id) was not found.503Service Not ReadyThe generation service is not active right now.500Server ErrorUnexpected error — try again; credits are refunded on a failed job.Ready to start?
Open an account, create your API key and send your first request within minutes.