Public Medium by slug
Unauthenticated. Resolves by slug (the canonical public identifier;
matches canonical_url). Show is more permissive than the catalog:
a draft (inactive) or future-scheduled medium still resolves by
direct slug (rendered noindex); only discarded media return 404,
never 403.
curl --request GET \
--url https://api.fluid.app/api/v202604/media/{slug}import requests
url = "https://api.fluid.app/api/v202604/media/{slug}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fluid.app/api/v202604/media/{slug}', 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/v202604/media/{slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/media/{slug}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/v202604/media/{slug}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/media/{slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": 200,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 25,
"prev_cursor": "<string>",
"next_cursor": "<string>"
}
},
"medium": {
"id": 60311,
"slug": "primex-wellness-overview",
"title": "Primex Wellness Overview",
"description": "A short overview of the Primex wellness range.",
"image_url": "https://cdn.fluid.app/media/60311.png",
"canonical_url": "https://acme.fluid.app/home/media/primex-wellness-overview",
"images": {
"thumb": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-600,c-at_max,f-auto,q-75/categories/4821.png",
"width": 600
},
"medium": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-600,c-at_max,f-auto,q-75/categories/4821.png",
"width": 600
},
"large": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-600,c-at_max,f-auto,q-75/categories/4821.png",
"width": 600
}
},
"active": true,
"status": "published",
"publish_at": null,
"seo": {
"title": "Summer Sale — Up to 40% Off",
"description": "Shop the July clearance event before it ends.",
"image_url": "https://ik.imagekit.io/fluidapp/tr:w-1200,h-630,c-maintain_ratio,fo-auto,f-auto,q-80/seo/9215.png",
"indexable": true,
"id": 9215
},
"metafields": [
{
"namespace": "custom",
"key": "material",
"value": "<unknown>",
"value_type": "single_line_text_field",
"description": "The primary material used in this product",
"created_at": "2026-05-01T12:00:00Z",
"updated_at": "2026-05-01T12:00:00Z",
"locked": false
}
],
"languages": [
"en",
"fr"
],
"media_type": "share",
"kind": "video",
"media_format": "mp4",
"visibility": "open",
"video_url": "https://cdn.fluid.app/media/60311.mp4",
"pdf_url": null,
"powerpoint_url": null,
"duration": 312,
"countries": [
"GB",
"US"
],
"tags": [
"wellness",
"launch"
],
"cta": {
"enabled": true,
"action": "link",
"url": "https://primex.com/wellness",
"label": "Shop the range",
"description": "Free shipping on orders over $75.",
"color": "#1F6FEB"
},
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-08T09:30:00Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 25,
"prev_cursor": "<string>",
"next_cursor": "<string>"
}
}
}Path Parameters
The URL slug of the media.
Query Parameters
Response locale. ISO code (e.g. fr, de). When omitted,
responds in the company's default locale. On the public
surface, falls back to en for any translated field missing
in the requested locale.
"fr"
Response
The Medium.
Shared success envelope for list / show / create / update
responses: the resource payload is returned alongside a top-level
integer status and meta. Composed onto each resource response
via allOf.
200
Response metadata included on every successful response body.
request_id and timestamp are always present; list endpoints
also add pagination.
Show child attributes
Show child attributes
Public Medium read shape — the storefront (unauthenticated)
projection. Closed with unevaluatedProperties: false so any
authenticated-only field (notably custom_slug) leaking onto the
public surface is caught in conformance.
Show child attributes
Show child attributes
curl --request GET \
--url https://api.fluid.app/api/v202604/media/{slug}import requests
url = "https://api.fluid.app/api/v202604/media/{slug}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fluid.app/api/v202604/media/{slug}', 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/v202604/media/{slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/media/{slug}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/v202604/media/{slug}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/media/{slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": 200,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 25,
"prev_cursor": "<string>",
"next_cursor": "<string>"
}
},
"medium": {
"id": 60311,
"slug": "primex-wellness-overview",
"title": "Primex Wellness Overview",
"description": "A short overview of the Primex wellness range.",
"image_url": "https://cdn.fluid.app/media/60311.png",
"canonical_url": "https://acme.fluid.app/home/media/primex-wellness-overview",
"images": {
"thumb": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-600,c-at_max,f-auto,q-75/categories/4821.png",
"width": 600
},
"medium": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-600,c-at_max,f-auto,q-75/categories/4821.png",
"width": 600
},
"large": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-600,c-at_max,f-auto,q-75/categories/4821.png",
"width": 600
}
},
"active": true,
"status": "published",
"publish_at": null,
"seo": {
"title": "Summer Sale — Up to 40% Off",
"description": "Shop the July clearance event before it ends.",
"image_url": "https://ik.imagekit.io/fluidapp/tr:w-1200,h-630,c-maintain_ratio,fo-auto,f-auto,q-80/seo/9215.png",
"indexable": true,
"id": 9215
},
"metafields": [
{
"namespace": "custom",
"key": "material",
"value": "<unknown>",
"value_type": "single_line_text_field",
"description": "The primary material used in this product",
"created_at": "2026-05-01T12:00:00Z",
"updated_at": "2026-05-01T12:00:00Z",
"locked": false
}
],
"languages": [
"en",
"fr"
],
"media_type": "share",
"kind": "video",
"media_format": "mp4",
"visibility": "open",
"video_url": "https://cdn.fluid.app/media/60311.mp4",
"pdf_url": null,
"powerpoint_url": null,
"duration": 312,
"countries": [
"GB",
"US"
],
"tags": [
"wellness",
"launch"
],
"cta": {
"enabled": true,
"action": "link",
"url": "https://primex.com/wellness",
"label": "Shop the range",
"description": "Free shipping on orders over $75.",
"color": "#1F6FEB"
},
"created_at": "2026-04-01T12:00:00Z",
"updated_at": "2026-04-08T09:30:00Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 25,
"prev_cursor": "<string>",
"next_cursor": "<string>"
}
}
}