openapi: 3.1.0 info: title: Suno API (sunoapi.org) description: >- Third-party Suno API gateway (sunoapi.org) for AI music, lyrics, and audio generation. Suno itself does not publish a sanctioned developer API as of May 2026; this OpenAPI describes the public-facing endpoints documented at https://docs.sunoapi.org. Endpoints are asynchronous and rely on a callBackUrl for completion notifications, with task status retrievable via record-info endpoints. version: "1.0.0" contact: name: sunoapi.org docs url: https://docs.sunoapi.org/ servers: - url: https://api.sunoapi.org description: Production security: - bearerAuth: [] tags: - name: Music description: Music generation endpoints - name: Lyrics description: Lyrics generation endpoints paths: /api/v1/generate: post: tags: [Music] summary: Generate music description: >- Creates a music generation task. Returns a taskId; results are delivered via the callBackUrl when ready (stream URLs in ~30-40s, downloadable URLs in 2-3 minutes). Exactly two songs are returned per successful task. operationId: generateMusic requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenerateMusicRequest' responses: '200': description: Task accepted content: application/json: schema: $ref: '#/components/schemas/TaskResponse' /api/v1/generate/record-info: get: tags: [Music] summary: Get music generation details description: Retrieve the status and audio results for a music generation task. operationId: getMusicGenerationDetails parameters: - in: query name: taskId required: true schema: type: string description: The task ID returned from Generate Music or Extend Music. responses: '200': description: Task details content: application/json: schema: $ref: '#/components/schemas/MusicRecordInfoResponse' /api/v1/lyrics: post: tags: [Lyrics] summary: Generate lyrics description: >- Submit a lyrics generation task. Returns a taskId; generated lyric variations are delivered to callBackUrl. Generated content persists for 15 days. operationId: generateLyrics requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenerateLyricsRequest' responses: '200': description: Task accepted content: application/json: schema: $ref: '#/components/schemas/TaskResponse' components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: API Key schemas: GenerateMusicRequest: type: object required: [customMode, instrumental, callBackUrl, model] properties: customMode: type: boolean description: When true, requires style and title. Prompt required if instrumental=false. instrumental: type: boolean callBackUrl: type: string format: uri model: type: string description: Model identifier (e.g. chirp-v3-5, chirp-v4). prompt: type: string style: type: string title: type: string personaId: type: string personaModel: type: string negativeTags: type: string vocalGender: type: string styleWeight: type: number weirdnessConstraint: type: number audioWeight: type: number GenerateLyricsRequest: type: object required: [prompt, callBackUrl] properties: prompt: type: string maxLength: 200 description: Detailed description of desired lyrics. callBackUrl: type: string format: uri TaskResponse: type: object properties: code: type: integer example: 200 msg: type: string example: success data: type: object properties: taskId: type: string MusicRecordInfoResponse: type: object properties: code: type: integer msg: type: string data: type: object properties: taskId: type: string parentMusicId: type: string param: type: string response: type: object properties: taskId: type: string sunoData: type: array items: $ref: '#/components/schemas/SunoTrack' status: type: string enum: - PENDING - TEXT_SUCCESS - FIRST_SUCCESS - SUCCESS - CREATE_TASK_FAILED - GENERATE_AUDIO_FAILED - CALLBACK_EXCEPTION - SENSITIVE_WORD_ERROR type: type: string enum: [chirp-v3-5, chirp-v4] operationType: type: string enum: [generate, extend, upload_cover, upload_extend] errorCode: type: integer nullable: true errorMessage: type: string nullable: true SunoTrack: type: object properties: id: type: string audioUrl: type: string format: uri streamAudioUrl: type: string format: uri imageUrl: type: string format: uri prompt: type: string modelName: type: string title: type: string tags: type: string createTime: type: string format: date-time duration: type: number description: Duration in seconds.