Installation
Copy
Ask AI
go get github.com/arouter-ai/arouter-go
Quick Start
Copy
Ask AI
package main
import (
"context"
"fmt"
"log"
arouter "github.com/arouter-ai/arouter-go"
)
func main() {
client := arouter.NewClient(
"https://api.arouter.com",
"lr_live_xxxx",
)
resp, err := client.ChatCompletion(context.Background(), arouter.ChatCompletionRequest{
Model: "gpt-4o",
Messages: []arouter.Message{
{Role: "user", Content: "Hello!"},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}
Multi-Provider
Copy
Ask AI
// Anthropic via ARouter
resp, _ := client.ChatCompletion(ctx, arouter.ChatCompletionRequest{
Model: "anthropic/claude-sonnet-4-20250514",
Messages: []arouter.Message{
{Role: "user", Content: "Hello!"},
},
})
// DeepSeek via ARouter
resp, _ = client.ChatCompletion(ctx, arouter.ChatCompletionRequest{
Model: "deepseek/deepseek-chat",
Messages: []arouter.Message{
{Role: "user", Content: "Hello!"},
},
})
Streaming
Copy
Ask AI
stream, err := client.ChatCompletionStream(context.Background(), arouter.ChatCompletionRequest{
Model: "gpt-4o",
Messages: []arouter.Message{
{Role: "user", Content: "Write a haiku about Go."},
},
})
if err != nil {
log.Fatal(err)
}
defer stream.Close()
for {
chunk, err := stream.Recv()
if err == arouter.ErrStreamDone {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Print(chunk.Choices[0].Delta.Content)
}
Key Management
Use a management key (lr_mgmt_) to create and manage API keys programmatically.
Create API Key
Copy
Ask AI
mgmtClient := arouter.NewClient("https://api.arouter.com", "lr_mgmt_xxxx")
key, err := mgmtClient.CreateKey(ctx, &arouter.CreateKeyRequest{
Name: "production-backend",
AllowedProviders: []string{"openai", "anthropic"},
AllowedModels: []string{"gpt-4o", "claude-sonnet-4-20250514"},
Limit: float64Ptr(150),
LimitReset: "monthly",
})
if err != nil {
log.Fatal(err)
}
fmt.Println("API Key:", key.Key)
List API Keys
Copy
Ask AI
keys, err := mgmtClient.ListKeys(ctx, &arouter.ListKeysOptions{
PageSize: 20,
})
if err != nil {
log.Fatal(err)
}
for _, k := range keys.Data {
fmt.Printf("- %s (%s) disabled=%t\n", k.Name, k.Hash, k.Disabled)
}
Update API Key
Copy
Ask AI
_, err := mgmtClient.UpdateKey(ctx, "KEY_HASH", &arouter.UpdateKeyRequest{
Disabled: boolPtr(true),
})
Delete API Key
Copy
Ask AI
err := mgmtClient.DeleteKey(ctx, "KEY_HASH")
Provider Proxy
For direct upstream access without model-field routing:Copy
Ask AI
resp, err := client.ProxyRequest(ctx, "openai", "v1/chat/completions", map[string]any{
"model": "gpt-4o",
"messages": []map[string]string{{"role": "user", "content": "Hello!"}},
})
Client Options
Copy
Ask AI
client := arouter.NewClient(
"https://api.arouter.com",
"lr_live_xxxx",
arouter.WithTimeout(30 * time.Second),
arouter.WithHTTPClient(customHTTPClient),
)
Error Handling
Copy
Ask AI
resp, err := client.ChatCompletion(ctx, req)
if err != nil {
var apiErr *arouter.APIError
if errors.As(err, &apiErr) {
switch apiErr.StatusCode {
case 401:
log.Fatal("Invalid API key")
case 429:
log.Println("Rate limited, retrying...")
case 502:
log.Println("Upstream provider error")
}
}
}