The structure from your original request was:
operator = AND
lhsOperand =
[
DEVICE_PLATFORM EQUALS Desktop,
Function {
operator = AND
lhsOperand =
[
Attribute ID 1 EQUALS 'bn',
Attribute ID 9 CONTAINS_ANY ('cat 1', 'cat 2', 'cat 3')
]
}
]
This translates to the following:
DEVICE_PLATFORM = 'Desktop' AND ((Attribute ID 1 = 'bn' AND Attribute ID 9 IN ('cat 1', 'cat 2', 'cat 3')))
I think that the issue is that you can't AND a RequestContextOperand (DEVICE_PLATFORM) with anything but a single level function on FeedAttributeOperand.
The good news is that you can remove one level of nesting, since the following is logically equivalent to your function:
DEVICE_PLATFORM = 'Desktop' AND (Attribute ID 1 = 'bn' AND Attribute ID 9 IN ('cat 1', 'cat 2', 'cat 3'))
This is equivalent because:
A AND (B AND C) is equivalent to A AND B AND C.
This translates to:
operator = AND
lhsOperand =
[
DEVICE_PLATFORM EQUALS Desktop,
Attribute ID 1 EQUALS 'bn',
Attribute ID 9 CONTAINS_ANY ('cat 1', 'cat 2', 'cat 3')
]
Could you give that a try and let me know if you still encounter issues?