Skip to content
MacrofoldDocs
Build with the API

Go SDK

Make typed API requests and stream agent progress in Go.

Typed API requests and incremental run streams using Go's standard HTTP client. Requires Go 1.23 or later.

Install from source

In your application's go.mod, require github.com/Macrofold/Macrofold/sdk/go v0.0.0 and add a local replacement:

go mod edit -require=github.com/Macrofold/Macrofold/sdk/go@v0.0.0
go mod edit -replace=github.com/Macrofold/Macrofold/sdk/go=/absolute/path/to/Macrofold/sdk/go

Connect and stream

Set AGENT_HOST, AGENT_API_KEY, and an authorized RUN_ID in your environment.

package main

import (
    "context"
    "fmt"
    "os"
    macrofold "github.com/Macrofold/Macrofold/sdk/go"
)

func main() {
    client, err := macrofold.NewClient(os.Getenv("AGENT_HOST"), os.Getenv("AGENT_API_KEY"))
    if err != nil { panic(err) }
    ctx := context.Background()
    projects, _, err := client.ProjectsAPI.ListProjects(ctx).Limit(20).Execute()
    if err != nil { panic(err) }
    fmt.Println(projects.Data)
    err = client.Stream(ctx, os.Getenv("RUN_ID"), "0", func(event macrofold.Event) error {
        fmt.Println(event.Type, event.Data)
        return nil
    })
    if err != nil { panic(err) }
}

Create and recover requests

After adding the client import to your application, run go mod tidy, then go run ..

API groups expose typed builders such as client.RunsAPI.CreateRun(ctx).IdempotencyKey(key).RunCreate(body).Execute(). Generate and retain a unique key per intended mutation. REST requests are single-attempt; retry an uncertain request with the identical body and key. Execute() returns the typed result, HTTP response, and error, including structured API errors when available.

File PUT uses an open *os.File, a path, and If-Match. Close file handles when finished. Monetary fields remain strings. Use XOrganizationId when a user token must select a membership; API keys stay bound to their organization.

Stream resumes after server rotation. Cancel the context or return an error from the callback to detach; call CancelRun explicitly to stop the remote agent. Preserve the last event sequence to resume across application restarts.

See the SDK guide and API quickstart.