Go SDK
Full reference for the Metalogue Go SDK.
Go SDK
Official Go SDK for the Metalogue API.
Installation
go get github.com/metalogue/metalogue-sdk-go
Quick Start
package main
import (
"context"
"fmt"
"os"
metalogue "github.com/metalogue/metalogue-sdk-go"
)
func main() {
client := metalogue.NewClient(os.Getenv("METALOGUE_API_KEY"))
response, err := client.Query(context.Background(), "What was the auth decision?", nil)
if err != nil {
panic(err)
}
for _, result := range response.Results {
fmt.Printf("[%s] %s\n", result.Source, result.Content)
}
}
Configuration
// Basic initialization
client := metalogue.NewClient("mlo_xxxxxxxxxxxx")
// With options
client := metalogue.NewClient("mlo_xxxxxxxxxxxx",
metalogue.WithBaseURL("https://api.metalogue.xyz"),
metalogue.WithTimeout(30 * time.Second),
)
// From environment
client := metalogue.NewClientFromEnv() // Uses METALOGUE_API_KEY
Methods
Query
response, err := client.Query(ctx, "What was the auth decision?", &metalogue.QueryOptions{
Limit: 10,
IncludeReasoning: true,
Sources: []string{"slack", "notion"},
DateAfter: "2026-01-01",
DateBefore: "2026-01-31",
Authors: []string{"alice@example.com"},
Types: []string{"message", "document"},
})
// Response types
type QueryResponse struct {
Results []QueryResult `json:"results"`
Reasoning string `json:"reasoning,omitempty"`
QueryID string `json:"query_id"`
LatencyMs int64 `json:"latency_ms"`
}
type QueryResult struct {
ID string `json:"id"`
Content string `json:"content"`
Source string `json:"source"`
SourceType string `json:"source_type"`
Score float64 `json:"score"`
Metadata map[string]interface{} `json:"metadata"`
URL string `json:"url,omitempty"`
}
Connectors
// List all connectors
connectors, err := client.ListConnectors(ctx)
// Get specific connector
connector, err := client.GetConnector(ctx, "slack-123")
// Create connector
newConnector, err := client.CreateConnector(ctx, metalogue.CreateConnectorRequest{
ConnectorType: "slack",
DisplayName: "Company Slack",
Credentials: map[string]interface{}{"token": "xoxb-..."},
Settings: map[string]interface{}{"channels": []string{"general"}},
})
// Sync connector
err = client.SyncConnector(ctx, "slack-123", true) // full sync
// Execute agentic action
result, err := client.ExecuteAction(ctx, "slack-123", metalogue.ActionParams{
Intent: "Send message to #general",
Context: map[string]interface{}{"priority": "high"},
DryRun: false,
})
// Delete connector
err = client.DeleteConnector(ctx, "slack-123")
Audit Logs
// Get audit logs
logs, err := client.GetAuditLogs(ctx, &metalogue.AuditOptions{
Limit: 100,
Action: "query.executed",
Start: "2026-01-01T00:00:00Z",
End: "2026-01-31T23:59:59Z",
})
// Export SOC2 report
report, err := client.ExportSOC2(ctx, "2026-01-01", "2026-01-31")
Usage & Billing
// Get usage metrics
usage, err := client.GetUsage(ctx, "month")
// Get subscription
subscription, err := client.GetSubscription(ctx)
Users
// List users
users, err := client.ListUsers(ctx)
// Invite user
err = client.InviteUser(ctx, "bob@example.com", "member")
Error Handling
response, err := client.Query(ctx, "...")
if err != nil {
switch e := err.(type) {
case *metalogue.RateLimitError:
fmt.Printf("Retry after %d seconds\n", e.RetryAfter)
time.Sleep(time.Duration(e.RetryAfter) * time.Second)
case *metalogue.AuthenticationError:
log.Fatal("Invalid API key")
case *metalogue.NotFoundError:
log.Fatal("Resource not found")
case *metalogue.MetalogueError:
log.Fatalf("API error: %s", e.Message)
default:
log.Fatalf("Error: %v", err)
}
}
Context and Cancellation
All methods accept a context for cancellation:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
response, err := client.Query(ctx, "...")
if ctx.Err() == context.DeadlineExceeded {
log.Println("Query timed out")
}
