AnyBio
API Reference

Images API

Image upload, querying, BioImage model, and classification types.

The SDK supports uploading images and querying image data associated with users and sessions.

Uploading Images

Upload through BioSDKClient:

// Upload a UIImage
try await sdk.uploadImage(photo, userId: userId)

// Upload raw data with MIME type
try await sdk.uploadImageData(
    jpegData,
    mimeType: "image/jpeg",
    userId: userId,
    deviceId: "camera-001"
)

ImageIngestClient

Low-level image upload client.

public class ImageIngestClient {
    // Upload raw image data
    public func uploadImageData(
        _ data: Data,
        mimeType: String,
        userId: UUID,
        deviceId: String
    ) async throws

    // Upload a UIImage (iOS only)
    public func uploadImage(
        _ image: UIImage,
        userId: UUID,
        deviceId: String,
        mimeType: String = "image/jpeg",
        compression: CGFloat = 0.8
    ) async throws
}

ImageError

public enum ImageError: Error, LocalizedError {
    case compressionFailed
    case uploadFailed
    case server(status: Int, body: String?)
    case network(underlying: Error)
    case invalidResponse
}

ImageQueryClient

Client for querying uploaded images.

public final class ImageQueryClient {
    // List images with optional filters
    public func listImages(
        filter: ImageQueryFilter = ImageQueryFilter()
    ) async throws -> [BioImage]

    // Get a single image by ID
    public func getImage(id: String) async throws -> BioImage

    // Download the raw image data
    public func downloadImage(id: String) async throws -> Data
}

ImageQueryFilter

Filter parameters for listing images.

public struct ImageQueryFilter: Equatable, Sendable {
    public var xuserId: String?
    public var sessionId: String?
    public var dateRange: DateRangePreset?
    public var limit: Int?
    public var offset: Int?

    public init(
        xuserId: String? = nil,
        sessionId: String? = nil,
        dateRange: DateRangePreset? = nil,
        limit: Int? = nil,
        offset: Int? = nil
    )
}

DateRangePreset

public enum DateRangePreset: String, Sendable {
    case today = "today"
    case last7Days = "7days"
    case last30Days = "30days"
    case last90Days = "90days"
}

ImageQueryError

public enum ImageQueryError: Error, LocalizedError {
    case invalidHTTPResponse
    case badStatus(Int)
    case decodingFailed(String)
    case forbidden
    case notFound
    case serverError(Int)
}

BioImage

An uploaded image with metadata and optional classifications.

public struct BioImage: Codable, Identifiable, Equatable, Sendable {
    public let id: String
    public let xuserId: String
    public let sessionId: String?
    public let deviceId: String?
    public let capturedAt: Date?
    public let uploadedAt: Date
    public let mimeType: String
    public let sizeBytes: Int
    public let width: Int?
    public let height: Int?
    public let imageUrl: String?
    public let thumbnailUrl: String?
    public let classifications: [BioImageClassification]?
}
PropertyTypeDescription
idStringUnique image identifier
xuserIdStringUser who owns the image
sessionIdString?Associated session (if uploaded during a session)
deviceIdString?Device that captured the image
capturedAtDate?When the image was captured
uploadedAtDateWhen the image was uploaded
mimeTypeStringMIME type (e.g., "image/jpeg")
sizeBytesIntFile size in bytes
width / heightInt?Image dimensions
imageUrlString?Full-resolution URL
thumbnailUrlString?Thumbnail URL
classifications[BioImageClassification]?ML classification results

BioImageClassification

A classification result from the backend ML pipeline.

public struct BioImageClassification: Codable, Equatable, Sendable {
    public let id: String
    public let imageId: String
    public let classification: String
    public let confidence: Double
    public let processingEngine: String?
    public let createdAt: Date
}
PropertyTypeDescription
idStringClassification record ID
imageIdStringParent image ID
classificationStringClassification label
confidenceDoubleConfidence score (0.0–1.0)
processingEngineString?ML engine that produced the result
createdAtDateWhen the classification was generated

Example — display classifications:

let images = try await imageClient.listImages(
    filter: ImageQueryFilter(xuserId: userId, limit: 10)
)

for image in images {
    if let classifications = image.classifications {
        for c in classifications {
            print("\(c.classification): \(Int(c.confidence * 100))%")
        }
    }
}

On this page