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.modto the API version you target.
Install
go get github.com/moon-born/sdk-goFirst 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.