Skip to main content

Install

go get github.com/robase/robase-go
Go ≥ 1.21.

Initialize

import "github.com/robase/robase-go"

pm := robase.New(os.Getenv("ROBASE_API_KEY"))
Override defaults:
pm := robase.New(os.Getenv("ROBASE_API_KEY"))
pm.BaseURL = "https://api.robase.dev/v1"  // default
pm.HTTPClient = &http.Client{Timeout: 10 * time.Second}
pm.UserAgent = "my-app/1.0"

Surface

pm.Emails.Send(ctx, &robase.SendRequest{...})
pm.Emails.Batch(ctx, &robase.BatchRequest{...})
pm.Emails.Get(ctx, id)
pm.Emails.Cancel(ctx, id)

pm.SMS.Send(ctx, &robase.SendSMSRequest{...})
pm.SMS.Batch(ctx, &robase.BatchSMSRequest{...})
pm.SMS.Get(ctx, id)
pm.SMS.List(ctx, limit, cursor)
pm.SMS.Analytics(ctx, days)

pm.SMSTemplates.Create(ctx, &robase.UpsertSMSTemplateRequest{...})
pm.SMSTemplates.List(ctx)
pm.SMSTemplates.Get(ctx, id)
pm.SMSTemplates.Update(ctx, id, &robase.UpsertSMSTemplateRequest{...})
pm.SMSTemplates.Delete(ctx, id)
pm.SMSTemplates.Render(ctx, id, map[string]any{...})

pm.SenderIDs.Create(ctx, &robase.RegisterSenderIDRequest{...})
pm.SenderIDs.List(ctx)
pm.SenderIDs.Update(ctx, id, &robase.UpdateSenderIDRequest{...})

pm.Domains.Create(ctx, &robase.CreateDomainRequest{...})
pm.Domains.List(ctx)
pm.Domains.Verify(ctx, id)

pm.Webhooks.Create(ctx, &robase.CreateWebhookRequest{...})

pm.Suppressions.Add(ctx, email, reason)

Errors

_, err := pm.SMS.Send(ctx, &robase.SendSMSRequest{...})
if err != nil {
    var pe *robase.Error
    if errors.As(err, &pe) {
        fmt.Println(pe.Status, pe.Type, pe.Message)
        if pe.Type == "phone_invalid" { /* ... */ }
    }
}

Idempotency

pm.SMS.Send(ctx, &robase.SendSMSRequest{
    To: "+2348012345678", From: "SHUTTLERS", Body: "hi",
}, robase.WithIdempotencyKey("order-123-sms"))

Webhook verification

ok := robase.VerifyWebhook(body, r.Header.Get("Robase-Signature"), secret, 300)