Themes
Update an application theme
Updates a theme’s attributes. Requires a company Bearer token with permission to update themes. Setting active to true makes the theme active; false sets it to draft. Send publish as "true" to publish the theme and sync it to its Git repository in the same request. When the company has moved theme stylesheets to theme-level assets, sending custom_stylesheet or global_stylesheet returns 422.
PATCH
/
api
/
application_themes
/
{id}
Update an application theme
curl --request PATCH \
--url https://api.fluid.app/api/application_themes/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"application_theme": {
"name": "Scranton Storefront",
"description": "Fall paper sale storefront for the Scranton branch.",
"variables": "{\"primary_color\":\"#1B4F9C\",\"accent_color\":\"#F2C230\",\"font_family\":\"Courier Prime\"}"
},
"publish": "true"
}
'import requests
url = "https://api.fluid.app/api/application_themes/{id}"
payload = {
"application_theme": {
"name": "Scranton Storefront",
"description": "Fall paper sale storefront for the Scranton branch.",
"variables": "{\"primary_color\":\"#1B4F9C\",\"accent_color\":\"#F2C230\",\"font_family\":\"Courier Prime\"}"
},
"publish": "true"
}
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({
application_theme: {
name: 'Scranton Storefront',
description: 'Fall paper sale storefront for the Scranton branch.',
variables: '{"primary_color":"#1B4F9C","accent_color":"#F2C230","font_family":"Courier Prime"}'
},
publish: 'true'
})
};
fetch('https://api.fluid.app/api/application_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/application_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([
'application_theme' => [
'name' => 'Scranton Storefront',
'description' => 'Fall paper sale storefront for the Scranton branch.',
'variables' => '{"primary_color":"#1B4F9C","accent_color":"#F2C230","font_family":"Courier Prime"}'
],
'publish' => 'true'
]),
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/application_themes/{id}"
payload := strings.NewReader("{\n \"application_theme\": {\n \"name\": \"Scranton Storefront\",\n \"description\": \"Fall paper sale storefront for the Scranton branch.\",\n \"variables\": \"{\\\"primary_color\\\":\\\"#1B4F9C\\\",\\\"accent_color\\\":\\\"#F2C230\\\",\\\"font_family\\\":\\\"Courier Prime\\\"}\"\n },\n \"publish\": \"true\"\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/application_themes/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"application_theme\": {\n \"name\": \"Scranton Storefront\",\n \"description\": \"Fall paper sale storefront for the Scranton branch.\",\n \"variables\": \"{\\\"primary_color\\\":\\\"#1B4F9C\\\",\\\"accent_color\\\":\\\"#F2C230\\\",\\\"font_family\\\":\\\"Courier Prime\\\"}\"\n },\n \"publish\": \"true\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/application_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 \"application_theme\": {\n \"name\": \"Scranton Storefront\",\n \"description\": \"Fall paper sale storefront for the Scranton branch.\",\n \"variables\": \"{\\\"primary_color\\\":\\\"#1B4F9C\\\",\\\"accent_color\\\":\\\"#F2C230\\\",\\\"font_family\\\":\\\"Courier Prime\\\"}\"\n },\n \"publish\": \"true\"\n}"
response = http.request(request)
puts response.read_body{
"application_theme": {
"id": 48213,
"name": "Scranton Storefront",
"description": null,
"status": "active",
"source": "fluid",
"variables": "{\"primary_color\":\"#1B4F9C\",\"accent_color\":\"#F2C230\",\"font_family\":\"Courier Prime\"}",
"created_at": "2026-09-02T14:12:08Z",
"updated_at": "2026-09-18T16:40:55Z",
"version": "1.0",
"custom_stylesheet": null,
"global_stylesheet": null,
"theme_stylesheet_tag_injected": true,
"theme_stylesheet_columns_hidden": true,
"company_id": 1405,
"cover_image": "https://cdn.fluid.app/themes/48213/scranton-storefront-cover.jpg",
"outdated": false,
"versions": [
{
"version": 12,
"created_at": "2026-09-18T16:40:55Z",
"published": true,
"current": true,
"author_id": 90417,
"author_name": "Michael Scott"
},
{
"version": 11,
"created_at": "2026-09-15T09:03:21Z",
"published": false,
"current": false,
"author_id": 90422,
"author_name": "Pam Beesly"
}
],
"application_theme_templates": [
{
"id": 771204,
"name": "Home page",
"status": "active",
"themeable_type": "home_page",
"company_id": 1405,
"default": true,
"global": false,
"application_theme_id": 48213,
"source": "theme",
"content": "{% section 'hero-banner' %}\n{% section 'featured-products' %}",
"created_at": "2026-09-02T14:12:09Z",
"updated_at": "2026-09-17T11:26:44Z"
}
],
"images": [
{
"id": 30581,
"url": "https://cdn.fluid.app/themes/48213/scranton-storefront-cover.jpg",
"position": 0
}
],
"git_sync_repos": [
{
"id": 5127,
"role": "primary",
"status": "connected",
"repo_full_name": "fluid-gitsync/theme-48213",
"default_branch": "main",
"last_push_at": "2026-09-18T16:41:02Z",
"last_pull_at": null,
"status_updated_at": "2026-09-02T14:12:31Z",
"last_error": null
}
]
},
"meta": {
"request_id": "3f9c2a7e-6b1d-4e8a-9c52-7d0e4b1a2f63",
"timestamp": "2026-09-18T16:40:56Z"
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
Bearer token authentication
Path Parameters
Application Theme ID
⌘I
Update an application theme
curl --request PATCH \
--url https://api.fluid.app/api/application_themes/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"application_theme": {
"name": "Scranton Storefront",
"description": "Fall paper sale storefront for the Scranton branch.",
"variables": "{\"primary_color\":\"#1B4F9C\",\"accent_color\":\"#F2C230\",\"font_family\":\"Courier Prime\"}"
},
"publish": "true"
}
'import requests
url = "https://api.fluid.app/api/application_themes/{id}"
payload = {
"application_theme": {
"name": "Scranton Storefront",
"description": "Fall paper sale storefront for the Scranton branch.",
"variables": "{\"primary_color\":\"#1B4F9C\",\"accent_color\":\"#F2C230\",\"font_family\":\"Courier Prime\"}"
},
"publish": "true"
}
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({
application_theme: {
name: 'Scranton Storefront',
description: 'Fall paper sale storefront for the Scranton branch.',
variables: '{"primary_color":"#1B4F9C","accent_color":"#F2C230","font_family":"Courier Prime"}'
},
publish: 'true'
})
};
fetch('https://api.fluid.app/api/application_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/application_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([
'application_theme' => [
'name' => 'Scranton Storefront',
'description' => 'Fall paper sale storefront for the Scranton branch.',
'variables' => '{"primary_color":"#1B4F9C","accent_color":"#F2C230","font_family":"Courier Prime"}'
],
'publish' => 'true'
]),
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/application_themes/{id}"
payload := strings.NewReader("{\n \"application_theme\": {\n \"name\": \"Scranton Storefront\",\n \"description\": \"Fall paper sale storefront for the Scranton branch.\",\n \"variables\": \"{\\\"primary_color\\\":\\\"#1B4F9C\\\",\\\"accent_color\\\":\\\"#F2C230\\\",\\\"font_family\\\":\\\"Courier Prime\\\"}\"\n },\n \"publish\": \"true\"\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/application_themes/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"application_theme\": {\n \"name\": \"Scranton Storefront\",\n \"description\": \"Fall paper sale storefront for the Scranton branch.\",\n \"variables\": \"{\\\"primary_color\\\":\\\"#1B4F9C\\\",\\\"accent_color\\\":\\\"#F2C230\\\",\\\"font_family\\\":\\\"Courier Prime\\\"}\"\n },\n \"publish\": \"true\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/application_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 \"application_theme\": {\n \"name\": \"Scranton Storefront\",\n \"description\": \"Fall paper sale storefront for the Scranton branch.\",\n \"variables\": \"{\\\"primary_color\\\":\\\"#1B4F9C\\\",\\\"accent_color\\\":\\\"#F2C230\\\",\\\"font_family\\\":\\\"Courier Prime\\\"}\"\n },\n \"publish\": \"true\"\n}"
response = http.request(request)
puts response.read_body{
"application_theme": {
"id": 48213,
"name": "Scranton Storefront",
"description": null,
"status": "active",
"source": "fluid",
"variables": "{\"primary_color\":\"#1B4F9C\",\"accent_color\":\"#F2C230\",\"font_family\":\"Courier Prime\"}",
"created_at": "2026-09-02T14:12:08Z",
"updated_at": "2026-09-18T16:40:55Z",
"version": "1.0",
"custom_stylesheet": null,
"global_stylesheet": null,
"theme_stylesheet_tag_injected": true,
"theme_stylesheet_columns_hidden": true,
"company_id": 1405,
"cover_image": "https://cdn.fluid.app/themes/48213/scranton-storefront-cover.jpg",
"outdated": false,
"versions": [
{
"version": 12,
"created_at": "2026-09-18T16:40:55Z",
"published": true,
"current": true,
"author_id": 90417,
"author_name": "Michael Scott"
},
{
"version": 11,
"created_at": "2026-09-15T09:03:21Z",
"published": false,
"current": false,
"author_id": 90422,
"author_name": "Pam Beesly"
}
],
"application_theme_templates": [
{
"id": 771204,
"name": "Home page",
"status": "active",
"themeable_type": "home_page",
"company_id": 1405,
"default": true,
"global": false,
"application_theme_id": 48213,
"source": "theme",
"content": "{% section 'hero-banner' %}\n{% section 'featured-products' %}",
"created_at": "2026-09-02T14:12:09Z",
"updated_at": "2026-09-17T11:26:44Z"
}
],
"images": [
{
"id": 30581,
"url": "https://cdn.fluid.app/themes/48213/scranton-storefront-cover.jpg",
"position": 0
}
],
"git_sync_repos": [
{
"id": 5127,
"role": "primary",
"status": "connected",
"repo_full_name": "fluid-gitsync/theme-48213",
"default_branch": "main",
"last_push_at": "2026-09-18T16:41:02Z",
"last_pull_at": null,
"status_updated_at": "2026-09-02T14:12:31Z",
"last_error": null
}
]
},
"meta": {
"request_id": "3f9c2a7e-6b1d-4e8a-9c52-7d0e4b1a2f63",
"timestamp": "2026-09-18T16:40:56Z"
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}