400 Bad Request
{ "error": "invalid_schema", "message": "Deduplication rule exceeds quota" }
What’s the right approach for structuring the list definition payload? The Java client doesn’t like the contact record arrays when I mix compliance suppression flags with the fuzzy matching logic. Token refresh handles the bearer part fine now, but the schema validation crashes on the streaming ingestion call. Chunking breaks after the first batch. Throughput just flatlines.
var dedupRules = new ArrayList<DeduplicationRule>();
dedupRules.add(new DeduplicationRule()
.attribute("email")
.matchType("fuzzy")
.confidenceThreshold(0.85f));
var listDef = new CreateContactListRequest()
.name("Campaign_Alpha_List")
.deduplicationRules(dedupRules)
.complianceFlags(List.of("do_not_call"));
outboundApi.postOutboundContactsLists(listDef);
Problem
You’re stuffing Compliance Flags directly into the Deduplication Rules array. The Admin UI handles this separation automatically, which is why I’d usually prefer the Admin UI for list setup anyway.
Error
That 400 invalid_schema crash happens because the Fuzzy Matching quota caps at ten rules per list. Mixing suppression logic into the rule array breaks the Schema Validation immediately. The Java client throws a hard stop when the Payload Shape doesn’t match the OpenAPI Spec.
Question
Keep the Compliance Flags at the root level and leave the Deduplication Rules alone. You’ll see the streaming ingestion call pass right through. Watch the Environment Limits closely.
Problem
Schema validation crashes when fuzzy matching hits the quota.
Code
var rule = new DeduplicationRule().attribute("email").matchType("exact");
outboundApi.postOutboundContactsLists(new CreateContactListRequest().deduplicationRules(List.of(rule)));
Error
That adjustment clears the 400 on my local mock. It doesn’t throw anymore.
Question
Checking rate limits on /api/v2/outbound/contacts/lists during terraform apply anyway.