Guest API `POST /api/v2/conversations/messaging/` returns 403 when bypassing Messenger widget

Trying to implement a custom chat UI in Kotlin using the Guest API directly, skipping the genesyscloud-messaging SDK entirely. The handshake works fine with POST /api/v2/conversations/messaging/, but the first POST /api/v2/conversations/messaging/{id}/messages call fails with 403 Forbidden. The token is valid and has messaging:guest scope. Is there a specific header missing for raw REST calls compared to the SDK?