Experience the future of audio processing. Our AI removes noise in real-time while preserving every nuance of the original recording.
Podcast Producer
This is insane. Cleans up my remote interviews like magic. Saved me hours of manual editing.
Journalist
The transcription accuracy is unbelievable even with heavy accents. Game changer for my workflow.
Musician
Finally something that removes background noise without destroying the warmth of the recording.
Researcher
Transcribed 50 hours of field recordings with near-perfect accuracy. Worth every penny.
YouTuber
My videos sound professional now. The noise reduction is witchcraft level good.
Audiobook Narrator
Cleans up mouth sounds and background hiss perfectly. My editor loves me now.
Podcast Producer
This is insane. Cleans up my remote interviews like magic. Saved me hours of manual editing.
Journalist
The transcription accuracy is unbelievable even with heavy accents. Game changer for my workflow.
Track your API usage and monitor your monthly limits.
Create a project to get an API key and secret key for integration.
Welcome to Echo Audio API. This comprehensive guide will help you integrate professional audio enhancement into your applications.
To use the Echo API, you need:
How to get credentials:
All API requests require authentication. Include your credentials in the Authorization header:
Authorization: Bearer {PROJECT_ID}:{API_KEY}:{SECRET_KEY}
Example with cURL:
curl -H "Authorization: Bearer proj_abc123:echo_key_xyz:echo_secret_def" \ https://api.echo.audio/v1/enhance
Example with JavaScript Fetch:
const credentials = `${projectId}:${apiKey}:${secretKey}`;
const authHeader = `Bearer ${credentials}`;
fetch('https://api.echo.audio/v1/enhance', {
method: 'POST',
headers: {
'Authorization': authHeader,
'Content-Type': 'application/json'
},
body: formData
});
/api/v1/public/uploadDescription: Upload an audio file for noise removal and enhancement.
Request Parameters:
file (required, multipart/form-data) - Audio file to processSupported formats: WAV, MP3, M4A, FLAC, OGGMax file size: 500MB (Free tier: 50MB)Response:
{
"job_id": "job_abc123xyz",
"status": "processing",
"message": "Audio file received and queued for processing"
}
Example Request:
curl -X POST https://api.echo.audio/api/v1/public/upload \ -H "Authorization: Bearer proj_abc:echo_key_xyz:echo_secret_def" \ -F "file=@recording.wav"
JavaScript Example:
const formData = new FormData();
formData.append('file', audioFile);
const response = await fetch('https://api.echo.audio/api/v1/public/upload', {
method: 'POST',
headers: {
'Authorization': `Bearer ${projectId}:${apiKey}:${secretKey}`
},
body: formData
});
const data = await response.json();
console.log('Job ID:', data.job_id);
/api/v1/public/result/{job_id}Description: Retrieve the results of a processing job.
URL Parameters:
job_id (required) - The job ID returned from upload endpointResponse (Processing):
{
"job_id": "job_abc123xyz",
"status": "processing",
"message": "Your audio is being enhanced"
}
Response (Completed):
{
"job_id": "job_abc123xyz",
"status": "completed",
"text": "Full transcript of the audio...",
"audio_url": "https://storage.echo.audio/...",
"processing_time": 45,
"quality_score": 0.92
}
Response (Failed):
{
"job_id": "job_abc123xyz",
"status": "failed",
"error": "Unsupported audio format"
}
Example Request:
curl -X GET https://api.echo.audio/api/v1/public/result/job_abc123 \ -H "Authorization: Bearer proj_abc:echo_key_xyz:echo_secret_def"
JavaScript Example with Polling:
async function pollResult(jobId) {
let result;
while (true) {
const response = await fetch(
`https://api.echo.audio/api/v1/public/result/${jobId}`,
{
headers: {
'Authorization': `Bearer ${projectId}:${apiKey}:${secretKey}`
}
}
);
result = await response.json();
if (result.status === 'completed') {
console.log('Transcript:', result.text);
return result;
} else if (result.status === 'failed') {
throw new Error(result.error);
}
// Wait 2 seconds before polling again
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
| Code | Meaning |
|---|---|
200 |
Success - Request processed successfully |
400 |
Bad Request - Invalid parameters or malformed request |
401 |
Unauthorized - Invalid or missing credentials |
403 |
Forbidden - Revoked or inactive project |
413 |
Payload Too Large - File exceeds size limit |
429 |
Too Many Requests - Rate limit exceeded |
500 |
Internal Server Error - Server-side error |
| Plan | Requests/Month | Max File Size | Audio Minutes |
|---|---|---|---|
| Free | 100 | 50 MB | 1,000 minutes |
| Pro | 10,000 | 500 MB | Unlimited |
Python Example:
import requests
import time
PROJECT_ID = "proj_abc123"
API_KEY = "echo_key_xyz"
SECRET_KEY = "echo_secret_def"
credentials = f"{PROJECT_ID}:{API_KEY}:{SECRET_KEY}"
headers = {"Authorization": f"Bearer {credentials}"}
# Upload file
with open('recording.wav', 'rb') as f:
response = requests.post(
'https://api.echo.audio/api/v1/public/upload',
headers=headers,
files={'file': f}
)
job_id = response.json()['job_id']
# Poll for results
while True:
response = requests.get(
f'https://api.echo.audio/api/v1/public/result/{job_id}',
headers=headers
)
result = response.json()
if result['status'] == 'completed':
print(f"Transcript: {result['text']}")
break
elif result['status'] == 'failed':
print(f"Error: {result['error']}")
break
time.sleep(2)
Node.js Example:
const fs = require('fs');
const fetch = require('node-fetch');
const PROJECT_ID = 'proj_abc123';
const API_KEY = 'echo_key_xyz';
const SECRET_KEY = 'echo_secret_def';
const credentials = `${PROJECT_ID}:${API_KEY}:${SECRET_KEY}`;
async function processAudio(filePath) {
// Upload
const formData = new FormData();
formData.append('file', fs.createReadStream(filePath));
const uploadRes = await fetch('https://api.echo.audio/api/v1/public/upload', {
method: 'POST',
headers: { 'Authorization': `Bearer ${credentials}` },
body: formData
});
const { job_id } = await uploadRes.json();
// Poll
let completed = false;
while (!completed) {
const resultRes = await fetch(
`https://api.echo.audio/api/v1/public/result/${job_id}`,
{ headers: { 'Authorization': `Bearer ${credentials}` } }
);
const result = await resultRes.json();
if (result.status === 'completed') {
console.log('Transcript:', result.text);
completed = true;
} else if (result.status === 'failed') {
throw new Error(result.error);
}
await new Promise(r => setTimeout(r, 2000));
}
}
processAudio('recording.wav');
For issues, questions, or feature requests, please contact our support team at support@echo.audio
API Status Page: status.echo.audio
Rate Limit Headers: Check response headers for remaining quota:
X-RateLimit-Limit - Total requests allowedX-RateLimit-Remaining - Requests remainingX-RateLimit-Reset - When limit resets (Unix timestamp)