Authentification
Toutes les requetes API necessitent une authentification via une cle API transmise dans l'en-tete Authorization.
Format de la cle API
Les cles utilisent le format sk_live_ suivi de 64 caracteres hexadecimaux :
sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789...
Utiliser votre cle
Incluez la cle dans l'en-tete Authorization avec le schema Bearer :
cURL
curl -H "Authorization: Bearer sk_live_VOTRE_CLE" \
"https://emailkind.com/v1/[email protected]"
JavaScript
const response = await fetch(
"https://emailkind.com/v1/[email protected]",
{
headers: {
Authorization: "Bearer sk_live_VOTRE_CLE",
},
}
);
const data = await response.json();
Python
import requests
response = requests.get(
"https://emailkind.com/v1/classify",
params={"email": "[email protected]"},
headers={"Authorization": "Bearer sk_live_VOTRE_CLE"}
)
data = response.json()
PHP
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://emailkind.com/v1/[email protected]",
CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_VOTRE_CLE"],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
Go
req, _ := http.NewRequest("GET", "https://emailkind.com/v1/[email protected]", nil)
req.Header.Set("Authorization", "Bearer sk_live_VOTRE_CLE")
resp, err := http.DefaultClient.Do(req)
Ruby
uri = URI("https://emailkind.com/v1/[email protected]")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer sk_live_VOTRE_CLE"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
Gestion des cles
Vous pouvez gerer vos cles API depuis le Tableau de bord :
- Creer de nouvelles cles avec des noms descriptifs (ex. "Production", "Staging")
- Revoquer les cles compromises ou inutilisees
- Consulter les prefixes et dates de derniere utilisation
Bonnes pratiques de securite
| A faire | A eviter | |---|---| | Stocker les cles dans des variables d'environnement | Commiter les cles dans le controle de version | | Utiliser des cles differentes par environnement | Partager les cles entre applications | | Revoquer les cles inutilisees | Logger les cles completes | | Renouveler les cles periodiquement | Exposer les cles cote client |
Limites de cles par plan
| Plan | Cles API max | |---|---| | Gratuit | 1 | | Starter | 3 | | Growth | 5 | | Scale | 10 |
Liste blanche d'IPs
Vous pouvez restreindre chaque cle API a des adresses IP specifiques pour renforcer la securite. Les requetes provenant d'IPs non autorisees seront rejetees avec une reponse 403 Forbidden.
Configuration
- Allez dans Tableau de bord > Cles API
- Cliquez sur le bouton IPs a cote de votre cle
- Entrez une adresse IP ou plage CIDR par ligne
- Cliquez sur Enregistrer les restrictions IP
Formats supportes
| Format | Exemple | Description |
|---|---|---|
| IPv4 | 203.0.113.1 | Adresse IP unique |
| IPv6 | 2001:db8::1 | Adresse IPv6 unique |
| CIDR | 10.0.0.0/8 | Plage IP (tout 10.x.x.x) |
| CIDR v6 | 2001:db8::/32 | Plage IPv6 |
Laissez la liste vide pour autoriser les requetes depuis n'importe quelle IP (par defaut).
Reponse d'erreur
{
"success": false,
"error": {
"code": "IP_NOT_ALLOWED",
"message": "Your IP address is not in the allowlist for this API key"
}
}
Webhooks
EmailKind peut notifier votre application via des webhooks lorsque la classification d'un domaine change. Utile pour garder vos donnees a jour sans polling.
Configuration
- Allez dans Tableau de bord > Webhooks
- Entrez l'URL de votre endpoint (HTTPS recommande)
- Copiez et stockez le secret de signature en securite
Evenements
| Evenement | Description |
|---|---|
| domain.changed | Le type de fournisseur d'un domaine a change depuis la derniere classification |
Format du payload
{
"event": "domain.changed",
"timestamp": "2025-01-15T10:30:00Z",
"data": {
"domain": "example.com",
"old_type": "business",
"new_type": "disposable",
"provider_id": "mailinator",
"provider_name": "Mailinator"
}
}
Verification des signatures
Chaque requete webhook inclut un en-tete X-EmailKind-Signature contenant une signature HMAC-SHA256 du corps du payload :
X-EmailKind-Signature: sha256=5d41402abc4b2a76b9719d911017c592...
Verifiez la signature avec votre secret :
import hmac, hashlib
def verify_signature(payload, signature, secret):
expected = "sha256=" + hmac.new(
secret.encode(), payload, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
Reponse d'erreur
Si l'authentification echoue, vous recevrez une reponse 401 Unauthorized :
{
"success": false,
"request_id": "req_abc123",
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key"
}
}