> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sunoapi.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate MIDI from Audio

> Convert separated audio tracks into MIDI format with detailed note information for each instrument.

### Usage Guide

* Convert separated audio tracks into structured MIDI data containing pitch, timing, and velocity information
* Requires a completed vocal separation task ID (from the Vocal Removal API)
* Generates MIDI note data for multiple detected instruments including drums, bass, guitar, keyboards, and more
* Ideal for music transcription, notation, remixing, or educational analysis
* Best results on clean, well-separated audio tracks with clear instrument parts

### Prerequisites

<Warning>
  You must first use the [Vocal & Instrument Stem Separation](/suno-api/separate-vocals-from-music) API to separate your audio before generating MIDI.
</Warning>

### Parameter Reference

| Name          | Type   | Description                                                                                                                                                                                                                                                                                                                                                                     |
| :------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `taskId`      | string | **Required.** Task ID from a completed vocal separation                                                                                                                                                                                                                                                                                                                         |
| `callBackUrl` | string | **Required.** URL to receive MIDI generation completion notifications                                                                                                                                                                                                                                                                                                           |
| `audioId`     | string | **Optional.** Specifies which separated audio track to generate MIDI from. This audioId can be obtained from the `originData` array in the [Get Vocal Separation Details](/suno-api/get-vocal-separation-details) endpoint response. Each item in `originData` contains an `id` field that can be used here. If not provided, MIDI will be generated from all separated tracks. |

### Developer Notes

* The callback will contain detailed note data for each detected instrument
* Each note includes: `pitch` (MIDI note number), `start` (seconds), `end` (seconds), `velocity` (0-1)
* Not all instruments may be detected - depends on audio content
* **Billing:** Check current per-call credit costs at [**https://sunoapi.org/dashboard**](https://sunoapi.org/dashboard)


## OpenAPI

````yaml suno-api/suno-api.json POST /api/v1/midi/generate
openapi: 3.0.0
info:
  title: intro
  description: API documentation for audio generation services
  version: 1.0.0
  contact:
    name: Technical Support
    email: support@sunoapi.org
servers:
  - url: https://api.sunoapi.org
    description: API Server
security:
  - BearerAuth: []
tags:
  - name: Music Generation
    description: Endpoints for creating and managing music generation tasks
  - name: Lyrics Generation
    description: Endpoints for lyrics generation and management
  - name: WAV Conversion
    description: Endpoints for converting music to WAV format
  - name: Vocal Removal
    description: Endpoints for vocal removal from music tracks
  - name: Music Video Generation
    description: Endpoints for generating MP4 videos from music tracks
  - name: Account Management
    description: Endpoints for account and credits management
paths:
  /api/v1/midi/generate:
    post:
      summary: Generate MIDI from Audio
      description: >-
        Convert separated audio tracks into MIDI format with detailed note
        information for each instrument.


        ### Usage Guide

        - Convert separated audio tracks into structured MIDI data containing
        pitch, timing, and velocity information

        - Requires a completed vocal separation task ID (from the Vocal Removal
        API)

        - Generates MIDI note data for multiple detected instruments including
        drums, bass, guitar, keyboards, and more

        - Ideal for music transcription, notation, remixing, or educational
        analysis

        - Best results on clean, well-separated audio tracks with clear
        instrument parts


        ### Prerequisites

        - You must first use the Vocal & Instrument Stem Separation API with
        `type: split_stem` to separate your audio before generating MIDI


        ### Parameter Details

        - `taskId` identifies a completed vocal separation task 

        - `callBackUrl` receives MIDI generation completion notifications

        - `audioId` (optional) specifies which separated audio track to generate
        MIDI from. Obtain this ID from the `originData` array in the Get Vocal
        Separation Details response. If not provided, MIDI will be generated
        from all separated tracks.


        ### Developer Notes

        - MIDI generation typically takes 30-90 seconds depending on audio
        length and complexity

        - The callback will contain detailed note data for each detected
        instrument

        - Each note includes: pitch (MIDI note number), start (seconds), end
        (seconds), velocity (0-1)

        - Not all instruments may be detected - depends on audio content

        - Generated MIDI data is retained for 14 days
      operationId: generate-midi
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - taskId
                - callBackUrl
              properties:
                taskId:
                  type: string
                  description: >-
                    Task ID from a completed vocal separation. This should be
                    the taskId returned from the Vocal & Instrument Stem
                    Separation endpoint.
                  example: 5c79****be8e
                callBackUrl:
                  type: string
                  format: uri
                  description: >-
                    The URL to receive MIDI generation task completion updates.
                    Required for all MIDI generation requests.


                    - System will POST task status and MIDI note data to this
                    URL when generation completes

                    - Callback includes detailed note information for each
                    detected instrument with pitch, timing, and velocity

                    - Your callback endpoint should accept POST requests with
                    JSON payload containing MIDI data

                    - For detailed callback format and implementation guide, see
                    [MIDI Generation
                    Callbacks](/suno-api/generate-midi-callbacks)

                    - Alternatively, use the Get MIDI Generation Details
                    endpoint to poll task status
                  example: https://example.callback
                audioId:
                  type: string
                  description: >-
                    Optional. Specifies which separated audio track to generate
                    MIDI from. This audioId can be obtained from the
                    `originData` array in the Get Vocal Separation Details
                    endpoint response. Each item in `originData` contains an
                    `id` field that can be used here. If not provided, MIDI will
                    be generated from all separated tracks.
                  example: 8ca376e7-******-08aaf2c6dd27
      responses:
        '200':
          description: MIDI generation task created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    description: Response status code
                    example: 200
                  msg:
                    type: string
                    description: Response message
                    example: success
                  data:
                    type: object
                    description: Response data containing task information
                    properties:
                      taskId:
                        type: string
                        description: >-
                          Unique identifier for the MIDI generation task. Use
                          this to query task status or receive callback results.
                        example: 5c79****be8e
              example:
                code: 200
                msg: success
                data:
                  taskId: 5c79****be8e
        '500':
          $ref: '#/components/responses/Error'
components:
  responses:
    Error:
      description: Server error
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        # 🔑 API Authentication


        All endpoints require authentication using Bearer Token.


        ## Get API Key


        1. Visit the [API Key Management Page](https://sunoapi.org/api-key) to
        obtain your API Key


        ## Usage


        Add to request headers:


        ```

        Authorization: Bearer YOUR_API_KEY

        ```


        > **⚠️ Note:**

        > - Keep your API Key secure and do not share it with others

        > - If you suspect your API Key has been compromised, reset it
        immediately from the management page

````