Company member sites
Unlock a member site
Unlocks a member’s site, so its visibility, shares and status decide who opens it again, with whatever the owner changed while it was locked. Clears when and which admin locked it, and writes nothing else. Unlocking a site that is not locked changes nothing. Its branches are unlocked with it. A taken-down site stays taken down. Needs application_themes.update and a signed-in admin. Answers 409 when the site changed while it was being unlocked; read it again and retry.
POST
/
api
/
company
/
v2026-10
/
member-sites
/
{id}
/
unlock
Unlock a member site
curl --request POST \
--url https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock', 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/company/v2026-10/member-sites/{id}/unlock",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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/company/v2026-10/member-sites/{id}/unlock"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"member_site": {
"id": "019a2c4d-5e6f-7a7b-8c9d-0e1f2a3b4c5d",
"handle": "riley-shop",
"name": "Riley's Shop",
"owner_kind": "member",
"owner_member": {
"id": "019a1111-2222-7333-8444-555566667777",
"display_name": "Riley Rep"
},
"copied_from_id": null,
"access": {
"declared": false,
"uses": []
},
"visibility": "public",
"status": "published",
"taken_down_at": null,
"company_lock": "none",
"made_private_at": null,
"made_private_by_user_id": null,
"required": false,
"position": 0,
"featured": false,
"feature_position": null,
"layout_name": null,
"settings": {},
"content_version": "019a2c4d-6f7a-7b8c-9d0e-1f2a3b4c5d6e",
"lock_version": 3,
"created_at": "2026-10-14T11:00:00Z",
"updated_at": "2026-10-23T14:05:12Z"
},
"status": 200,
"meta": {
"request_uuid": "3b8f1d27-6c4e-4a91-8e5d-2f7c9a1b0e64",
"timestamp": "2026-10-23T14:05:12Z"
}
}{}{}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
A company admin credential for your company, or a droplet installation token with the website scope for reads, except on the share routes, which refuse a droplet token.
Path Parameters
The site's id.
⌘I
Unlock a member site
curl --request POST \
--url https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock', 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/company/v2026-10/member-sites/{id}/unlock",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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/company/v2026-10/member-sites/{id}/unlock"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/member-sites/{id}/unlock")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"member_site": {
"id": "019a2c4d-5e6f-7a7b-8c9d-0e1f2a3b4c5d",
"handle": "riley-shop",
"name": "Riley's Shop",
"owner_kind": "member",
"owner_member": {
"id": "019a1111-2222-7333-8444-555566667777",
"display_name": "Riley Rep"
},
"copied_from_id": null,
"access": {
"declared": false,
"uses": []
},
"visibility": "public",
"status": "published",
"taken_down_at": null,
"company_lock": "none",
"made_private_at": null,
"made_private_by_user_id": null,
"required": false,
"position": 0,
"featured": false,
"feature_position": null,
"layout_name": null,
"settings": {},
"content_version": "019a2c4d-6f7a-7b8c-9d0e-1f2a3b4c5d6e",
"lock_version": 3,
"created_at": "2026-10-14T11:00:00Z",
"updated_at": "2026-10-23T14:05:12Z"
},
"status": 200,
"meta": {
"request_uuid": "3b8f1d27-6c4e-4a91-8e5d-2f7c9a1b0e64",
"timestamp": "2026-10-23T14:05:12Z"
}
}{}{}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}