Can you provide more details about what in the form is failing? Is /siteverify not working? Is the w
Can you provide more details about what in the form is failing? Is /siteverify not working? Is the widget not rendering? Something else?


3265141), which is a little more detailed:siteverify on the non-interactive and invisible modes.As mentioned in my last reply, then I'm not able to provide any further information related to the pricing.
The document related to the pricing matrix will be updated.
tdn.alwaysvn.fun A @1.1.1.2 +noall +answerdiggy diggy hole
•3/13/25, 11:39 PM
alwaysvn.fun A @1.1.1.1 +noall +answerdiggy diggy hole
•5/30/24, 1:48 PM




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.siteverifyThe resource https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/cmg/1/thCBy90zqmBonn2dYlU%2FD%2BMzVlbuUEXEmRt0jJlmUpg%3D was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate `as` value and it is preloaded intentionally.Third-party cookie will be blocked. Learn more in the Issues tab.tdn.alwaysvn.fun A @1.1.1.2 +noall +answeralwaysvn.fun A @1.1.1.1 +noall +answerNAME | TTL | DATA
-------------+------+---------------
alwaysvn.fun | 300s | 103.221.223.52const 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>