Render a draft member page or system screen
Authoring preview for company administrators with theme view permission. Select a site belonging to the theme and exactly one page or system screen. Unpublished pages and draft themes are supported. Content comes from the selected theme’s stored templates, sections, settings and site navigation. No role means unrestricted authoring; member_type_id selects a synthetic audience and applies site access rules. A member_id selects an owned real member and applies live eligibility using that member’s own country and role. Real profiles and private Liquid collections are read-only; native system screens display an unavailable notice rather than sample data. This endpoint neither authenticates a member nor publishes content. Responses must not be cached. The CLI keeps its bearer token on its local server and serves the returned HTML without the builder base tag. Body/resource overrides are ignored; system-screen bodies remain sealed.
curl --request POST \
--url https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"members_site_id": 7310,
"members_page_id": 18422,
"member_type_id": "brand-partner"
}
'import requests
url = "https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview"
payload = {
"members_site_id": 7310,
"members_page_id": 18422,
"member_type_id": "brand-partner"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({members_site_id: 7310, members_page_id: 18422, member_type_id: 'brand-partner'})
};
fetch('https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview', 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/themes/{theme_id}/member-preview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'members_site_id' => 7310,
'members_page_id' => 18422,
'member_type_id' => 'brand-partner'
]),
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/v202604/themes/{theme_id}/member-preview"
payload := strings.NewReader("{\n \"members_site_id\": 7310,\n \"members_page_id\": 18422,\n \"member_type_id\": \"brand-partner\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"members_site_id\": 7310,\n \"members_page_id\": 18422,\n \"member_type_id\": \"brand-partner\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"members_site_id\": 7310,\n \"members_page_id\": 18422,\n \"member_type_id\": \"brand-partner\"\n}"
response = http.request(request)
puts response.read_body{
"preview": {
"mode": "sample",
"contract_version": 1,
"theme_id": 48213,
"members_site_id": 7310,
"members_page_id": 18422,
"system_screen_key": null,
"html_content": "<main class=\"members-page\"><h1>Welcome back to the Dunder Mifflin rep portal</h1></main>",
"page_stylesheet": ".members-page { max-width: 72rem; margin: 0 auto; }",
"template_stylesheet": null,
"preview_audience": {
"kind": "sample_member",
"member_type_id": "brand-partner",
"matched_site_id": 7310,
"selected_site_accessible": true
}
},
"status": 200,
"meta": {
"request_uuid": "7c1e9a52-4b3d-4f0e-9d2a-81f6c3b5e240",
"timestamp": "2026-09-15T09:26:05Z"
}
}{
"message": "<string>"
}{
"message": "<string>",
"error": "<string>"
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {}
}Authorizations
Path Parameters
Body
- Option 1
- Option 2
Response
Read-only preview, including an access-denied view when the chosen role or member cannot access this site.
curl --request POST \
--url https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"members_site_id": 7310,
"members_page_id": 18422,
"member_type_id": "brand-partner"
}
'import requests
url = "https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview"
payload = {
"members_site_id": 7310,
"members_page_id": 18422,
"member_type_id": "brand-partner"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({members_site_id: 7310, members_page_id: 18422, member_type_id: 'brand-partner'})
};
fetch('https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview', 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/themes/{theme_id}/member-preview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'members_site_id' => 7310,
'members_page_id' => 18422,
'member_type_id' => 'brand-partner'
]),
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/v202604/themes/{theme_id}/member-preview"
payload := strings.NewReader("{\n \"members_site_id\": 7310,\n \"members_page_id\": 18422,\n \"member_type_id\": \"brand-partner\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"members_site_id\": 7310,\n \"members_page_id\": 18422,\n \"member_type_id\": \"brand-partner\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/themes/{theme_id}/member-preview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"members_site_id\": 7310,\n \"members_page_id\": 18422,\n \"member_type_id\": \"brand-partner\"\n}"
response = http.request(request)
puts response.read_body{
"preview": {
"mode": "sample",
"contract_version": 1,
"theme_id": 48213,
"members_site_id": 7310,
"members_page_id": 18422,
"system_screen_key": null,
"html_content": "<main class=\"members-page\"><h1>Welcome back to the Dunder Mifflin rep portal</h1></main>",
"page_stylesheet": ".members-page { max-width: 72rem; margin: 0 auto; }",
"template_stylesheet": null,
"preview_audience": {
"kind": "sample_member",
"member_type_id": "brand-partner",
"matched_site_id": 7310,
"selected_site_accessible": true
}
},
"status": 200,
"meta": {
"request_uuid": "7c1e9a52-4b3d-4f0e-9d2a-81f6c3b5e240",
"timestamp": "2026-09-15T09:26:05Z"
}
}{
"message": "<string>"
}{
"message": "<string>",
"error": "<string>"
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {}
}