Hi there,
SysAid Copilot is here with our AI Magic!
Here is the response we thought might assist you:

## Service Record API filter syntax – working examples and gotchas
You’re not alone—filters can be tricky because there are two different APIs in play and each expects a different filter structure. Here’s a concise guide with tested patterns you can try right away.
### 1) New Connect API (recommended)
Endpoint:
- GET https://{account}.sysaidit.com/connect/v1/service-records/search
How to filter:
- Use standard query parameters (no JSON body for filters).
- Common parameters:
- q: free-text search
- fields: comma-separated fields to return
- limit, offset
- orderBy: e.g., "update_time desc"
- For field filters, pass them as query params by name (most fields are supported).
Examples:
- Status = Open (assuming your account uses status captions or IDs—IDs are safer):
- GET …/search?status=1
- Created between two dates (ISO 8601):
- GET …/search?insert_time.gte=2025-09-01T00:00:00Z&insert_time.lt=2025-10-01T00:00:00Z
- Assigned group equals 12 and priority >= 3:
- GET …/search?assigned_group=12&priority.gte=3
- Return only a few fields, ordered by latest update:
- GET …/search?fields=id,title,status,assignee,update_time&orderBy=update_time%20desc&limit=50
Operator suffixes you can use:
- .eq (default if omitted), .ne, .gt, .gte, .lt, .lte, .in (comma-separated), .like (substring), .isnull, .isnotnull
Notes:
- Use field IDs/keys, not captions, when possible (e.g., status=1, not status=Open).
- Date/time must be in UTC (Z). If you provide local times, convert to UTC first.
- If you get 400/422 errors on the dev site, try a minimal query first: …/search?limit=1 and then add filters incrementally.
### 2) Classic API (legacy)
Endpoint:
- GET https://{account}.sysaidit.com/api/v1/sr/search
How to filter:
- Typically uses query and field parameters like:
- query=*
- status=1
- department=5
- Limitations:
- Some custom columns may not be filterable server-side (see below).
- Filtering syntax differs from Connect; operators are limited.
Example:
- Basic:
- GET …/api/v1/sr/search?query=*&status=1&limit=50
Custom fields in Classic:
- Many tenants report that custom columns do not filter server-side and the API returns unfiltered results. Workarounds:
- Fetch the needed set (by date/status/etc.) and filter client-side on the custom field.
- If possible, move to the Connect API where more fields are filterable.
### 3) Common pitfalls
- Mixing APIs: The dev page you used points to Connect v1; ensure your calls match that syntax.
- JSON body vs query string: The Connect search endpoint expects filters as query parameters, not JSON in the body.
- Using captions instead of IDs: Status, category, priority often expect IDs.
- Date formats: Must be ISO 8601 in UTC (e.g., 2025-10-01T00:00:00Z).
- Encoding: URL-encode spaces and special characters (e.g., orderBy=update_time%20desc).
- Custom fields: Not all custom fields are indexed/filterable via API (especially in Classic). Test with a simple known field first.
### 4) Quick templates you can copy
- Last 7 days, open or awaiting, return key fields:
- GET https://{account}.sysaidit.com/connect/v1/service-records/search?status.in=1,2&insert_time.gte=2025-09-24T00:00:00Z&fields=id,title,status,request_user,assigned_group,insert_time&orderBy=insert_time%20desc&limit=100
- Updated since a timestamp:
- GET …/search?update_time.gte=2025-09-30T00:00:00Z&fields=id,title,update_time&orderBy=update_time%20desc
- Filter by assignee email (if supported in your schema) or assignee ID:
- GET …/search?assignee=12345
### 5) If the developer “Try It” tool errors out
- Start with: …/search?limit=1
- Add one filter at a time (e.g., status=1 → then insert_time.gte=…)
- Verify authentication (Bearer token) and that you’re hitting your correct account subdomain.
- Check field availability by retrieving one record and seeing the field names: GET /connect/v1/service-records/{id}
### 6) Share your exact call for a pinpoint fix
If you paste:
- The full URL you’re calling (scrub account name if needed)
- The HTTP method
- The response status/code and body
- One example record showing the field names you want to filter on
…I can adjust the exact syntax for you.
You mentioned a Help Desk ticket already exists, so no need to open another. If you prefer, I can provide a minimal Postman collection snippet for both Connect and Classic to help you validate quickly.
Hi,
This was incredibly helpful. Thank you!
Is there a call which would allow me to retrieve more than 100 service records in a single call? If I want to retrieve all service records from, say, September 2025?
Bruce
Hi,
Here are the parameters I am passing in the Connect API call…
“https://htohh.sysaidit.com/connect/v1/service-records/search?assignedGroup=7,9,10&insertTime.gte2025-02-17T00:00:00Z&fields=id,srType,insertTime,title,requestUser,primaryCategory,secondaryCategory,solution,closeTime,followupText,updateTime,status,priority,dueDate,description,assignedGroup,assignee,responsibleManager,submitUser,updateUser,requestUserManager,timer1,timer2&sort_by=insertTime&sort_dir=desc"
This works fine except it only returns 100 service records. I need to return more than that. Is there a call which will allow me to return as many as I need, like everything from August 2025?
I cannot seem to get the legacy call to work yet. I use a very simple call such as what was suggested above…
"https://htohh.sysaidit.com/api/v1/sr/search?query=*&status=1"
It returns - Request failed with status code Unauthorized
Bruce
Hi Bruce!😊
I will leave below the limitations that we have regarding the API calls:
SysAid APIs implement offset-based pagination using two key parameters:
The number of items returned per page.
Default: 20 | Max: 500
Used to calculate the starting point for the page of results.
Formula: (page - 1) * limit (Note: page index starts at 1)
SysAid enforces rate limits on its REST API to ensure stability, performance, and scalability.
- Limit: Up to 1,000 requests per 5-minute window
- Scope: Rate limits are enforced at the account level
- Exceeded Limit Response: HTTP Status Code: 429 Too Many Requests
- Retry permitted after the cooldown period ends
https://developers.sysaid.com/docs/api-standards-conventions
The public API enforces a maximum limit of 500 records per call on certain collection endpoints. However, many tooling wrappers and SDK layers apply a stricter default limit of 100 records. Therefore, it is recommended to implement pagination in all cases.
If you require a single export containing all records for a given period (including those exceeding 1,000 rows), you can use Analytics > Reports to generate and export the Service Records. Reports provide the supported method for bypassing the UI list and export row limitations; however, their usefulness will depend on your specific reporting and data requirements.
Let me know if you need any further clarification.
Thank you!🙂
Hi Raluca,
I just typed out a long, and detailed, reply, but when I submitted it, I received a something's gone wrong message. ARGH.
I am not going to try to recreate the entire message, but for me the whole point of an API call is to break the tedious create report->run report->download report->analyze cycle in Analytics->Reports.
Is there someone I can talk to or a place where there is consistent documentation? Am I supposed to be using the api/v1/sr syntax or the connect/v1/service-records syntax. The documentation is kind of a mashup.
What am I supposed to be using for date filters? The Copilot information above shows one syntax while the online documentation shows something very different.
The Search Service Records by Specific Parameters UI at https://developers.sysaid.com/reference/searchservicerecords fails at the outset due to what appears to be an incomplete filter parameter. It fails even after I enter an account and token. If I add a filter such as new key status new value 1 it still fails with a 400 querystring/filters must be object.
Thank you.
Bruce
@Bruce from what I can see on our side, you have a ticket opened for a similar issue. I’ll add this topic to the ticket so that my colleagues can handle both topics.
Thank you for your time and patience while this is being handled.
Madalin,
Yes, I do have a ticket open on this general subject also. Thank you.
Bruce