Avnology ID
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 interface

Authentication 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, &notFound):
        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

On this page