Media and playlists
Get playlist by slug (deprecated)
deprecated
Deprecated: use Get playlist by slug. Looks up the playlist named by library.id (its slug or id) in the request body. Unlike Get playlist by slug, product prices are not resolved for a country. Send the shop in metadata.fluid_shop (404 when it does not resolve) and optionally a locale in metadata.fluid_locale as <language>_<COUNTRY>, for example en_US; without one the company’s default language and country are used. Translatable text is returned in that language. No authentication is required. Returns 404 when no playlist matches.
POST
/
api
/
public
/
v2025-06
/
playlists
Get playlist by slug (deprecated)
curl --request POST \
--url https://api.fluid.app/api/public/v2025-06/playlists \
--header 'Content-Type: application/json' \
--data '
{
"library": {
"id": "new-rep-onboarding"
},
"metadata": {
"fluid_shop": "dunder-mifflin.fluid.app",
"fluid_session": "fs_7kQx9mR2vWbT4nHcJ8pLz3",
"fluid_locale": "en_US",
"attribution": {
"username": "dwight-schrute"
}
}
}
'import requests
url = "https://api.fluid.app/api/public/v2025-06/playlists"
payload = {
"library": { "id": "new-rep-onboarding" },
"metadata": {
"fluid_shop": "dunder-mifflin.fluid.app",
"fluid_session": "fs_7kQx9mR2vWbT4nHcJ8pLz3",
"fluid_locale": "en_US",
"attribution": { "username": "dwight-schrute" }
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
library: {id: 'new-rep-onboarding'},
metadata: {
fluid_shop: 'dunder-mifflin.fluid.app',
fluid_session: 'fs_7kQx9mR2vWbT4nHcJ8pLz3',
fluid_locale: 'en_US',
attribution: {username: 'dwight-schrute'}
}
})
};
fetch('https://api.fluid.app/api/public/v2025-06/playlists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/public/v2025-06/playlists",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'library' => [
'id' => 'new-rep-onboarding'
],
'metadata' => [
'fluid_shop' => 'dunder-mifflin.fluid.app',
'fluid_session' => 'fs_7kQx9mR2vWbT4nHcJ8pLz3',
'fluid_locale' => 'en_US',
'attribution' => [
'username' => 'dwight-schrute'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/public/v2025-06/playlists"
payload := strings.NewReader("{\n \"library\": {\n \"id\": \"new-rep-onboarding\"\n },\n \"metadata\": {\n \"fluid_shop\": \"dunder-mifflin.fluid.app\",\n \"fluid_session\": \"fs_7kQx9mR2vWbT4nHcJ8pLz3\",\n \"fluid_locale\": \"en_US\",\n \"attribution\": {\n \"username\": \"dwight-schrute\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/public/v2025-06/playlists")
.header("Content-Type", "application/json")
.body("{\n \"library\": {\n \"id\": \"new-rep-onboarding\"\n },\n \"metadata\": {\n \"fluid_shop\": \"dunder-mifflin.fluid.app\",\n \"fluid_session\": \"fs_7kQx9mR2vWbT4nHcJ8pLz3\",\n \"fluid_locale\": \"en_US\",\n \"attribution\": {\n \"username\": \"dwight-schrute\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/public/v2025-06/playlists")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"library\": {\n \"id\": \"new-rep-onboarding\"\n },\n \"metadata\": {\n \"fluid_shop\": \"dunder-mifflin.fluid.app\",\n \"fluid_session\": \"fs_7kQx9mR2vWbT4nHcJ8pLz3\",\n \"fluid_locale\": \"en_US\",\n \"attribution\": {\n \"username\": \"dwight-schrute\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"library": {
"id": 512,
"slug": "new-rep-onboarding",
"custom_slug": true,
"title": "New rep onboarding",
"library_items": [
{
"type": "Medium",
"item": {
"id": 7731,
"slug": "scranton-branch-tour",
"title": "A tour of the Scranton branch",
"kind": "video",
"media_type": "share",
"video_url": "https://cdn.fluid.app/uploads/dunder-mifflin/media/scranton-branch-tour/tour.mp4",
"duration": 186,
"canonical_url": "https://shop.dundermifflin.com/home/media/scranton-branch-tour"
}
},
{
"type": "Product",
"item": {
"id": 30412,
"title": "Dunder Mifflin 20lb Copy Paper",
"sku": "DM-20LB-CASE",
"price": "54.99",
"canonical_url": "https://shop.dundermifflin.com/home/products/20lb-copy-paper"
}
}
],
"products": [
{
"id": 30412,
"title": "Dunder Mifflin 20lb Copy Paper",
"image_url": "https://cdn.fluid.app/uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"image_path": "uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"cv": "40.0",
"tax": "0.0",
"sku": "DM-20LB-CASE",
"metadata": {},
"external_id": null,
"canonical_url": "https://shop.dundermifflin.com/home/products/20lb-copy-paper",
"price": "54.99",
"introduction": "The paper that keeps Scranton running.",
"price_in_currency": "$54.99",
"tax_in_currency": "$0.00",
"cv_in_currency": "40.0",
"metafields": [],
"variants": [
{
"id": 91544,
"title": "Case of 10 reams",
"display_name": "Dunder Mifflin 20lb Copy Paper - Case of 10 reams",
"image_url": "https://cdn.fluid.app/uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"image_path": "uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"sku": "DM-20LB-CASE",
"primary_image": "https://cdn.fluid.app/uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"price": "54.99",
"price_in_currency": "$54.99",
"currency_code": "USD",
"options": [
{
"title": "Pack size",
"value": "Case of 10 reams"
}
]
}
]
}
],
"enrollment_packs": [
{
"id": 2204,
"title": "Paper Sales Starter Kit",
"status": "active",
"image_thumbnail_url": "https://cdn.fluid.app/uploads/dunder-mifflin/enrollment-packs/starter-kit/thumb.jpg"
}
]
},
"metadata": {
"fluid_shop": "dunder-mifflin.fluid.app",
"fluid_session": "fs_7kQx9mR2vWbT4nHcJ8pLz3",
"fluid_locale": "en_US",
"request_uuid": "3e7b1c95-6a4d-4f28-b9e3-0d5c8a2f6b17",
"timestamp": "2026-09-14T15:30:46Z"
}
}⌘I
Get playlist by slug (deprecated)
curl --request POST \
--url https://api.fluid.app/api/public/v2025-06/playlists \
--header 'Content-Type: application/json' \
--data '
{
"library": {
"id": "new-rep-onboarding"
},
"metadata": {
"fluid_shop": "dunder-mifflin.fluid.app",
"fluid_session": "fs_7kQx9mR2vWbT4nHcJ8pLz3",
"fluid_locale": "en_US",
"attribution": {
"username": "dwight-schrute"
}
}
}
'import requests
url = "https://api.fluid.app/api/public/v2025-06/playlists"
payload = {
"library": { "id": "new-rep-onboarding" },
"metadata": {
"fluid_shop": "dunder-mifflin.fluid.app",
"fluid_session": "fs_7kQx9mR2vWbT4nHcJ8pLz3",
"fluid_locale": "en_US",
"attribution": { "username": "dwight-schrute" }
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
library: {id: 'new-rep-onboarding'},
metadata: {
fluid_shop: 'dunder-mifflin.fluid.app',
fluid_session: 'fs_7kQx9mR2vWbT4nHcJ8pLz3',
fluid_locale: 'en_US',
attribution: {username: 'dwight-schrute'}
}
})
};
fetch('https://api.fluid.app/api/public/v2025-06/playlists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/public/v2025-06/playlists",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'library' => [
'id' => 'new-rep-onboarding'
],
'metadata' => [
'fluid_shop' => 'dunder-mifflin.fluid.app',
'fluid_session' => 'fs_7kQx9mR2vWbT4nHcJ8pLz3',
'fluid_locale' => 'en_US',
'attribution' => [
'username' => 'dwight-schrute'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/public/v2025-06/playlists"
payload := strings.NewReader("{\n \"library\": {\n \"id\": \"new-rep-onboarding\"\n },\n \"metadata\": {\n \"fluid_shop\": \"dunder-mifflin.fluid.app\",\n \"fluid_session\": \"fs_7kQx9mR2vWbT4nHcJ8pLz3\",\n \"fluid_locale\": \"en_US\",\n \"attribution\": {\n \"username\": \"dwight-schrute\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/public/v2025-06/playlists")
.header("Content-Type", "application/json")
.body("{\n \"library\": {\n \"id\": \"new-rep-onboarding\"\n },\n \"metadata\": {\n \"fluid_shop\": \"dunder-mifflin.fluid.app\",\n \"fluid_session\": \"fs_7kQx9mR2vWbT4nHcJ8pLz3\",\n \"fluid_locale\": \"en_US\",\n \"attribution\": {\n \"username\": \"dwight-schrute\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/public/v2025-06/playlists")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"library\": {\n \"id\": \"new-rep-onboarding\"\n },\n \"metadata\": {\n \"fluid_shop\": \"dunder-mifflin.fluid.app\",\n \"fluid_session\": \"fs_7kQx9mR2vWbT4nHcJ8pLz3\",\n \"fluid_locale\": \"en_US\",\n \"attribution\": {\n \"username\": \"dwight-schrute\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"library": {
"id": 512,
"slug": "new-rep-onboarding",
"custom_slug": true,
"title": "New rep onboarding",
"library_items": [
{
"type": "Medium",
"item": {
"id": 7731,
"slug": "scranton-branch-tour",
"title": "A tour of the Scranton branch",
"kind": "video",
"media_type": "share",
"video_url": "https://cdn.fluid.app/uploads/dunder-mifflin/media/scranton-branch-tour/tour.mp4",
"duration": 186,
"canonical_url": "https://shop.dundermifflin.com/home/media/scranton-branch-tour"
}
},
{
"type": "Product",
"item": {
"id": 30412,
"title": "Dunder Mifflin 20lb Copy Paper",
"sku": "DM-20LB-CASE",
"price": "54.99",
"canonical_url": "https://shop.dundermifflin.com/home/products/20lb-copy-paper"
}
}
],
"products": [
{
"id": 30412,
"title": "Dunder Mifflin 20lb Copy Paper",
"image_url": "https://cdn.fluid.app/uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"image_path": "uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"cv": "40.0",
"tax": "0.0",
"sku": "DM-20LB-CASE",
"metadata": {},
"external_id": null,
"canonical_url": "https://shop.dundermifflin.com/home/products/20lb-copy-paper",
"price": "54.99",
"introduction": "The paper that keeps Scranton running.",
"price_in_currency": "$54.99",
"tax_in_currency": "$0.00",
"cv_in_currency": "40.0",
"metafields": [],
"variants": [
{
"id": 91544,
"title": "Case of 10 reams",
"display_name": "Dunder Mifflin 20lb Copy Paper - Case of 10 reams",
"image_url": "https://cdn.fluid.app/uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"image_path": "uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"sku": "DM-20LB-CASE",
"primary_image": "https://cdn.fluid.app/uploads/dunder-mifflin/products/20lb-copy-paper/case.jpg",
"price": "54.99",
"price_in_currency": "$54.99",
"currency_code": "USD",
"options": [
{
"title": "Pack size",
"value": "Case of 10 reams"
}
]
}
]
}
],
"enrollment_packs": [
{
"id": 2204,
"title": "Paper Sales Starter Kit",
"status": "active",
"image_thumbnail_url": "https://cdn.fluid.app/uploads/dunder-mifflin/enrollment-packs/starter-kit/thumb.jpg"
}
]
},
"metadata": {
"fluid_shop": "dunder-mifflin.fluid.app",
"fluid_session": "fs_7kQx9mR2vWbT4nHcJ8pLz3",
"fluid_locale": "en_US",
"request_uuid": "3e7b1c95-6a4d-4f28-b9e3-0d5c8a2f6b17",
"timestamp": "2026-09-14T15:30:46Z"
}
}