Intégrations

Gate de formulaire

Un jeton issu du navigateur du visiteur, vérifié par votre serveur avec le secret du site.

Émettre un jeton

POST/v1/gate/token
Sans clé1 requête par visiteur hors cache

Paramètres

  • sitekeystringObligatoire

    La clé du site du gate de formulaire, depuis le tableau de bord.

  • signalsobjectObligatoire

    Indices du navigateur fournis par gate.js : headless_flags, user_agent et client.

Champs de la réponse

  • tokenstring

    Jeton à usage unique pour le formulaire. Expire au bout de cinq minutes.

  • expiresAtstring

    Date d'expiration du jeton, ISO 8601.

  • errorstring

    En cas d'échec : 403 hostname_mismatch (l'Origin de la page ne figure pas parmi les noms d'hôte du gate), 404 unknown_site, 429 rate_limit_exceeded ou quota_exhausted. gate.js envoie alors le formulaire sans jeton.

curl -X POST https://ipscanner.io/v1/gate/token \
  -H "Origin: https://shop.example.com" \
  -H "Content-Type: application/json" \
  -d '{
    "sitekey": "site_4fQ8nZ2kLm7xR1vT9cBw",
    "signals": {
      "headless_flags": {
        "webdriver": false,
        "headless_ua": false
      },
      "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Safari/605.1.15"
    }
  }'
Réponse
{
  "token": "Z3RfNGZROG5aMmtMbTd4UjF2VDljQnd8MTc2MDAwMDAwMHxrM3Z4.Qm9yZGVyIGNvbGxpZQ",
  "expiresAt": "2026-10-09T09:35:00Z"
}

Vérifier un jeton

POST/v1/gate/verify
Secret du siteNon décompté

Paramètres

  • secretstringObligatoire

    Le secret du gate de formulaire. Côté serveur uniquement, jamais dans une page.

  • tokenstringObligatoire

    La valeur ipscanner-token envoyée par le formulaire.

  • remote_ipstring

    L'IP du visiteur telle que la voit votre serveur. Facultatif, renseigne ip_match.

Champs de la réponse

  • successboolean

    True quand le jeton est valide et inutilisé.

  • classstring

    verified_bot, malicious_automation, ai_agent, tor, vpn, proxy, relay, hosting ou human.

  • actionstring

    L'action de votre politique pour la classe : allow, flag ou block.

  • modestring

    monitor ou enforce. En mode monitor, c'est à vous de décider quoi faire d'un block.

  • confidencenumber

    Confiance de 0 à 1.

  • networkobject

    classification, anonymized, provider et vpn_provider. provider et vpn_provider à partir de Starter, null sur Free.

  • network.vpn_providerstring | null

    Service VPN d'une adresse vpn (NordVPN, Mullvad...), si connu. À partir de Starter, null sur Free.

  • signalsstring[]

    Les indices d'automatisation déclenchés, comme webdriver. Vide pour un visiteur normal.

  • hostnamestring

    Le nom d'hôte de la page pour laquelle le jeton a été émis.

  • issued_atstring

    Date d'émission du jeton, ISO 8601.

  • ip_matchboolean

    False quand remote_ip est envoyé et diffère de l'adresse pour laquelle le jeton a été émis.

  • lockedstring[]

    Chemins pointés des champs envoyés à null avec cette formule. Absent à partir de Starter.

  • planRequiredstring

    Formule qui inclut les champs verrouillés. Absent à partir de Starter.

  • errorstring

    Avec success à false : 400 missing_token, invalid_token, expired_token, already_used ou hostname_mismatch ; 401 invalid_secret.

curl -X POST https://ipscanner.io/v1/gate/verify \
  -H "Content-Type: application/json" \
  -d '{
    "secret": "gs_YOUR_GATE_SECRET",
    "token": "Z3RfNGZROG5aMmtMbTd4UjF2VDljQnd8MTc2MDAwMDAwMHxrM3Z4.Qm9yZGVyIGNvbGxpZQ",
    "remote_ip": "203.0.113.7"
  }'
Réponse
{
  "success": true,
  "class": "human",
  "action": "allow",
  "mode": "enforce",
  "confidence": 0.6,
  "network": {
    "classification": "residential_clean",
    "anonymized": false,
    "provider": null,
    "vpn_provider": null
  },
  "signals": [],
  "hostname": "shop.example.com",
  "issued_at": "2026-10-09T09:30:00Z",
  "ip_match": true
}