For: Admins
Search cases and users with a manage key
Find cases, people, case members, roles and import rows by text, with filters, from your own software.
In this article6 sections
Before you start
This page covers GET https://prd-api-manage.caseactive.com/v1/<hub id>/search, which finds records in your hub by text. It only ever searches your own hub.
Parameters
| Parameter | What it does | Required | Default |
|---|---|---|---|
table | What to search: cases, host_users, case_users, host_roles, case_invoices, host_imports or import_items | Yes | — |
query | The text to find. * matches everything, for a search by filters alone. | Yes | — |
query_by | The text fields to look in, separated by commas, such as given_name,family_name,email | Yes | — |
filter_by | One condition, such as case_status:=1. Repeat the parameter to add more; all must hold. | No | None |
sort_by | A number field and direction, such as created_on:desc | No | Best match |
page | Which page | No | 1 |
limit | Results a page holds, up to 250 | No | 10 |
- A word in
querymatches from its start, and allows a typo or two, sojanfinds Jane. In Tag IDs, names, email addresses, phone numbers and Reference IDs it also matches anywhere inside, soend-2026findsrear-end-2026. - A filter is a field, an operator and a value:
:=exact,:!=not, and:>,:<,:>=and:<=for numbers. A condition can't contain&&,||, brackets or commas: send severalfilter_byparameters instead. A value may hold/and+, such asref_id:=2026/rear-endorphone:=+15551234567; in an address, send+as%2B, or it arrives as a space. - Only number fields can sort. Dates in results are Unix seconds.
- A record can take a few minutes to show up after it's created or changed.
- Inquiries can't be searched with a key.
Tables
table | Text fields, to search and filter | Number fields, to filter and sort |
|---|---|---|
cases | case_id, ref_id (the Tag IDTag ID A permanent label you give a case, such as rear-end-2026, also shown as Reference ID and used in imports.), title, description, case_type, case_stage, users (members' user IDs) | case_status (1 open, 0 closed), users_ct, date_opened, created_on, last_activity, updated_on |
host_users | user_id, given_name, family_name, email, phone, host_ref_id, title, company, address1, address2, locality, region, postal_code, country, gender, birthdate_md (month and day, such as 04-12), locale, zoneinfo, host_user_type, host_granted_status, host_default_role, host_staff_designation | host_user_status (1 active, 0 disabled), host_cases_ct, email_verified, phone_verified, created_on, updated_on |
case_users | case_id, user_id, case_ref_id, case_role_id, and the case's title and description | case_status, created_on, updated_on |
host_roles | role_id, name, role_type, permissions, case_read_fields, case_write_fields | users_ct, created_on, updated_on |
case_invoices | invoice_id, name, invoice_number, po_number, host_ref_id, description, notes, status (open, paid, void, uncollectible or processing), status_reason, payment_gateway, case_id, user_id, participants_ids, refund_status (pending, succeeded, failed or canceled), refund_reason, completed_on_day | total, subtotal, discount, tax, refund_amount, payment_attempts_ct, due_date, completed_on, created_on, updated_on |
host_imports | import_id, name, source, type, user_id, status | total, passed, failed, created_on, updated_on |
import_items | import_id, unique_id, type, status, error_msg, error_record | created_on, updated_on |
host_users includes your hub's Virtual AssistantVirtual Assistant An automated team member that posts welcome messages, check-ins and stage posts for the firm; its posts carry a Virtual Assistant badge., whose host_user_type is bot. case_users holds no names: find the person in host_users, then filter case_users by user_id. case_invoices holds published invoices only. Its amounts are in cents, and tax and discount are fractions. A refunded invoice keeps the status paid; its refund is in refund_status.
Examples
A case by its Tag ID:
curl -G https://prd-api-manage.caseactive.com/v1/ca-7e6d5c4b3a2f10/search \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "table=cases" \
--data-urlencode "query=*" \
--data-urlencode "query_by=ref_id" \
--data-urlencode "filter_by=ref_id:=rear-end-2026"
Active people whose name or email starts with jane, newest first:
curl -G https://prd-api-manage.caseactive.com/v1/ca-7e6d5c4b3a2f10/search \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "table=host_users" \
--data-urlencode "query=jane" \
--data-urlencode "query_by=given_name,family_name,email" \
--data-urlencode "filter_by=host_user_status:=1" \
--data-urlencode "sort_by=created_on:desc"
Open cases at one stageStage A step a case moves through, such as Intake or Demand sent, which the firm names and describes and which shows on the case page., using a stage_id from GET /stages: table=cases&query=*&query_by=title&filter_by=case_status:=1&filter_by=case_stage:=stage::20260927120000_8c1f0e2d3b4a59.
Invoices changed since 8 October 2026 at midnight UTC, oldest change first: table=case_invoices&query=*&query_by=name&filter_by=updated_on:>1791417600&sort_by=updated_on:asc.
Results
{
"data": {
"found": 1,
"page": 1,
"hits": [
{
"document": {
"case_id": "cc-1a2b3c4d5e6f70",
"host_id": "ca-7e6d5c4b3a2f10",
"ref_id": "rear-end-2026",
"title": "Jane Sample auto accident",
"case_type": "general",
"case_status": 1,
"users": ["cu-4f1c2a9e8b7d60", "cu-9d8c7b6a5f4e30"],
"users_ct": 2,
"date_opened": 1790899200,
"created_on": 1790949909,
"updated_on": 1790949909
}
}
]
}
}
found is how many records match. Each hit's document is the record; hits also carry the search engine's own scoring fields, which you can ignore. There's no nextLink: ask for the next page until you've had found results.
A word search can also match similar values, so when you look up one record by an ID, check the document you get back.
If a call is refused
| Status | message | Why |
|---|---|---|
| 400 | SchemaFieldsException | table, query or query_by is missing or unknown, or a filter_by holds characters it can't (FieldSearchFilterTypeException, at filter_by.0 for the first) |
| 400 | SearchParameterException | The search engine refused it: an unknown field, a filter it can't read, a text field in sort_by, or limit over 250. reason holds the engine's own words. |
| 403 | BotSearchTableNotAllowedException | You asked for host_inquiries, which a key can't search |
| 500 | InternalError | The search engine is down. Try again later. |