Company messaging
Search message recipients
Searches for people the acting admin can message. By default it searches the company’s members, excluding the admin and anyone blocked either way. Set kind to external to search the admin’s contacts instead, or sms / email to search only contacts with a phone number or email address. Requires a company token with messaging view permission. Uses offset pagination with page and per_page (default 20); the response is a two-item array of pagination details and recipients. Pass user[email] to name the company admin the request acts as; it must match an admin recipient in the company’s messaging, or the request is rejected with 403.
GET
/
api
/
company
/
messaging
/
recipients
/
search
Search message recipients
curl --request GET \
--url https://api.fluid.app/api/company/messaging/recipients/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/company/messaging/recipients/search"
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/messaging/recipients/search', 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/messaging/recipients/search",
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/messaging/recipients/search"
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/messaging/recipients/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/messaging/recipients/search")
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[
{
"pagination": {
"current": 1,
"previous": null,
"next": null,
"per_page": 20,
"pages": 1,
"count": 1
}
},
{
"items": [
{
"id": 61211,
"receivable_id": 20981,
"receivable_type": "UserCompany",
"first_name": "Jim",
"last_name": "Halpert",
"status": "active",
"last_online": "2026-09-14T13:22:51Z",
"avatar_background": "#4A90D9",
"avatar_url": "https://cdn.fluid.app/dunder-mifflin/avatars/jim-halpert.jpg",
"image_url": "https://cdn.fluid.app/dunder-mifflin/avatars/jim-halpert.jpg",
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
}
]
}
]{
"message": "<string>"
}Query Parameters
⌘I
Search message recipients
curl --request GET \
--url https://api.fluid.app/api/company/messaging/recipients/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/company/messaging/recipients/search"
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/messaging/recipients/search', 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/messaging/recipients/search",
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/messaging/recipients/search"
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/messaging/recipients/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/messaging/recipients/search")
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[
{
"pagination": {
"current": 1,
"previous": null,
"next": null,
"per_page": 20,
"pages": 1,
"count": 1
}
},
{
"items": [
{
"id": 61211,
"receivable_id": 20981,
"receivable_type": "UserCompany",
"first_name": "Jim",
"last_name": "Halpert",
"status": "active",
"last_online": "2026-09-14T13:22:51Z",
"avatar_background": "#4A90D9",
"avatar_url": "https://cdn.fluid.app/dunder-mifflin/avatars/jim-halpert.jpg",
"image_url": "https://cdn.fluid.app/dunder-mifflin/avatars/jim-halpert.jpg",
"country_name": "United States",
"pro_user": false,
"blocked": false,
"left_conversation_at": null,
"discarded_at": null
}
]
}
]{
"message": "<string>"
}