Skip to main content

Go Integration

package main

import (
"encoding/json"
"fmt"
"net/http"
"time"
)

type Confidence struct {
ConfidenceScore int `json:"confidence_score"`
Status string `json:"status"`
AliasStatus string `json:"alias_status"`
CanonicalEmail string `json:"canonical_email"`
IsRoleBased bool `json:"is_role_based"`
}

type ValidationResponse struct {
Confidence Confidence `json:"confidence"`
Validations struct {
IsDisposable bool `json:"is_disposable"`
} `json:"validations"`
}

func ValidateEmail(email string, apiKey string) (bool, error) {
client := &http.Client{Timeout: 10 * time.Second}
req, _ := http.NewRequest("GET", "https://api.checkemail.dev/validate", nil)

q := req.URL.Query()
q.Add("email", email)
req.URL.RawQuery = q.Encode()

req.Header.Add("x-api-key", apiKey)

resp, err := client.Do(req)
if err != nil {
return false, err
}
defer resp.Body.Close()

if resp.StatusCode != 200 {
return false, fmt.Errorf("API Error: %d", resp.StatusCode)
}

var data ValidationResponse
json.NewDecoder(resp.Body).Decode(&data)

// Block burners
if data.Confidence.Status == "DISPOSABLE" || data.Validations.IsDisposable {
return false, nil
}

// Logic to prevent duplicate trials via aliases
if data.Confidence.AliasStatus == "ALIAS_CONFIRMED" {
fmt.Printf("Canonical email: %s\n", data.Confidence.CanonicalEmail)
}

return data.Confidence.Status == "LIKELY", nil
}

func main() {
isValid, _ := ValidateEmail("[email protected]", "ce_d_YOUR_KEY")
fmt.Println("Is Valid:", isValid)
}