DEVELOPER RESOURCES

Build with SKEYX.

Download API reference (CSV)

Music API reference. Authenticate with a Bearer Key and use a stable idempotency_key for every write request.

Use Prefer: respond-async for generation, uploads and covers. A 202 response returns a task_id or upload_id immediately. Poll its GET endpoint until succeeded or failed; reuse the same idempotency_key when retrying.

List models

GET/v1/models

Query the current model catalogue and available model IDs.

Legacy IDs chirp-v3-0 and chirp-v3-5 currently return chirp-v4 and chirp-v4-5 respectively. Use a current model ID when the exact version matters.

Generate music

POST/v1/suno/generate
curl https://x.skeyx.com/v1/suno/generate \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Prefer: respond-async" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "warm cinematic instrumental",
    "model": "chirp-v5-5",
    "instrumental": true,
    "idempotency_key": "music-001"
  }'

Register audio

POST/v1/suno/uploads

Register a publicly accessible HTTPS MP3 URL to receive a SKEYX upload_id. Registration does not consume generation credits.

curl https://x.skeyx.com/v1/suno/uploads \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Prefer: respond-async" \
  -H "Content-Type: application/json" \
  -d '{
    "audio_url": "https://your-domain.example/music.mp3",
    "idempotency_key": "upload-001"
  }'
This endpoint accepts an HTTPS MP3 URL. Direct browser file uploads are not part of this endpoint.

Create a cover

POST/v1/suno/covers
curl https://x.skeyx.com/v1/suno/covers \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Prefer: respond-async" \
  -H "Content-Type: application/json" \
  -d '{
    "upload_id": "upl_...",
    "model": "chirp-v5-5",
    "prompt": "cinematic orchestral reinterpretation",
    "style": "cinematic orchestral",
    "instrumental": false,
    "audio_weight": 0.8,
    "idempotency_key": "cover-001"
  }'

Retrieve a task

GET/v1/suno/task/:task_id

Tasks and media use SKEYX identifiers. Audio, cover and video links are delivered through SKEYX media URLs.

Usage and tasks

GET/v1/usage

Read your key balance, settled spend, reserved funds, model totals and daily usage. Daily usage, Console timestamps and CSV dates use UTC+8.

GET/v1/suno/tasks?limit=20&offset=0
GET/v1/suno/uploads/:upload_id

Retrieve an upload by its upload_id. Uploads are visible only to the key that registered them.

Enhanced upload

Enhanced uploads are asynchronous. Supply a song name and a public HTTPS MP3 URL, then poll upload_id until succeeded. Pass this upload_id to Cover. audio_url may be null; a playback URL is not required for a successful upload.

curl https://x.skeyx.com/v1/suno/uploads \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "audio_url": "https://your-domain.example/original.mp3",
  "mode": "enhanced",
  "name": "My original song",
  "idempotency_key": "enhanced-upload-001"
}'
GET/v1/suno/uploads/:upload_id

WAV export

Use the audio ID from a completed SKEYX track. Download and store your WAV promptly; hosted files may expire.

curl https://x.skeyx.com/v1/suno/wav \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "audio_id": "mus_...",
  "idempotency_key": "wav-001"
}'
GET/v1/suno/task/:task_id

data[].file_url · WAV

Custom models

Train on 6–24 authorized MP3 recordings. Generate with your own sound.

POST /v1/suno/custom-models

Business activation and agreed pricing are required. Creation reserves the agreed amount; only successful training is settled. Failed training releases the reservation. Reuse the same idempotency key when retrying.

curl https://x.skeyx.com/v1/suno/custom-models \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "action": "create",
  "name": "My Original Sound",
  "audio_urls": [
    "https://your-domain.example/original-1.mp3",
    "https://your-domain.example/original-2.mp3",
    "https://your-domain.example/original-3.mp3",
    "https://your-domain.example/original-4.mp3",
    "https://your-domain.example/original-5.mp3",
    "https://your-domain.example/original-6.mp3"
  ],
  "rights_confirmed": true,
  "idempotency_key": "my-model-001"
}'

Poll until status is ready. Only models owned by your account can be queried or used. Keep your API key and the returned model ID.

curl https://x.skeyx.com/v1/suno/custom-models \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "action": "retrieve",
  "id": "cm_..."
}'
curl https://x.skeyx.com/v1/suno/custom-models \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "action": "retrieve_batch",
  "limit": 20,
  "offset": 0,
  "status": "ready"
}'

Generate from a ready model. Poll the returned task_id using the task endpoint; audio is served through SKEYX.

curl https://x.skeyx.com/v1/suno/custom-models \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "action": "generate",
  "id": "cm_...",
  "title": "Morning Light",
  "lyric": "[Verse]\nMorning light across the floor\nAn open window, an open door",
  "style": "warm acoustic folk",
  "idempotency_key": "my-model-song-001"
}'

Archive stops new generations. It is idempotent and does not guarantee released capacity. This integration uses polling; callbacks are not exposed.

curl https://x.skeyx.com/v1/suno/custom-models \
  -H "Authorization: Bearer $SKEYX_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "action": "delete",
  "id": "cm_..."
}'

Request and response

Keep the same idempotency key when retrying. An accepted request is not a completed result. Poll until succeeded or failed; pending_vendor means the final result is still being verified.

HTTP 202
{"task_id":"local-task-id","state":"running"}

GET /v1/suno/task/local-task-id
Authorization: Bearer $SKEYX_KEY

{"task_id":"local-task-id","state":"succeeded","data":[
  {"id":"mus_...","model":"chirp-v5-5","state":"succeeded",
   "audio_url":"https://x.skeyx.com/media/local-media-id"}
]}

POST /v1/suno/custom-models · action=create
{"id":"cm_...","task_id":"local-task-id","status":"queued",
 "source_count":6,"progress":{"uploaded":0,"total":6}}

Errors

INVALID_API_KEY: check your key. INSUFFICIENT_BALANCE: manage credit in Console. RATE_LIMITED: retry later. INVALID_REQUEST: check required fields. CUSTOM_MODEL_NOT_READY: wait for ready. Reuse the original idempotency key after a network timeout.

{"error":{"code":"INVALID_REQUEST","message":"The request is invalid.","request_id":"skx_..."}}

List and export

List tasks with limit and offset. Task and upload queries are scoped to the active key. Custom models are scoped to your account. Pricing, usage and task CSV exports are available in Console.

GET /v1/suno/tasks?limit=20&offset=0
GET /v1/suno/custom-models?limit=20&offset=0&status=ready
Authorization: Bearer $SKEYX_KEY

Claude

GET /v1/models lists the accepted models and protocols.

POST /v1/messages
Authorization: Bearer $SKEYX_KEY
Content-Type: application/json

{
  "model": "claude-sonnet-5",
  "max_tokens": 1024,
  "stream": true,
  "messages": [
    {
      "role": "user",
      "content": "Hello"
    }
  ]
}

GPT

GET /v1/models lists the accepted models and protocols.

POST /v1/responses
Authorization: Bearer $SKEYX_KEY
Content-Type: application/json

{
  "model": "gpt-5.6-luna",
  "input": "Hello",
  "max_output_tokens": 1024,
  "stream": true
}

Gemini

GET /v1/models lists the accepted models and protocols.

POST /v1beta/models/gemini-3.1-pro-preview:streamGenerateContent?alt=sse
Authorization: Bearer $SKEYX_KEY
Content-Type: application/json

{
  "contents": [
    {
      "parts": [
        {
          "text": "Hello"
        }
      ]
    }
  ],
  "generationConfig": {
    "maxOutputTokens": 1024
  }
}

Nano Banana

GET /v1/models lists the accepted models and protocols.

POST /v1/images/generations
Authorization: Bearer $SKEYX_KEY
Content-Type: application/json

{
  "model": "nano-banana-2",
  "prompt": "A red circle on a white background",
  "idempotency_key": "image-example-1"
}

Image 2

GET /v1/models lists the accepted models and protocols.

POST /v1/images/generations
Authorization: Bearer $SKEYX_KEY
Content-Type: application/json

{
  "model": "gpt-image-2",
  "prompt": "A red circle on a white background",
  "quality": "low",
  "size": "1024x1024",
  "idempotency_key": "image-example-2"
}

Veo

GET /v1/models lists the accepted models and protocols.

POST /v1/videos
Authorization: Bearer $SKEYX_KEY
Content-Type: application/json

{
  "model": "veo31-fast",
  "prompt": "A ceramic mug on a white table, static shot",
  "resolution": "720p",
  "idempotency_key": "video-example-1"
}