Skip to main content
Class Entry point for the Crossmint SDK.
@MainActor final class CrossmintSDK
Call configure(apiKey:logLevel:) once at app startup before accessing shared. Accessing shared before configuring causes a fatalError. When using an email OTP signer, observe isOTPRequired to know when to display an OTP input, then call submit(otp:) with the code the user enters.
@main
struct MyApp: App {
    init() {
        CrossmintSDK.configure(apiKey: "ck_development_...", logLevel: .warn)
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(CrossmintSDK.shared)
        }
    }
}

Instance Properties

authClient

Standalone auth client for explicit OTP lifecycle management. See AuthClient.
@MainActor let authClient: AuthClient

authManager

Authentication manager for the email OTP flow. See CrossmintAuthManager.
@MainActor let authManager: CrossmintAuthManager

crossmintService

Low-level Crossmint service for direct API access.
@MainActor let crossmintService: CrossmintService

crossmintWallets

Factory for creating and retrieving smart wallets. See CrossmintWallets.
@MainActor let crossmintWallets: CrossmintWallets

isOTPRequired

Emits true when a pending transaction is waiting for the user to enter an email OTP.
@MainActor var isOTPRequired: Published<Bool>.Publisher { get }

isProductionEnvironment

Whether the SDK is running against the Crossmint production environment.
@MainActor var isProductionEnvironment: Bool { get }

Instance Methods

cancelTransaction()

Cancels the pending transaction waiting for an OTP.
@MainActor func cancelTransaction()

logout()

Invalidates the server-side refresh token, clears the local session, and resets OTP state.
@MainActor func logout() async

setJWT(_:)

Sets a JWT for authentication. Use this when authenticating with an externally obtained token rather than through the built-in OTP flow.
@MainActor func setJWT(_ jwt: String) async
Note: Unlike the TypeScript SDK’s synchronous setJwt, this is async because it updates actor-isolated state on CrossmintAuthManager.

submit(otp:)

Provides the OTP entered by the user to unblock the pending transaction.
@MainActor func submit(otp: String)

Type Properties

shared

The configured SDK instance. Access after calling configure(apiKey:logLevel:).
@MainActor static var shared: CrossmintSDK { get }

Type Methods

configure(apiKey:logLevel:)

Configures the SDK. Must be called once before accessing shared.
@MainActor static func configure(apiKey: String, logLevel: LogLevel = .error)
Subsequent calls are silently ignored — the SDK can only be configured once per process.

Parameters

  • apiKey: A client API key (prefixed ck_).
  • logLevel: Controls SDK log verbosity. Defaults to .error.