Skip to content

tilebox/loops-go

Repository files navigation

Loops GO SDK

Introduction

A Go SDK for interacting with Loops's API.

API Documentation

Contributing

Contributions are welcome! If the Loops API changes, community PRs that update openapi.json, models, client methods, examples, and endpoint tests are very welcome.

Installation

go get github.com/tilebox/loops-go

Usage

Below are a few examples of how to use the SDK to send API requests. For some full, working examples, see the examples directory.

Create a client:

package main

import (
	"context"
	"log/slog"

	"github.com/tilebox/loops-go"
)

func main() {
	ctx := context.Background()
	client, err := loops.NewClient(loops.WithAPIKey("YOUR_LOOPS_API_KEY"))
	if err != nil {
		slog.Error("failed to create client", slog.Any("error", err.Error()))
		return
	}

	// now use the client to make requests
}

Contacts

Create a contact

contactID, err := client.CreateContact(ctx, &loops.Contact{
    Email:      "neil.armstrong@moon.space",
    FirstName:  loops.String("Neil"),
    LastName:   loops.String("Armstrong"),
    UserGroup:  loops.String("Astronauts"),
    Subscribed: true,
    // custom user defined properties for contacts
    Properties: map[string]any{
        "role": "Astronaut",
    },
})
if err != nil {
    slog.Error("failed to create contact", slog.Any("error", err.Error()))
    return
}

Find a contact

contact, err := client.FindContact(ctx, &loops.ContactIdentifier{
    Email: loops.String("neil.armstrong@moon.space"),
})
if err != nil {
    slog.Error("failed to find contact", slog.Any("error", err.Error()))
    return
}

Delete a contact

err = client.DeleteContact(ctx, &loops.ContactIdentifier{
    Email: loops.String("neil.armstrong@moon.space"),
})
if err != nil {
    slog.Error("failed to delete contact", slog.Any("error", err.Error()))
    return
}

List contact properties

properties, err := client.GetContactProperties(ctx, loops.ContactPropertyListOptions{
    List: loops.ContactPropertyTypeCustom, // only return your team's custom properties
})
if err != nil {
    slog.Error("failed to get contact properties", slog.Any("error", err.Error()))
    return
}

Events

Send an event

err = client.SendEvent(ctx, &loops.Event{
    Email:     loops.String("neil.armstrong@moon.space"),
    EventName: "joinedMission",
    EventProperties: map[string]any{
        "mission": "Apollo 11",
    },
})
if err != nil {
    slog.Error("failed to send event", slog.Any("error", err.Error()))
    return
}

Transactional emails

Send a transactional email

err = client.SendTransactionalEmail(ctx, &loops.TransactionalRequest{
    TransactionalID: "cm...",
    Email:           "recipient@example.com",
    DataVariables: map[string]any{
        "name": "Recipient Name",
    },
})
if err != nil {
    slog.Error("failed to send transactional email", slog.Any("error", err.Error()))
    return
}

List transactional emails

emailsPage, err := client.ListTransactionalEmails(ctx, loops.ListTransactionalEmailsOptions{
    PerPage: 10,
})
if err != nil {
    slog.Error("failed to list transactional emails", slog.Any("error", err.Error()))
    return
}

for _, email := range emailsPage.Data {
    slog.Info("transactional email", slog.String("id", email.ID), slog.String("name", email.Name))
}

For more complete flows, see the transactional email lifecycle and image upload examples.

Authors

Created by Tilebox - The Solar System’s #1 developer tool for space data management.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Development

Testing

go test ./...

Linting

golangci-lint run --fix  ./...

About

Go library for the Loops.so API

Resources

License

Stars

4 stars

Watchers

2 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages