Developers

Fablesh Media Catalog API

Public catalog, podcast and media endpoints for Fablesh, Creator Studio and partner integrations. Read endpoints are public; write actions require an API key.

REST catalog APIR2 media storageMCP ready surface

Base URL

https://api.fablesh.com

Public readsHealth, catalog summaries, podcasts and media details are available without an API key.
Protected writesUploads, publishing, repair jobs and mutations require x-api-key or an admin token.

Public API

Read endpoints

GET/health
Health

API, storage and database status.

GET/api/catalog/artists
List artists

All catalog artists. Filter with ?q=. Slim rows without track arrays.

GET/api/catalog/artists/{slug}
Get artist

One artist with bio, image, Spotify link and all releases.

GET/api/catalog/releases
List releases

All releases. Filter with ?type=single|ep|album, ?artist={slug}, ?q=.

GET/api/catalog/releases/{id}
Get release

One release: tracks, artwork, UPC, label, release date, Spotify link.

GET/api/catalog/tracks
List tracks

All tracks. Filter with ?artist=, ?release=, ?q= (matches ISRC too).

GET/api/catalog/tracks/{id}
Get track

One track: audio URL, ISRC, duration, play count, Spotify link.

GET/api/catalog/summary
Catalog summary

Everything in one payload: { artists, releases, tracks }. Aliases: /api/public/catalog/summary, /api/v1/catalog/summary.

GET/api/catalog/artist-names
Artist names

Lightweight autocomplete list: name, slug, trackCount.

GET/api/catalog/playlists/auto
Auto playlists

Algorithmic playlists that grow by themselves: most played, radio favourites, fresh drops, hidden gems, genre mixes, daily mix.

GET/api/catalog/playlists/auto/{id}
Get auto playlist

One auto playlist with its current tracks.

POST/api/tracks/{id}/play
Count a play

Increments the play counter. Called automatically by the web player.

GET/api/radio/stations
List all stations

Both broadcast stations and the algorithmic playlists, marked kind: live | playlist.

GET/api/radio/live
Live now playing

Now playing, listeners and recent history for Radio Uppsala and Radio Roslagen. Normalised, so no AzuraCast call needed.

GET/api/radio/stations/{id}
Get station queue

The station's tracks, spread so no artist repeats back to back. Order is stable for a day. ?limit= up to 200.

GET/podcasts
List podcasts

All public shows.

GET/podcasts/{id}
Get podcast

One show with metadata and artwork.

GET/podcasts/{id}/episodes
List episodes

Episodes for a show.

GET/rss/{slug}.xml
Podcast RSS

Public RSS feed per show, ready for podcast apps.

GET/api/assets
List assets

Uploaded media assets with metadata and processing status.

GET/api/assets/{id}
Get asset

One asset including variants and metadata.

GET/api/hub/feed
Creator feed

The Creator Hub feed. Public read; posting requires sign-in.

GET/api/hub/collaborators
Collaborator directory

Published collaborator profiles.

GET/api/hub/marketplace
Marketplace

Services offered by creators.

Protected

Write endpoints

POST/api/assets/direct-upload-url
Direct upload URL

Presigned PUT URL for direct-to-R2 audio upload.

POST/api/assets/complete-direct-upload
Complete direct upload

Registers a finished upload and queues processing.

POST/api/import
Import from URL

Imports audio from a source URL.

POST/api/images/upload
Upload image

Multipart image upload (artwork, artist photos) to R2.

POST/api/hub/files/upload-url
Project file upload URL

Presigned PUT URL for Creator Hub project files (audio, artwork, PDF…).

PATCH/api/catalog/artists/{id}
Update artist

Name and image.

PATCH/api/catalog/releases/{id}
Update release

Title, type, label, release date, UPC, genres, artwork URL.

PATCH/api/catalog/tracks/{id}
Update track

Title, track number, ISRC, duration.

DELETE/api/catalog/releases/{id}
Delete release

Removes a release and its tracks. Storage files are kept.

DELETE/api/catalog/tracks/{id}
Delete track

Removes a track; empty releases are removed too.

POST/api/catalog/dedupe
Deduplicate catalog

Removes uploaded duplicates of catalog tracks. Dry run by default; { "apply": true } deletes.

POST/api/catalog/tracks/{id}/attach-audio
Attach audio

Attaches an uploaded audio file to a catalog track.

POST/api/artwork/auto
Auto artwork

Finds an official cover (Deezer) or generates one (AI), stores it in R2.

PATCH/api/assets/{id}/metadata
Update asset metadata

Title, artist, release, ISRC, artwork URL and more.

DELETE/api/assets/{id}
Delete asset

Removes the record — audio files stay in storage.

POST/api/assets/{id}/transcode
Transcode asset

Queues processing for uploaded media.

POST/api/assets/{id}/publish/{destination}
Publish asset

Queues distribution, e.g. destination radio-uppsala.

POST/api/hub/releases/{id}/distribute
Distribute release

Queues radio distribution for a release's tracks.

POST/podcasts
Create podcast

Creates a show.

POST/podcasts/import/rss
Import podcast from RSS

Imports an existing show — episodes and artwork included; optional ongoing sync.

POST/podcasts/{id}/episodes
Create episode

Adds an episode. Audio via …/audio/upload-url, then …/process and …/publish.

POST/podcasts/artwork/backfill
Backfill episode artwork

Re-reads the source feeds and pulls in per-episode images that were missing.

POST/api/podcasts/artwork/consolidate
Consolidate podcast artwork

Moves show and episode covers into the image bucket. ?apply=true to write.

POST/podcasts/audio/purge-hosted
Purge hosted podcast audio

Removes audio we used to host; episodes link to the publisher's own file. ?apply=true to write.

POST/api/catalog/artwork/mirror
Mirror artwork into our bucket

Pulls album, single, release, artist and track art hosted elsewhere into fablesh-images. Runs automatically every 30 min; ?apply=true forces a full pass.

POST/api/catalog/artwork/migrate-legacy
Migrate legacy artwork

Fetches artwork still hosted on the retired Lovable storage. ?apply=true to write.

POST/api/artwork/auto
Generate or fetch cover art

Finds a cover on Deezer, reuses release art, or generates one with AI. Returns 202 and applies it when done.

GET/api/hub/projects
List projects

Your Creator Hub projects. Create with POST; update/delete on /{id}.

POST/api/hub/feed
Publish post

Publishes a feed post. Like via /{id}/like, reply via /{id}/comments.

GET/api/hub/notifications
Notifications

Radio plays, finished renders, requests. Mark read via POST …/read.

GET/api/hub/radio/plays
Radio play statistics

Totals, per station, top tracks and recent plays of your catalog.

POST/api/hub/collaborators
Publish collaborator profile

Creates or updates your directory profile.

POST/api/hub/marketplace
Publish service

Puts a service up for sale.

POST/api/hub/requests
Send request

Sends an inquiry to another creator. GET lists sent and received.

GET/api/hub/studio/events
Studio live events

Job feed over Server-Sent Events. Token as ?token= query parameter.

GET/api/me/export
Export my data

GDPR export of your account, roles and playlists as JSON.

DELETE/api/me
Delete my account

Permanently removes your account, playlists and roles.

GET/api/audit
Audit log

Trail of all write operations (who, what, when, outcome).

Examples

Try it with curl

Check API health
curl https://api.fablesh.com/health
Fetch catalog summary
curl 'https://api.fablesh.com/api/catalog/summary?limit=100'
List podcasts
curl https://api.fablesh.com/podcasts

Next

Recommended API roadmap

Search endpoint

Add /api/public/search?q=... across artists, releases, tracks, podcasts and creators.

MCP docs

Expose tool list, examples and invoke documentation for agent integrations.

Partner keys

Document API scopes such as read:catalog and write:submissions.