POST /conversations/chat/{id}/send 400 when pushing canned text

Trying to inject a canned response into a live chat session via the API. The docs show the endpoint, but I keep hitting a 400 Bad Request. The payload looks standard to me. Here is the JSON I’m sending to /api/v2/conversations/chat/{conversationId}/send:

{
 "type": "text",
 "from": {
 "id": "agent-user-id",
 "name": "System Bot"
 },
 "text": "Here is the help article link."
}

The error response is vague. Just "message": "Invalid request body". I’ve checked the agent ID and it’s valid. Is there a specific format for the text field or am I missing a required header? The chat is active, I can see it in the UI.