Can you show an actual image of the Turnstile widget? And can you try the following steps?
Can you show an actual image of the Turnstile widget? And can you try the following steps?



3265141), which is a little more detailed:siteverify on the non-interactive and invisible modes.3265141Thanks for coming back to Cloudflare Support.
> Is it the case that non-interactive and invisible are currently being offered for free, but will soon be charged for?
This is correct, but things are going to be slightly changed with self-serve pricing but all the existing customers will be grandfathered in to the legacy subscription and will be able to keep whatever is offered to them now.
The team will look into updating the pricing matrix asap.
I'm not able to provide further information regarding the pricing.siteverifyconsole.log('token:' + token.data);
console.log('token string:' + JSON.stringify(token.data));const express = require('express');
const fetch = require('node-fetch');
const FormData = require('form-data');
const app = express();
app.use(express.urlencoded({ extended: true }));
const secretKeys = {
'www.a.se': process.env.SECRET_KEY_a,
'www.b.se': process.env.SECRET_KEY_b,
'www.c.se' : process.env.SECRET_KEY_c
};
async function handlePost(request, response) {
const token = request.body['cf-turnstile-response'];
const ip = request.headers['cf-connecting-ip'];
const referer = request.headers['referer'];
const hostname = new URL(referer).hostname;
const secret = secretKeys[hostname];
if (!token) {
return response.status(401).send('Missing Turnstile token');
}
if (!secret) {
return response.status(401).send('Invalid hostname');
}
const formData = new FormData();
formData.append('secret', secret);
formData.append('response', token);
formData.append('remoteip', ip);
const result = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
body: formData,
method: 'POST',
});
const outcome = await result.json();
if (!outcome.success) {
return response.status(401).send('The provided Turnstile token was not valid! \n' + JSON.stringify(outcome));
}
response.send('Turnstile token successfully validated. \n' + JSON.stringify(outcome));
}
app.post('/', handlePost);
const port = process.env.PORT || 8080;
app.listen(port, () => console.log(`App listening on port ${port}!`));<script>
window.onloadTurnstileCallback = function () {
var widgetId = turnstile.render('#turnstile-container', {
sitekey: 'sitekey',
callback: function(token) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://turnstile.app', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('cf-turnstile-response', token);
xhr.setRequestHeader('Referer', '{{Page URL}}');
xhr.send('cf-turnstile-response=' + encodeURIComponent(token));
}
});
};
</script>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?onload=onloadTurnstileCallback" defer></script>
<div id="turnstile-container"></div>