Documentation
¶
Overview ¶
Package lettr provides a Go client for the Lettr Email API.
Create a client with your API key, then use the service objects to interact with the API:
client := lettr.NewClient("your-api-key")
sent, err := client.Emails.Send(ctx, &lettr.SendEmailRequest{
From: "sender@example.com",
To: []string{"recipient@example.com"},
Subject: "Hello from Lettr",
Html: "<h1>Hello!</h1>",
})
Index ¶
- Constants
- func IsNotFound(err error) bool
- func IsUnauthorized(err error) bool
- func IsValidationError(err error) bool
- type Attachment
- type AuthCheckData
- type AuthCheckResponse
- type CancelScheduledResponse
- type Client
- type CreateDomainData
- type CreateDomainRequest
- type CreateDomainResponse
- type CreateTemplateData
- type CreateTemplateRequest
- type CreateTemplateResponse
- type CreateWebhookRequest
- type CreateWebhookResponse
- type CursorPagination
- type DeleteTemplateParams
- type DeleteTemplateResponse
- type DeleteWebhookResponse
- type DmarcValidationResult
- type DnsProviderInfo
- type Domain
- type DomainDKIM
- type DomainDNS
- type DomainDetail
- type DomainDnsVerificationView
- type DomainService
- func (s *DomainService) Create(ctx context.Context, params *CreateDomainRequest) (*CreateDomainResponse, error)
- func (s *DomainService) Delete(ctx context.Context, domain string) error
- func (s *DomainService) Get(ctx context.Context, domain string) (*GetDomainResponse, error)
- func (s *DomainService) List(ctx context.Context) (*ListDomainsResponse, error)
- func (s *DomainService) Verify(ctx context.Context, domain string) (*VerifyDomainResponse, error)
- type DomainVerificationView
- type EmailEvent
- type EmailService
- func (s *EmailService) CancelScheduled(ctx context.Context, transmissionID string) (*CancelScheduledResponse, error)
- func (s *EmailService) Get(ctx context.Context, requestID string, params *GetEmailParams) (*GetEmailResponse, error)
- func (s *EmailService) GetScheduled(ctx context.Context, transmissionID string) (*GetScheduledEmailResponse, error)
- func (s *EmailService) List(ctx context.Context, params *ListEmailsParams) (*ListEmailsResponse, error)
- func (s *EmailService) ListEvents(ctx context.Context, params *ListEmailEventsParams) (*ListEmailEventsResponse, error)
- func (s *EmailService) Schedule(ctx context.Context, params *ScheduleEmailRequest) (*ScheduleEmailResponse, error)
- func (s *EmailService) Send(ctx context.Context, params *SendEmailRequest) (*SendEmailResponse, error)
- type Error
- type GeoIp
- type GetDomainResponse
- type GetEmailParams
- type GetEmailResponse
- type GetMergeTagsData
- type GetMergeTagsParams
- type GetMergeTagsResponse
- type GetScheduledEmailResponse
- type GetTemplateHtmlData
- type GetTemplateHtmlParams
- type GetTemplateHtmlResponse
- type GetTemplateParams
- type GetTemplateResponse
- type GetWebhookResponse
- type HealthCheckData
- type HealthCheckResponse
- type HtmlMergeTag
- type ListDomainsData
- type ListDomainsResponse
- type ListEmailEventsData
- type ListEmailEventsEvents
- type ListEmailEventsParams
- type ListEmailEventsResponse
- type ListEmailsData
- type ListEmailsEvents
- type ListEmailsParams
- type ListEmailsResponse
- type ListProjectsData
- type ListProjectsParams
- type ListProjectsResponse
- type ListTemplatesData
- type ListTemplatesParams
- type ListTemplatesResponse
- type ListWebhooksData
- type ListWebhooksResponse
- type MergeTag
- type MergeTagChild
- type PagePagination
- type Project
- type ProjectService
- type ScheduleEmailData
- type ScheduleEmailRequest
- type ScheduleEmailResponse
- type ScheduledTransmission
- type SendEmailData
- type SendEmailOptions
- type SendEmailRequest
- type SendEmailResponse
- type SpfValidationResult
- type Template
- type TemplateDetail
- type TemplateService
- func (s *TemplateService) Create(ctx context.Context, params *CreateTemplateRequest) (*CreateTemplateResponse, error)
- func (s *TemplateService) Delete(ctx context.Context, slug string, params *DeleteTemplateParams) (*DeleteTemplateResponse, error)
- func (s *TemplateService) Get(ctx context.Context, slug string, params *GetTemplateParams) (*GetTemplateResponse, error)
- func (s *TemplateService) GetHtml(ctx context.Context, params *GetTemplateHtmlParams) (*GetTemplateHtmlResponse, error)
- func (s *TemplateService) GetMergeTags(ctx context.Context, slug string, params *GetMergeTagsParams) (*GetMergeTagsResponse, error)
- func (s *TemplateService) List(ctx context.Context, params *ListTemplatesParams) (*ListTemplatesResponse, error)
- func (s *TemplateService) Update(ctx context.Context, slug string, params *UpdateTemplateRequest) (*UpdateTemplateResponse, error)
- type UpdateTemplateData
- type UpdateTemplateRequest
- type UpdateTemplateResponse
- type UpdateWebhookRequest
- type UpdateWebhookResponse
- type UserAgentParsed
- type VerifyDomainResponse
- type Webhook
- type WebhookService
- func (s *WebhookService) Create(ctx context.Context, params *CreateWebhookRequest) (*CreateWebhookResponse, error)
- func (s *WebhookService) Delete(ctx context.Context, webhookID string) (*DeleteWebhookResponse, error)
- func (s *WebhookService) Get(ctx context.Context, webhookID string) (*GetWebhookResponse, error)
- func (s *WebhookService) List(ctx context.Context) (*ListWebhooksResponse, error)
- func (s *WebhookService) Update(ctx context.Context, webhookID string, params *UpdateWebhookRequest) (*UpdateWebhookResponse, error)
Constants ¶
const (
// Version is the current version of this SDK.
Version = "1.0.0"
)
Variables ¶
This section is empty.
Functions ¶
func IsNotFound ¶
IsNotFound returns true if the error is a 404 Not Found error.
func IsUnauthorized ¶
IsUnauthorized returns true if the error is a 401 Unauthorized error.
func IsValidationError ¶
IsValidationError returns true if the error is a 422 Validation Error.
Types ¶
type Attachment ¶
type Attachment struct {
// Name is the filename of the attachment.
Name string `json:"name"`
// Type is the MIME type of the attachment (e.g. "application/pdf").
Type string `json:"type"`
// Data is the base64-encoded content of the attachment.
Data string `json:"data"`
}
Attachment represents a file attachment on an email.
type AuthCheckData ¶
AuthCheckData contains the auth check details.
type AuthCheckResponse ¶
type AuthCheckResponse struct {
Message string `json:"message"`
Data AuthCheckData `json:"data"`
}
AuthCheckResponse is the response from the auth check endpoint.
type CancelScheduledResponse ¶ added in v0.2.0
type CancelScheduledResponse struct {
Message string `json:"message"`
}
CancelScheduledResponse is the response from cancelling a scheduled email.
type Client ¶
type Client struct {
// Services for different API resources.
Emails *EmailService
Domains *DomainService
Webhooks *WebhookService
Templates *TemplateService
Projects *ProjectService
// contains filtered or unexported fields
}
Client manages communication with the Lettr API.
func NewClient ¶
NewClient creates a new Lettr API client with the given API key. It uses a default HTTP client with a 30-second timeout.
func NewClientWithHTTPClient ¶
NewClientWithHTTPClient creates a new Lettr API client with a custom HTTP client. This is useful for testing or for configuring custom timeouts and transports.
func (*Client) HealthCheck ¶
func (c *Client) HealthCheck(ctx context.Context) (*HealthCheckResponse, error)
HealthCheck verifies that the Lettr API is reachable.
func (*Client) SetBaseURL ¶
SetBaseURL overrides the default base URL. Useful for testing against a mock server.
func (*Client) ValidateAPIKey ¶
func (c *Client) ValidateAPIKey(ctx context.Context) (*AuthCheckResponse, error)
ValidateAPIKey checks whether the configured API key is valid and returns the associated team information.
type CreateDomainData ¶
type CreateDomainData struct {
Domain string `json:"domain"`
Status string `json:"status"`
StatusLabel string `json:"status_label"`
DKIM *DomainDKIM `json:"dkim"`
}
CreateDomainData contains the result of creating a domain.
type CreateDomainRequest ¶
type CreateDomainRequest struct {
// Domain is the domain name to register (e.g. "example.com").
Domain string `json:"domain"`
}
CreateDomainRequest represents the request body for creating a domain.
type CreateDomainResponse ¶
type CreateDomainResponse struct {
Message string `json:"message"`
Data CreateDomainData `json:"data"`
}
CreateDomainResponse is the response from creating a domain.
type CreateTemplateData ¶
type CreateTemplateData struct {
ID int `json:"id"`
Name string `json:"name"`
Slug string `json:"slug"`
ProjectID int `json:"project_id"`
FolderID int `json:"folder_id"`
ActiveVersion int `json:"active_version"`
MergeTags []MergeTag `json:"merge_tags"`
CreatedAt string `json:"created_at"`
}
CreateTemplateData contains the result of creating a template.
type CreateTemplateRequest ¶
type CreateTemplateRequest struct {
// Name is the template name (required).
Name string `json:"name"`
// Html is the HTML content for the template. Mutually exclusive with Json.
Html string `json:"html,omitempty"`
// Json is the Topol editor JSON content. Mutually exclusive with Html.
Json string `json:"json,omitempty"`
// ProjectID specifies which project to create the template in.
ProjectID *int `json:"project_id,omitempty"`
// FolderID specifies which folder within the project.
FolderID *int `json:"folder_id,omitempty"`
}
CreateTemplateRequest represents the request body for creating a template.
type CreateTemplateResponse ¶
type CreateTemplateResponse struct {
Message string `json:"message"`
Data CreateTemplateData `json:"data"`
}
CreateTemplateResponse is the response from creating a template.
type CreateWebhookRequest ¶ added in v0.2.0
type CreateWebhookRequest struct {
Name string `json:"name"`
URL string `json:"url"`
AuthType string `json:"auth_type"`
AuthUsername string `json:"auth_username,omitempty"`
AuthPassword string `json:"auth_password,omitempty"`
OAuthClientID string `json:"oauth_client_id,omitempty"`
OAuthClientSecret string `json:"oauth_client_secret,omitempty"`
OAuthTokenURL string `json:"oauth_token_url,omitempty"`
EventsMode string `json:"events_mode"`
Events []string `json:"events,omitempty"`
}
CreateWebhookRequest represents the request body for creating a webhook.
type CreateWebhookResponse ¶ added in v0.2.0
CreateWebhookResponse is the response from creating a webhook.
type CursorPagination ¶
type CursorPagination struct {
NextCursor *string `json:"next_cursor"`
PerPage int `json:"per_page"`
}
CursorPagination holds cursor-based pagination info.
type DeleteTemplateParams ¶ added in v0.2.0
type DeleteTemplateParams struct {
// ProjectID is the project containing the template.
ProjectID int
}
DeleteTemplateParams contains optional query parameters for deleting a template.
type DeleteTemplateResponse ¶ added in v0.2.0
type DeleteTemplateResponse struct {
Message string `json:"message"`
}
DeleteTemplateResponse is the response from deleting a template.
type DeleteWebhookResponse ¶ added in v0.2.0
type DeleteWebhookResponse struct {
Message string `json:"message"`
}
DeleteWebhookResponse is the response from deleting a webhook.
type DmarcValidationResult ¶ added in v0.2.0
type DmarcValidationResult struct {
IsValid bool `json:"is_valid"`
Status string `json:"status"`
FoundAtDomain *string `json:"found_at_domain"`
Record *string `json:"record"`
Policy *string `json:"policy"`
SubdomainPolicy *string `json:"subdomain_policy"`
Error *string `json:"error"`
CoveredByParentPolicy bool `json:"covered_by_parent_policy"`
}
DmarcValidationResult contains DMARC validation details.
type DnsProviderInfo ¶ added in v0.2.0
type DnsProviderInfo struct {
Provider string `json:"provider"`
ProviderLabel string `json:"provider_label"`
Nameservers []string `json:"nameservers"`
Error *string `json:"error"`
}
DnsProviderInfo contains detected DNS provider information for a domain.
type Domain ¶
type Domain struct {
Domain string `json:"domain"`
Status string `json:"status"`
StatusLabel string `json:"status_label"`
CanSend bool `json:"can_send"`
CnameStatus *string `json:"cname_status"`
DkimStatus *string `json:"dkim_status"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
Domain represents a sending domain.
type DomainDKIM ¶
type DomainDKIM struct {
Selector string `json:"selector"`
Public string `json:"public"`
Headers string `json:"headers,omitempty"`
SigningDomain string `json:"signing_domain,omitempty"`
}
DomainDKIM contains the DKIM DNS record details.
type DomainDNS ¶
type DomainDNS struct {
DKIM *DomainDKIM `json:"dkim"`
}
DomainDNS contains the DNS records for a domain.
type DomainDetail ¶
type DomainDetail struct {
Domain string `json:"domain"`
Status string `json:"status"`
StatusLabel string `json:"status_label"`
CanSend bool `json:"can_send"`
CnameStatus *string `json:"cname_status"`
DkimStatus *string `json:"dkim_status"`
SpfStatus *string `json:"spf_status"`
DmarcStatus *string `json:"dmarc_status"`
TrackingDomain *string `json:"tracking_domain"`
DnsProvider *DnsProviderInfo `json:"dns_provider"`
IsPrimaryDomain bool `json:"is_primary_domain"`
DNS *DomainDNS `json:"dns"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
DomainDetail represents detailed information about a sending domain, including DNS records and tracking domain configuration.
type DomainDnsVerificationView ¶ added in v0.2.0
type DomainDnsVerificationView struct {
SpfRecord *string `json:"spf_record,omitempty"`
SpfError *string `json:"spf_error,omitempty"`
DkimRecord *string `json:"dkim_record,omitempty"`
DkimError *string `json:"dkim_error,omitempty"`
CnameRecord *string `json:"cname_record,omitempty"`
CnameError *string `json:"cname_error,omitempty"`
DmarcRecord *string `json:"dmarc_record,omitempty"`
DmarcError *string `json:"dmarc_error,omitempty"`
}
DomainDnsVerificationView contains DNS verification error details.
type DomainService ¶
type DomainService struct {
// contains filtered or unexported fields
}
DomainService handles communication with the domain-related endpoints of the Lettr API.
func (*DomainService) Create ¶
func (s *DomainService) Create(ctx context.Context, params *CreateDomainRequest) (*CreateDomainResponse, error)
Create registers a new sending domain with your account. The domain will start in a pending state until verified.
Example:
created, err := client.Domains.Create(ctx, &lettr.CreateDomainRequest{
Domain: "example.com",
})
func (*DomainService) Delete ¶
func (s *DomainService) Delete(ctx context.Context, domain string) error
Delete removes a sending domain. The domain will no longer be available for sending emails.
Example:
err := client.Domains.Delete(ctx, "example.com")
func (*DomainService) Get ¶
func (s *DomainService) Get(ctx context.Context, domain string) (*GetDomainResponse, error)
Get retrieves details of a single sending domain including DNS records.
Example:
domain, err := client.Domains.Get(ctx, "example.com")
func (*DomainService) List ¶
func (s *DomainService) List(ctx context.Context) (*ListDomainsResponse, error)
List retrieves all sending domains registered with your account.
Example:
domains, err := client.Domains.List(ctx)
func (*DomainService) Verify ¶ added in v0.2.0
func (s *DomainService) Verify(ctx context.Context, domain string) (*VerifyDomainResponse, error)
Verify triggers DNS record verification for a domain.
Example:
result, err := client.Domains.Verify(ctx, "example.com")
type DomainVerificationView ¶ added in v0.2.0
type DomainVerificationView struct {
Domain string `json:"domain"`
DkimStatus string `json:"dkim_status"`
CnameStatus string `json:"cname_status"`
DmarcStatus string `json:"dmarc_status"`
SpfStatus string `json:"spf_status"`
IsPrimaryDomain bool `json:"is_primary_domain"`
OwnershipVerified *string `json:"ownership_verified"`
Dmarc *DmarcValidationResult `json:"dmarc,omitempty"`
Spf *SpfValidationResult `json:"spf,omitempty"`
DNS *DomainDnsVerificationView `json:"dns,omitempty"`
}
DomainVerificationView contains domain verification results.
type EmailEvent ¶
type EmailEvent struct {
EventID string `json:"event_id"`
Type string `json:"type,omitempty"`
Timestamp string `json:"timestamp"`
RequestID *string `json:"request_id"`
MessageID *string `json:"message_id"`
Subject *string `json:"subject"`
FriendlyFrom *string `json:"friendly_from"`
SendingDomain *string `json:"sending_domain"`
RcptTo *string `json:"rcpt_to"`
RawRcptTo *string `json:"raw_rcpt_to"`
RecipientDomain *string `json:"recipient_domain"`
MailboxProvider *string `json:"mailbox_provider"`
MailboxProviderRegion *string `json:"mailbox_provider_region"`
SendingIP *string `json:"sending_ip"`
ClickTracking *bool `json:"click_tracking"`
OpenTracking *bool `json:"open_tracking"`
Transactional *bool `json:"transactional"`
MsgSize *int `json:"msg_size"`
InjectionTime *string `json:"injection_time"`
Reason *string `json:"reason"`
RawReason *string `json:"raw_reason"`
ErrorCode *string `json:"error_code"`
BounceClass *int `json:"bounce_class,omitempty"`
// RcptMeta is polymorphic per spec: an object (in /emails list items)
// or an array (in event-stream payloads like /emails/events), or null.
// Type-assert to map[string]interface{} or []interface{} as appropriate.
RcptMeta interface{} `json:"rcpt_meta"`
TemplateID *string `json:"template_id,omitempty"`
TemplateVersion *string `json:"template_version,omitempty"`
DelvMethod *string `json:"delv_method,omitempty"`
RecvMethod *string `json:"recv_method,omitempty"`
RoutingDomain *string `json:"routing_domain,omitempty"`
ScheduledTime *string `json:"scheduled_time,omitempty"`
CampaignID *string `json:"campaign_id,omitempty"`
AbTestID *string `json:"ab_test_id,omitempty"`
AbTestVersion *string `json:"ab_test_version,omitempty"`
AmpEnabled *bool `json:"amp_enabled,omitempty"`
RcptType *string `json:"rcpt_type,omitempty"`
RcptTags []string `json:"rcpt_tags,omitempty"`
IpPool *string `json:"ip_pool,omitempty"`
MsgFrom *string `json:"msg_from,omitempty"`
QueueTime *int `json:"queue_time,omitempty"`
OutboundTls *string `json:"outbound_tls,omitempty"`
InitialPixel *bool `json:"initial_pixel,omitempty"`
NumRetries *int `json:"num_retries,omitempty"`
DeviceToken *string `json:"device_token,omitempty"`
TargetLinkURL *string `json:"target_link_url,omitempty"`
TargetLinkName *string `json:"target_link_name,omitempty"`
UserAgent *string `json:"user_agent,omitempty"`
UserAgentParsed *UserAgentParsed `json:"user_agent_parsed,omitempty"`
GeoIp *GeoIp `json:"geo_ip,omitempty"`
IpAddress *string `json:"ip_address,omitempty"`
}
EmailEvent represents a single event in an email's lifecycle (injection, delivery, bounce, open, click, etc).
type EmailService ¶
type EmailService struct {
// contains filtered or unexported fields
}
EmailService handles communication with the email-related endpoints of the Lettr API.
func (*EmailService) CancelScheduled ¶ added in v0.2.0
func (s *EmailService) CancelScheduled(ctx context.Context, transmissionID string) (*CancelScheduledResponse, error)
CancelScheduled cancels a pending scheduled email transmission.
Example:
resp, err := client.Emails.CancelScheduled(ctx, "transmission-123")
func (*EmailService) Get ¶
func (s *EmailService) Get(ctx context.Context, requestID string, params *GetEmailParams) (*GetEmailResponse, error)
Get retrieves all events for a specific email by its request ID (the transmission ID returned when sending).
Example:
details, err := client.Emails.Get(ctx, "12345678901234567890", nil)
func (*EmailService) GetScheduled ¶ added in v0.2.0
func (s *EmailService) GetScheduled(ctx context.Context, transmissionID string) (*GetScheduledEmailResponse, error)
GetScheduled retrieves details of a scheduled email transmission.
Example:
scheduled, err := client.Emails.GetScheduled(ctx, "transmission-123")
func (*EmailService) List ¶
func (s *EmailService) List(ctx context.Context, params *ListEmailsParams) (*ListEmailsResponse, error)
List retrieves a paginated list of sent emails.
Pass nil for params to use defaults.
Example:
emails, err := client.Emails.List(ctx, &lettr.ListEmailsParams{
PerPage: 10,
})
func (*EmailService) ListEvents ¶ added in v0.2.0
func (s *EmailService) ListEvents(ctx context.Context, params *ListEmailEventsParams) (*ListEmailEventsResponse, error)
ListEvents retrieves email delivery events (opens, bounces, clicks, etc.) with optional filtering.
Pass nil for params to use defaults.
Example:
events, err := client.Emails.ListEvents(ctx, &lettr.ListEmailEventsParams{
Events: []string{"delivery", "bounce"},
PerPage: 50,
})
func (*EmailService) Schedule ¶ added in v0.2.0
func (s *EmailService) Schedule(ctx context.Context, params *ScheduleEmailRequest) (*ScheduleEmailResponse, error)
Schedule queues an email for future delivery.
Example:
resp, err := client.Emails.Schedule(ctx, &lettr.ScheduleEmailRequest{
SendEmailRequest: lettr.SendEmailRequest{
From: "sender@example.com",
To: []string{"recipient@example.com"},
Subject: "Scheduled Hello",
Html: "<h1>Hello!</h1>",
},
ScheduledAt: "2024-12-25T10:00:00Z",
})
func (*EmailService) Send ¶
func (s *EmailService) Send(ctx context.Context, params *SendEmailRequest) (*SendEmailResponse, error)
Send sends an email with the given parameters.
Example:
resp, err := client.Emails.Send(ctx, &lettr.SendEmailRequest{
From: "sender@example.com",
To: []string{"recipient@example.com"},
Subject: "Hello from Lettr",
Html: "<h1>Hello!</h1>",
})
type Error ¶
type Error struct {
// StatusCode is the HTTP status code of the response.
StatusCode int `json:"-"`
// Message is a human-readable error message.
Message string `json:"message"`
// ErrorCode is a machine-readable error code (e.g. "validation_error", "not_found").
ErrorCode string `json:"error_code,omitempty"`
// Errors contains field-level validation errors (for 422 responses).
Errors map[string][]string `json:"errors,omitempty"`
}
Error represents an error returned by the Lettr API.
type GeoIp ¶ added in v0.2.0
type GeoIp struct {
Country string `json:"country,omitempty"`
Region string `json:"region,omitempty"`
City string `json:"city,omitempty"`
PostalCode string `json:"postal_code,omitempty"`
Zip string `json:"zip,omitempty"`
Latitude float64 `json:"latitude,omitempty"`
Longitude float64 `json:"longitude,omitempty"`
}
GeoIp contains geolocation data derived from IP address of open/click events.
type GetDomainResponse ¶
type GetDomainResponse struct {
Message string `json:"message"`
Data DomainDetail `json:"data"`
}
GetDomainResponse is the response from getting a single domain.
type GetEmailParams ¶ added in v0.2.0
type GetEmailParams struct {
// From is the start date for event search range (ISO 8601). Defaults to 10 days ago.
From string
// To is the end date for event search range (ISO 8601). Defaults to now.
To string
}
GetEmailParams contains optional query parameters for getting email details.
type GetEmailResponse ¶
type GetEmailResponse struct {
Message string `json:"message"`
Data ScheduledTransmission `json:"data"`
}
GetEmailResponse is the response from getting email details. The data shape matches ShowScheduledTransmissionResponse — transmission metadata plus the full list of delivery events.
type GetMergeTagsData ¶ added in v0.2.0
type GetMergeTagsData struct {
ProjectID int `json:"project_id"`
TemplateSlug string `json:"template_slug"`
Version int `json:"version"`
MergeTags []MergeTag `json:"merge_tags"`
}
GetMergeTagsData contains merge tags for a template version.
type GetMergeTagsParams ¶ added in v0.2.0
type GetMergeTagsParams struct {
// ProjectID is the project containing the template.
ProjectID int
// Version is the template version number. Uses active version if not set.
Version int
}
GetMergeTagsParams contains optional query parameters for getting merge tags.
type GetMergeTagsResponse ¶ added in v0.2.0
type GetMergeTagsResponse struct {
Message string `json:"message"`
Data GetMergeTagsData `json:"data"`
}
GetMergeTagsResponse is the response from getting merge tags.
type GetScheduledEmailResponse ¶ added in v0.2.0
type GetScheduledEmailResponse struct {
Message string `json:"message"`
Data ScheduledTransmission `json:"data"`
}
GetScheduledEmailResponse is the response from getting a scheduled email.
type GetTemplateHtmlData ¶ added in v0.2.0
type GetTemplateHtmlData struct {
Html string `json:"html"`
MergeTags []HtmlMergeTag `json:"merge_tags"`
Subject *string `json:"subject,omitempty"`
}
GetTemplateHtmlData contains the HTML content and merge tags of a template.
type GetTemplateHtmlParams ¶ added in v0.2.0
type GetTemplateHtmlParams struct {
// ProjectID is the project containing the template (required).
ProjectID int
// Slug is the template slug identifier (required).
Slug string
}
GetTemplateHtmlParams contains the query parameters for getting template HTML.
type GetTemplateHtmlResponse ¶ added in v0.2.0
type GetTemplateHtmlResponse struct {
Success bool `json:"success"`
Data GetTemplateHtmlData `json:"data"`
}
GetTemplateHtmlResponse is the response from getting template HTML.
type GetTemplateParams ¶ added in v0.2.0
type GetTemplateParams struct {
// ProjectID is the project to look in. Uses team's default if not set.
ProjectID int
}
GetTemplateParams contains optional query parameters for getting a template.
type GetTemplateResponse ¶ added in v0.2.0
type GetTemplateResponse struct {
Message string `json:"message"`
Data TemplateDetail `json:"data"`
}
GetTemplateResponse is the response from getting a single template.
type GetWebhookResponse ¶
GetWebhookResponse is the response from getting a single webhook.
type HealthCheckData ¶
HealthCheckData contains the health check status information.
type HealthCheckResponse ¶
type HealthCheckResponse struct {
Message string `json:"message"`
Data HealthCheckData `json:"data"`
}
HealthCheckResponse is the response from the health check endpoint.
type HtmlMergeTag ¶ added in v0.2.0
type HtmlMergeTag struct {
Key string `json:"key"`
Name string `json:"name"`
Required bool `json:"required"`
}
HtmlMergeTag represents a merge tag in the template HTML response. This differs from MergeTag by including a Name field.
type ListDomainsData ¶
type ListDomainsData struct {
Domains []Domain `json:"domains"`
}
ListDomainsData contains the list of domains.
type ListDomainsResponse ¶
type ListDomainsResponse struct {
Message string `json:"message"`
Data ListDomainsData `json:"data"`
}
ListDomainsResponse is the response from listing domains.
type ListEmailEventsData ¶ added in v0.2.0
type ListEmailEventsData struct {
Events ListEmailEventsEvents `json:"events"`
}
ListEmailEventsData wraps the paginated email events returned by the API.
type ListEmailEventsEvents ¶ added in v0.2.0
type ListEmailEventsEvents struct {
Data []EmailEvent `json:"data"`
TotalCount int `json:"total_count"`
From string `json:"from"`
To string `json:"to"`
Pagination CursorPagination `json:"pagination"`
}
ListEmailEventsEvents contains the paginated list of email events plus the query date range echoed back by the API.
type ListEmailEventsParams ¶ added in v0.2.0
type ListEmailEventsParams struct {
// Events filters by event types (e.g. "delivery", "bounce", "open", "click").
Events []string
// Recipients filters by recipient email addresses.
Recipients []string
// Transmissions filters by transmission ID.
Transmissions string
// BounceClasses filters by bounce classification codes.
BounceClasses []int
// From is the start date for events (ISO 8601). Defaults to 10 days ago.
From string
// To is the end date for events (ISO 8601). Defaults to now.
To string
// PerPage is the number of events per page.
PerPage int
// Cursor is the pagination cursor from a previous response.
Cursor string
}
ListEmailEventsParams contains the query parameters for listing email events.
type ListEmailEventsResponse ¶ added in v0.2.0
type ListEmailEventsResponse struct {
Message string `json:"message"`
Data ListEmailEventsData `json:"data"`
}
ListEmailEventsResponse is the response from listing email events.
type ListEmailsData ¶
type ListEmailsData struct {
Events ListEmailsEvents `json:"events"`
}
ListEmailsData wraps the paginated email events returned by the API.
type ListEmailsEvents ¶ added in v0.2.0
type ListEmailsEvents struct {
Data []EmailEvent `json:"data"`
TotalCount int `json:"total_count"`
From string `json:"from"`
To string `json:"to"`
Pagination CursorPagination `json:"pagination"`
}
ListEmailsEvents contains the paginated list of email events plus the query date range echoed back by the API.
type ListEmailsParams ¶
type ListEmailsParams struct {
// PerPage is the number of results per page (1-100, default 25).
PerPage int
// Cursor is the pagination cursor from a previous response.
Cursor string
// Recipients filters by recipient email address.
Recipients string
// From filters emails sent on or after this date (ISO 8601, e.g. "2024-01-15").
From string
// To filters emails sent on or before this date (ISO 8601, e.g. "2024-01-31").
To string
}
ListEmailsParams contains the query parameters for listing emails.
type ListEmailsResponse ¶
type ListEmailsResponse struct {
Message string `json:"message"`
Data ListEmailsData `json:"data"`
}
ListEmailsResponse is the response from listing emails.
type ListProjectsData ¶ added in v0.2.0
type ListProjectsData struct {
Projects []Project `json:"projects"`
Pagination PagePagination `json:"pagination"`
}
ListProjectsData contains the paginated list of projects.
type ListProjectsParams ¶ added in v0.2.0
type ListProjectsParams struct {
// PerPage is the number of results per page (1-100, default 25).
PerPage int
// Page is the page number (default 1).
Page int
}
ListProjectsParams contains the query parameters for listing projects.
type ListProjectsResponse ¶ added in v0.2.0
type ListProjectsResponse struct {
Message string `json:"message"`
Data ListProjectsData `json:"data"`
}
ListProjectsResponse is the response from listing projects.
type ListTemplatesData ¶
type ListTemplatesData struct {
Templates []Template `json:"templates"`
Pagination PagePagination `json:"pagination"`
}
ListTemplatesData contains the paginated list of templates.
type ListTemplatesParams ¶
type ListTemplatesParams struct {
// ProjectID is the project to retrieve templates from. Uses the team's
// default project if not set.
ProjectID int
// PerPage is the number of results per page (1-100, default 25).
PerPage int
// Page is the page number (default 1).
Page int
}
ListTemplatesParams contains the query parameters for listing templates.
type ListTemplatesResponse ¶
type ListTemplatesResponse struct {
Message string `json:"message"`
Data ListTemplatesData `json:"data"`
}
ListTemplatesResponse is the response from listing templates.
type ListWebhooksData ¶
type ListWebhooksData struct {
Webhooks []Webhook `json:"webhooks"`
}
ListWebhooksData contains the list of webhooks.
type ListWebhooksResponse ¶
type ListWebhooksResponse struct {
Message string `json:"message"`
Data ListWebhooksData `json:"data"`
}
ListWebhooksResponse is the response from listing webhooks.
type MergeTag ¶
type MergeTag struct {
Key string `json:"key"`
Required bool `json:"required"`
Type string `json:"type,omitempty"`
Children []MergeTagChild `json:"children,omitempty"`
}
MergeTag represents a merge tag extracted from template content.
type MergeTagChild ¶ added in v0.2.0
MergeTagChild represents a child merge tag within a loop block.
type PagePagination ¶
type PagePagination struct {
Total int `json:"total"`
PerPage int `json:"per_page"`
CurrentPage int `json:"current_page"`
LastPage int `json:"last_page"`
}
PagePagination holds page-based pagination info.
type Project ¶ added in v0.2.0
type Project struct {
ID int `json:"id"`
Name string `json:"name"`
TeamID int `json:"team_id"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Emoji *string `json:"emoji"`
}
Project represents a project.
type ProjectService ¶ added in v0.2.0
type ProjectService struct {
// contains filtered or unexported fields
}
ProjectService handles communication with the project-related endpoints of the Lettr API.
func (*ProjectService) List ¶ added in v0.2.0
func (s *ProjectService) List(ctx context.Context, params *ListProjectsParams) (*ListProjectsResponse, error)
List retrieves a paginated list of projects associated with the team.
Pass nil for params to use defaults.
Example:
projects, err := client.Projects.List(ctx, nil)
type ScheduleEmailData ¶ added in v0.2.0
type ScheduleEmailData struct {
// RequestID is the unique transmission ID for the scheduled email.
RequestID string `json:"request_id"`
// Accepted is the number of recipients that were accepted.
Accepted int `json:"accepted"`
// Rejected is the number of recipients that were rejected.
Rejected int `json:"rejected"`
}
ScheduleEmailData contains the result of scheduling an email.
type ScheduleEmailRequest ¶ added in v0.2.0
type ScheduleEmailRequest struct {
SendEmailRequest
// ScheduledAt is the time to send the email (ISO 8601).
// Must be at least 5 minutes in the future and at most 3 days.
ScheduledAt string `json:"scheduled_at"`
}
ScheduleEmailRequest represents the request body for scheduling an email for future delivery.
type ScheduleEmailResponse ¶ added in v0.2.0
type ScheduleEmailResponse struct {
Message string `json:"message"`
Data ScheduleEmailData `json:"data"`
}
ScheduleEmailResponse is the response from scheduling an email.
type ScheduledTransmission ¶ added in v0.2.0
type ScheduledTransmission struct {
TransmissionID string `json:"transmission_id"`
State string `json:"state"`
ScheduledAt *string `json:"scheduled_at"`
From string `json:"from"`
FromName *string `json:"from_name"`
Subject string `json:"subject"`
Recipients []string `json:"recipients"`
NumRecipients int `json:"num_recipients"`
Events []EmailEvent `json:"events"`
}
ScheduledTransmission represents a scheduled email transmission.
type SendEmailData ¶
type SendEmailData struct {
// RequestID is the unique transmission ID for the sent email.
RequestID string `json:"request_id"`
// Accepted is the number of recipients that were accepted.
Accepted int `json:"accepted"`
// Rejected is the number of recipients that were rejected.
Rejected int `json:"rejected"`
}
SendEmailData contains the result of a send operation.
type SendEmailOptions ¶
type SendEmailOptions struct {
// ClickTracking enables or disables click tracking.
ClickTracking *bool `json:"click_tracking,omitempty"`
// OpenTracking enables or disables open tracking.
OpenTracking *bool `json:"open_tracking,omitempty"`
// Transactional marks the email as transactional.
Transactional *bool `json:"transactional,omitempty"`
// InlineCss enables inlining CSS styles in HTML content.
InlineCss *bool `json:"inline_css,omitempty"`
// PerformSubstitutions enables variable substitutions in content.
PerformSubstitutions *bool `json:"perform_substitutions,omitempty"`
}
SendEmailOptions contains optional send settings.
type SendEmailRequest ¶
type SendEmailRequest struct {
// From is the sender email address (required).
From string `json:"from"`
// FromName is the sender display name (optional).
FromName string `json:"from_name,omitempty"`
// To is the list of recipient email addresses (required, max 50).
To []string `json:"to"`
// Cc is the list of carbon copy recipient email addresses (optional).
Cc []string `json:"cc,omitempty"`
// Bcc is the list of blind carbon copy recipient email addresses (optional).
Bcc []string `json:"bcc,omitempty"`
// Subject is the email subject line (required unless using template_slug).
Subject string `json:"subject,omitempty"`
// Html is the HTML body content. At least one of Html or Text is required.
Html string `json:"html,omitempty"`
// Text is the plain text body content. At least one of Html or Text is required.
Text string `json:"text,omitempty"`
// AmpHtml is the AMP HTML content for supported email clients (optional).
AmpHtml string `json:"amp_html,omitempty"`
// ReplyTo is the reply-to email address (optional).
ReplyTo string `json:"reply_to,omitempty"`
// ReplyToName is the reply-to display name (optional).
ReplyToName string `json:"reply_to_name,omitempty"`
// TemplateSlug is the slug of a pre-defined template to use.
TemplateSlug string `json:"template_slug,omitempty"`
// TemplateVersion is the specific version of the template to use.
TemplateVersion *int `json:"template_version,omitempty"`
// ProjectID is the project to source the template from.
ProjectID *int `json:"project_id,omitempty"`
// Attachments is a list of file attachments (base64-encoded).
Attachments []Attachment `json:"attachments,omitempty"`
// SubstitutionData contains key-value pairs for template variable replacement.
SubstitutionData map[string]string `json:"substitution_data,omitempty"`
// Metadata contains custom key-value pairs stored with the email.
Metadata map[string]string `json:"metadata,omitempty"`
// Tag is a tag for tracking and analytics (optional).
Tag string `json:"tag,omitempty"`
// Headers contains custom email headers (up to 10, optional).
Headers map[string]string `json:"headers,omitempty"`
// Options contains tracking and delivery options.
Options *SendEmailOptions `json:"options,omitempty"`
}
SendEmailRequest represents the request body for sending an email.
type SendEmailResponse ¶
type SendEmailResponse struct {
Message string `json:"message"`
Data SendEmailData `json:"data"`
}
SendEmailResponse is the response from sending an email.
type SpfValidationResult ¶ added in v0.2.0
type SpfValidationResult struct {
IsValid bool `json:"is_valid"`
Status string `json:"status"`
Record *string `json:"record"`
Error *string `json:"error"`
IncludesSparkpost bool `json:"includes_sparkpost"`
}
SpfValidationResult contains SPF validation details.
type Template ¶
type Template struct {
ID int `json:"id"`
Name string `json:"name"`
Slug string `json:"slug"`
ProjectID int `json:"project_id"`
FolderID int `json:"folder_id"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
Template represents an email template.
type TemplateDetail ¶ added in v0.2.0
type TemplateDetail struct {
ID int `json:"id"`
Name string `json:"name"`
Slug string `json:"slug"`
ProjectID int `json:"project_id"`
FolderID int `json:"folder_id"`
ActiveVersion *int `json:"active_version"`
VersionsCount int `json:"versions_count"`
Html string `json:"html,omitempty"`
Json string `json:"json,omitempty"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
TemplateDetail represents detailed information about a template, including version info and content.
type TemplateService ¶
type TemplateService struct {
// contains filtered or unexported fields
}
TemplateService handles communication with the template-related endpoints of the Lettr API.
func (*TemplateService) Create ¶
func (s *TemplateService) Create(ctx context.Context, params *CreateTemplateRequest) (*CreateTemplateResponse, error)
Create creates a new email template with HTML or Topol JSON content.
Example:
template, err := client.Templates.Create(ctx, &lettr.CreateTemplateRequest{
Name: "Welcome Email",
Html: "<h1>Hello {{FIRST_NAME}}!</h1>",
})
func (*TemplateService) Delete ¶ added in v0.2.0
func (s *TemplateService) Delete(ctx context.Context, slug string, params *DeleteTemplateParams) (*DeleteTemplateResponse, error)
Delete permanently removes a template.
Pass nil for params to use the team's default project.
Example:
resp, err := client.Templates.Delete(ctx, "welcome-email", nil)
func (*TemplateService) Get ¶ added in v0.2.0
func (s *TemplateService) Get(ctx context.Context, slug string, params *GetTemplateParams) (*GetTemplateResponse, error)
Get retrieves details of a single template by its slug.
Pass nil for params to use the team's default project.
Example:
template, err := client.Templates.Get(ctx, "welcome-email", nil)
func (*TemplateService) GetHtml ¶ added in v0.2.0
func (s *TemplateService) GetHtml(ctx context.Context, params *GetTemplateHtmlParams) (*GetTemplateHtmlResponse, error)
GetHtml retrieves the rendered HTML content of a template.
Example:
html, err := client.Templates.GetHtml(ctx, &lettr.GetTemplateHtmlParams{
ProjectID: 1,
Slug: "welcome-email",
})
func (*TemplateService) GetMergeTags ¶ added in v0.2.0
func (s *TemplateService) GetMergeTags(ctx context.Context, slug string, params *GetMergeTagsParams) (*GetMergeTagsResponse, error)
GetMergeTags retrieves the merge tags for a template.
Pass nil for params to use defaults (team's default project, active version).
Example:
tags, err := client.Templates.GetMergeTags(ctx, "welcome-email", nil)
func (*TemplateService) List ¶
func (s *TemplateService) List(ctx context.Context, params *ListTemplatesParams) (*ListTemplatesResponse, error)
List retrieves a paginated list of email templates.
Pass nil for params to use defaults.
Example:
templates, err := client.Templates.List(ctx, nil)
func (*TemplateService) Update ¶ added in v0.2.0
func (s *TemplateService) Update(ctx context.Context, slug string, params *UpdateTemplateRequest) (*UpdateTemplateResponse, error)
Update modifies an existing template's name or content.
Example:
updated, err := client.Templates.Update(ctx, "welcome-email", &lettr.UpdateTemplateRequest{
Html: "<h1>Updated Hello {{FIRST_NAME}}!</h1>",
})
type UpdateTemplateData ¶ added in v0.2.0
type UpdateTemplateData struct {
ID int `json:"id"`
Name string `json:"name"`
Slug string `json:"slug"`
ProjectID int `json:"project_id"`
FolderID int `json:"folder_id"`
ActiveVersion int `json:"active_version"`
MergeTags []MergeTag `json:"merge_tags"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
UpdateTemplateData contains the result of updating a template.
type UpdateTemplateRequest ¶ added in v0.2.0
type UpdateTemplateRequest struct {
// Name is the new name for the template.
Name string `json:"name,omitempty"`
// Html is new HTML content (creates a new active version).
Html string `json:"html,omitempty"`
// Json is new Topol editor JSON content (creates a new active version).
Json string `json:"json,omitempty"`
// ProjectID is the project containing the template.
ProjectID *int `json:"project_id,omitempty"`
}
UpdateTemplateRequest represents the request body for updating a template.
type UpdateTemplateResponse ¶ added in v0.2.0
type UpdateTemplateResponse struct {
Message string `json:"message"`
Data UpdateTemplateData `json:"data"`
}
UpdateTemplateResponse is the response from updating a template.
type UpdateWebhookRequest ¶ added in v0.2.0
type UpdateWebhookRequest struct {
Name string `json:"name,omitempty"`
Target string `json:"target,omitempty"`
AuthType string `json:"auth_type,omitempty"`
AuthUsername string `json:"auth_username,omitempty"`
AuthPassword string `json:"auth_password,omitempty"`
OAuthClientID string `json:"oauth_client_id,omitempty"`
OAuthClientSecret string `json:"oauth_client_secret,omitempty"`
OAuthTokenURL string `json:"oauth_token_url,omitempty"`
Events []string `json:"events,omitempty"`
Active *bool `json:"active,omitempty"`
}
UpdateWebhookRequest represents the request body for updating a webhook.
type UpdateWebhookResponse ¶ added in v0.2.0
UpdateWebhookResponse is the response from updating a webhook.
type UserAgentParsed ¶ added in v0.2.0
type UserAgentParsed struct {
AgentFamily string `json:"agent_family,omitempty"`
OsFamily string `json:"os_family,omitempty"`
OsVersion string `json:"os_version,omitempty"`
DeviceFamily string `json:"device_family,omitempty"`
DeviceBrand string `json:"device_brand,omitempty"`
IsMobile bool `json:"is_mobile,omitempty"`
IsProxy bool `json:"is_proxy,omitempty"`
IsPrefetched bool `json:"is_prefetched,omitempty"`
}
UserAgentParsed contains parsed user agent information from open/click events.
type VerifyDomainResponse ¶ added in v0.2.0
type VerifyDomainResponse struct {
Message string `json:"message"`
Data DomainVerificationView `json:"data"`
}
VerifyDomainResponse is the response from verifying a domain.
type Webhook ¶
type Webhook struct {
ID string `json:"id"`
Name string `json:"name"`
URL string `json:"url"`
Enabled bool `json:"enabled"`
EventTypes *[]string `json:"event_types"`
AuthType string `json:"auth_type"`
HasAuthCredentials bool `json:"has_auth_credentials"`
LastSuccessfulAt *string `json:"last_successful_at"`
LastFailureAt *string `json:"last_failure_at"`
LastStatus *string `json:"last_status"`
}
Webhook represents a webhook configuration.
type WebhookService ¶
type WebhookService struct {
// contains filtered or unexported fields
}
WebhookService handles communication with the webhook-related endpoints of the Lettr API.
func (*WebhookService) Create ¶ added in v0.2.0
func (s *WebhookService) Create(ctx context.Context, params *CreateWebhookRequest) (*CreateWebhookResponse, error)
Create creates a new webhook for event notifications.
Example:
webhook, err := client.Webhooks.Create(ctx, &lettr.CreateWebhookRequest{
Name: "My Webhook",
URL: "https://example.com/webhook",
AuthType: "none",
EventsMode: "all",
})
func (*WebhookService) Delete ¶ added in v0.2.0
func (s *WebhookService) Delete(ctx context.Context, webhookID string) (*DeleteWebhookResponse, error)
Delete removes a webhook.
Example:
resp, err := client.Webhooks.Delete(ctx, "webhook-abc123")
func (*WebhookService) Get ¶
func (s *WebhookService) Get(ctx context.Context, webhookID string) (*GetWebhookResponse, error)
Get retrieves details of a single webhook.
Example:
webhook, err := client.Webhooks.Get(ctx, "webhook-abc123")
func (*WebhookService) List ¶
func (s *WebhookService) List(ctx context.Context) (*ListWebhooksResponse, error)
List retrieves all webhooks configured for your account.
Example:
webhooks, err := client.Webhooks.List(ctx)
func (*WebhookService) Update ¶ added in v0.2.0
func (s *WebhookService) Update(ctx context.Context, webhookID string, params *UpdateWebhookRequest) (*UpdateWebhookResponse, error)
Update modifies an existing webhook's settings.
Example:
active := false
updated, err := client.Webhooks.Update(ctx, "webhook-abc123", &lettr.UpdateWebhookRequest{
Active: &active,
})