Contacts
Update a company contact
Updates a company contact. Send the fields under contact; first_name and last_name are required on every update. Omitting status keeps the current status. Omit affiliate to keep the current owner. Send affiliate with a rep’s email or id to reassign the contact. Send null or an empty affiliate to unassign the rep and clear the owner. An affiliate whose email or id matches no rep counts as empty. On a contact whose affiliate is null, a null or empty affiliate keeps the current owner. Requires a company admin token with permission to update contacts. Returns 404 when the contact does not exist and 422 with validation errors when the update is invalid.
PATCH
/
api
/
company
/
contacts
/
{id}
Update a company contact
curl --request PATCH \
--url https://api.fluid.app/api/company/contacts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact": {
"first_name": "Holly",
"last_name": "Flax",
"status": "hot",
"phone": "+15705550119",
"metadata": {
"source": "trade-show",
"follow_up": "2026-10-05"
}
}
}
'import requests
url = "https://api.fluid.app/api/company/contacts/{id}"
payload = { "contact": {
"first_name": "Holly",
"last_name": "Flax",
"status": "hot",
"phone": "+15705550119",
"metadata": {
"source": "trade-show",
"follow_up": "2026-10-05"
}
} }
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({
contact: {
first_name: 'Holly',
last_name: 'Flax',
status: 'hot',
phone: '+15705550119',
metadata: {source: 'trade-show', follow_up: '2026-10-05'}
}
})
};
fetch('https://api.fluid.app/api/company/contacts/{id}', 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/contacts/{id}",
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([
'contact' => [
'first_name' => 'Holly',
'last_name' => 'Flax',
'status' => 'hot',
'phone' => '+15705550119',
'metadata' => [
'source' => 'trade-show',
'follow_up' => '2026-10-05'
]
]
]),
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/contacts/{id}"
payload := strings.NewReader("{\n \"contact\": {\n \"first_name\": \"Holly\",\n \"last_name\": \"Flax\",\n \"status\": \"hot\",\n \"phone\": \"+15705550119\",\n \"metadata\": {\n \"source\": \"trade-show\",\n \"follow_up\": \"2026-10-05\"\n }\n }\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/company/contacts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact\": {\n \"first_name\": \"Holly\",\n \"last_name\": \"Flax\",\n \"status\": \"hot\",\n \"phone\": \"+15705550119\",\n \"metadata\": {\n \"source\": \"trade-show\",\n \"follow_up\": \"2026-10-05\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/contacts/{id}")
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 \"contact\": {\n \"first_name\": \"Holly\",\n \"last_name\": \"Flax\",\n \"status\": \"hot\",\n \"phone\": \"+15705550119\",\n \"metadata\": {\n \"source\": \"trade-show\",\n \"follow_up\": \"2026-10-05\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"contact": {
"id": 88412,
"token": "c3f1a9e2-6b4d-4e7a-9c21-5d8f0b7e3a64",
"first_name": "Holly",
"last_name": "Flax",
"avatar_url": null,
"status": "warm",
"email": "holly.flax@gmail.com",
"email2": null,
"phone": "+15705550119",
"phone2": null,
"phone_id": null,
"address": "1725 Slough Avenue",
"address2": "Suite 200",
"city": "Scranton",
"state": "PA",
"postal_code": "18505",
"language_id": 1,
"country_id": 233,
"lead_type": null,
"ip": null,
"requested_at": null,
"best_time": null,
"time_zone": "America/New_York",
"reason": null,
"income": null,
"hours": null,
"invest": null,
"interest": null,
"full_name": "Holly Flax",
"discarded_at": null,
"metadata": {
"source": "trade-show",
"booth": "Scranton Business Expo"
},
"country": {
"id": 233,
"name": "United States",
"iso": "US",
"iso3": "USA",
"active": true
},
"affiliate": {
"id": 48213,
"first_name": "Dwight",
"last_name": "Schrute",
"image_url": "https://cdn.fluid.app/dunder-mifflin/avatars/dwight-schrute.jpg"
},
"owner": {
"id": 30117,
"first_name": "Dwight",
"last_name": "Schrute",
"image_url": "https://cdn.fluid.app/dunder-mifflin/avatars/dwight-schrute.jpg"
}
},
"meta": {
"request_id": "5f0c2a7e-3b1d-4c8e-9a6f-2d7b1e4c9a03",
"timestamp": "2026-09-30T14:12:45Z"
}
}{
"message": "<string>"
}{
"error": "Not authorized."
}⌘I
Update a company contact
curl --request PATCH \
--url https://api.fluid.app/api/company/contacts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact": {
"first_name": "Holly",
"last_name": "Flax",
"status": "hot",
"phone": "+15705550119",
"metadata": {
"source": "trade-show",
"follow_up": "2026-10-05"
}
}
}
'import requests
url = "https://api.fluid.app/api/company/contacts/{id}"
payload = { "contact": {
"first_name": "Holly",
"last_name": "Flax",
"status": "hot",
"phone": "+15705550119",
"metadata": {
"source": "trade-show",
"follow_up": "2026-10-05"
}
} }
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({
contact: {
first_name: 'Holly',
last_name: 'Flax',
status: 'hot',
phone: '+15705550119',
metadata: {source: 'trade-show', follow_up: '2026-10-05'}
}
})
};
fetch('https://api.fluid.app/api/company/contacts/{id}', 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/contacts/{id}",
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([
'contact' => [
'first_name' => 'Holly',
'last_name' => 'Flax',
'status' => 'hot',
'phone' => '+15705550119',
'metadata' => [
'source' => 'trade-show',
'follow_up' => '2026-10-05'
]
]
]),
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/contacts/{id}"
payload := strings.NewReader("{\n \"contact\": {\n \"first_name\": \"Holly\",\n \"last_name\": \"Flax\",\n \"status\": \"hot\",\n \"phone\": \"+15705550119\",\n \"metadata\": {\n \"source\": \"trade-show\",\n \"follow_up\": \"2026-10-05\"\n }\n }\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/company/contacts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact\": {\n \"first_name\": \"Holly\",\n \"last_name\": \"Flax\",\n \"status\": \"hot\",\n \"phone\": \"+15705550119\",\n \"metadata\": {\n \"source\": \"trade-show\",\n \"follow_up\": \"2026-10-05\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/contacts/{id}")
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 \"contact\": {\n \"first_name\": \"Holly\",\n \"last_name\": \"Flax\",\n \"status\": \"hot\",\n \"phone\": \"+15705550119\",\n \"metadata\": {\n \"source\": \"trade-show\",\n \"follow_up\": \"2026-10-05\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"contact": {
"id": 88412,
"token": "c3f1a9e2-6b4d-4e7a-9c21-5d8f0b7e3a64",
"first_name": "Holly",
"last_name": "Flax",
"avatar_url": null,
"status": "warm",
"email": "holly.flax@gmail.com",
"email2": null,
"phone": "+15705550119",
"phone2": null,
"phone_id": null,
"address": "1725 Slough Avenue",
"address2": "Suite 200",
"city": "Scranton",
"state": "PA",
"postal_code": "18505",
"language_id": 1,
"country_id": 233,
"lead_type": null,
"ip": null,
"requested_at": null,
"best_time": null,
"time_zone": "America/New_York",
"reason": null,
"income": null,
"hours": null,
"invest": null,
"interest": null,
"full_name": "Holly Flax",
"discarded_at": null,
"metadata": {
"source": "trade-show",
"booth": "Scranton Business Expo"
},
"country": {
"id": 233,
"name": "United States",
"iso": "US",
"iso3": "USA",
"active": true
},
"affiliate": {
"id": 48213,
"first_name": "Dwight",
"last_name": "Schrute",
"image_url": "https://cdn.fluid.app/dunder-mifflin/avatars/dwight-schrute.jpg"
},
"owner": {
"id": 30117,
"first_name": "Dwight",
"last_name": "Schrute",
"image_url": "https://cdn.fluid.app/dunder-mifflin/avatars/dwight-schrute.jpg"
}
},
"meta": {
"request_id": "5f0c2a7e-3b1d-4c8e-9a6f-2d7b1e4c9a03",
"timestamp": "2026-09-30T14:12:45Z"
}
}{
"message": "<string>"
}{
"error": "Not authorized."
}