ServiceM8 webhook challenge verification always returns “Invalid callback challenge key returned” in Node.js/Express
02:47 22 Mar 2026

I’m registering a ServiceM8 webhook subscription and keep getting this error:

{"success": false, "message": "Invalid callback challenge key returned", "detail": "Expected '29c97899930d7b3c'"}

My Express server handles the challenge like this:

app.all('/webhook/job-complete', (req, res) => { const challenge = req.query.challenge || req.body.challenge; const mode = req.query.mode || req.body.mode; if (mode === 'subscribe' && challenge) { return res.status(200).send(challenge); } res.sendStatus(200); });

Testing manually with curl works fine. Has anyone got ServiceM8 webhook verification working in Node.js/Express? Is the challenge sent as GET or POST?

javascript node.js webhooks servicem8