Skip to content

Configuration

The simplest way to initialize the SDK is with just your API key:

import CircadifySDK
let sdk = try CircadifySDK(apiKey: "ck_test_your_key_here")

For full control, pass a CircadifyConfig:

let config = CircadifyConfig(
apiKey: "ck_live_your_key_here",
baseUrl: "https://api.circadify.com",
measurementDuration: 30,
debug: false
)
let sdk = try CircadifySDK(config: config)
public struct CircadifyConfig {
public let apiKey: String
public var baseUrl: String
public var measurementDuration: TimeInterval
public var debug: Bool
}
PropertyTypeDefaultDescription
apiKeyStringRequired. Your API key (ck_test_* or ck_live_*).
baseUrlString"https://api.circadify.com"API base URL.
measurementDurationTimeInterval30Target capture duration in seconds.
debugBoolfalsePrint debug logs to the console.

Set callbacks on the SDK instance to receive progress updates and quality warnings during measurement.

sdk.onProgress = { update in
print("Phase: \(update.phase)\(Int(update.percent))%")
}
public struct ProgressUpdate {
public let percent: Double // 0-100
public let phase: Phase // .initializing, .capturing, .uploading, .processing
public let elapsed: TimeInterval
public let remaining: TimeInterval?
}
PhaseDescription
.initializingSetting up camera and vision engine
.capturingRecording and analyzing video frames
.uploadingUploading preprocessed data
.processingServer-side inference running
sdk.onQualityWarning = { warning in
print("[\(warning.severity)] \(warning.type): \(warning.message)")
}
public struct QualityWarning {
public let type: WarningType // .lighting, .motion, .facePosition, .occlusion
public let message: String
public let severity: Severity // .low, .medium, .high
}
Warning TypeTrigger
.lightingToo dark, too bright, or flickering
.motionExcessive movement
.facePositionHead turned or tilted too far
.occlusionFace partially blocked

Use these to show guidance in your UI — “Hold still”, “Move to better lighting”, etc.

Pass MeasurementOptions to measureVitals() to provide demographics for improved accuracy:

let options = MeasurementOptions(
demographics: Demographics(age: 35, sex: .male, fitzpatrick: 3)
)
let result = try await sdk.measureVitals(options: options)
public struct Demographics: Codable {
public var age: Int?
public var sex: Sex? // .male or .female
public var fitzpatrick: Int? // Skin type 1-6
}

Demographics are optional but can improve measurement accuracy when provided.