Karaoke API

v1
Admin Login →

Karaoke Sync API

Submit an MP3 audio file with pre-segmented lyrics and receive word-level timestamps for karaoke synchronization. Results are delivered asynchronously and stored for 90 days.

Base URL: https://karaoke.cohesium.ai

Authentication

All API requests require an API key sent via the X-API-Key header.

X-API-Key: kk_your_api_key_here

API keys are provided by the platform administrator. Keys prefixed with kk_ are Karaoke API keys.

POST /api/v1/sync

Submit an alignment job. Returns immediately with a job ID. Results are delivered asynchronously.

Request

Content-Type: multipart/form-data

Field Type Required Description
audio file Yes MP3 audio file (max 50 MB, max 15 minutes)
lyrics string Yes Pre-segmented lyrics (lines separated by \n, max 10,000 chars)
language string Yes ISO 639-1 language code: fr, en, es, de, it, pt, ja, ko

Example

curl -X POST https://karaoke.cohesium.ai/api/v1/sync \
  -H "X-API-Key: kk_your_api_key_here" \
  -F "audio=@song.mp3" \
  -F "lyrics=Joyeux anniversaire
Cher Antoine
On te souhaite
Plein de bonheur" \
  -F "language=fr"

Response 202 Accepted

{
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "processing",
  "created_at": "2026-04-04T10:30:00Z"
}

GET /api/v1/sync/{job_id}

Retrieve the status and result of an alignment job. Results are available for 90 days after completion.

Example

curl https://karaoke.cohesium.ai/api/v1/sync/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "X-API-Key: kk_your_api_key_here"

Response 200 OK (completed)

{
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "completed",
  "created_at": "2026-04-04T10:30:00Z",
  "completed_at": "2026-04-04T10:30:12Z",
  "expires_at": "2026-07-03T10:30:12Z",
  "result": {
    "segments": [
      {
        "index": 0,
        "text": "Joyeux anniversaire",
        "start": 5.240,
        "end": 7.810,
        "words": [
          { "word": "Joyeux",       "start": 5.240, "end": 5.880, "confidence": 0.94 },
          { "word": "anniversaire", "start": 5.920, "end": 7.810, "confidence": 0.89 }
        ]
      }
    ],
    "statistics": {
      "total_segments": 4,
      "total_words": 12,
      "avg_confidence": 0.87,
      "low_confidence_words": 1,
      "duration_s": 30.5
    }
  }
}

Response 202 Accepted (still processing)

{
  "job_id": "a1b2c3d4-...",
  "status": "processing",
  "created_at": "2026-04-04T10:30:00Z"
}

Response 410 Gone (expired)

{
  "error": {
    "code": "RESULT_EXPIRED",
    "message": "Result expired after 90 days"
  }
}

GET /api/v1/health

Health check endpoint. No authentication required.

{ "status": "healthy" }

Error Codes

HTTP Code Description
400INVALID_AUDIO_FORMATFile is not a valid MP3
400AUDIO_TOO_LARGEFile exceeds 50 MB
400AUDIO_TOO_LONGAudio exceeds 15 minutes
400INVALID_LYRICSLyrics empty or exceeds 10,000 chars
400UNSUPPORTED_LANGUAGELanguage code not supported
401UNAUTHORIZEDMissing or invalid API key
403KEY_PAUSEDAPI key is paused by administrator
403KEY_REVOKEDAPI key has been revoked
404JOB_NOT_FOUNDJob ID does not exist or belongs to another key
410RESULT_EXPIREDResult deleted after 90-day retention
500INTERNAL_ERRORUnexpected server error

All errors follow the format: {"error": {"code": "...", "message": "..."}}

Lyrics Guidelines

Pre-segmented by line: Each line of lyrics should be separated by \n. One line = one segment in the output.

No Suno/AI tags: Remove section markers like [Verse 1], [Chorus], [SFX]. Only include text that is actually sung or spoken.

Numbers in words: Write numbers as words (dix not 10). The API normalizes automatically, but explicit words improve accuracy.

Accents preserved: Keep accented characters (é, à, ç). They are handled internally.

Limits

Max audio duration15 minutes
Max file size50 MB
Max lyrics length10,000 characters
Result retention90 days
Processing time~10-15 seconds (typical 3-4 min song)