Spotify for Creators API (Unofficial)¶
Unofficial API — Use at your own risk
This documentation covers unofficial, reverse-engineered internal APIs used by Spotify for Creators (formerly Anchor.fm). These APIs are undocumented and may change or break without notice. The authors are not affiliated with Spotify.
This site documents the internal HTTP and GraphQL APIs powering Spotify for Creators (formerly Anchor.fm), discovered through browser traffic analysis, GraphQL schema introspection, and JavaScript bundle AST analysis.
Last research: 2026-06-12
Platform change (2026-06-11): Plays redefined
On 2026-06-11 Spotify redefined Plays as 30+ seconds listened = 1 play, aligning with the AMP industry standard. The S4C dashboard headline metric switched from Streams + Downloads to Plays + Downloads (all platforms); the old metric was demoted to "reference" status. New features shipped alongside: an Engagement tab (consumption time, retention, completion rates), benchmarks (percentile comparison), and audience segments (core fans / new / returning). Metric semantics documented before this date may reflect the old definitions — see the Changelog.
Architecture Overview¶
Spotify for Creators runs on two distinct backend systems that are used together:
Spotify for Creators (creators.spotify.com)
│
├─ anchor.fm Internal REST API (api-v5.anchor.fm)
│ └─ Episode read/write, show settings, user state
│ ← Still active post-Anchor acquisition. Callable with Python + requests.
│
├─ GraphQL API (creators-graph.spotify.com/v2/graph-pq)
│ └─ Analytics, comments, transcripts, chapters, etc.
│ ← New features are migrating here.
│
├─ Next.js Data API (creators.spotify.com/interactivity/_next/data/)
│ └─ SSR data fetch for the comments page
│
└─ spotifyconnector / generic.wg.spotify.com/podcasters/v0
└─ Bearer token retrieval, episode list (unofficial Python library)
When to use which¶
| Goal | Use |
|---|---|
| Read/write episode title, description, or publish date | anchor.fm REST API |
| Fetch analytics, comments, or transcripts | GraphQL API |
| Obtain a Bearer token | spotifyconnector library |
Quick Start¶
from spotifyconnector import SpotifyConnector
import requests
# 1. Obtain a Bearer token
connector = SpotifyConnector(
base_url="https://generic.wg.spotify.com/podcasters/v0",
client_id="05a1371ee5194c27860b3ff3ff3979d2",
podcast_id="YOUR_SHOW_ID",
sp_dc="YOUR_SP_DC",
sp_key="YOUR_SP_KEY",
)
connector._authenticate()
bearer = connector._bearer
# 2. Fetch episode overview
anchor_id = 123456789 # see ID Conversion (1-A)
r = requests.get(
f"https://api-v5.anchor.fm/v3/episodes/{anchor_id}/overview"
"?isMumsCompatible=true&returnWebIds=true",
headers={"Authorization": f"Bearer {bearer}", "Accept": "application/json"},
)
print(r.json())
See Authentication for how to obtain sp_dc / sp_key and a Bearer token.
Pages in This Documentation¶
| Page | Contents |
|---|---|
| Authentication | Obtaining sp_dc / sp_key cookies and Bearer tokens |
| REST API | All anchor.fm REST endpoints (1-A through 1-Z, including episode delete) |
| GraphQL API | All GraphQL queries and mutations — analytics (overview / engagement / retention / audience growth / benchmarks / discovery funnel / AI insights), comments, transcripts, chapters |
| Recipes | End-to-end Python implementation examples |
| Browser Automation | Playwright recipes for UI-only operations |
| Changelog | Research dates and update history |
Research Methodology¶
Endpoints were discovered through three complementary methods:
- Browser traffic capture — injecting JavaScript
fetchandXHRinterceptors via DevTools, capturing live traffic, and performing real operations (episode create, update, delete, comment approve/delete/reply, pin, block) on a test show to capture mutation payloads - GraphQL schema introspection + live queries against a production show
- JavaScript bundle AST analysis — extracting GraphQL operation ASTs from the S4C analytics microfrontend bundle
Initial research: 2026-05-25 to 2026-05-26 / Last research: 2026-06-12 (see Changelog)
Contact¶
Found an error or noticed an API change? Feel free to reach out on X (Twitter): @HiguchiKi