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

Check when an audio job is finished

Audio processing takes time. Use one reusable polling loop to check downloads, restorations, masters, stem splits, and MIDI conversions. Your app or agent can continue as soon as the job finishes.

How this endpoint works

Use this endpoint after any API call that starts background work. The same response fields work across job types, so your backend can handle completion, failure, and download URLs without writing a different status client for every feature.

  1. 1

    Save the job ID

    Keep the ID and object type returned by the endpoint that started the job.

  2. 2

    Check every few seconds

    Poll the status API until is_complete or is_failed becomes true.

  3. 3

    Continue or show the error

    Download the finished result on success, or show error_message when processing fails.

Common use cases

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

Show processing status

Display processing, completed, and failed states in your app.

Chain API jobs

Wait for restoration to finish before starting mastering, stems, MIDI, or download.

Handle failures safely

Stop polling and return a useful error instead of leaving a worker running forever.

Processing used by 60,000+ music makers

Results people rely on

Love it! Makes everything crisp!
TG

The Grim Tower

Sensacional
F

Francisco

Highend services!
TS

Tommi, Studionet

Easy to use and high quality results.
B

Bjark

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);

console.log(status);

Parameters

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

Path and query parameters

object_type
requiredpathstring
Object type to inspect: audio, upscaled, mastered, stem_split, stem, transcription, or workflow.
object_id
requiredpathstring
ID returned by a queueing endpoint.

Successful response

200Successful Response
object_type
requiredstring

Kind of object that was checked.

Example: "upscaled"

object_id
requiredstring

ID of the checked job or artifact.

Example: "d66cf940-bf26-45bb-80f7-332f26b6859a"

status
requiredstring

Current processing state.

Example: "completed"

is_complete
requiredboolean

True when the artifact is ready to download or use.

Example: true

is_failed
requiredboolean

True when the job cannot complete and error_message is set.

Example: false

download_url
optionalstring | null

Download endpoint URL for completed downloadable artifacts.

Example: "https://api.neuralanalog.com/download/upscaled/d66cf940-bf26-45bb-80f7-332f26b6859a"

audio_id
optionalstring | null

Parent audio asset ID when the checked object belongs to a track.

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

status_details
optionalstring | null

Additional human-readable progress details when available.

Example: "Restoration completed"

error_message
optionalstring | null

Failure reason when is_failed is true.

Example: "Source audio is no longer available"

created_at
optionalstring | null

ISO timestamp for when the job or artifact was created.

Example: "2026-05-05T10:15:30Z"

completed_at
optionalstring | null

ISO timestamp for when processing completed.

Example: "2026-05-05T10:18:42Z"

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