Go SDK

Every tool as a typed Go method, structured errors, and package site for analytics, IndexNow and deploys.

Embed
Preview of the card
<a href="https://seolyticize.com/docs/go-sdk"><img src="https://seolyticize.com/docs/_api/public/orgs/71cb2b7a-a719-4003-b3ea-6321dc1db8ab/spaces/3bf2dbf7-3faa-473c-ba3b-30588f5f8de4/pages/029bea93-b00a-440a-8e8d-35d25b6d216f/social-card.svg?v=3e7ae33eec8b" alt="Go SDK" width="600" height="315"></a>

github.com/Seolyticize/sdk-go has a typed input struct and method for every tool, generated from the registry that runs the API. Standard library only.

go get github.com/Seolyticize/sdk-go

Calls

client := seolyticize.New("") // reads SEOLYTICIZE_API_KEY

out, err := client.GetAuditSummary(ctx, seolyticize.GetAuditSummaryInput{ClientID: "client_…"})
var summary struct{ PagesCrawled int `json:"pagesCrawled"` }
json.Unmarshal(out, &summary)

Results are the tool's JSON as json.RawMessage. Optional numbers and booleans are pointers: Limit: seolyticize.Ptr(int64(50)). client.Call(ctx, "tool_name", input) reaches tools newer than the module, and client.ListTools(ctx, "weekly") lists what your key may call.

Errors

var apiErr *seolyticize.Error
if errors.As(err, &apiErr) {
	log.Println(apiErr.Status, apiErr.Code, apiErr.Next, apiErr.RequestID)
}
if seolyticize.IsCode(err, "unknown_client") { … }

The retry rules match the other SDKs: 429 always, server and network errors only for read-only tools.

On your site

import "github.com/Seolyticize/sdk-go/site"

tag := site.AnalyticsTag("SITE_KEY", site.TagOptions{Exclude: []string{"/account/*"}})
mux.Handle("/"+key+".txt", site.IndexNowKeyHandler(key))
site.NotifyDeploy(ctx, hookURL, nil)
site.TrackEvent(ctx, site.Event{SiteKey: "SITE_KEY", URL: "https://example.com/pricing", Name: "Signup"})
Updated