Bonjour … 👋

Voici l'activité de vos vérifications OTP.

Plan actuel
…
Vérifications ce mois
0
Total envoyés
0
Vérifiés
0
Échoués / verrouillés
0
En attente
0

14 derniers jours

Envoyés Vérifiés

Vérifications

Les 50 derniers événements OTP sur vos clés.

DateCanalDestinataireÉvénementDemande
Chargement…

Clés API & intégration

La clé complète n'est affichée qu'une fois, à sa création.

NomCléCréée le
Chargement…

Intégration dans votre application

Deux appels suffisent — la clé sert d'en-tête X-API-Key. Guide complet : docs → Intégration A→Z.

cURL
curl -X POST https://votre-domaine.fr/v1/otp/request \
  -H "X-API-Key: pvk_…" -H "Content-Type: application/json" \
  -d '{"phone":"+33612345678","channel":"telegram","fallback_channels":["whatsapp"]}'

curl -X POST https://votre-domaine.fr/v1/otp/verify \
  -H "X-API-Key: pvk_…" -H "Content-Type: application/json" \
  -d '{"request_id":"…","code":"123456"}'
node.js
const API = "https://votre-domaine.fr", KEY = process.env.OTP_KEY;

async function requestOtp(phone) {
  const r = await fetch(`${API}/v1/otp/request`, {
    method: "POST",
    headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
    body: JSON.stringify({ phone, channel: "telegram",
                           fallback_channels: ["whatsapp"] }),
  });
  const d = await r.json();
  if (!r.ok) throw new Error(JSON.stringify(d)); // voir d.channel_errors
  return d.request_id;                 // stockez côté serveur
}

async function verifyOtp(request_id, code) {
  const r = await fetch(`${API}/v1/otp/verify`, {
    method: "POST",
    headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
    body: JSON.stringify({ request_id, code }),
  });
  return (await r.json()).status === "verified";
}
python
import httpx, os

API, KEY = "https://votre-domaine.fr", os.environ["OTP_KEY"]
H = {"X-API-Key": KEY}

def request_otp(phone: str) -> str:
    r = httpx.post(f"{API}/v1/otp/request", headers=H, json={
        "phone": phone, "channel": "telegram",
        "fallback_channels": ["whatsapp"],
    }, timeout=15)
    r.raise_for_status()
    return r.json()["request_id"]

def verify_otp(request_id: str, code: str) -> bool:
    r = httpx.post(f"{API}/v1/otp/verify", headers=H, json={
        "request_id": request_id, "code": code,
    }, timeout=15)
    return r.json().get("status") == "verified"

Numéro émetteur

Le numéro / bot qui ENVOIE vos OTP. Les numéros saisis dans la console sont les destinataires.

WhatsApp …

Scannez le QR avec le numéro WhatsApp qui enverra les codes (Appareils connectés → Connecter un appareil). Vous pouvez changer de numéro à tout moment.

Telegram …

Créez un bot via @BotFather (/newbot) puis collez son token ci-dessous. Vos destinataires devront démarrer CE bot et partager leur contact.

Telegram universel …

Envoyez à n'importe quel numéro sans action du destinataire via un compte Telegram connecté (expérimental — utilisez un compte dédié, risque de bannissement).

Requiert TG_API_ID/TG_API_HASH (my.telegram.org/apps) dans .env + docker compose --profile tg-user up -d.

Console OTP

Testez l'API en direct avec votre clé.

…

Plans & abonnement

Choisissez la formule adaptée à votre volume.

Gratuit

0 € /mois
  • 1 application, 2 clés API
  • 1 canal actif (Telegram)
  • 500 codes OTP / mois
  • Quotas anti-abus intégrés

Entreprise

Sur mesure
  • Déploiement dédié / on-premise
  • SLA et audit de sécurité
  • Adaptateurs sur mesure (SMS, email)
  • SSO / SAML
  • Accompagnement RGPD

Mon entreprise

Informations affichées sur votre espace.

Placeholders : {company} {code} {minutes}. Vide = message par défaut.