SDKsGo SDKType Reference
Error Types
Go SDK error types and handling patterns using errors.As.
Error Types
The SDK uses Go's standard error wrapping. All errors implement the error interface and can be inspected with errors.As.
Error hierarchy
All error types are in the github.com/avnology/sdk-go/errors package.
import sdkerrors "github.com/avnology/sdk-go/errors"Base error
type AvnologyIDError struct {
Code string // Machine-readable code (e.g., "AVNOLOGY_AUTH_001")
StatusCode int // HTTP status code
Message string // Human-readable message
RequestID string // For support debugging
Details map[string]any // Additional details
}
func (e *AvnologyIDError) Error() string // Implements error interfaceAuthentication errors
type InvalidCredentialsError struct{ AvnologyIDError }
type AccountLockedError struct {
AvnologyIDError
RetryAfter int // Seconds until unlock
}
type AccountDisabledError struct{ AvnologyIDError }
type MfaRequiredError struct {
AvnologyIDError
FlowID string
AvailableMethods []string
}
type InvalidCodeError struct {
AvnologyIDError
AttemptsRemaining int
}
type ExpiredFlowError struct{ AvnologyIDError }
type PasswordBreachedError struct{ AvnologyIDError }
type DuplicateAccountError struct{ AvnologyIDError }OAuth errors
type InvalidGrantError struct{ AvnologyIDError }
type InvalidClientError struct{ AvnologyIDError }
type InvalidScopeError struct{ AvnologyIDError }
type InsufficientScopeError struct{ AvnologyIDError }
type DeviceFlowExpiredError struct{ AvnologyIDError }API errors
type NotFoundError struct{ AvnologyIDError }
type ForbiddenError struct{ AvnologyIDError }
type UnauthorizedError struct{ AvnologyIDError }
type ValidationError struct {
AvnologyIDError
FieldErrors []FieldError
}
type RateLimitError struct {
AvnologyIDError
RetryAfter int
Limit int
Remaining int
ResetAt time.Time
}Usage pattern
import (
sdkerrors "github.com/avnology/sdk-go/errors"
stderrors "errors"
)
session, err := client.Auth.Login(ctx, params)
if err != nil {
var invalidCreds *sdkerrors.InvalidCredentialsError
var locked *sdkerrors.AccountLockedError
var mfa *sdkerrors.MfaRequiredError
var rateLimited *sdkerrors.RateLimitError
var notFound *sdkerrors.NotFoundError
switch {
case stderrors.As(err, &invalidCreds):
return fmt.Errorf("invalid credentials")
case stderrors.As(err, &locked):
return fmt.Errorf("account locked for %d seconds", locked.RetryAfter)
case stderrors.As(err, &mfa):
return handleMfaChallenge(mfa.FlowID, mfa.AvailableMethods)
case stderrors.As(err, &rateLimited):
time.Sleep(time.Duration(rateLimited.RetryAfter) * time.Second)
return retry()
case stderrors.As(err, ¬Found):
return fmt.Errorf("resource not found")
default:
return fmt.Errorf("avnology id error: %w", err)
}
}Check error code directly
var apiErr *sdkerrors.AvnologyIDError
if stderrors.As(err, &apiErr) {
switch apiErr.Code {
case "AVNOLOGY_AUTH_001":
// Invalid credentials
case "AVNOLOGY_API_429":
// Rate limited
}
}See also
- Type reference -- Go struct types
- Login -- Error handling in login flows