Spotify API endpoint
Returns a Spotify audiobook chapter by `uri` or `id`; chapters are often addressed with `spotify:episode:` identifiers. Fields include name, description, duration, release date, explicit and paywall flags, playability reasons, preview audio URL, cover images and the parent show. An invalid identifier returns 400.
/spotify/chapterReturns a Spotify audiobook chapter using the private Web Player operation that resolves episodes and chapters.
uri: Spotify chapter or episode URI/URL.id: Spotify chapter or episode ID. Used when uri is omitted.Spotify often exposes chapter detail through spotify:episode:* identifiers. The endpoint normalizes the result into the same response shape used by podcast episode detail. Invalid identifiers return 400; upstream private API failures return 503.
| Field | In the sample | Value in the sample |
|---|---|---|
| uri | Has a value | “spotify:episode:2C2Y5kNq7qCVOVhbA0G3os” |
| id | Has a value | |
| type | Has a value | “Episode” |
| name | Has a value | “#2496 - Julia Mossbridge” |
| description | Has a value | 529 characters |
| htmlDescription | Has a value | 712 characters |
| releaseDate | Has a value | 2026-05-08 |
| releaseDatePrecision | Has a value | “MINUTE” |
| durationMs | Has a value | 9,761,982 |
| isExplicit | Has a value | true |
| isPlayable | Has a value | true |
| playabilityReason | Has a value | “PLAYABLE” |
| mediaTypes | Has a value | 2 entries |
| imageUrl | Has a value | i.scdn.co |
| images | Has a value | 3 entries |
| videoThumbnailUrl | Has a value | image-cdn-fa.spotifycdn.com |
| videoThumbnails | Has a value | 2 entries |
| externalUrl | Has a value | open.spotify.com |
| shareUrl | Has a value | open.spotify.com |
| previewAudioUrl | Has a value | p.scdn.co |
| previewAudioUrls | Has a value | 7 entries |
| show.uri | Has a value | “spotify:show:4rOoJ6Egrf8K2IrywzwOMk” |
| show.id | Has a value | |
| show.type | Has a value | “Podcast” |
| show.name | Has a value | “The Joe Rogan Experience” |
| show.showTypes | Has a value | 1 entry |
| show.imageUrl | Has a value | i.scdn.co |
| show.images | Has a value | 3 entries |
| show.externalUrl | Has a value | open.spotify.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| uri | string | No | Spotify chapter or episode URI/URL | spotify:episode:2C2Y5kNq7qCVOVhbA0G3os | |
| id | string | No | Spotify chapter/episode ID | 2C2Y5kNq7qCVOVhbA0G3os | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/spotify/chapter" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"uri": "spotify:episode:example",
"type": "Chapter",
"name": "Chapter 1",
"meta": {
"operationName": "getEpisodeOrChapter",
"fetchedAt": "2026-05-13T20:41:13Z"
}
}
}Request schema
No body schema
Response schema
#/definitions/spotify.episodeResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | spotify.PodcastEpisodeResponse | No | ||||
| data.description | string | No | A new adventure from the Stinky Dragon crew. | Plain-text description of the episode. | ||
| data.durationMs | integer | No | 3600000 | Episode length in milliseconds. | ||
| data.externalUrl | string | No | https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os | Link to the episode on open.spotify.com. | ||
| data.htmlDescription | string | No | A new adventure from the Stinky Dragon crew. | Description of the episode with its HTML formatting. | ||
| data.id | string | No | 2C2Y5kNq7qCVOVhbA0G3os | Spotify ID of the episode. | ||
| data.imageUrl | string | No | https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0 | URL of the main cover image for the episode. | ||
| data.images | array | No | Cover images available for the episode, with their sizes. | |||
| data.images[].height | integer | No | 640 | Image height in pixels. | ||
| data.images[].url | string | No | https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0 | URL of the image. | ||
| data.images[].width | integer | No | 640 | Image width in pixels. | ||
| data.isExplicit | boolean | No | false | Whether Spotify marks the episode as explicit. | ||
| data.isPaywallContent | boolean | No | false | Whether the episode is paywalled content. | ||
| data.isPlayable | boolean | No | true | Whether the episode can be played. | ||
| data.mediaTypes | array | No | AUDIO | Media types the episode is available in, for example `AUDIO`. | ||
| data.meta | object | No | Details about this response. | |||
| data.meta.appVersion | string | No | 1.2.90.403.gf901f20f | Version of the Spotify web player the data was read from. | ||
| data.meta.fetchedAt | string | No | 2026-05-13T20:41:13Z | Time the data was fetched, in UTC (RFC 3339). | ||
| data.meta.operationName | string | No | getEpisodeOrChapter | Name of the Spotify web player operation that returned the data. | ||
| data.meta.sourceUrl | string | No | https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os | URL the data was read from. | ||
| data.name | string | No | Tales from the Stinky Dragon | Episode title as Spotify shows it. | ||
| data.playabilityReason | string | No | PLAYABLE | Reason code Spotify gives for the episode's playability, for example `PLAYABLE`. | ||
| data.previewAudioUrl | string | No | https://p.scdn.co/mp3-preview/example | URL of an audio preview of the episode. | ||
| data.previewAudioUrls | array | No | https://p.scdn.co/mp3-preview/example | URLs of the audio previews available for the episode. | ||
| data.previewVideoUrl | string | No | https://p.scdn.co/video-preview/example | URL of a video preview of the episode. | ||
| data.releaseDate | string | No | 2026-05-13 | Date the episode was released, as Spotify returns it. | ||
| data.releaseDatePrecision | string | No | DAY | How precise the release date is, for example `DAY`. | ||
| data.shareUrl | string | No | https://open.spotify.com/episode/2C2Y5kNq7qCVOVhbA0G3os | Link to the episode that Spotify offers for sharing. | ||
| data.show | object | No | Show the episode belongs to. | |||
| data.show.description | string | No | Tales from the Stinky Dragon is an actual-play comedy podcast. | Description text of the show. | ||
| data.show.externalUrl | string | No | https://open.spotify.com/show/1QQJ7FElLE0K6CIfZNCxU4 | Link to the show on open.spotify.com. | ||
| data.show.id | string | No | 1QQJ7FElLE0K6CIfZNCxU4 | Spotify ID of the show. | ||
| data.show.imageUrl | string | No | https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0 | URL of the main cover image for the show. | ||
| data.show.images | array | No | Cover images available for the show, with their sizes. | |||
| data.show.images[].height | integer | No | 640 | Image height in pixels. | ||
| data.show.images[].url | string | No | https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0 | URL of the image. | ||
| data.show.images[].width | integer | No | 640 | Image width in pixels. | ||
| data.show.mediaType | string | No | MIXED | Kind of media the show carries, for example `MIXED`. | ||
| data.show.name | string | No | Tales from the Stinky Dragon | Show title as Spotify shows it. | ||
| data.show.publisher | string | No | Stinky Dragon | Name of the show's publisher. | ||
| data.show.showTypes | array | No | PODCAST | Show type labels Spotify assigns, for example `PODCAST`. | ||
| data.show.type | string | No | Podcast | Kind of item as Spotify labels it, for example `Podcast`. | ||
| data.show.uri | string | No | spotify:show:1QQJ7FElLE0K6CIfZNCxU4 | Spotify URI of the show. | ||
| data.transcriptCount | integer | No | 1 | Number of transcripts Spotify has for the episode. | ||
| data.type | string | No | Episode | Kind of item as Spotify labels it, for example `Episode`. | ||
| data.unplayabilityReasons | array | No | not_available_in_region | Reasons the episode cannot be played, such as `not_available_in_region`. | ||
| data.uri | string | No | spotify:episode:2C2Y5kNq7qCVOVhbA0G3os | Spotify URI of the episode. | ||
| data.videoThumbnailUrl | string | No | https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0 | URL of the video thumbnail for the episode. | ||
| data.videoThumbnails | array | No | Video thumbnails available for the episode, with their sizes. | |||
| data.videoThumbnails[].height | integer | No | 640 | Image height in pixels. | ||
| data.videoThumbnails[].url | string | No | https://i.scdn.co/image/ab6765630000ba8ab0484f8ee2933eceab32bac0 | URL of the image. | ||
| data.videoThumbnails[].width | integer | No | 640 | Image width in pixels. | ||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/spotify/chapter" \
-H "x-api-key: $CRAWLORA_API_KEY"