Skip to main content

Configuration

DynamicSDKConfig

Configuration for initializing the Dynamic SDK.
data class DynamicSDKConfig(
    val environmentId: String      // Your Dynamic environment ID (required)
)

Example

val config = DynamicSDKConfig(
    environmentId = "YOUR_ENV_ID"
)

DynamicSDK.initialize(context = applicationContext, config = config)

Authentication

UserProfile

Represents an authenticated user’s profile.
data class UserProfile(
    val userId: String?,
    val email: String?,
    val phoneNumber: String?,
    // Additional fields available
)

Example

val user = sdk.auth.authenticatedUser
if (user != null) {
    println("User ID: ${user.userId}")
    println("Email: ${user.email}")
    println("Phone: ${user.phoneNumber}")
}

PhoneData

Phone number data for SMS authentication.
data class PhoneData(
    val dialCode: String,   // e.g., "+1"
    val iso2: String,       // e.g., "US"
    val phone: String       // Phone number without country code
)

Example

val phoneData = PhoneData(
    dialCode = "+1",
    iso2 = "US",
    phone = "5551234567"
)

sdk.auth.sms.sendOTP(phoneData)

SignInWithExternalJwtParams

Parameters for external JWT authentication.
data class SignInWithExternalJwtParams(
    val jwt: String     // The external JWT token
)

Example

sdk.auth.externalAuth.signInWithExternalJwt(
    SignInWithExternalJwtParams(jwt = "your-jwt-token")
)

Wallets

BaseWallet

Represents a user’s wallet.
data class BaseWallet(
    val address: String,        // Wallet address
    val chain: String,          // "EVM" or "SOL"
    val walletName: String?,    // Wallet name (optional)
    val id: String?             // Wallet ID for API operations (optional)
)

Example

val wallets = sdk.wallets.userWallets
wallets.forEach { wallet ->
    println("Address: ${wallet.address}")
    println("Chain: ${wallet.chain}")
    println("Name: ${wallet.walletName}")
    println("ID: ${wallet.id}")
}

GenericNetwork

Represents a blockchain network.
data class GenericNetwork(
    val name: String,
    val chainId: Int?,      // For EVM networks
    val networkId: String?  // For Solana networks
)

Example

val evmNetworks = sdk.networks.evm
val ethereum = evmNetworks.first { it.chainId == 1 }
println("Network: ${ethereum.name}, Chain ID: ${ethereum.chainId}")

val solanaNetworks = sdk.networks.solana
val mainnet = solanaNetworks.first { it.networkId == "mainnet-beta" }
println("Network: ${mainnet.name}, Network ID: ${mainnet.networkId}")

EVM / Blockchain

EthereumTransaction

Transaction data for EVM chains.
data class EthereumTransaction(
    val to: String,                     // Recipient address
    val value: String,                  // Amount in Wei (as String)
    val gasLimit: Int,                  // Gas limit
    val maxFeePerGas: Int? = null,      // Max fee per gas (optional)
    val maxPriorityFeePerGas: Int? = null, // Priority fee (optional)
    val data: String? = null            // Contract data (optional)
)

Example

val transaction = EthereumTransaction(
    to = "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    value = "1000000000000000", // 0.001 ETH in Wei
    gasLimit = 21000,
    maxFeePerGas = 30000000000,
    maxPriorityFeePerGas = 2000000000
)

WriteContractInput

Input for writing to a smart contract.
data class WriteContractInput(
    val address: String,                // Contract address
    val functionName: String,           // Function to call
    val args: List<Any>,                // Function arguments
    val abi: List<Map<String, Any>>     // Contract ABI
)

Example

val input = WriteContractInput(
    address = "0x...",
    functionName = "transfer",
    args = listOf("0x...", "1000000000000000000"), // recipient, amount
    abi = parseAbiJson(Erc20.abi)
)

GasPrice

Current gas price information for EVM chains.
data class GasPrice(
    val maxFeePerGas: Int,
    val maxPriorityFeePerGas: Int
)

Example

val client = sdk.evm.createPublicClient(chainId = 1)
val gasPrice = client.getGasPrice()
println("Max fee: ${gasPrice.maxFeePerGas}")
println("Priority fee: ${gasPrice.maxPriorityFeePerGas}")

Erc20

ERC20 token utilities.
object Erc20 {
    val abi: String  // Standard ERC20 ABI as JSON string
}

Example

// Parse ERC20 ABI for contract interactions
val abiList = parseAbiJson(Erc20.abi)

BlockhashResult

Solana blockhash information.
data class BlockhashResult(
    val blockhash: String,
    val lastValidBlockHeight: Long
)

Example

val connection = sdk.solana.createConnection()
val result = connection.getLatestBlockhash()
println("Blockhash: ${result.blockhash}")
println("Valid until block: ${result.lastValidBlockHeight}")

MFA

MfaDevice

Represents an MFA device.
data class MfaDevice(
    val id: String?,
    val type: MfaDeviceType?
)

enum class MfaDeviceType {
    totp
}

Example

val devices = sdk.mfa.getUserDevices()
devices.forEach { device ->
    println("Device ID: ${device.id}")
    println("Type: ${device.type?.name}")
}

MfaAddDevice

Response when adding an MFA device.
data class MfaAddDevice(
    val secret: String,     // Secret for QR code generation
    val id: String?
)

Example

val device = sdk.mfa.addDevice("totp")
println("Secret for QR code: ${device.secret}")
// Display QR code with this secret for user to scan

MfaAuthenticateDevice

Parameters for authenticating an MFA device.
data class MfaAuthenticateDevice(
    val code: String,
    val deviceId: String,
    val createMfaToken: MfaCreateToken
)

Example

val token = sdk.mfa.authenticateDevice(
    MfaAuthenticateDevice(
        code = "123456",
        deviceId = "device-id",
        createMfaToken = MfaCreateToken(singleUse = true)
    )
)

MfaCreateToken

Parameters for MFA token creation.
data class MfaCreateToken(
    val singleUse: Boolean
)

Example

val createToken = MfaCreateToken(singleUse = true)

Passkeys

UserPasskey

Represents a user’s passkey.
data class UserPasskey(
    val id: String,
    val createdAt: String,      // ISO format
    val lastUsedAt: String?,    // ISO format (optional)
    val isDefault: Boolean?
)

Example

val passkeys = sdk.passkeys.getPasskeys()
passkeys.forEach { passkey ->
    println("ID: ${passkey.id}")
    println("Created: ${passkey.createdAt}")
    println("Last used: ${passkey.lastUsedAt}")
    println("Is default: ${passkey.isDefault}")
}

DeletePasskeyRequest

Request to delete a passkey.
data class DeletePasskeyRequest(
    val passkeyId: String
)

Example

sdk.passkeys.deletePasskey(
    DeletePasskeyRequest(passkeyId = "passkey-id")
)

PasskeyAuthenticationResponse

Response from passkey MFA authentication.
data class PasskeyAuthenticationResponse(
    val jwt: String?    // MFA token
)

Example

val response = sdk.passkeys.authenticatePasskeyMFA(
    createMfaToken = MfaCreateToken(singleUse = true),
    relatedOriginRpId = null
)
println("MFA Token: ${response.jwt}")

Error Handling

All SDK methods that can fail will throw exceptions. Use standard Kotlin error handling:
try {
    sdk.auth.email.verifyOTP(code)
} catch (e: Exception) {
    Log.e("SDK", "Error: ${e.message}")
}
For suspend functions in coroutines:
viewModelScope.launch {
    try {
        val wallets = sdk.wallets.userWallets
    } catch (e: Exception) {
        errorMessage.value = "Failed: ${e.message}"
    }
}