Browse API endpoints
post/from-link

Download audio from Suno, Udio, and other AI music sites

Send a public song, playlist, or creator-page link. Your app or agent gets an audio ID, waits for the download, then saves the file or sends it to restoration, mastering, stem splitting, or MIDI conversion.

Review the supported imports for accepted track, playlist, and creator-page sources.

How this endpoint works

Use this endpoint to build a music downloader, back up a public AI music library, or process songs from links without downloading and uploading them again on your server. It downloads existing public audio; it is not an official Suno or Udio music-generation API.

  1. 1

    Send a public music link

    Send the URL of a supported song, playlist, or creator page with your API key.

  2. 2

    Wait for the download

    Save audio_id and poll the download status until it completes or fails.

  3. 3

    Save or process the song

    Download the completed song or send its audio ID for processing with restoration, mastering, stem separation, or MIDI conversion.

Common use cases

Choose this operation when it matches the source and result your workflow needs.

Build an AI music downloader

Let users paste a public Suno, Udio, Mureka, or other supported song link and download the audio in your app.

Back up a playlist or creator page

Import multiple public tracks from a supported playlist or creator page and keep a local copy.

Process an AI-generated song

Download a song first, then restore its audio, master it, split it into stems, or convert it to MIDI.

Processing used by 60,000+ music makers

Results people rely on

It worked! Well done :) Many thanks :))))

Vicki (People Like Us)

2600+ songs saved

Love it! Makes everything crisp!
TG

The Grim Tower

Sensacional
F

Francisco

Highend services!
TS

Tommi, Studionet

Code examples

Server-side example

JavaScript (Node.js)
import { writeFile } from "node:fs/promises";

const API_URL = "https://api.neuralanalog.com";
const API_KEY = process.env.NEURALANALOG_API_KEY;

async function waitForCompletion(objectType, objectId) {
  while (true) {
    const response = await fetch(`${API_URL}/status/${objectType}/${objectId}`, {
      headers: { "X-API-Key": API_KEY },
    });
    if (!response.ok) {
      throw new Error(`Status check failed with ${response.status}`);
    }

    const status = await response.json();
    if (status.is_failed) {
      throw new Error(status.error_message || `${objectType} processing failed`);
    }
    if (status.is_complete) {
      return status;
    }
    await new Promise((resolve) => setTimeout(resolve, 5000));
  }
}

const requestResponse = await fetch(`${API_URL}/from-link`, {
  method: "POST",
  headers: {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "url": "https://suno.com/song/example"
}),
});
if (!requestResponse.ok) {
  throw new Error(`Import failed with ${requestResponse.status}`);
}

const result = await requestResponse.json();
const jobId = result["audio_id"];
const status = await waitForCompletion("audio", jobId);

const downloadResponse = await fetch(
  `${API_URL}/download/audio/${jobId}`,
  { headers: { "X-API-Key": API_KEY }, redirect: "follow" },
);
if (!downloadResponse.ok) {
  throw new Error(`Download failed with ${downloadResponse.status}`);
}
await writeFile("original.wav", Buffer.from(await downloadResponse.arrayBuffer()));

Parameters

Send the API key from a trusted server. Never expose it in client-side JavaScript.

JSON request body

url
requiredstring<uri>

Public audio, video, playlist, or creator URL to import. Supported sources include Suno, Udio, FlowMusic / Producer.ai, TopMediaAI, Musicful, iLoveSong, MusicCreator, AIMusicGen, MakeBestMusic, EasyMusic, MusicAI, FreeMusic, MusicGeneratorAI, AI Song Maker, OpenMusic, AI Song Generator, Mureka, Treblo, Tad AI, Spotify, and online source links.

Example: "https://www.youtube.com/watch?v=0Y46Mr5g75o"

audio_id
optionalstring | null

Existing audio ID to retry or replace. Omit this field to create a new audio asset.

Example: "6c62f8e7-02a3-48c0-a5b5-5de87ed9c31a"

Successful response

200Successful Response
audio_id
requiredstring

ID of the imported audio asset.

Example: "6c62f8e7-02a3-48c0-a5b5-5de87ed9c31a"

status
requiredstring

Import state returned immediately after the background job starts.

Example: "processing"

message
requiredstring

Human-readable status message for the import request.

Example: "Download started"

batch_id
optionalstring | null

Batch import ID when the submitted link expands into multiple tracks, such as a playlist or creator page.

Example: "1f6a3a16-7c63-4ad7-9f6b-4af8b8a5f2f5"

Errors

A missing or invalid X-API-Key returns an authentication error. Validation errors use the declared 422 response below.
422Validation Error
detail
optionalarray<object>

No description provided.

Next steps