Change a site
Changes the supplied fields. Send the lock_version you last read to refuse the change if the site changed since; without it the change is applied to the current site. A handle change keeps the site’s public id.
curl --request PATCH \
--url https://api.fluid.app/api/member/v2026-10/sites/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"name": "Riley's Fall Shop",
"lock_version": 0
}
EOFimport requests
url = "https://api.fluid.app/api/member/v2026-10/sites/{id}"
payload = {
"name": "Riley's Fall Shop",
"lock_version": 0
}
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({name: 'Riley\'s Fall Shop', lock_version: 0})
};
fetch('https://api.fluid.app/api/member/v2026-10/sites/{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/member/v2026-10/sites/{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([
'name' => 'Riley\'s Fall Shop',
'lock_version' => 0
]),
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/member/v2026-10/sites/{id}"
payload := strings.NewReader("{\n \"name\": \"Riley's Fall Shop\",\n \"lock_version\": 0\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/member/v2026-10/sites/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Riley's Fall Shop\",\n \"lock_version\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/sites/{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 \"name\": \"Riley's Fall Shop\",\n \"lock_version\": 0\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"data": {
"id": "0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67",
"handle": "rileys-shop",
"name": "Riley's Fall Shop",
"visibility": "private",
"status": "draft",
"owner_kind": "member",
"copied_from_id": null,
"access": {
"declared": false,
"uses": []
},
"layout_name": null,
"settings": {
"primary_color": "#112233"
},
"content_version": "0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68",
"lock_version": 1,
"created_at": "2026-09-01T10:00:00.000000Z",
"updated_at": "2026-09-01T10:05:00.000000Z"
},
"meta": {
"request_uuid": "0192f4c8-5b6c-7d74-a3e8-0f1a2b3c4d5e",
"timestamp": "2026-09-30T15:08:21Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
A member credential in the Authorization: Bearer header: a member
session JWT, a portal JWT whose login is linked to a membership in
that company, an opaque member token, or a verified One Auth identity
access token. The credential alone identifies the member and company.
Member session and portal JWTs are read-only and are refused with 403
on every write.
Path Parameters
Public id of one of the member's sites.
Body
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
Changes to a site. Send at least one field besides lock_version. Fields a member cannot set, such as required and position, are refused as unknown fields.
Display name.
1 - 255^[^\u0000]*[^\s\u0000][^\u0000]*$Lowercase letters and digits separated by single hyphens, not reserved and not used by another site in the company. The site keeps its public id.
1 - 40^[a-z0-9]+(-[a-z0-9]+)*$Who may open the site once it is published.
private, public The default layout for the site's pages. Null uses the site's own site layout.
255Design tokens such as colors and fonts. Replaces the whole object.
The lock_version the caller last read. The change is refused with 409 if the site changed since, including by a change to one of its pages or menus.
0 <= x <= 2147483647curl --request PATCH \
--url https://api.fluid.app/api/member/v2026-10/sites/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"name": "Riley's Fall Shop",
"lock_version": 0
}
EOFimport requests
url = "https://api.fluid.app/api/member/v2026-10/sites/{id}"
payload = {
"name": "Riley's Fall Shop",
"lock_version": 0
}
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({name: 'Riley\'s Fall Shop', lock_version: 0})
};
fetch('https://api.fluid.app/api/member/v2026-10/sites/{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/member/v2026-10/sites/{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([
'name' => 'Riley\'s Fall Shop',
'lock_version' => 0
]),
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/member/v2026-10/sites/{id}"
payload := strings.NewReader("{\n \"name\": \"Riley's Fall Shop\",\n \"lock_version\": 0\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/member/v2026-10/sites/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Riley's Fall Shop\",\n \"lock_version\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/sites/{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 \"name\": \"Riley's Fall Shop\",\n \"lock_version\": 0\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"data": {
"id": "0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67",
"handle": "rileys-shop",
"name": "Riley's Fall Shop",
"visibility": "private",
"status": "draft",
"owner_kind": "member",
"copied_from_id": null,
"access": {
"declared": false,
"uses": []
},
"layout_name": null,
"settings": {
"primary_color": "#112233"
},
"content_version": "0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68",
"lock_version": 1,
"created_at": "2026-09-01T10:00:00.000000Z",
"updated_at": "2026-09-01T10:05:00.000000Z"
},
"meta": {
"request_uuid": "0192f4c8-5b6c-7d74-a3e8-0f1a2b3c4d5e",
"timestamp": "2026-09-30T15:08:21Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}