Add a page to a member site
Nested under the site because a page cannot exist without one: the site is what decides who may see the page. Created active unless explicitly disabled, and with a members_page template already bound, since the builder opens a page by its template.
curl --request POST \
--url https://api.fluid.app/api/company/members_sites/{members_site_id}/pages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"members_page": {
"title": "Rewards",
"slug": "rewards",
"published": true
}
}
'import requests
url = "https://api.fluid.app/api/company/members_sites/{members_site_id}/pages"
payload = { "members_page": {
"title": "Rewards",
"slug": "rewards",
"published": True
} }
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_page: {title: 'Rewards', slug: 'rewards', published: true}})
};
fetch('https://api.fluid.app/api/company/members_sites/{members_site_id}/pages', 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/members_sites/{members_site_id}/pages",
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_page' => [
'title' => 'Rewards',
'slug' => 'rewards',
'published' => 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/company/members_sites/{members_site_id}/pages"
payload := strings.NewReader("{\n \"members_page\": {\n \"title\": \"Rewards\",\n \"slug\": \"rewards\",\n \"published\": true\n }\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/company/members_sites/{members_site_id}/pages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"members_page\": {\n \"title\": \"Rewards\",\n \"slug\": \"rewards\",\n \"published\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/members_sites/{members_site_id}/pages")
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_page\": {\n \"title\": \"Rewards\",\n \"slug\": \"rewards\",\n \"published\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"members_page": {
"id": 81530,
"title": "Rewards",
"slug": "rewards",
"published": true,
"path": "/accounts/rewards",
"template_id": 55102,
"updated_at": "2026-09-18T14:03:27Z"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}Authorizations
Bearer token authentication
Path Parameters
The site that will govern the page, which must belong to this company's selected theme.
Query Parameters
Company-owned theme being edited, including draft themes. Omit for the active theme. Unknown or foreign themes return 404 without falling back.
x >= 1Body
Show child attributes
Show child attributes
Response
The new page
One page inside a member site. Enough to draw a row in the builder's folder and open it. The slug is unique within its site, not globally, so two sites may both hold rewards and the member decides which they get.
Show child attributes
Show child attributes
curl --request POST \
--url https://api.fluid.app/api/company/members_sites/{members_site_id}/pages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"members_page": {
"title": "Rewards",
"slug": "rewards",
"published": true
}
}
'import requests
url = "https://api.fluid.app/api/company/members_sites/{members_site_id}/pages"
payload = { "members_page": {
"title": "Rewards",
"slug": "rewards",
"published": True
} }
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_page: {title: 'Rewards', slug: 'rewards', published: true}})
};
fetch('https://api.fluid.app/api/company/members_sites/{members_site_id}/pages', 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/members_sites/{members_site_id}/pages",
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_page' => [
'title' => 'Rewards',
'slug' => 'rewards',
'published' => 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/company/members_sites/{members_site_id}/pages"
payload := strings.NewReader("{\n \"members_page\": {\n \"title\": \"Rewards\",\n \"slug\": \"rewards\",\n \"published\": true\n }\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/company/members_sites/{members_site_id}/pages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"members_page\": {\n \"title\": \"Rewards\",\n \"slug\": \"rewards\",\n \"published\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/members_sites/{members_site_id}/pages")
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_page\": {\n \"title\": \"Rewards\",\n \"slug\": \"rewards\",\n \"published\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"members_page": {
"id": 81530,
"title": "Rewards",
"slug": "rewards",
"published": true,
"path": "/accounts/rewards",
"template_id": 55102,
"updated_at": "2026-09-18T14:03:27Z"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"details": {}
}