Skip to content

Songpot API Documentation

Welcome to the Songpot Tagging and Search API. Build advanced music search and discovery features into your applications.

What is Songpot?

Songpot provides state-of-the-art AI-powered music analysis and search, including:

  • Automatic Music Tagging - Genre, mood, and instrument classification
  • Music Captioning - Music description in natural language
  • BPM & Key Detection - Precise musical attributes
  • Semantic Search - Find music by describing what you need
  • Audio Matching - Find similar tracks by audio
  • Video-to-Audio Search - Find the perfect soundtrack for your video content
SectionDescription
Getting StartedSet up authentication and make your first request
Audio Tagging and CaptioningAnalyze audio files for tags and captions
Text SearchSearch your music library with text
Audio Similarity SearchFind similar tracks by audio
Video SearchMatch music to video content
ReferenceSupported formats, filters, and error codes

Getting Started

Get Your API Key

  1. Sign in at songpot.ai
  2. Click your profile and go to Settings
  3. Select the API Keys tab
  4. Click Create Key and copy your key

Base URL

https://api.songpot.space/api/v1

Authentication

All API requests require authentication using an API key:

Terminal window
curl https://api.songpot.space/api/v1/tracks \
-H "X-API-Key: songpot_live_YOUR_KEY_HERE"

Your First Request

List your uploaded tracks:

Terminal window
curl https://api.songpot.space/api/v1/tracks \
-H "X-API-Key: songpot_live_YOUR_KEY_HERE"

Response:

{
"total": 42,
"page": 1,
"per_page": 20,
"tracks": [
{
"id": "abc123",
"name": "Summer Vibes",
"duration": 185.4,
"bpm": 124.0,
"key": "cMajor"
}
]
}

Get Track Details

For full metadata, request a specific track:

Terminal window
curl https://api.songpot.space/api/v1/tracks/abc123 \
-H "X-API-Key: songpot_live_YOUR_KEY_HERE"

Response:

{
"track": {
"id": "abc123",
"name": "Summer Vibes",
"bpm": 124.0,
"key": "cMajor",
"duration": 185.4,
"vocal_gender": "Female",
"genres": ["Electronic", "Pop", "House"],
"moods": ["Energetic", "Happy"],
"instruments": ["Synths", "Drums"],
"description": "Upbeat electronic track with tropical vibes",
"created_at": "2026-01-15T10:30:00Z"
}
}

API Endpoints

EndpointMethodDescription
/api/v1/tracksGETList your tracks
/api/v1/tracks/{id}GETGet track details
/api/v1/tracks/{id}/similar-audioGETGet most similar tracks in library
/api/v1/searchGETSearch with text and filters
/api/v1/search-by-audioGETFind similar tracks by audio
/api/v1/search-by-videoPOSTFind matching tracks by video

Rate Limits

TierRequests/HourDaily Uploads
Free10015
Pro1,000100
Enterprise10,000Unlimited

Every response includes rate limit headers:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 85
X-RateLimit-Reset: 1703000000

Code Examples

Python

import requests
API_KEY = "songpot_live_YOUR_KEY_HERE"
BASE_URL = "https://api.songpot.space/api/v1"
headers = {"X-API-Key": API_KEY}
# List tracks
response = requests.get(f"{BASE_URL}/tracks", headers=headers)
tracks = response.json()["tracks"]
# Search for upbeat music with filters
response = requests.get(
f"{BASE_URL}/search",
params={"q": "upbeat summer", "moods": "Energetic", "genres": "Pop"},
headers=headers
)
results = response.json()
# Natural language search (semantic search is automatic fallback)
response = requests.get(
f"{BASE_URL}/search",
params={"q": "relaxing piano for studying"},
headers=headers
)
results = response.json()
# results["search_method"] will be "semantic" if AI search was used

JavaScript

const API_KEY = 'songpot_live_YOUR_KEY_HERE';
const BASE_URL = 'https://api.songpot.space/api/v1';
const headers = { 'X-API-Key': API_KEY };
// List tracks
const tracks = await fetch(`${BASE_URL}/tracks`, { headers })
.then(res => res.json());
// Search for upbeat music with filters
const searchParams = new URLSearchParams({
q: 'upbeat summer',
moods: 'Energetic',
genres: 'Pop'
});
const results = await fetch(`${BASE_URL}/search?${searchParams}`, { headers })
.then(res => res.json());
// Natural language search (semantic search is automatic fallback)
const nlParams = new URLSearchParams({
q: 'relaxing piano for studying'
});
const nlResults = await fetch(`${BASE_URL}/search?${nlParams}`, { headers })
.then(res => res.json());

Next Steps


Support

Need help? Contact us: