Browse API endpoints
get/download/{object_type}/{object_id}

Download an audio or MIDI file by ID

Pass the file type and ID after processing finishes. The API redirects your server to a temporary signed URL. Follow the redirect and save or stream the returned file.

How this endpoint works

Use this endpoint when your app needs one completed result. Use the ZIP endpoint for multiple tracks or stems. This endpoint returns a 307 redirect with file bytes, not a JSON download object, so your HTTP client must follow redirects.

  1. 1

    Wait for the file

    Poll the matching job until is_complete is true.

  2. 2

    Follow the redirect

    Call the download API with an HTTP client configured to follow redirects.

  3. 3

    Save or stream the file

    Write the response bytes to disk, cloud storage, or directly to the user.

Common use cases

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

Download a song

Return the completed audio downloaded from a music link or uploaded by a user.

Download a restored WAV or master

Return one finished restoration or master as soon as its status reports completion.

Download a stem or MIDI file

Save one separated stem or MIDI transcription by its ID.

Processing used by 80,000+ music makers

Results people rely on

“I love the interface. I love the bulk upload/download features. They're a life saver! Also I just realized that Apollo is magic and I don't even need to use denoise. Apollo somehow removes noise much more naturally. So I'm actually spending way less credits than I expected.”
I

IMDK

“It can bring back clarity without making everything sound too artificial or overprocessed. Stem separation is also surprisingly clean.”
R

R.

Audio restoration and stem separation

“Does amazing job in restoring Audio from bad quality MP3s and badly extracted audio from CDs. Always my go to for audio restoration.”
N

N.

MP3 and CD audio restoration

“Amazing tool for audio. Clean, simple, and effective. I would spend hours in RX to get the same results. Give it a try. I can save you hours of production time.”

Dan Campbell ~Riffster

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}/upscale-audio`, {
  method: "POST",
  headers: {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "audio_id": "6c62f8e7-02a3-48c0-a5b5-5de87ed9c31a",
  "preset": "universal_enhancer",
  "bit_depth": 24
}),
});
if (!requestResponse.ok) {
  throw new Error(`Restoration request failed with ${requestResponse.status}`);
}

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

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

Parameters

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

Path and query parameters

object_type
requiredpathstring
Artifact collection to download. Common values are audio, stem, upscaled, mastered, and transcription.
object_id
requiredpathstring
Identifier for the requested artifact in the selected object_type.
format
optionalquerystring
Preferred output format when the artifact supports format selection.
track
optionalqueryboolean
Whether this request should count as a user download.
strict_format
optionalqueryboolean
Require the stored format instead of a fallback source.
render_source
optionalqueryboolean
Resolve a stored source suitable for quality-preserving rendering.

Successful response

307Temporary redirect to the signed artifact download URL.

Headers

Location

Temporary signed URL for the downloadable file.

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