Public Category by slug
Unauthenticated. Resolves by slug (the canonical public
identifier; matches canonical_url). Returns 404 for any
non-live row so unlisted categories never leak their existence.
curl --request GET \
--url https://api.fluid.app/api/v202604/categories/{slug}import requests
url = "https://api.fluid.app/api/v202604/categories/{slug}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fluid.app/api/v202604/categories/{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/categories/{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/categories/{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/categories/{slug}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/categories/{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": "7f3c2a90-1c2b-4d5e-9aaa-112233445566",
"timestamp": "2026-07-15T12:34:56Z"
},
"category": {
"id": 4821,
"slug": "summer-sale",
"title": "Summer Sale",
"description": "Hand-picked categories for the July clearance.",
"image_url": "https://cdn.fluid.app/categories/4821.png",
"canonical_url": "https://acme.fluid.app/home/categories/summer-sale",
"images": {
"thumb": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-200,c-at_max,f-auto,q-70/categories/4821.png",
"width": 200
},
"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-1200,c-at_max,f-auto,q-80/categories/4821.png",
"width": 1200
}
},
"active": true,
"status": "published",
"publish_at": null,
"seo": {
"id": 9215,
"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
},
"metafields": [
{
"namespace": "custom",
"key": "theme_accent",
"value": "#f5a623",
"value_type": "single_line_text_field",
"description": "Accent color for the category landing page.",
"created_at": "2026-05-01T12:00:00Z",
"updated_at": "2026-05-01T12:00:00Z",
"locked": false
}
],
"countries": [
"GB",
"US"
],
"languages": [
"en",
"fr",
"de"
],
"parent_id": null,
"position": 1,
"source_type": "product",
"has_children": false
}
}{
"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
Canonical public slug of the category; matches the row's canonical_url.
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 Category.
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 Category 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/categories/{slug}import requests
url = "https://api.fluid.app/api/v202604/categories/{slug}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fluid.app/api/v202604/categories/{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/categories/{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/categories/{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/categories/{slug}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/categories/{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": "7f3c2a90-1c2b-4d5e-9aaa-112233445566",
"timestamp": "2026-07-15T12:34:56Z"
},
"category": {
"id": 4821,
"slug": "summer-sale",
"title": "Summer Sale",
"description": "Hand-picked categories for the July clearance.",
"image_url": "https://cdn.fluid.app/categories/4821.png",
"canonical_url": "https://acme.fluid.app/home/categories/summer-sale",
"images": {
"thumb": {
"url": "https://ik.imagekit.io/fluidapp/tr:w-200,c-at_max,f-auto,q-70/categories/4821.png",
"width": 200
},
"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-1200,c-at_max,f-auto,q-80/categories/4821.png",
"width": 1200
}
},
"active": true,
"status": "published",
"publish_at": null,
"seo": {
"id": 9215,
"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
},
"metafields": [
{
"namespace": "custom",
"key": "theme_accent",
"value": "#f5a623",
"value_type": "single_line_text_field",
"description": "Accent color for the category landing page.",
"created_at": "2026-05-01T12:00:00Z",
"updated_at": "2026-05-01T12:00:00Z",
"locked": false
}
],
"countries": [
"GB",
"US"
],
"languages": [
"en",
"fr",
"de"
],
"parent_id": null,
"position": 1,
"source_type": "product",
"has_children": false
}
}{
"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>"
}
}
}