Branchez Domania à votre stack
Une API REST en lecture et écriture pour piloter votre portefeuille, et des webhooks sortants pour être prévenu en temps réel. JSON, authentification par clé Bearer, signatures HMAC. Gratuit pendant la bêta (jusqu'au 01/09/2026), puis inclus dans les plans payants.
Authentification
Créez une clé depuis votre espace, rubrique API & clés, puis envoyez-la dans l'en-tête Authorization. Base : https://domania.fr/api/v1.
curl -H "Authorization: Bearer dom_live_VOTRE_CLE" \
"https://domania.fr/api/v1/domains?expiring_in_days=30"Limite : 120 requêtes/minute par clé. Les clés ont un scope read ou read+write.
Endpoints
/domainsLister les domaines (filtres q, status, expiring_in_days, pagination)./domainsAjouter un domaine.write/domains/:idDétail d'un domaine./domains/:idSupprimer un domaine.write/domains/:id/refreshForcer un relevé WHOIS.write/watchlistLister les domaines surveillés./watchlistSurveiller un domaine.write/watchlist/:idRetirer de la surveillance.write/finances/summaryRésumé financier annualisé.Webhooks sortants
Déclarez une URL HTTPS et Domania y enverra une requête POSTà chaque événement — l'inverse de l'API : vous êtes prévenu sans rien interroger.
domain.expiringUn domaine atteint un palier d'alerte (J‑30 / J‑7 / J‑1 / expiré).ssl.expiringLe certificat SSL d'un domaine atteint un palier d'alerte (J‑30 / J‑7 / J‑1 / expiré).site.downLe site d'un domaine ne répond plus (après plusieurs échecs consécutifs).site.upLe site d'un domaine est de nouveau accessible.watch.availableUn domaine surveillé vient de devenir disponible.typosquat.detectedUn domaine proche d'une marque surveillée vient d'être enregistré.Vérifier la signature
Chaque requête porte un en-tête X-Domania-Signature: sha256=… : le HMAC-SHA256 du corps brut avec votre secret. Recalculez-le et comparez.
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(rawBody, header, secret) {
const expected = "sha256=" + createHmac("sha256", secret)
.update(rawBody).digest("hex");
const a = Buffer.from(header);
const b = Buffer.from(expected);
return a.length === b.length && timingSafeEqual(a, b);
}Corps reçu : { "event": "domain.expiring", "data": { … }, "sentAt": "…" }. En-tête X-Domania-Event= le nom de l'événement. Délai d'attente : 10 s.