Skip to main content

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.

Use a secret key client for campaign methods.
import (
  "context"
  "os"

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

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

List campaigns (Campaigns.List)

page := 1
pageSize := 20
status := "DRAFT"

campaigns, err := client.Campaigns.List(ctx, &mailglyph.ListCampaignsParams{
  Page: &page,
  PageSize: &pageSize,
  Status: &status,
})
if err != nil {
  panic(err)
}

println(campaigns.Total, campaigns.TotalPages, len(campaigns.Data))

Create a campaign (Campaigns.Create)

Audience: all contacts

campaignAll, err := client.Campaigns.Create(ctx, &mailglyph.CreateCampaignParams{
  Name: "Launch campaign",
  Subject: "Introducing our new feature",
  Body: "<h1>Big news</h1><p>Check out what is new.</p>",
  From: "hello@your-verified-domain.com",
  AudienceType: "ALL",
})
if err != nil {
  panic(err)
}

println(campaignAll.ID, campaignAll.Status)

Audience: filtered contacts

campaignFiltered, err := client.Campaigns.Create(ctx, &mailglyph.CreateCampaignParams{
  Name: "Subscribed users campaign",
  Subject: "Feature update",
  Body: "<p>Only subscribed users receive this.</p>",
  From: "hello@your-verified-domain.com",
  AudienceType: "FILTERED",
  AudienceCondition: &mailglyph.FilterCondition{
    Logic: "AND",
    Groups: []mailglyph.FilterGroup{
      {
        Filters: []mailglyph.SegmentFilter{
          {Field: "subscribed", Operator: "equals", Value: true},
        },
      },
    },
  },
})
if err != nil {
  panic(err)
}

println(campaignFiltered.ID)

Audience: segment

segmentID := "seg_123"

campaignSegment, err := client.Campaigns.Create(ctx, &mailglyph.CreateCampaignParams{
  Name: "Segment campaign",
  Subject: "Offer for premium users",
  Body: "<p>This goes to one saved segment.</p>",
  From: "hello@your-verified-domain.com",
  AudienceType: "SEGMENT",
  SegmentID: &segmentID,
})
if err != nil {
  panic(err)
}

println(campaignSegment.ID)

Get one campaign (Campaigns.Get)

campaign, err := client.Campaigns.Get(ctx, campaignAll.ID)
if err != nil {
  panic(err)
}

println(campaign.Name, campaign.Status)

Update a campaign (Campaigns.Update)

subject := "Updated subject line"
replyTo := "support@your-verified-domain.com"

updated, err := client.Campaigns.Update(ctx, campaignAll.ID, &mailglyph.UpdateCampaignParams{
  Subject: &subject,
  ReplyTo: &replyTo,
})
if err != nil {
  panic(err)
}

println(updated.Subject)

Send a campaign now (Campaigns.Send)

sendResult, err := client.Campaigns.Send(ctx, campaignAll.ID, nil)
if err != nil {
  panic(err)
}

println(sendResult.Success, sendResult.Message)

Schedule a campaign (Campaigns.Send with SendCampaignParams)

scheduledFor := "2026-03-01T10:00:00Z"

scheduledResult, err := client.Campaigns.Send(ctx, campaignAll.ID, &mailglyph.SendCampaignParams{
  ScheduledFor: &scheduledFor,
})
if err != nil {
  panic(err)
}

println(scheduledResult.Success, scheduledResult.Message)

Send a test email (Campaigns.Test)

testResult, err := client.Campaigns.Test(ctx, campaignAll.ID, "preview@example.com")
if err != nil {
  panic(err)
}

println(testResult.Success, testResult.Message)

Fetch campaign stats (Campaigns.Stats)

stats, err := client.Campaigns.Stats(ctx, campaignAll.ID)
if err != nil {
  panic(err)
}

println(stats.Success)

Cancel a scheduled campaign (Campaigns.Cancel)

cancelled, err := client.Campaigns.Cancel(ctx, campaignAll.ID)
if err != nil {
  panic(err)
}

println(cancelled.Success, cancelled.Message)
See full details in the Campaigns API reference.