Songsterr APIsongsterr.com ↗
Access Songsterr guitar tab notation, song metadata, artist catalogs, and revision history via 7 structured endpoints. Search songs, fetch raw tab data, and more.
What is the Songsterr API?
The Songsterr API exposes 7 endpoints covering song search, artist catalogs, tab notation, and revision history from Songsterr's tab library. The get_tab_data endpoint returns measure-level notation including tuning, capo, frets, strings, and individual beat data for a specific track. Combined with get_song_meta, which surfaces track lists, view counts, tags, and video references, the API gives developers structured access to both the metadata and the raw musical content of any song on the platform.
curl -X GET 'https://api.parse.bot/scraper/00e14379-6131-498c-a1ec-f1635d062d88/search_songs?size=5&query=Wonderwall&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace songsterr-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Songsterr API — search tabs, explore artists, read notation data."""
from parse_apis.songsterr_api import Songsterr, Size, SongNotFound
client = Songsterr()
# Search for songs by query — limit caps total items fetched.
for song in client.songs.search(query="Wonderwall", limit=3):
print(song.title, song.artist, f"tracks={len(song.tracks)}")
# Get full metadata for a single song by ID.
song = client.songs.search(query="Enter Sandman", limit=1).first()
if song:
detail = client.songs.get(song_id=str(song.song_id))
print(detail.title, detail.views, detail.tags)
# Walk the revision history for a fetched song.
for rev in detail.revisions(limit=2):
print(rev.created_at, rev.author.name, rev.description[:60])
# Fetch tab notation data for the song's popular track.
full_tab = detail.tabs.get()
print(full_tab.tab.instrument, full_tab.tab.capo, f"measures={len(full_tab.tab.measures)}")
# Explore an artist's catalog via constructible Artist.
artist = client.artist(artist_id=song.artist_id)
for s in artist.songs(limit=3):
print(s.title, s.has_chords)
# Typed error handling for a non-existent song.
try:
client.songs.get(song_id="999999999")
except SongNotFound as exc:
print(f"Song not found: {exc.song_id}")
# Browse popular/trending songs.
for trending in client.songs.popular(size=Size._5, limit=3):
print(trending.title, trending.artist)
print("exercised: songs.search / songs.get / songs.popular / revisions / tabs.get / artist.songs")
Full-text search over Songsterr's tab catalog. Matches against song title and artist name. Returns paginated results ordered by relevance. Each result includes track listings with instrument, difficulty, and view counts.
| Param | Type | Description |
|---|---|---|
| size | integer | Maximum number of results to return per page. |
| queryrequired | string | Search query string matching song title or artist name. |
| offset | integer | Number of results to skip for pagination. |
{
"type": "object",
"fields": {
"items": "array of song objects with songId, artistId, artist, title, hasChords, hasPlayer, tracks, defaultTrack, popularTrack"
},
"sample": {
"data": {
"items": [
{
"title": "Wonderwall",
"artist": "Oasis",
"isJunk": false,
"songId": 2,
"tracks": [
{
"hash": "guitar_BjHerAr3",
"name": "Noel Gallagher | Lead Guitar",
"views": 114368,
"tuning": [
64,
59,
55,
50,
45,
40
],
"difficulty": 2,
"instrument": "Acoustic Guitar (steel)",
"instrumentId": 25
}
],
"artistId": 2,
"hasChords": true,
"hasPlayer": true,
"defaultTrack": 3,
"popularTrack": 3
}
]
},
"status": "success"
}
}About the Songsterr API
Search and Discovery
The search_songs endpoint accepts a query string and optional size and offset parameters, returning an array of song objects. Each result includes songId, artistId, artist, title, hasChords, hasPlayer, tracks, defaultTrack, and popularTrack. The get_popular_songs endpoint offers the same pagination controls and returns a records array alongside a more boolean so you can page through trending content without guessing whether additional results exist.
Song Metadata and Artist Catalogs
get_song_meta takes a song_id and returns a detailed object: revisionId, image (used as the image_hash input to get_tab_data), tracks, tags, views, videos, and favorites. The get_songs_by_artist endpoint accepts an artist_id — available from any search or metadata response — and returns all songs attributed to that artist in the same summary format as search results.
Tab Notation and Revision History
get_tab_data requires song_id, revision_id, image_hash, and a zero-based track_index. It returns a notation object with name, instrument, instrumentId, tuning, capo, frets, strings, and a measures array containing beat and note data. get_song_revisions returns the full edit history for a song, with each revision object including createdAt, author, description, tracksCount, and a rev field.
Convenience Endpoint
get_full_tab combines the metadata and notation fetch into a single call. Provide a song_id and optionally a track_index; if omitted, it defaults to the song's popularTrack value. The response nests the full meta object alongside the tab notation object, avoiding the need to chain two separate requests.
The Songsterr API is a managed, monitored endpoint for songsterr.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when songsterr.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official songsterr.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a tab library browser that searches songs by name and displays track listings with chord and player availability flags.
- Generate artist discography pages using
get_songs_by_artistwith theartistIdfrom any search result. - Render interactive tab viewers by parsing the
measures, beats, and notes returned byget_tab_data. - Display trending songs in a music discovery feed using
get_popular_songswith cursor-based pagination viaoffsetand themoreflag. - Track edit history and contributor attribution for a specific song using
get_song_revisions. - Populate song detail pages with view counts, tags, linked videos, and favorites from
get_song_meta. - Support instrument-specific filtering in a practice app by inspecting the
instrumentandtuningfields from tab notation responses.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Songsterr have an official public developer API?+
What does `get_tab_data` return, and what inputs does it require?+
get_tab_data returns a notation object for one track of a song, including instrument, tuning, capo, frets, strings, and a measures array with beat and note detail. It requires four inputs: song_id, revision_id, and image_hash (both available from get_song_meta), and a zero-based track_index. If you want the most popular track without looking up the index, use get_full_tab instead, which defaults to the popularTrack value from metadata.Are audio files or playback streams included in the responses?+
get_song_meta includes a videos field with associated video references, and hasPlayer indicates whether a song has a player on Songsterr, but actual audio content is not part of any response. The API covers notation data, metadata, and revision history. You can fork it on Parse and revise to add any additional fields if Songsterr surfaces them elsewhere.Does the API cover user profiles, ratings, or community comments?+
How does pagination work across the search and popular song endpoints?+
search_songs and get_popular_songs both accept size (result count) and offset (number of results to skip) as optional integer parameters. get_popular_songs also returns a more boolean in its response, which tells you directly whether additional pages exist. search_songs does not include a more flag, so you should compare the returned array length against your requested size to determine whether to fetch the next page.