Update the signed-in member
Changes the signed-in member’s name, language, country or time zone and
returns the same body as GET /me. Send only the fields to change; at
least one is required, none may be null, and any other field is
refused.
Country and time zone belong to the member’s user, so a change applies
in every company that user belongs to. A name change updates this
membership and the user’s shared profile; the user’s memberships in
other companies keep their own names. Because the shared profile
changes, a change to first_name or last_name is refused with 422
when any company the user belongs to has locked name changes. Sending
the current value back is not a change.
avatar_upload_id takes the receipt of an image uploaded through
POST /media/uploads (any membership may sign one). The
avatar is the user’s one image, so it is also the photo GET /profile
returns, in every company the user belongs to. The receipt must be
the member’s own, unused and an image whose stored file matches what
was signed, and it can be claimed until one hour after the
expires_at that POST /media/uploads returned. It is consumed once:
a repeat, an unknown or another member’s receipt, one claimed after
that hour and a non-image one return 422 and change nothing. The fields and the avatar are written together
or not at all, and a refused field leaves the receipt unused.
An opaque member token, a portal JWT, or a verified One Auth identity access token for a non-impersonated rep or shopper can write. A legacy member session JWT, and a portal JWT the server minted read-only, can read but not write: a member session JWT travels in order and subscription email links, so writes with it are refused with 403.
curl --request PATCH \
--url https://api.fluid.app/api/member/v2026-10/me \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"language": "fr",
"time_zone": "Europe/Paris",
"avatar_upload_id": "0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f"
}
'import requests
url = "https://api.fluid.app/api/member/v2026-10/me"
payload = {
"language": "fr",
"time_zone": "Europe/Paris",
"avatar_upload_id": "0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f"
}
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({
language: 'fr',
time_zone: 'Europe/Paris',
avatar_upload_id: '0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f'
})
};
fetch('https://api.fluid.app/api/member/v2026-10/me', 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/me",
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([
'language' => 'fr',
'time_zone' => 'Europe/Paris',
'avatar_upload_id' => '0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f'
]),
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/me"
payload := strings.NewReader("{\n \"language\": \"fr\",\n \"time_zone\": \"Europe/Paris\",\n \"avatar_upload_id\": \"0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f\"\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/me")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"language\": \"fr\",\n \"time_zone\": \"Europe/Paris\",\n \"avatar_upload_id\": \"0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/me")
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 \"language\": \"fr\",\n \"time_zone\": \"Europe/Paris\",\n \"avatar_upload_id\": \"0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f\"\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"data": {
"id": "0192f3a8-5c1e-7d42-9b6a-3e8f1c2d4a57",
"username": "dwight-schrute",
"first_name": "Dwight",
"last_name": "Schrute",
"display_name": "Dwight Schrute",
"email": "dwight.schrute@dundermifflin.com",
"avatar_url": "https://cdn.fluid.app/avatars/dunder-mifflin/dwight-schrute-105.jpg",
"bio": "Assistant to the Regional Manager. Beet farmer.",
"activity_status": "active",
"language": "fr",
"country": "US",
"time_zone": "Europe/Paris",
"member_type": {
"id": "0192f3a1-2b7d-7e10-8c4f-5a9d2e6b1f03",
"slug": "rep",
"name": "Brand Partner"
},
"rank": {
"id": "0192f3a2-9e4c-7a18-b3d5-7c1f8e2a6d90",
"name": "Assistant Regional Manager"
},
"company": {
"id": "0192f39f-7a3b-7c21-a8e4-1d6b9f3c5e82",
"name": "Dunder Mifflin Paper Company",
"subdomain": "dunder-mifflin",
"logo_url": "https://cdn.fluid.app/companies/dunder-mifflin/logo.png"
},
"mysite_url": "https://shop.dundermifflin.com/my/dwight-schrute",
"created_at": "2026-09-02T14:31:07Z"
},
"meta": {
"request_uuid": "0192f4c7-3a4b-7c52-b2d6-9e0f1a2b3c4d",
"timestamp": "2026-09-30T15:06:45Z"
}
}{
"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 for a non-impersonated rep or shopper. The credential alone
identifies the member and company.
Body
The fields of the signed-in member to change. At least one is required.
display_name is derived from first_name and last_name and is
refused with 422.
curl --request PATCH \
--url https://api.fluid.app/api/member/v2026-10/me \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"language": "fr",
"time_zone": "Europe/Paris",
"avatar_upload_id": "0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f"
}
'import requests
url = "https://api.fluid.app/api/member/v2026-10/me"
payload = {
"language": "fr",
"time_zone": "Europe/Paris",
"avatar_upload_id": "0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f"
}
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({
language: 'fr',
time_zone: 'Europe/Paris',
avatar_upload_id: '0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f'
})
};
fetch('https://api.fluid.app/api/member/v2026-10/me', 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/me",
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([
'language' => 'fr',
'time_zone' => 'Europe/Paris',
'avatar_upload_id' => '0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f'
]),
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/me"
payload := strings.NewReader("{\n \"language\": \"fr\",\n \"time_zone\": \"Europe/Paris\",\n \"avatar_upload_id\": \"0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f\"\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/me")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"language\": \"fr\",\n \"time_zone\": \"Europe/Paris\",\n \"avatar_upload_id\": \"0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/me")
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 \"language\": \"fr\",\n \"time_zone\": \"Europe/Paris\",\n \"avatar_upload_id\": \"0199a3f2-5b0d-7c3a-8f09-2a1b0c9d8e7f\"\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"data": {
"id": "0192f3a8-5c1e-7d42-9b6a-3e8f1c2d4a57",
"username": "dwight-schrute",
"first_name": "Dwight",
"last_name": "Schrute",
"display_name": "Dwight Schrute",
"email": "dwight.schrute@dundermifflin.com",
"avatar_url": "https://cdn.fluid.app/avatars/dunder-mifflin/dwight-schrute-105.jpg",
"bio": "Assistant to the Regional Manager. Beet farmer.",
"activity_status": "active",
"language": "fr",
"country": "US",
"time_zone": "Europe/Paris",
"member_type": {
"id": "0192f3a1-2b7d-7e10-8c4f-5a9d2e6b1f03",
"slug": "rep",
"name": "Brand Partner"
},
"rank": {
"id": "0192f3a2-9e4c-7a18-b3d5-7c1f8e2a6d90",
"name": "Assistant Regional Manager"
},
"company": {
"id": "0192f39f-7a3b-7c21-a8e4-1d6b9f3c5e82",
"name": "Dunder Mifflin Paper Company",
"subdomain": "dunder-mifflin",
"logo_url": "https://cdn.fluid.app/companies/dunder-mifflin/logo.png"
},
"mysite_url": "https://shop.dundermifflin.com/my/dwight-schrute",
"created_at": "2026-09-02T14:31:07Z"
},
"meta": {
"request_uuid": "0192f4c7-3a4b-7c52-b2d6-9e0f1a2b3c4d",
"timestamp": "2026-09-30T15:06:45Z"
}
}{
"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"
}
}