Open app
Moonborn — Developers

Go

The official Go SDK for Moonborn. Idiomatic context-aware client; one-release lag behind the API.

The Go SDK lives at github.com/moon-born/sdk-go. Generated from the canonical OpenAPI spec, idiomatic for Go: context-first methods, typed errors, standard net/http under the hood.

Release cadence: ships within one week of every API release. Pin your go.mod to the API version you target.

Install

go get github.com/moon-born/sdk-go

First call

package main
 
import (
    "context"
    "fmt"
    "os"
 
    "github.com/moon-born/sdk-go/moonborn"
)
 
func main() {
    client := moonborn.NewClient(moonborn.Options{
        ApiKey: os.Getenv("MOONBORN_API_KEY"),
    })
 
    ctx := context.Background()
    persona, err := client.Personas.CreatePersona(ctx, moonborn.CreatePersonaInput{
        Intent:      "A 34-year-old founder from Istanbul. Brilliant but restless.",
        WorkspaceID: "ws_...",
    })
    if err != nil {
        panic(err)
    }
    fmt.Println(persona.ID, persona.Status)
}

Streaming chat

stream, err := client.Chat.StreamMessage(ctx, moonborn.StreamMessageInput{
    SessionID: session.ID,
    Content:   "Tell me a quiet truth.",
})
if err != nil { /* ... */ }
defer stream.Close()
 
for chunk := range stream.Events() {
    switch chunk.Type {
    case moonborn.ChunkTypeToken:
        fmt.Print(chunk.Delta)
    case moonborn.ChunkTypeCompleted:
        fmt.Printf("\ndrift: %.2f\n", chunk.DriftScore)
    }
}

Error handling

_, err := client.Personas.GetPersona(ctx, moonborn.GetPersonaInput{ID: "persona_..."})
if apiErr, ok := err.(*moonborn.APIError); ok {
    switch apiErr.Code {
    case "rate_limited":
        // retry after apiErr.RetryAfter
    case "not_found":
        // ...
    }
}

The client auto-retries on 5xx + 429 with exponential backoff (capped at 30s). Configure via Options.RetryConfig.

Idempotency

Write methods (Create*, Fork*, Refine*) auto-generate an idempotency key by default. Override via the per-call options:

persona, err := client.Personas.CreatePersona(ctx, input, moonborn.WithIdempotencyKey("my-key-123"))

Tier

Every Go SDK works on every tier — feature gates are enforced server-side.

Next