Aegis Go SDK Guide

Contract-aligned Go integration for Axis control-plane health checks, rollout orchestration, and usage readback.

Executable TLS policy boundary: the released v0.5.5 native catalog requires exact versioned drafts, build capability checks, and reviewed plans. Older SDK rollout examples on this page do not express that contract. Use the authenticated Axis Crypto Policies workflow and build-specific support reference for proposed TLS changes; no SDK write compatibility is asserted.

Last updated
March 1, 2026
Source
VeliKey Docs Team
Owner
Axis Platform Engineering

Prerequisites

  • Go runtime/toolchain 1.25.7+ on operator hosts (required for current stdlib CVE closure).
  • Axis endpoint URL (default https://axis.velikey.com).
  • One supported auth mode: API key, bearer token, or NextAuth session cookie.
  • Rollout operations require an owner/admin session cookie with tenant write permissions.

Expected output: each command below should return tool versions or existing environment variable values.

# manual-only example
command -v go

go version

printenv AXIS_BASE_URL
printenv VELIKEY_API_KEY
printenv AXIS_SESSION_COOKIE

Runtime Closure Gate

Before live rollouts, enforce minimum runtime patch level to close Go stdlib advisories surfaced by govulncheck.

Expected output: runtime gate prints PASS when current Go runtime is at or above 1.25.7; otherwise it prints FAIL and the lane should be blocked.

# manual-only example
cd /path/to/velikey-go-sdk
GO_SDK_MIN_RUNTIME_VERSION=1.25.7 bash scripts/check-go-runtime.sh

If your host default go binary is older, run the gate against an explicit patched toolchain path.

# manual-only example
cd /path/to/velikey-go-sdk
GO_BINARY=/path/to/go1.25.7 GO_SDK_MIN_RUNTIME_VERSION=1.25.7 bash scripts/check-go-runtime.sh

Validated Live Lane Command (C5)

The live Go lane was validated on runtime go1.25.7 using session-cookie auth with an explicit AXIS_BASE_URL.

Expected output: lane emits go-sdk-e2e-receipt.json with result=pass, hasSessionCookie=true, and metering consistency fields.

# manual-only example
git clone https://github.com/sgreysond/velikey_test-env.git
cd velikey_test-env
export AXIS_BASE_URL="${AXIS_BASE_URL:-https://axis.velikey.com}"
export AXIS_SESSION_COOKIE="next-auth.session-token=<redacted>"
GO_SDK_MIN_RUNTIME_VERSION=1.25.7 bash scripts/sdk-e2e/run_go_sdk_e2e.sh

Install and Minimal Example

Use module mode and pin your app module to a reviewed SDK version in production.

Expected output: module add succeeds and health status prints healthy or degraded.

# executable example
rm -rf .tmp/velikey-sdk-smoke
mkdir -p .tmp/velikey-sdk-smoke
cd .tmp/velikey-sdk-smoke
go mod init example.com/velikey-sdk-smoke
go get github.com/sgreysond/velikey-go-sdk@v0.2.0
go mod tidy
package main

import (
  "context"
  "fmt"
  "log"
  "os"

  velikey "github.com/sgreysond/velikey-go-sdk"
)

func main() {
  client := velikey.NewClient(velikey.Config{
    BaseURL:       "https://axis.velikey.com",
    APIKey:        os.Getenv("VELIKEY_API_KEY"),
    BearerToken:   os.Getenv("VELIKEY_BEARER_TOKEN"),
    SessionCookie: os.Getenv("AXIS_SESSION_COOKIE"),
  })

  health, err := client.GetHealth(context.Background())
  if err != nil {
    log.Fatal(err)
  }

fmt.Printf("status=%s version=%s\n", health.Status, health.Version)
}

Production Client Configuration

Set explicit timeout and retry budgets. Keep retries bounded to protect upstream stability.

Expected output: your service starts with deterministic transport behavior under transient 429/5xx conditions.

client := velikey.NewClient(velikey.Config{
  BaseURL:          "https://axis.velikey.com",
  SessionCookie:    os.Getenv("AXIS_SESSION_COOKIE"),
  Timeout:          20 * time.Second,
  MaxRetries:       3,
  RetryMinBackoff:  250 * time.Millisecond,
  RetryMaxBackoff:  2 * time.Second,
  UserAgent:        "my-rollout-operator/1.0",
})

Canary Rollout and Rollback

Start with plan and dry-run apply. Execute live apply/rollback only in approved change windows.

Expected output: you should receive plan_id from plan, then rollout_id and optionally rollback_token from live apply.

canaryPercent := 10
plan, err := client.Rollouts.Plan(ctx, velikey.PlanRolloutRequest{
  PolicyID:      policyID,
  CanaryPercent: &canaryPercent,
  Explain:       true,
})
if err != nil {
  return err
}

applyDryRun, err := client.Rollouts.Apply(ctx, velikey.ApplyRolloutRequest{
  PlanID: plan.Data.PlanID,
  DryRun: true,
})
if err != nil {
  return err
}

_ = applyDryRun // inspect response and proceed only after operator sign-off

// manual-only live path
// liveApply, _ := client.Rollouts.Apply(ctx, velikey.ApplyRolloutRequest{PlanID: plan.Data.PlanID, DryRun: false})
// rollback, _ := client.Rollouts.Rollback(ctx, velikey.RollbackRolloutRequest{RollbackToken: liveApply.Data.RollbackToken})

Telemetry and Metering Readback

Record pre/post usage snapshots around rollout or traffic drills and attach both values to evidence receipts.

Expected output: usage API returns current.telemetryGB and current.estimatedCost; telemetry ingest returns accepted/queued state.

before, err := client.Usage.Get(ctx, "current")
if err != nil {
  return err
}

_, err = client.Telemetry.Ingest(ctx, velikey.TelemetryIngestRequest{
  Event: "sdk.go.rollout.validation",
  Properties: map[string]interface{}{
    "policy_id": policyID,
    "lane": "go",
  },
})
if err != nil {
  return err
}

after, err := client.Usage.Get(ctx, "current")
if err != nil {
  return err
}

fmt.Printf("telemetry_before=%.6f telemetry_after=%.6f\n", before.Current.TelemetryGB, after.Current.TelemetryGB)

Troubleshooting

  • 401 Unauthorized: verify the route auth mode (API key vs bearer token vs session cookie) matches endpoint contract.
  • 403 Forbidden: rollout endpoints require owner/admin privileges.
  • 400 Validation errors: ensure rollout confirmation fields are present for non-dry-run apply/rollback.
  • 429 / 5xx responses: use bounded retries and inspect upstream Axis health.

Expected output: after correcting auth and input contract, responses should move from 4xx to 2xx with valid JSON payloads.

Security Notes

  • Do not log API keys, bearer tokens, session cookies, or rollback tokens.
  • Use dedicated tenant-scoped credentials for automation lanes.
  • Run live apply/rollback only with explicit approval and captured receipts.
  • Rotate credentials after test runs and evidence publication.