Outbound Campaign API 400 when filtering by legal hold metadata

Stuck on a validation error while trying to isolate outbound dialing records that intersect with our legal discovery holds. The goal is to ensure that no agent is dialing into numbers currently flagged under a legal preservation order, using the Campaign API to filter the contact list dynamically.

We are running Genesys Cloud 2024-03 in the Europe/London region. The outbound campaign is configured to use a static contact list imported via the Bulk Import API. Each contact record includes a custom attribute legal_hold_status set to either true or false. The expectation is that the Campaign API endpoint POST /api/v2/campaigns/{campaignId}/contacts would accept a filter object to exclude contacts where legal_hold_status equals true.

However, the request returns a 400 Bad Request with the following payload:

{
 "code": "invalid_argument",
 "message": "Filter criteria does not support custom attribute 'legal_hold_status'. Only supported attributes: id, externalId, state."
}

This seems inconsistent with the documentation for digital channel metadata, which explicitly supports custom attributes in export filters. Is there a known limitation preventing custom attribute filtering in outbound campaign contact lists? We need to maintain a strict chain of custody for these records, and manually scrubbing the list before every campaign launch is not scalable for our volume.

The alternative approach considered is using the Architect flow to check the legal_hold_status before adding the contact to the dial queue. However, the Get Record from S3 data action does not seem to support real-time lookups against the outbound contact list metadata efficiently. The latency introduces significant delays in the dialing process, causing the campaign to fall behind its scheduled pace.

Has anyone successfully implemented a dynamic exclusion filter for legal hold metadata in outbound campaigns? We are currently forced to export the entire list, filter it locally, and re-import, which breaks the audit trail for the original contact list version. Any workaround or API extension that supports this filtering would be greatly appreciated.