Legacy (v0)
Update legacy themes
Updates one of the company’s legacy MySite themes and returns it. Send any of name, description, and image_url under legacy_theme; send template fields to create or update the theme’s template, which is published immediately. public cannot be changed here. Returns 404 when the theme does not belong to the company and 422 with validation errors when it cannot be saved. Requires a company admin Bearer token; admin users, company API tokens, and partner tokens also need the my_site_themes update permission.
PATCH
/
api
/
legacy_themes
/
{id}
Update legacy themes
curl --request PATCH \
--url https://api.fluid.app/api/legacy_themes/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"legacy_theme": {
"description": "Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.",
"template": {
"stylesheet": ".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }"
}
}
}
'import requests
url = "https://api.fluid.app/api/legacy_themes/{id}"
payload = { "legacy_theme": {
"description": "Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.",
"template": { "stylesheet": ".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }" }
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
legacy_theme: {
description: 'Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.',
template: {
stylesheet: '.hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }'
}
}
})
};
fetch('https://api.fluid.app/api/legacy_themes/{id}', 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/legacy_themes/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'legacy_theme' => [
'description' => 'Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.',
'template' => [
'stylesheet' => '.hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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/legacy_themes/{id}"
payload := strings.NewReader("{\n \"legacy_theme\": {\n \"description\": \"Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.\",\n \"template\": {\n \"stylesheet\": \".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }\"\n }\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://api.fluid.app/api/legacy_themes/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"legacy_theme\": {\n \"description\": \"Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.\",\n \"template\": {\n \"stylesheet\": \".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/legacy_themes/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legacy_theme\": {\n \"description\": \"Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.\",\n \"template\": {\n \"stylesheet\": \".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"legacy_theme": {
"id": 3187,
"name": "Scranton Classic",
"description": "Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.",
"image_url": "https://cdn.fluid.app/themes/dunder-mifflin/scranton-classic.png",
"public": true,
"company_id": 1405,
"template": {
"id": 55210,
"name": "Scranton Classic",
"content": "<section class=\"hero\"><h1>{{ member.full_name }}</h1><p>Your Dunder Mifflin paper rep</p></section>",
"stylesheet": ".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }",
"head": "<link rel=\"preconnect\" href=\"https://cdn.fluid.app\">",
"status": "active"
}
},
"meta": {
"request_id": "4f8b2d61-a9c3-4e70-9b15-6d2e8c0f3a47",
"timestamp": "2026-09-22T10:26:09Z"
}
}{
"message": "<string>"
}{
"error_message": "Failed to update legacy theme",
"errors": {
"name": [
"is already taken"
]
},
"meta": {
"request_id": "7a2e5c94-1b6f-4d38-9e07-c4f1a8d36b25",
"timestamp": "2026-10-15T21:40:52Z"
}
}⌘I
Update legacy themes
curl --request PATCH \
--url https://api.fluid.app/api/legacy_themes/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"legacy_theme": {
"description": "Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.",
"template": {
"stylesheet": ".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }"
}
}
}
'import requests
url = "https://api.fluid.app/api/legacy_themes/{id}"
payload = { "legacy_theme": {
"description": "Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.",
"template": { "stylesheet": ".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }" }
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
legacy_theme: {
description: 'Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.',
template: {
stylesheet: '.hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }'
}
}
})
};
fetch('https://api.fluid.app/api/legacy_themes/{id}', 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/legacy_themes/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'legacy_theme' => [
'description' => 'Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.',
'template' => [
'stylesheet' => '.hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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/legacy_themes/{id}"
payload := strings.NewReader("{\n \"legacy_theme\": {\n \"description\": \"Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.\",\n \"template\": {\n \"stylesheet\": \".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }\"\n }\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://api.fluid.app/api/legacy_themes/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"legacy_theme\": {\n \"description\": \"Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.\",\n \"template\": {\n \"stylesheet\": \".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/legacy_themes/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legacy_theme\": {\n \"description\": \"Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.\",\n \"template\": {\n \"stylesheet\": \".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"legacy_theme": {
"id": 3187,
"name": "Scranton Classic",
"description": "Clean white layout with the Dunder Mifflin logo and the 20lb copy paper up front.",
"image_url": "https://cdn.fluid.app/themes/dunder-mifflin/scranton-classic.png",
"public": true,
"company_id": 1405,
"template": {
"id": 55210,
"name": "Scranton Classic",
"content": "<section class=\"hero\"><h1>{{ member.full_name }}</h1><p>Your Dunder Mifflin paper rep</p></section>",
"stylesheet": ".hero { background: #ffffff; color: #1d3c6e; padding: 48px 16px; }",
"head": "<link rel=\"preconnect\" href=\"https://cdn.fluid.app\">",
"status": "active"
}
},
"meta": {
"request_id": "4f8b2d61-a9c3-4e70-9b15-6d2e8c0f3a47",
"timestamp": "2026-09-22T10:26:09Z"
}
}{
"message": "<string>"
}{
"error_message": "Failed to update legacy theme",
"errors": {
"name": [
"is already taken"
]
},
"meta": {
"request_id": "7a2e5c94-1b6f-4d38-9e07-c4f1a8d36b25",
"timestamp": "2026-10-15T21:40:52Z"
}
}