# Octet Mobile SDK

Provable location for iOS and Android apps.

The SDK is distributed on GitHub (add it via Swift Package Manager or Maven). It needs a license key to run, and a free key is at [sdk.octetproof.com/signup](https://sdk.octetproof.com/signup), free for up to 1,000 proofs a month, no credit card.

The Octet SDK turns a location check into a verdict (`YES`, `NO`, or `INDETERMINATE`) and, when it can answer, a signed proof anyone can verify offline with [`octet-verify`](https://github.com/octetproof/octet-verify), the open-source verifier.

:::note[SDK 1.1]

This documentation describes the Octet SDK 1.1. Three declared symbols are not yet wired: `getRegion(city)`, `getRegion(namedZone)`, and proto-JSON serialization for proof material. Calling them throws `OctetFutureFlag`.

:::

## Pick a starting point

- **Shipping an iOS app** -> [iOS Quick Start](/docs/getting-started/ios-quickstart/)
- **Shipping an Android app** -> [Android Quick Start](/docs/getting-started/android-quickstart/)
- **Evaluating the SDK** -> [Proof of Location](/docs/concepts/proof-of-location/)
- **Looking up a symbol** -> [API Reference](/docs/api-reference/overview/)
- **Debugging an error** -> [Troubleshooting & FAQ](/docs/troubleshooting/faq/)

## What the SDK does

You call `sdk.loc.isWithin(region: ...)`. You get back a [`Verdict`](/docs/api-reference/octet-verdict/) of `YES`, `NO`, or `INDETERMINATE`, and on `YES` or `NO` a cryptographic proof a third party can verify offline.

## What this documentation covers

- [**Getting Started**](/docs/getting-started/prerequisites/). Prerequisites, install, first verdict.
- [**Concepts**](/docs/concepts/proof-of-location/). What proofs are, the verdict values, regions, time semantics, and the license model.
- [**API Reference**](/docs/api-reference/overview/). Per-symbol pages, Swift and Kotlin side by side.
- [**Sample Apps**](/docs/samples/ios-toy-app/). The OctetSample demo apps for iOS and Android.
- [**Troubleshooting**](/docs/troubleshooting/faq/). Indexed by what you see in `verdict.reason` or `LicenseError`.

## What the SDK is *not*

- **Not a navigation library.** It reports whether a device was at a claimed place at a claimed time, not where to go next.
- **Not a spoof detector you can wire into your own user-flagging.** Spoof signals fold into the verdict. You get a `reason` code (for example `ATTESTATION_FAILED`), not the sensor-level detail of which signal fired. Exposing that is a security risk: it tells an attacker exactly what to defeat.
