Order the member's pins
Puts the named sites first, in the order sent, and leaves the member’s other pins after them in their old order. An id that is not one of the member’s pins is ignored, so two devices that reorder after one of them unpinned a site do not fail. A list holds from 1 to 50 ids, each once.
A bearer with write access only: a request on the cookie mount is refused with 403, with or without an X-Fluid-Member-Site header, and so is a member or portal JWT.
curl --request PUT \
--url https://api.fluid.app/api/member/v2026-10/site-pin-order \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"site_ids": [
"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68",
"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67"
]
}
'import requests
url = "https://api.fluid.app/api/member/v2026-10/site-pin-order"
payload = { "site_ids": ["0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68", "0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
site_ids: ['0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68', '0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67']
})
};
fetch('https://api.fluid.app/api/member/v2026-10/site-pin-order', 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/site-pin-order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'site_ids' => [
'0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68',
'0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67'
]
]),
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/site-pin-order"
payload := strings.NewReader("{\n \"site_ids\": [\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68\",\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67\"\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.fluid.app/api/member/v2026-10/site-pin-order")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"site_ids\": [\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68\",\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/site-pin-order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"site_ids\": [\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68\",\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"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"
}
}{
"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.
Body
The pins to put first, in order. Any other field is refused as an unknown field.
Public ids of the pinned sites, in the order the member wants them. One to 50 ids, each once. An id that is not one of the member's pins is ignored, and the member's other pins follow these in their old order.
1 - 50 elementsResponse
The pins are in the new order.
curl --request PUT \
--url https://api.fluid.app/api/member/v2026-10/site-pin-order \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"site_ids": [
"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68",
"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67"
]
}
'import requests
url = "https://api.fluid.app/api/member/v2026-10/site-pin-order"
payload = { "site_ids": ["0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68", "0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
site_ids: ['0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68', '0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67']
})
};
fetch('https://api.fluid.app/api/member/v2026-10/site-pin-order', 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/site-pin-order",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'site_ids' => [
'0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68',
'0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67'
]
]),
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/site-pin-order"
payload := strings.NewReader("{\n \"site_ids\": [\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68\",\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67\"\n ]\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.fluid.app/api/member/v2026-10/site-pin-order")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"site_ids\": [\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68\",\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/site-pin-order")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"site_ids\": [\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d68\",\n \"0192f4e5-6f7a-7b8c-9d0e-1f2a3b4c5d67\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"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"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timestamp": "2023-11-07T05:31:56Z"
}
}