Problem
We’re trying to bypass the standard Messenger widget entirely and route inbound guest messages straight through the Guest API. The engineering team built a lightweight HTML form that captures the text and hits the endpoint directly. We’ve got the OAuth token scoped correctly, but the server keeps rejecting the payload structure.
Code & Payload
Here’s the curl command we’re running from our staging environment:
POST /api/v2/conversations/messaging
Authorization: Bearer <token>
Content-Type: application/json
{
"type": "messaging",
"to": [{ "id": "queue_8821", "type": "routingQueue" }],
"from": { "id": "guest_api_direct", "type": "user" },
"messages": [{ "text": "Testing direct API submission without widget", "type": "text" }]
}
Error
The response comes back as a 400 Bad Request. The JSON body just says {"code":"badRequest","message":"Invalid message structure for guest initiation"}. We’ve checked the Swagger docs and the payload matches the example exactly, except we’re omitting the integrationId field since we don’t want the widget to handle the handshake. Tried clearing the cache on the staging box. Didn’t help.
Question
Does the Guest API require a specific integrationId pointing to a dummy web messaging integration, or should we be hitting a different endpoint like /api/v2/conversations instead? Swapping the from.type to external leaves the 400 error untouched. The routing queue is definitely active and accepting web messages normally. Just need to know if we’re missing a header or if the payload schema changed in the last platform update. The dashboard analytics aren’t picking up these attempts anyway. Logs show the request hits the gateway but drops immediately.