Complete documentation for integrating with Button Solutions.
We have a few levels of protection, and all are opt-in:
For newcomers, we suggest first observing traffic for a bit, and then enabling a mitigation strategy.
Integration with the client side is as easy as adding this line to your header (first script loaded):
<html>
<head>
<script src="https://script.button.solutions/hi" defer async></script>
<!-- ... -->
</html>Hide the twirling space button:
<script src="https://script.button.solutions/hi?invisible=true" defer async></script>Enable waf-style redirection to main page when the button cookie is missing.
<script src="https://script.button.solutions/hi?mode=redirect" defer async></script> This is essentially site-protect, which is complete for Wordpress as a downloadable plugin. Contact us if you need this.Add one of the options below to your tag manager:
<script src="https://script.button.solutions/hi" defer async></script>
Hide the twirling space button:
<script src="https://script.button.solutions/hi?invisible=true" defer async></script>[contact us for details]
Go to your dashboard, and then click "Export Bad IPs.
The clicked button upon export completion will automatically open a new tab where you can begin to fill out a refund request.
This is only available in the click analysis tooltip after we have collected at least one record of a click from one of the ad platforms we support.
Click on "Copy bad ips to Google", and it will redirect you to your google ads account page, where you can paste the list.
If your path matches the following it will prioritized in the analysis:
(pricing|thank|contact|book|cart|checkout|shipping|billing|account|basket|delivery|success|order|payment|paying)We replace recaptcha / turnstile-style verification with a silent option.
<form>
<!-- ... -->
<div class="button-solutions-captcha"></div>
<!-- ... -->
</form>Endpoint:
POST https://[ask us].buttons.solutions/siteverifyRequest:
{
"sitekey": "[your site key]",
"response": "[response inserted into the \"button-solutions-captcha\" div]"
}Response:
{
"success": true,
"error": [error detail object],
"challenge": {
"timestamp": "[timestamp string]",
"origin": "[origin]"
}
}const submitUser = async () => {
try {
const buttonUser = document.querySelector('.button-solutions-captcha input[type="hidden"]')
const res = await fetch(`${apiUrl}/signup`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
fullname: form.fullname,
email: form.email,
password: form.password,
passwordConfirmation: form.passwordConfirmation,
button: buttonUser.value,
})
});
} catch (e) {
// ...
}
}