Global search across all searchable models
Searches across the company’s records in one request. Results are always limited to the caller’s company. Searchable models are order, member, medium, product, page, post, collection, category, playlist, enrollment_pack, promo_code, agreement, subscription, site, and droplet; all are searched by default, except site for a company without member sites. A site result links to /member-sites/{uuid} and its resource carries the site’s uuid. Each result carries a type, a display title and subtitle, a relative admin link, and a compact resource payload. Uses page-number pagination with page (max 10) and per_page (default 20, max 100). Returns 403 for callers who are not company admins, and 422 for invalid parameters. Requires a company admin Bearer token with permission to view the dashboard.
curl --request POST \
--url https://api.fluid.app/api/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"q": "copy paper",
"models": [
"product",
"order"
],
"page": 1,
"per_page": 20
}
'import requests
url = "https://api.fluid.app/api/search"
payload = {
"q": "copy paper",
"models": ["product", "order"],
"page": 1,
"per_page": 20
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({q: 'copy paper', models: ['product', 'order'], page: 1, per_page: 20})
};
fetch('https://api.fluid.app/api/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/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'q' => 'copy paper',
'models' => [
'product',
'order'
],
'page' => 1,
'per_page' => 20
]),
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/search"
payload := strings.NewReader("{\n \"q\": \"copy paper\",\n \"models\": [\n \"product\",\n \"order\"\n ],\n \"page\": 1,\n \"per_page\": 20\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"q\": \"copy paper\",\n \"models\": [\n \"product\",\n \"order\"\n ],\n \"page\": 1,\n \"per_page\": 20\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"q\": \"copy paper\",\n \"models\": [\n \"product\",\n \"order\"\n ],\n \"page\": 1,\n \"per_page\": 20\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"id": 30117,
"search_type": "product",
"search_title": "Dunder Mifflin 20lb Copy Paper",
"search_description": "Bright white 20lb copy paper, ten reams per case.",
"search_url": "/products/30117",
"resource": {
"id": 30117,
"title": "Dunder Mifflin 20lb Copy Paper",
"slug": "20lb-copy-paper",
"image_url": "https://cdn.fluid.app/dunder-mifflin/products/20lb-copy-paper.jpg",
"active": true,
"description": "Bright white 20lb copy paper, ten reams per case."
},
"created_at": "2026-09-01T12:00:00Z",
"updated_at": "2026-09-15T08:30:12Z"
},
{
"id": 700215,
"search_type": "order",
"search_title": "Order #DM-100482",
"search_description": "completed • $109.98",
"search_url": "/orders/700215",
"resource": {
"id": 700215,
"order_number": "DM-100482",
"status": "completed",
"image_url": null
},
"created_at": "2026-09-17T15:22:48Z",
"updated_at": "2026-09-17T15:24:03Z"
}
],
"meta": {
"request_id": "8f3c2a71-5d4e-4b9a-9c61-2e7f0d4b8a15",
"timestamp": "2026-09-18T14:32:07Z",
"total_count": 2,
"current_page": 1,
"per_page": 20,
"total_pages": 1
}
}{
"message": "<string>"
}"<string>"Body
curl --request POST \
--url https://api.fluid.app/api/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"q": "copy paper",
"models": [
"product",
"order"
],
"page": 1,
"per_page": 20
}
'import requests
url = "https://api.fluid.app/api/search"
payload = {
"q": "copy paper",
"models": ["product", "order"],
"page": 1,
"per_page": 20
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({q: 'copy paper', models: ['product', 'order'], page: 1, per_page: 20})
};
fetch('https://api.fluid.app/api/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/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'q' => 'copy paper',
'models' => [
'product',
'order'
],
'page' => 1,
'per_page' => 20
]),
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/search"
payload := strings.NewReader("{\n \"q\": \"copy paper\",\n \"models\": [\n \"product\",\n \"order\"\n ],\n \"page\": 1,\n \"per_page\": 20\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"q\": \"copy paper\",\n \"models\": [\n \"product\",\n \"order\"\n ],\n \"page\": 1,\n \"per_page\": 20\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"q\": \"copy paper\",\n \"models\": [\n \"product\",\n \"order\"\n ],\n \"page\": 1,\n \"per_page\": 20\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"id": 30117,
"search_type": "product",
"search_title": "Dunder Mifflin 20lb Copy Paper",
"search_description": "Bright white 20lb copy paper, ten reams per case.",
"search_url": "/products/30117",
"resource": {
"id": 30117,
"title": "Dunder Mifflin 20lb Copy Paper",
"slug": "20lb-copy-paper",
"image_url": "https://cdn.fluid.app/dunder-mifflin/products/20lb-copy-paper.jpg",
"active": true,
"description": "Bright white 20lb copy paper, ten reams per case."
},
"created_at": "2026-09-01T12:00:00Z",
"updated_at": "2026-09-15T08:30:12Z"
},
{
"id": 700215,
"search_type": "order",
"search_title": "Order #DM-100482",
"search_description": "completed • $109.98",
"search_url": "/orders/700215",
"resource": {
"id": 700215,
"order_number": "DM-100482",
"status": "completed",
"image_url": null
},
"created_at": "2026-09-17T15:22:48Z",
"updated_at": "2026-09-17T15:24:03Z"
}
],
"meta": {
"request_id": "8f3c2a71-5d4e-4b9a-9c61-2e7f0d4b8a15",
"timestamp": "2026-09-18T14:32:07Z",
"total_count": 2,
"current_page": 1,
"per_page": 20,
"total_pages": 1
}
}{
"message": "<string>"
}"<string>"