Skip to main content
Use a secret key client for campaign methods.
import (
  "context"
  "os"

  mailrify "github.com/Mailrify/mailrify-go"
)

client := mailrify.New(os.Getenv("MAILRIFY_SECRET_KEY"))
ctx := context.Background()

List campaigns (Campaigns.List)

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

campaigns, err := client.Campaigns.List(ctx, &mailrify.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, &mailrify.CreateCampaignParams{
  Name: "Launch campaign",
  Subject: "Introducing our new feature",
  Body: "<h1>Big news</h1><p>Check out what is new.</p>",
  From: "[email protected]",
  AudienceType: "ALL",
})
if err != nil {
  panic(err)
}

println(campaignAll.ID, campaignAll.Status)

Audience: filtered contacts

campaignFiltered, err := client.Campaigns.Create(ctx, &mailrify.CreateCampaignParams{
  Name: "Subscribed users campaign",
  Subject: "Feature update",
  Body: "<p>Only subscribed users receive this.</p>",
  From: "[email protected]",
  AudienceType: "FILTERED",
  AudienceCondition: &mailrify.FilterCondition{
    Logic: "AND",
    Groups: []mailrify.FilterGroup{
      {
        Filters: []mailrify.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, &mailrify.CreateCampaignParams{
  Name: "Segment campaign",
  Subject: "Offer for premium users",
  Body: "<p>This goes to one saved segment.</p>",
  From: "[email protected]",
  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 := "[email protected]"

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

println(updated.Subject)

Send a campaign now (Campaigns.Send)

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

Schedule a campaign (Campaigns.Send with SendCampaignParams)

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

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

Send a test email (Campaigns.Test)

testResult, err := client.Campaigns.Test(ctx, campaignAll.ID, "[email protected]")
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.