+1 for the BAQ method! That’s how we do it outside of Kinetic in our integrations. Works well and there’s no speed issue.
well then tell him to pass a valid API key…
The BAQ must be shared then it’ll show up.
Caveat is if you have set an access scope to the API Key. Then you’ll need to add the BAQ --and other Business Objects you want them to have access too-- in Access Scope Maintenance.
And all V2 REST calls require an API-KEY regardless of the service.
Yes but you don’t have to assign an access scope to them if you want them wide open.
Right. The error message indicated a missing API-KEY. They won’t even get to access scope checking if they don’t supply it first. And then yes, if a scope is defined (good for integrations IMHO) then it is checked.
I was replying to this message, which was before I seen the later post with the API error.
We tried both ways, to filter the customers based on starting keywords of Name, using contains(Name, ‘Test’). It gives the error below :
/api/v2/odata/{Company}/Erp.BO.CustomerSvc/Customers?%24select=Name%2CCustID%2CCustNum&%24filter=contains%28Name%2C%20%2721st%27%29&%24top=10
“Unable to convert expression ‘contains(Name, ‘21st’)’. Error: Operator not yet supported: contains”,
OData is a wrapper around the business object, so there are things that are not always implemented or occasionally have bugs. That’s why some of us use BAQs.

Contain’s insn’t supported in oData4 implementaitn of epicor try using indexof
Based on your odata query I’d use a BAQ.
Used the BAQ as well, it gives the same error
/api/v2/odata/Company/BaqSvc/CustomerBAQforAPI/Data?%24filter=contains%28Customer_Name%2C%20%2721%27%29&%24top=10
Unable to convert expression 'contains(Customer_Name, '21')'. Error: Operator not yet supported: contains
With the BAQ, you define a parameter and do the selection there. You then just pass the parameter value in on a URL request as shown above in Tammy’s Post:
FYI, in 2025.2 it looks like it is.
Sorry for the confusion - I forgot odata contains wasn’t supported in Kinetic up until now
Know what works in every version?
![]()
functions and BAQ’s lol ![]()
SqlClient?
/s
True but not great for dynamic server-side select, filter, sort, expand. I’d probably bother with functions more often if we could easily make dynamic queries like:
Date filtering with oData is somewhat tricky if I recall as well vote 1 BAQ.

