SDK / Mobile app
The iOS SDK identifies your app with Bundle ID + Team ID headers:/challenge, /validate, /refresh) need only these headers — the attestation object itself is the proof.
All other SDK endpoints — feature flags, the flag SSE stream, heartbeat, feedback, and support — additionally require one of:
- A Grantiva JWT issued by attestation, sent as
Authorization: Bearer <jwt>(this is what the SDK does automatically aftervalidateAttestation()), or - An API key (simulator/development mode, or server-side callers).
401 Unauthorized with WWW-Authenticate: Bearer realm="grantiva".
In practice the SDK handles this for you: run
validateAttestation() once before using flags, feedback, or support. In the iOS Simulator (no App Attest), initialize the SDK with an API key instead — see Simulator Setup.