Skip to main content

Node.js Examples

Complete Node.js examples for common AudioSpliter operations using the built-in fetch API (Node 18+).

Setup

Store your API key as an environment variable:

export AUDIOSPLITER_API_KEY=as_live_abc123

Helper Function

const API_BASE = 'https://api.audiospliter.com/api/v1';

async function audiospliterRequest(path, options = {}) {
const response = await fetch(`${API_BASE}${path}`, {
...options,
headers: {
'X-API-Key': process.env.AUDIOSPLITER_API_KEY,
'Content-Type': 'application/json',
...options.headers,
},
});

if (!response.ok) {
const error = await response.json();
throw new Error(`${error.error.code}: ${error.error.message}`);
}

if (response.status === 204) return null;
return response.json();
}

Create a Split Job

const job = await audiospliterRequest('/splits', {
method: 'POST',
body: JSON.stringify({
sourceUrl: 'https://example.com/audio.mp3',
splitMode: 'duration',
segmentDuration: 600,
outputFormat: 'mp3',
}),
});

console.log(`Job created: ${job.id}`);

Poll for Completion

async function waitForCompletion(jobId, intervalMs = 5000, timeoutMs = 300000) {
const start = Date.now();

while (Date.now() - start < timeoutMs) {
const job = await audiospliterRequest(`/splits/${jobId}`);

if (job.status === 'completed') return job;
if (job.status === 'failed') throw new Error(`Job failed: ${job.error?.message}`);

await new Promise(resolve => setTimeout(resolve, intervalMs));
}

throw new Error('Timeout waiting for job completion');
}

const completed = await waitForCompletion(job.id);
console.log(`Got ${completed.segments.length} segments`);

Download Segments

import { writeFile } from 'fs/promises';

async function downloadSegments(job, outputDir = './segments') {
for (const segment of job.segments) {
const response = await fetch(segment.downloadUrl);
const buffer = Buffer.from(await response.arrayBuffer());
const filename = `${outputDir}/segment-${segment.index}.mp3`;
await writeFile(filename, buffer);
console.log(`Downloaded ${filename} (${buffer.length} bytes)`);
}
}

List Recent Jobs

const { data, pagination } = await audiospliterRequest('/splits?limit=10&status=completed');
console.log(`${pagination.total} total jobs`);
data.forEach(job => console.log(`${job.id}: ${job.status}`));

Full Example: Split and Download

import { mkdir } from 'fs/promises';

async function splitAndDownload(sourceUrl, segmentDuration) {
// Create job
const job = await audiospliterRequest('/splits', {
method: 'POST',
body: JSON.stringify({ sourceUrl, splitMode: 'duration', segmentDuration }),
});
console.log(`Job ${job.id} queued`);

// Wait for completion
const completed = await waitForCompletion(job.id);
console.log(`Job completed: ${completed.segments.length} segments`);

// Download
await mkdir('./output', { recursive: true });
await downloadSegments(completed, './output');
console.log('All segments downloaded');
}

await splitAndDownload('https://example.com/podcast.mp3', 600);