400 Bad Request on Open Messaging API quick replies

Getting a 400 error when pushing a card payload via the Open Messaging API. The docs say the format is standard JSON, but the response body just says ‘invalid payload structure’ without pointing to the specific field. I’ve been hammering this for an hour. Here’s the request body I’m sending to /api/v2/conversations/messaging/contacts/{contactId}/messages:

{
 "to": "user:123",
 "mediaType": "application/vnd.genesys.messaging.card+json",
 "body": {
 "type": "card",
 "title": "Select Option",
 "quickReplies": [
 { "title": "Yes", "value": "yes_val" },
 { "title": "No", "value": "no_val" }
 ]
 }
}

The mediaType looks right. I’ve checked the token, it’s valid. Maybe the quickReplies array needs a different shape? Or is the value field supposed to be an object instead of a string? The SDK examples are vague on this part. I’m using Node.js with the axios library. No extra headers beyond auth. Just need to know what’s breaking the validation.