You're right — the error you're seeing is caused by exceeding the OData filter complexity limit (MaxNodeCount), which is hardcoded in the Business Central OData stack and cannot be increased or bypassed from within AL code or API Page definitions.
Why it's happening
OData queries like yours with many or startswith() conditions build a complex expression tree, and BC enforces a default node limit of 100 to avoid performance issues. Unfortunately, this value cannot be overridden through any AL-level property (like EnableQueryAttribute), since BC doesn't expose those low-level OData server controls to developers.
---
✅ Workarounds you can use:
1. Filter with a Custom Field or Table
If you can prepare the list of matching item numbers in advance, you could:
Create a temporary table or blob to store the item numbers.
Use a custom API page that reads from that list and returns the matching results.
2. Use $filter with in instead of multiple or startswith()
Business Central OData doesn't support in natively, but if you’re in control of the logic, you can make multiple smaller API calls (e.g., batches of 5 startswith() conditions per call).
3. Use custom AL code to handle input list
Create a custom API that takes a body payload (like JSON array of item numbers) and returns filtered data via a codeunit or query object. This avoids the OData filter altogether.
---
❌ You cannot:
Increase MaxNodeCount from BC extension code.
Set ODataValidationSettings in AL.
Use web.config or server-side modifications in SaaS (only possible on On-Prem via IIS configs).
---
Recommendation (especially for SaaS):
Build a custom API endpoint (via a codeunit exposed as a web service) that takes a filter payload and returns the matching data programmatically.
✅ Mark this answer as verified if it helps you.