Skip to content
Lumean

The public Lumean API — voice, sound and music over HTTP

The Lumean API synthesizes speech, sound effects and music. You create an order, the platform runs it in the background and saves the files to storage. Pass your key in the X-API-KEY header; responses use the success, message, data format.

How the pipeline works

The key, scopes, voice and template are set up once. After that, every order starts from a ready template: the server voices the text in chunks, the files appear in the order, and a separate request returns the download link.

The public API pipelineOnce: key, scopes, voice, template. For every order: template, order, waiting, files, link.

Once

  1. KeyX-API-KEY
  2. Scopesorders.write
  3. VoiceGET /voices
  4. TemplatePOST /templates

Every order

  1. Templatetemplate_id
  2. OrderPOST /orders
  3. WaitingGET /orders/{order}
  4. Filesresult.files[]
  5. LinkPOST /storage/url

Where to start

What a key can do

An API key can create orders of four types. For any other type the API returns 422 with reason service_not_found.

Available with a key

  • ttstext to speech from a template
  • sfxsound effects from a description
  • musicmusic from a description
  • voice_searchfinding a similar voice from an audio clip

Returns 422

  • image
  • txt2img
  • remix
  • image_edit
  • voice_clone

Image generation and editing are not available through the API. Voice cloning is not an order: it uses separate Cartesia and Fish Audio operations.

A tts order has no voice_id field. The voice is stored in the template, in config.tts_settings.voice_id, so text to speech needs a template_id. Templates are mandatory for TTS

API key and docs for AI

API key

Keys are created in your Lumean account. After you sign up, the key creation form opens.

The key stays in your browser and never appears in the page URL.

For AI

Every page in this section has a Markdown version, and the whole API is described in one file, llm.md. The For AI button in the header copies the page, a ready-made prompt or the whole file.

3002 lines · 15 sections · 9 recipes · 251 KB

Before you integrate

What to know before your first request. Details are in the guides.

  • The voice is set in a template

    An order has no voice_id field. The voice is stored in the template’s config.tts_settings.voice_id, and the order refers to the template by template_id. To voice a single order with another voice, pass config_override.tts_settings.voice_id. The text to voice goes in input_text.

  • Orders run asynchronously

    POST /orders returns 201 with status created and no result yet. Poll GET /orders/{order} or listen over WebSocket to follow the status. partially_completed is not a final status: some chunks failed, and you can retry them or cancel the order.

  • result.files[] holds paths, not links

    POST /storage/url returns the download link, valid for one hour. Order files are kept for 7 days after the order finishes.

  • Retrying an order creates a new order

    POST /orders/{order}/retry creates a new order with the same parameters and is billed again. Failed chunks are retried inside the original order: POST /orders/{order}/items/retry-failed. POST /orders has no idempotency key, so after a dropped connection, look for the order in the list first.

  • A 429 has several causes

    It can be the request rate limit, the key’s token quota, a subscription limit, the concurrent task limit, or a pause after content policy blocks. The reason field names the cause. If the response has a Retry-After header, wait the time it gives. concurrency_limit_exceeded comes without it and lifts when your active orders finish. limit_exceeded is the subscription limit: retrying does not help until the period resets or the plan changes.

Your first request

GET /key creates nothing, charges nothing and needs no scope, which makes it a good key check. 200 — the key works, and the response shows its name and scopes. 401 — the key is missing or invalid.

GEThttps://api.lumean.app/api/public/key

An X-API-KEY header is required — without it every request returns 401.

Example response· no live request yet

The key the request is signed with.

{
  "success": true,
  "message": "string",
  "data": {
    "id": "string",
    "name": "string",
    "permissions": [
      "string"
    ],
    "is_active": true,
    "expires_at": "string",
    "limits": {
      "requests": {
        "per_minute": 1,
        "per_hour": 1,
        "per_day": 1
      },
      "tokens": {
        "per_minute": 1,
        "per_hour": 1,
        "per_day": 1,
        "per_month": 1,
        "quota": {
          "limit": 1,
          "used": 1,
          "remaining": 1
        }
      }
    }
  }
}

This page for AI

Open .mdllm.md

API version 1.0.0