> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mailglyph.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Email Validation

> Validate email addresses, run bulk validation jobs, and inspect credits with the MailGlyph Go SDK.

Use a **secret key** client for Email Validation.

```go theme={null}
import (
  "context"
  "os"

  mailglyph "github.com/MailGlyph/mailglyph-go"
)

client := mailglyph.New(os.Getenv("MAILGLYPH_SECRET_KEY"))
ctx := context.Background()
```

## Validate one address

```go theme={null}
result, err := client.Verification.Validate(ctx, "user@example.com")
if err != nil {
  panic(err)
}

println(result.Data.Valid)
println(result.Data.ValidationMethod)
println(result.Data.SMTPStatus)
println(result.Data.CreditsConsumed)
```

`client.Emails.Verify(ctx, email)` is also available as a convenience method for single-address validation.

## Handle typo suggestions

```go theme={null}
result, err := client.Verification.Validate(ctx, "user@gmial.com")
if err != nil {
  panic(err)
}

if result.Data.IsTypo && result.Data.SuggestedEmail != nil {
  println("Did you mean:", *result.Data.SuggestedEmail)
}
```

## Create a bulk validation job

```go theme={null}
import "strings"

job, err := client.Verification.CreateBulk(ctx, &mailglyph.CreateBulkEmailValidationParams{
  Filename: "emails.csv",
  Content:  strings.NewReader("email\nalice@example.com\nbob@example.com\n"),
})
if err != nil {
  panic(err)
}

println(job.Data.ID)
println(job.Data.Status)
println(job.Data.ReservedCredits)
```

## List and poll jobs

```go theme={null}
jobs, err := client.Verification.ListBulk(ctx, &mailglyph.ListBulkEmailValidationsParams{
  Limit: intPtr(20),
})
if err != nil {
  panic(err)
}

currentJob, err := client.Verification.GetBulk(ctx, job.Data.ID)
if err != nil {
  panic(err)
}

println(jobs.Data.NextCursor)
println(currentJob.Data.Status, currentJob.Data.ReadyForDownload)
```

If a job pauses because more credits are required, continue it after adding credits:

```go theme={null}
if currentJob.Data.Status == "ACTION_REQUIRED" {
  _, err = client.Verification.ContinueBulk(ctx, currentJob.Data.ID)
  if err != nil {
    panic(err)
  }
}
```

## Download results

```go theme={null}
if currentJob.Data.ReadyForDownload {
  download, err := client.Verification.DownloadBulk(ctx, currentJob.Data.ID, &mailglyph.DownloadBulkEmailValidationParams{
    Filter: strPtr("valid"),
    Format: strPtr("csv"),
  })
  if err != nil {
    panic(err)
  }

  println(download.ContentType, len(download.Content))
}
```

Download filters are `all`, `valid`, `invalid`, `unknown`, and `catchall`. Filtered downloads are CSV only. XLS is available only when `Filter` is `all`.

## Delete a job

```go theme={null}
deleted, err := client.Verification.DeleteBulk(ctx, currentJob.Data.ID)
if err != nil {
  panic(err)
}

println(deleted.Data.RefundedCredits)
```

Jobs can be deleted only when they are not actively uploading or processing.

## Check credits

```go theme={null}
credits, err := client.Verification.GetCredits(ctx)
if err != nil {
  panic(err)
}

ledger, err := client.Verification.ListCreditLedger(ctx, &mailglyph.ListVerificationCreditLedgerParams{
  Limit: intPtr(25),
})
if err != nil {
  panic(err)
}

println(credits.Data.Balance, credits.Data.LowCredits)
println(len(ledger.Data.Items), ledger.Data.NextCursor)
```

```go theme={null}
func intPtr(v int) *int       { return &v }
func strPtr(v string) *string { return &v }
```

See full endpoint details in the [Email Validation API reference](https://docs.mailglyph.com/api-reference/verifications/verifyEmail.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.