Vérification humaine sans suivi

# AgentHouse HumanProof

Bloquez bots et spam sur formulaires HTML — sans cookies, empreinte ni widgets CAPTCHA tiers. Un fichier JavaScript et une vérification serveur ; la preuve s’exécute discrètement en arrière-plan.

Sans cookies

Script en un fichier

Vérifié côté serveur

## Une alternative moderne aux CAPTCHA

Les CAPTCHA classiques ralentissent, nuisent à l’accessibilité et attirent souvent des scripts tiers très trackants. HumanProof utilise un défi signé à courte durée et une preuve de travail légère dans le navigateur — pas d’énigmes, d’images ni de widgets supplémentaires.

* Pas d’empreinte ni de profil de suivi inter-sites via un réseau de widgets.
* Pas besoin de Google ni d’un autre fournisseur CAPTCHA externe sur votre page.
* Les secrets restent sur votre serveur : le navigateur n’a jamais la clé de vérification.

## Comment ça marche

Du défi à l’envoi vérifié en quatre étapes.

* Le SDK demande un défi signé pour votre clé site publique et l'id de formulaire.
* Le navigateur résout une petite preuve de travail (hors thread principal si possible).
* La preuve est ajoutée comme champ caché à la soumission du formulaire.
* Votre serveur appelle l'API de vérification avec la clé secrète et reçoit accept, quarantine ou fake-success.

## Conçu pour les sites privacy-first

Adapté aux équipes sensibles RGPD et à l’hébergement UE : surface limitée, pas de scripts ad-tech sur votre formulaire.

* Aucun cookie requis pour le widget.
* Le trafic reste entre votre origine et l’API AgentHouse — pas de scripts de réseaux publicitaires.
* Côté vérification, journaux minimaux et conscients de la rétention.
* Vous décidez pour chaque résultat — accepter, mettre en quarantaine ou fake-success — sur votre propre backend.

## Un seul fichier JavaScript — rien d’autre

Pas de npm, bundler ni framework : chargez un script depuis l’API AgentHouse, ajoutez les attributs data sur vos formulaires, c’est tout. Un script peut protéger plusieurs formulaires sur la même page. Ligne « Powered by AgentHouse » optionnelle incluse par défaut.

## Intégration conviviale pour les développeurs

Front : un script. Back-end : une POST JSON pour vérifier. Fonctionne avec n’importe quelle stack — Node.js, PHP, Python ou tout ce qui appelle HTTPS.

Les URL script/API suivent la configuration (prod : api.agenthouse.org ; humanproof.publicSdkBase pour le dev).

Si le SDK doit récupérer une challenge et résoudre le proof-of-work à l’envoi, il déclenche sur window le CustomEvent humanproof.securingForm (detail : form, siteKey, formId) pour l’indicateur de progression. En cas d’échec : humanproof-error sur le formulaire.

```
window.addEventListener('humanproof.securingForm', function (e) { /* e.detail.form, siteKey, formId */ });
```

Le proof-of-work nécessite d’abord une challenge serveur. Optionnel : data-prefetch-challenge-delay-ms sur le script (ms après chargement) pour récupérer la challenge et résoudre en arrière-plan ; à l’envoi la preuve est réutilisée si encore valide. data-prefetch-expiry-margin-ms impose ce TTL restant avant réutilisation (décalage d’horloge). Par formulaire : data-humanproof-prefetch-challenge-delay-ms et data-humanproof-prefetch-expiry-margin-ms.

HTML HTML multi-formulaires Node.js PHP Python 

```
<form id="contact-form" data-humanproof="YOUR_FORM_ID">
  <label>Email <input type="email" name="email" required></label>
  <button type="submit">Send</button>
</form>
<script
  src="https://api.agenthouse.org/humanproof/humanproof.js"
  data-site-key="YOUR_PUBLIC_SITE_KEY"
  data-powered-by="true"
  data-endpoint="https://api.agenthouse.org/humanproof"
  data-prefetch-challenge-delay-ms="2500"
  data-prefetch-expiry-margin-ms="15000"
></script>
```

```
<form id="a" data-humanproof="form-a">...</form>
<form id="b" data-humanproof="form-b">...</form>
<script
  src="https://api.agenthouse.org/humanproof/humanproof.js"
  data-site-key="YOUR_PUBLIC_SITE_KEY"
  data-powered-by="true"
  data-endpoint="https://api.agenthouse.org/humanproof"
  data-prefetch-challenge-delay-ms="2500"
  data-prefetch-expiry-margin-ms="15000"
></script>
```

```
// POST https://api.agenthouse.org/humanproof/verify — JSON body (Node 18+ fetch)
const verifyUrl = 'https://api.agenthouse.org/humanproof/verify';
const secretKey = ''; // set from your secrets store before use
const payload = JSON.parse(formFields.humanproof);
const body = {
  secretKey,
  siteKey: payload.siteKey,
  formId: payload.formId,
  challengeId: payload.challengeId,
  challenge: payload.challenge,
  nonce: payload.nonce,
  signature: payload.signature,
  algorithm: payload.algorithm,
  salt: payload.salt,
  expiresAt: payload.expiresAt,
  difficulty: payload.difficulty,
  boundHost: payload.boundHost,
  boundAction: payload.boundAction,
  submitDurationMs: payload.submitDurationMs
};
const res = await fetch(verifyUrl, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(body)
});
const result = await res.json();
// result.status: 'ok' | 'suspicious' | 'reject'
// result.suggestedAction: 'accept' | 'quarantine' | 'fake-success' | 'reject'
```

```
<?php
$url = 'https://api.agenthouse.org/humanproof/verify';
$secret = ''; // set from your server secret store before use
$payload = json_decode($_POST['humanproof'], true);
$body = array_merge(['secretKey' => $secret], $payload);
$ch = curl_init($url);
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
  CURLOPT_POSTFIELDS => json_encode($body),
  CURLOPT_RETURNTRANSFER => true,
]);
$out = curl_exec($ch);
$result = json_decode($out, true);
?>
```

```
import json
import urllib.request

VERIFY_URL = "https://api.agenthouse.org/humanproof/verify"

def verify_humanproof(secret_key: str, payload: dict) -> dict:
    body = {"secretKey": secret_key, **payload}
    req = urllib.request.Request(
        VERIFY_URL,
        data=json.dumps(body).encode("utf-8"),
        headers={"Content-Type": "application/json"},
        method="POST",
    )
    with urllib.request.urlopen(req, timeout=30) as resp:
        return json.load(resp)
```

## Image de marque

HumanProof affiche par défaut une courte ligne « Powered by AgentHouse ». Retirez-la avec un abonnement mensuel simple — même produit, mêmes garanties de confidentialité.

* Courte ligne « Powered by » incluse dans l’offre gratuite.
* L’offre payante masque la ligne ; comportement et vérification inchangés.
* Contactez-nous quand vous souhaitez passer sous licence.

## Pourquoi les équipes choisissent HumanProof

Des gains concrets pour les équipes produit et conformité.

* Moins d’interruptions qu’avec des CAPTCHA image ou puzzle — rien de nouveau à cliquer.
* Meilleure accessibilité : pas d’étape visuelle obligatoire, compatible avec le clavier.
* Posture confidentialité solide : pas de CAPTCHA tiers ni de widget pub sur votre formulaire.
* Mise en prod rapide : un script, une API de vérif, exemples pour backends courants.
* Politique maîtrisée : difficulté par formulaire et traitement des envois suspects.

## Essayer en direct

Envoyez le formulaire ci-dessous : la preuve de travail s’exécute en arrière-plan, puis la démo envoie à notre serveur (aucune donnée stockée).

Nom 

E-mail 

Entreprise 

Message 

Envoyer le formulaire 

### Résultat de la démo

OK 

## Commencez à protéger vos formulaires

Configurez la clé site et les règles par formulaire dans AgentHouse, ajoutez le script et vérifiez chaque envoi sur votre backend. C’est toute l’intégration — nous aidons au déploiement si besoin.

[Commencer](/fr/consulting/#cta)