Pular para o conteúdo principal
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
Os snapshots existem em três escopos: por aplicação, por banco de dados e de toda a conta.

A struct Snapshot

Os métodos de listagem retornam []squarecloud.Snapshot:
CampoTipoDescrição
NamestringNome do objeto do snapshot
SizeintTamanho em bytes
ModifiedstringData da última modificação
KeystringQuery string assinada usada para montar a URL de download

Snapshots de aplicação

Listando

snapshots, err := api.GetApplicationSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

for _, snap := range snapshots {
	fmt.Println(snap.Name, snap.Size, snap.Modified)
}

Criando

api.CreateApplicationSnapshot(appID) dispara um snapshot novo e retorna um squarecloud.SnapshotCreated com a URL de download assinada.
created, err := api.CreateApplicationSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}

fmt.Println(created.URL) // URL de download assinada
fmt.Println(created.Key)

Restaurando

api.RestoreApplicationSnapshot(appID, snapshotID, versionID) reverte a aplicação para uma versão anterior do snapshot.
err := api.RestoreApplicationSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000",
	"abc123def4567890",
)
if err != nil {
	panic(err)
}

Snapshots de banco de dados

O escopo de banco de dados espelha o de aplicação:
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(created.URL)

err = api.RestoreDatabaseSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000_mongo",
	"v1",
)
if err != nil {
	panic(err)
}

Listando os snapshots de toda a conta

api.UserSnapshots(scope) retorna todos os snapshots que você possui em todas as suas aplicações ou bancos de dados. O escopo é uma das constantes squarecloud.SnapshotScope*:
appSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeApplications)
if err != nil {
	panic(err)
}

dbSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeDatabases)
if err != nil {
	panic(err)
}
A listagem de snapshots de toda a conta exige um plano pago ativo. Cada plano também tem uma cota diária de snapshots — quando ela se esgota, a criação falha com o código DAILY_SNAPSHOTS_LIMIT_REACHED, distinto do erro genérico de rate limit KEEP_CALM.