List company contacts
Lists the company’s contacts. Filter with status (all returns every status), search_query, by_metadata, and member_id (one rep’s contacts). Sort by full name with sort_by=name and sort_direction; results with equal sort values use contact id as a final sort key, so while the contacts do not change, pages do not repeat or skip contacts. Uses page-numbered pagination with page and per_page (default 10); meta carries total_count, total_pages, and current_page. Requires a company admin token with permission to view contacts. Returns 422 when by_metadata is not valid JSON or member_id is not a UUID.
curl --request GET \
--url https://api.fluid.app/api/company/contacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/company/contacts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/company/contacts', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/company/contacts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/company/contacts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/contacts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"contacts": [
{
"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"
}
},
{
"id": 88413,
"token": "7a2e5c90-1f3b-4d6a-8e4c-b9d2f07a1c35",
"first_name": "Jan",
"last_name": "Levinson",
"avatar_url": null,
"status": "cold",
"email": "jan.levinson@serenitybychan.com",
"email2": null,
"phone": "+12125550148",
"phone2": null,
"phone_id": null,
"address": "410 Park Avenue",
"address2": null,
"city": "New York",
"state": "NY",
"postal_code": "10022",
"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": "Jan Levinson",
"discarded_at": null,
"metadata": {
"source": "api"
}
}
],
"meta": {
"total_count": 2,
"total_pages": 1,
"current_page": 1,
"request_id": "5f0c2a7e-3b1d-4c8e-9a6f-2d7b1e4c9a03",
"timestamp": "2026-09-30T14:12:45Z"
}
}{
"message": "<string>"
}{
"error_message": "Invalid parameters",
"errors": {
"member_id": [
"is in invalid format"
]
},
"meta": {
"request_id": "5f0c2a7e-3b1d-4c8e-9a6f-2d7b1e4c9a03",
"timestamp": "2026-09-30T14:12:45Z"
}
}Query Parameters
Return only the contacts that belong to this rep, given as the rep's member id (the member_id returned by GET /api/company/users). A contact belongs to the rep when it is assigned to the rep's membership or held by the rep's user, the same rule the rep's own app applies. An id that does not resolve to a member of this company (unknown, removed, or a member of another company) returns an empty list; inactive members that have not been removed still match.
"0192f3a8-7c41-7d2e-9b6a-3f1e2d4c5b61"
Sorts the list. name sorts by full name (first and last name, case-insensitive; email or phone when the contact has no name). email sorts by email case-insensitively; contacts without an email come first when sorting ascending. Other values keep the default order (newest first).
"name"
curl --request GET \
--url https://api.fluid.app/api/company/contacts \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/company/contacts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/company/contacts', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/company/contacts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/company/contacts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/contacts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"contacts": [
{
"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"
}
},
{
"id": 88413,
"token": "7a2e5c90-1f3b-4d6a-8e4c-b9d2f07a1c35",
"first_name": "Jan",
"last_name": "Levinson",
"avatar_url": null,
"status": "cold",
"email": "jan.levinson@serenitybychan.com",
"email2": null,
"phone": "+12125550148",
"phone2": null,
"phone_id": null,
"address": "410 Park Avenue",
"address2": null,
"city": "New York",
"state": "NY",
"postal_code": "10022",
"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": "Jan Levinson",
"discarded_at": null,
"metadata": {
"source": "api"
}
}
],
"meta": {
"total_count": 2,
"total_pages": 1,
"current_page": 1,
"request_id": "5f0c2a7e-3b1d-4c8e-9a6f-2d7b1e4c9a03",
"timestamp": "2026-09-30T14:12:45Z"
}
}{
"message": "<string>"
}{
"error_message": "Invalid parameters",
"errors": {
"member_id": [
"is in invalid format"
]
},
"meta": {
"request_id": "5f0c2a7e-3b1d-4c8e-9a6f-2d7b1e4c9a03",
"timestamp": "2026-09-30T14:12:45Z"
}
}