Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.grantex.dev/llms.txt

Use this file to discover all available pages before exploring further.

Error Types

The Go SDK uses typed errors that implement the error interface. Use type assertions to handle specific error types.

APIError

Returned for any non-2xx HTTP response (except 401/403).
type APIError struct {
    StatusCode int
    Body       json.RawMessage
    Code       string    // "BAD_REQUEST", "NOT_FOUND", etc.
    RequestID  string
    Message    string
}

AuthError

Returned for 401 (Unauthorized) and 403 (Forbidden) responses. Embeds *APIError.
type AuthError struct {
    *APIError
}

TokenError

Returned from VerifyGrantToken() for token verification failures.
type TokenError struct {
    Message string
    Cause   error    // Underlying error (implements Unwrap)
}

NetworkError

Returned for network-level failures (DNS, timeout, connection refused).
type NetworkError struct {
    Message string
    Cause   error    // Underlying error (implements Unwrap)
}

Handling Pattern

agent, err := client.Agents.Get(ctx, "agent-id")
if err != nil {
    switch e := err.(type) {
    case *grantex.AuthError:
        // 401 or 403 — invalid or expired API key
        log.Printf("Auth failed (%d): %s", e.StatusCode, e.Message)
    case *grantex.APIError:
        // Other API errors (400, 404, 422, 500, etc.)
        log.Printf("API error %d [%s]: %s", e.StatusCode, e.Code, e.Message)
    case *grantex.NetworkError:
        // Network issues — retry or fail gracefully
        log.Printf("Network error: %s (cause: %v)", e.Message, e.Cause)
    default:
        log.Printf("Unexpected: %v", err)
    }
}

Unwrap Support

TokenError and NetworkError implement Unwrap() for use with errors.Is() and errors.As():
import "errors"

_, err := grantex.VerifyGrantToken(ctx, token, opts)
if err != nil {
    var tokenErr *grantex.TokenError
    if errors.As(err, &tokenErr) {
        fmt.Printf("Token error: %s\n", tokenErr.Message)
        if tokenErr.Cause != nil {
            fmt.Printf("Caused by: %v\n", tokenErr.Cause)
        }
    }
}