API Reference
Playlists
API reference for Playlist endpoints — list, search, and retrieve curated quote collections.
Playlists are curated collections of quotes. They can be community-created or officially curated by the Quote Gallery team. Use these endpoints to browse, search, and fetch the quotes inside a playlist.
List Playlists
GET /api/v1/playlists
| Parameter | Type | Default | Description |
|---|---|---|---|
search | string | Case-insensitive partial name match | |
categories | string | Comma-separated category slugs. Matches any (OR logic) | |
limit | number | 20 | Results per page (max 100) |
offset | number | 0 | Pagination offset |
curl -H "X-API-Key: your_api_key_here" \
"https://quotegallery.nl/api/v1/playlists?search=motivational&limit=5"
const response = await fetch(
'https://quotegallery.nl/api/v1/playlists?search=motivational&limit=5',
{ headers: { 'X-API-Key': process.env.QUOTE_GALLERY_API_KEY } }
)
const { data, pagination } = await response.json()
import requests, os
response = requests.get(
'https://quotegallery.nl/api/v1/playlists',
headers={'X-API-Key': os.environ['QUOTE_GALLERY_API_KEY']},
params={'search': 'motivational', 'limit': 5}
)
data = response.json()
{
"data": [
{
"id": "playlist123",
"name": "Motivational Mornings",
"description": "Start your day with inspiration",
"iconUrl": "https://...",
"bannerUrl": "https://...",
"categories": ["inspirational", "success"],
"likeCount": 89,
"quoteCount": 25,
"creatorName": "quotefan",
"isCurated": false
}
],
"pagination": { "total": 12, "limit": 5, "offset": 0, "hasMore": true }
}
| Field | Type | Description |
|---|---|---|
data[].id | string | Unique playlist identifier |
data[].name | string | Display name |
data[].description | string | Theme or purpose |
data[].iconUrl | string | null | Icon image URL |
data[].bannerUrl | string | null | Banner image URL |
data[].categories | string[] | Category slugs |
data[].likeCount | number | Number of likes |
data[].quoteCount | number | Number of quotes |
data[].creatorName | string | Creator's display name |
data[].isCurated | boolean | Officially curated by Quote Gallery |
Get Playlist by ID
Returns a single playlist. Pass include_quotes=true to embed the quotes in the response.
GET /api/v1/playlists/:id
| Parameter | Type | Default | Description |
|---|---|---|---|
include_quotes | boolean | false | Embed the playlist's quotes in the response |
language | string | Preferred language for quote texts (applies when include_quotes=true) |
curl -H "X-API-Key: your_api_key_here" \
"https://quotegallery.nl/api/v1/playlists/playlist123?include_quotes=true&language=en"
const response = await fetch(
`https://quotegallery.nl/api/v1/playlists/playlist123?include_quotes=true&language=en`,
{ headers: { 'X-API-Key': process.env.QUOTE_GALLERY_API_KEY } }
)
const { data: playlist } = await response.json()
console.log(`${playlist.name} — ${playlist.quoteCount} quotes`)
playlist.quotes?.forEach((q) => console.log(` "${q.text}" — ${q.author.name}`))
import requests, os
response = requests.get(
'https://quotegallery.nl/api/v1/playlists/playlist123',
headers={'X-API-Key': os.environ['QUOTE_GALLERY_API_KEY']},
params={'include_quotes': 'true', 'language': 'en'}
)
playlist = response.json()['data']
{
"data": {
"id": "playlist123",
"name": "Motivational Mornings",
"description": "Start your day with inspiration",
"iconUrl": "https://...",
"bannerUrl": "https://...",
"categories": ["inspirational", "success"],
"likeCount": 89,
"quoteCount": 25,
"creatorName": "quotefan",
"isCurated": false,
"quotes": [
{
"id": "abc123",
"text": "The only way to do great work is to love what you do.",
"language": "en",
"categories": ["wisdom"],
"likeCount": 42,
"author": { "id": "xyz789", "name": "Steve Jobs" }
}
]
}
}
The quotes field is only present when include_quotes=true. Each quote includes id, text, language, categories, likeCount, and author.
| Status | Description |
|---|---|
404 | Playlist ID not found or not publicly visible |
401 | Missing or invalid API key |
Examples
Playlist slideshow
Fetch a playlist with quotes and cycle through them:
async function createSlideshow(apiKey, playlistId) {
const response = await fetch(
`https://quotegallery.nl/api/v1/playlists/${playlistId}?include_quotes=true&language=en`,
{ headers: { 'X-API-Key': apiKey } }
)
const { data: playlist } = await response.json()
let index = 0
return {
name: playlist.name,
next: () => playlist.quotes[index++ % playlist.quotes.length],
total: playlist.quotes.length,
}
}
Feature only curated playlists
The API doesn't filter by isCurated directly, so filter client-side after fetching:
async function getCuratedPlaylists(apiKey) {
const response = await fetch(
'https://quotegallery.nl/api/v1/playlists?limit=100',
{ headers: { 'X-API-Key': apiKey } }
)
const { data } = await response.json()
return data.filter((p) => p.isCurated)
}
For a no-code alternative, use the Iframe Embed to display a playlist as an animated slideshow — just pass the
playlist_id via embedToken.