Endpoint Classify

L'endpoint classify analyse une adresse email ou un domaine et retourne les informations du fournisseur et les details de classification.

Requete

GET /v1/classify

Parametres de requete

| Parametre | Type | Requis | Description | |---|---|---|---| | email | string | Oui* | L'adresse email a classifier | | domain | string | Oui* | Le domaine a classifier | | enrich | string | Non | Mettre a true pour inclure les informations sur l'entreprise du domaine |

*Au moins un des parametres email ou domain doit etre fourni. Si les deux sont fournis, le domaine de l'email prevaut.

Exemples

cURL

# Classifier par email
curl -H "Authorization: Bearer sk_live_VOTRE_CLE" \
  "https://emailkind.com/v1/[email protected]"

# Classifier par domaine
curl -H "Authorization: Bearer sk_live_VOTRE_CLE" \
  "https://emailkind.com/v1/classify?domain=google.com"

# Classifier avec enrichissement entreprise
curl -H "Authorization: Bearer sk_live_VOTRE_CLE" \
  "https://emailkind.com/v1/classify?domain=stripe.com&enrich=true"

Python SDK

from emailkind import EmailKind

client = EmailKind("sk_live_VOTRE_CLE")
result = client.classify(email="[email protected]")

if result.classification.is_disposable:
    print("Bloque : email jetable")
elif result.classification.is_business:
    print(f"Email pro de {result.provider.name}")

Node.js SDK

import EmailKind from 'emailkind';

const client = new EmailKind('sk_live_VOTRE_CLE');
const result = await client.classify({ email: '[email protected]' });

if (result.classification.is_disposable) {
  console.log('Bloque : email jetable');
} else if (result.classification.is_business) {
  console.log('Email pro de', result.provider.name);
}

Go SDK

client := emailkind.NewClient("sk_live_VOTRE_CLE")
result, _ := client.Classify(ctx, &emailkind.ClassifyParams{
    Email: "[email protected]",
})

if result.Classification.IsDisposable {
    fmt.Println("Bloque : email jetable")
} else if result.Classification.IsBusiness {
    fmt.Println("Email pro de", result.Provider.Name)
}

PHP

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://emailkind.com/v1/classify?" . http_build_query(["email" => "[email protected]"]),
    CURLOPT_HTTPHEADER => ["Authorization: Bearer sk_live_VOTRE_CLE"],
    CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if ($result["classification"]["is_disposable"]) {
    echo "Bloque : email jetable";
}

Ruby

require "net/http"
require "json"

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) }
data = JSON.parse(res.body)

Reponse

{
  "success": true,
  "request_id": "req_abc123",
  "email": "[email protected]",
  "domain": "gmail.com",
  "provider": {
    "id": "gmail",
    "name": "Gmail",
    "type": "personal"
  },
  "classification": {
    "is_business": false,
    "is_free": true,
    "is_disposable": false,
    "is_education": false,
    "is_custom_domain": false,
    "is_role": false
  },
  "mx": [
    "gmail-smtp-in.l.google.com",
    "alt1.gmail-smtp-in.l.google.com"
  ],
  "confidence": 0.98,
  "cached": true
}

Reponse avec enrichissement (enrich=true)

{
  "success": true,
  "request_id": "req_def456",
  "domain": "stripe.com",
  "provider": {
    "id": "google_workspace",
    "name": "Google Workspace",
    "type": "business"
  },
  "classification": {
    "is_business": true,
    "is_free": false,
    "is_disposable": false,
    "is_education": false,
    "is_custom_domain": true,
    "is_role": false
  },
  "company": {
    "name": "Stripe, Inc",
    "source": "ssl",
    "has_favicon": true
  },
  "mx": ["aspmx.l.google.com"],
  "confidence": 0.98,
  "cached": true
}

Champs de reponse

| Champ | Type | Description | |---|---|---| | success | boolean | Si la requete a reussi | | request_id | string | Identifiant unique de la requete pour le support | | email | string | L'email soumis (vide si requete par domaine uniquement) | | normalized_email | string | Adresse canonique du mailbox — present uniquement si un email a ete soumis et que les regles d'alias du fournisseur l'ont modifie (voir Normalisation des alias) | | domain | string | Le domaine analyse | | provider.id | string | Identifiant unique du fournisseur (ex. google_workspace, gmail, microsoft_365) | | provider.name | string | Nom lisible du fournisseur | | provider.type | string | Un parmi : business, personal, disposable, hosting, education, isp, self_hosted, unknown | | classification.is_business | boolean | Vrai si l'email est professionnel | | classification.is_free | boolean | Vrai si le fournisseur est gratuit | | classification.is_disposable | boolean | Vrai si l'email est jetable/temporaire | | classification.is_education | boolean | Vrai si le domaine appartient a un etablissement educatif | | classification.is_custom_domain | boolean | Vrai si le domaine utilise un fournisseur connu | | classification.is_role | boolean | Vrai si la partie locale est un compte de role/fonctionnel (info@, support@, sales@, ...). Toujours false pour les requetes par domaine uniquement | | mx | string[] | Enregistrements MX trouves pour le domaine | | confidence | number | Score de confiance de 0.0 a 1.0 | | cached | boolean | Si le resultat DNS provient du cache | | company | object | Informations sur l'entreprise (present uniquement avec enrich=true) | | company.name | string | Nom de l'entreprise resolu a partir du domaine | | company.source | string | Source de resolution : ssl, website, rdap ou domain | | company.has_favicon | boolean | Si le domaine sert un favicon (signal de site web actif) |

Sources d'enrichissement entreprise

| Source | Description | Fiabilite | |---|---|---| | ssl | Champ Organisation du certificat TLS (certificats EV/OV) | Haute — nom legal officiel | | website | Extrait des balises meta OpenGraph (og:site_name, og:title) ou <title> | Moyenne — peut inclure des slogans | | rdap | Organisation du registrant WHOIS/RDAP | Moyenne — souvent masque (RGPD) | | domain | Derive du nom de domaine (fallback pour les sites proteges anti-bot) | Basse — capitalisation automatique |

Types de fournisseurs

| Type | Description | Exemples | |---|---|---| | business | Fournisseur email professionnel | Google Workspace, Microsoft 365, Zoho | | personal | Email personnel gratuit | Gmail, Outlook.com, Yahoo Mail | | disposable | Email temporaire/jetable | Guerrilla Mail, Mailinator | | hosting | Email d'hebergeur | GoDaddy, OVH, Namecheap | | education | Etablissement educatif | Systemes email universitaires | | isp | Fournisseur d'acces internet | Comcast, AT&T, Vodafone | | self_hosted | Serveur mail auto-heberge | Enregistrements MX personnalises | | unknown | Indeterminable | Aucun enregistrement MX ou fournisseur non reconnu |

Exemples de classification

| Email | Fournisseur | is_business | is_free | is_disposable | is_education | |---|---|---|---|---|---| | [email protected] | Google Workspace | true | false | false | false | | [email protected] | Gmail | false | true | false | false | | [email protected] | Disposable | false | false | true | false | | [email protected] | Microsoft 365 | true | false | false | true | | [email protected] | Yahoo Mail | false | true | false | false | | [email protected] | Cloudflare Email Routing | true | false | false | false |

Comptes de role

Lorsque vous soumettez un email complet, classification.is_role signale les adresses dont la partie locale designe une fonction ou une equipe plutot qu'un individu — info@, support@, sales@, admin@, billing@, etc. La detection repose uniquement sur la partie locale (noms RFC 2142 et conventions B2B courantes), elle est donc toujours false pour les requetes par domaine uniquement.

Un sous-adressage +tag est ignore avant la comparaison : [email protected] est donc bien detecte comme compte de role.

curl -H "Authorization: Bearer sk_live_YOUR_KEY" \
  "https://emailkind.com/v1/[email protected]"
# => "classification": { ..., "is_role": true }

Les comptes de role sont techniquement valides mais meritent souvent un traitement different : routage vers une boite partagee, ou exclusion des essais en self-service.

Normalisation des alias

De nombreux fournisseurs considerent plusieurs adresses litterales comme un seul et meme mailbox. Quand les regles d'alias du fournisseur sont connues, la reponse inclut un champ normalized_email avec la forme canonique. Utile pour dedoublonner les utilisateurs et eviter les inscriptions en double.

| Soumis | normalized_email | Regle | |---|---|---| | [email protected] | [email protected] | Gmail ignore les points et les +tags | | [email protected] | [email protected] | Regle des points Gmail (googlemail.com) | | [email protected] | [email protected] | Sous-adressage +tag | | [email protected] | [email protected] | Sous-adressage +tag |

normalized_email est omis lorsque :

  • seul un domain a ete soumis (pas de partie locale), ou
  • l'adresse soumise est deja canonique, ou
  • le domaine est un domaine personnalise/auto-heberge ou un fournisseur non reconnu.

Nous ne normalisons jamais les domaines personnalises : leurs regles de partie locale nous sont inconnues, et fusionner deux mailboxes distincts serait une erreur destructrice. La normalisation est limitee a une liste de fournisseurs dont les regles d'alias sont documentees et stables (Gmail/Google, Outlook/Hotmail/Live, iCloud, Yahoo, Proton, Fastmail).

Domaines internationalises (IDN)

Les domaines Unicode sont acceptes et normalises vers leur forme ASCII (punycode) avant la resolution, de sorte que café.fr et xn--caf-dma.fr sont traites de maniere identique. Le champ domain de la reponse est toujours renvoye dans sa forme ASCII canonique.