Docs/Getting Started/Prerequisites

Prerequisites

Three things every consumer app needs before calling Octet.start(...):

  1. A license key.
  2. Privacy declarations in your app bundle (iOS Info.plist) or runtime permission grants (Android).
  3. A minimum platform version.

1. License key

The SDK is gated by a per-developer license key. Request a free key at sdk.octetproof.com/signup.

The key is a PASETO v4.public token shaped like octet_live_v4.public.… (or octet_test_… against staging). Octet signs the key, and the SDK verifies the signature locally before any network call.

The first 1,000 active users each month are free, and past that usage is billed at one US cent per active user, per month. An active user is a device that asked your app for at least one proof that month. The SDK reports a count per device, per month, and nothing else: no identity, no coordinates. A device that proves a thousand times counts once. Keys renew automatically, with no time limit, and there is no per-license device cap: install on as many devices as you need.


2. Platform privacy declarations

iOS: Info.plist keys

Add these to your app's Info.plist. Without them, the iOS runtime crashes on first launch with a privacy-sensitive-data error that names the missing key.

Required

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app uses your location to verify and prove your location
to services that request it.</string>

<key>NSMotionUsageDescription</key>
<string>This app uses motion data to detect when you're stationary or
moving, which improves the confidence of location proofs.</string>

NSMotionUsageDescription is required. The SDK touches CMMotionActivityManager immediately during Octet.start(...), and Apple requires the usage description before any code accesses that API. Read-only access also counts.

The strings are user-facing. The copy above is a safe default. Rewrite in your product's voice if you prefer.

Required only if you enable background location

If your app needs proofs while backgrounded, also add:

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app uses background location to continue generating
location proofs while you're not actively using it.</string>

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

Without these the SDK silently falls back to foreground-only operation when the app is backgrounded. The SDK itself does not crash. Proofs stop generating until the app returns to foreground.

Android: runtime permissions

The SDK's AndroidManifest.xml declares the permissions the on-demand foreground proof flow uses: location, motion, foreground service, internet, and wake-lock. Manifest-merge propagates these into your app, so you do not copy them into your own manifest.

The SDK's manifest declares only the permissions the foreground proof flow uses, so ACCESS_BACKGROUND_LOCATION is not bundled. To generate proofs while the app is backgrounded, declare ACCESS_BACKGROUND_LOCATION in your own manifest.

You still request the runtime permissions from the user:

Permission When to request Notes
ACCESS_FINE_LOCATION Before Octet.start(...). SDK refuses to start without it.
ACTIVITY_RECOGNITION Before Octet.start(...). Android 10+ (API 29+). Motion-classification features degrade gracefully if denied. Request it for full proof confidence.
ACCESS_BACKGROUND_LOCATION After ACCESS_FINE_LOCATION is granted, only if you need background proofs. Declare it in your own manifest first. The SDK does not merge it. Android 10+ prompts for it separately.

3. Minimum platform versions

Platform Minimum Toolchain
iOS 16.0 Xcode 15+, Swift 5.9+
Android API 30 (Android 11) Android Studio Hedgehog (2023.1.1)+, JDK 17, Kotlin 2.1+

Next: the iOS Quick Start or Android Quick Start.