Intégration partenaire
Trois appels HTTP, ~30 minutes d'intégration. Tous les appels sont serveur-vers-serveur, authentifiés par une clé API.
1. Obtenir une clé API
L'accès est ouvert manuellement (déploiement contrôlé). Le parcours :
- Demander un accès à
admin@altcheck.euen précisant secteur, niveau de vérification et volume estimé. - Signer la convention de traitement (DPA) reçue par email, par accusé de réception à
dpo@altcheck.eu. - AltCheck active votre compte et vous transmet une clé
altcheck_<hex>à stocker côté serveur uniquement. La clé n'est jamais récupérable : conservez-la dès réception.
Le flow_id associé (niveau de vérification) est fixé avec vous à l'activation ; vous pouvez aussi le préciser par ticket (cf. §2).
2. Créer un ticket de vérification
Quand un visiteur souhaite accéder à une zone protégée, votre serveur crée un ticket et reçoit une URL à présenter au visiteur.
curl
curl -X POST https://api.altcheck.eu/partner/verifications \
-H "X-API-Key: altcheck_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{"external_user_id":"user_42","flow_id":"age_strict_fr_18"}'
Python (requests)
import requests
r = requests.post(
"https://api.altcheck.eu/partner/verifications",
headers={"X-API-Key": "altcheck_VOTRE_CLE"},
json={"external_user_id": "user_42", "flow_id": "age_strict_fr_18"},
timeout=10,
)
r.raise_for_status()
ticket = r.json()
# {ticket_id, verification_url, expires_at, status, flow_id}
Node.js (fetch)
const r = await fetch("https://api.altcheck.eu/partner/verifications", {
method: "POST",
headers: {
"X-API-Key": "altcheck_VOTRE_CLE",
"Content-Type": "application/json",
},
body: JSON.stringify({
external_user_id: "user_42",
flow_id: "age_strict_fr_18",
}),
});
const ticket = await r.json();
Réponse 201 Created :
{
"ticket_id": "5a8e9...",
"verification_url": "https://api.altcheck.eu/static/visitor/?vt=5a8e9...",
"expires_at": "2026-06-18T12:00:00+00:00",
"status": "pending",
"flow_id": "age_strict_fr_18"
}
external_user_id est votre identifiant interne pour ce visiteur. flow_id détermine la politique de décision : age_strict_fr_18 (France/UE, 18 ans), age_strict_kr_19 (19), age_strict_jp_20 (20), age_strict_us_21 (US, 21), identity_basic (selfie + photo pièce), identity_strict (selfie + pièce recto/verso + selfie tenant la pièce), kyc_full (vérification complète). Le niveau accessible dépend de votre contrat.
3. Présenter au visiteur
Trois modes au choix, par ordre de robustesse :
- Popup (recommandé) :
window.open(verification_url, "AltCheck", "width=420,height=720"). Le visiteur garde votre page ouverte. Vous écoutezpostMessagepour détecter la fin. - Redirect :
location.href = verification_urlavec une page de retour côté partenaire. Préférer si vous gérez déjà des flows de redirection (OAuth, paiement). - iframe : possible mais déconseillé — les permissions caméra varient selon les navigateurs et les politiques cross-origin.
4. Récupérer l'outcome
Polling côté serveur, intervalle 2 secondes recommandé jusqu'à statut terminal (TTL ticket par défaut : 10 min).
curl https://api.altcheck.eu/partner/verifications/5a8e9... \
-H "X-API-Key: altcheck_VOTRE_CLE"
Statut pending tant que le visiteur n'a pas fini. Statut completed quand une décision est prise :
{
"ticket_id": "5a8e9...",
"status": "completed",
"outcome": {
"decision": "ADULT",
"is_adult": true,
"confidence": 0.92,
"jwt": "eyJhbGciOiJFZERTQSI..."
}
}
Autres statuts terminaux : expired (TTL atteint sans décision), cancelled (annulé via POST /partner/verifications/<id>/cancel).
5. Vérifier le JWT côté serveur
Le champ outcome.jwt est signé Ed25519. Récupérer la clé publique une fois, mettre en cache :
curl https://api.altcheck.eu/partner/pubkey
# {"public_key_pem": "-----BEGIN PUBLIC KEY-----\nMCowBQ..."}
Vérification avec une librairie EdDSA (PyJWT, jose, jsonwebtoken). Claims attendus :
{
"decision_id": "uuid-v4",
"decision": "ADULT",
"stage_decided": "prefilter_adult25",
"confidence": 0.92,
"partner_domain": "votredomaine.com",
"iat": 1718600000,
"exp": 1718600300,
"iss": "altcheck.eu",
"claims": {"age_gte_18": true}
}
TTL par défaut : 300 secondes. Vérifier exp et iss strictement côté serveur.
Sécurité
- La clé API ne doit jamais transiter par le navigateur. Tous les appels ci-dessus sont serveur-vers-serveur.
- Le JWT est destiné à votre serveur. Ne le relayez pas au client autrement que sous forme d'une session signée par vous.
- HTTPS obligatoire sur tous les endpoints.
- Conservez le
decision_id(présent dans le JWT) : il est requis pour toute demande RGPD ultérieure du visiteur.
Support
Questions techniques et recours RGPD : dpo@altcheck.eu.
Pour une demande de suppression d'un visiteur, joindre le decision_id issu du JWT.