Mobile capture
The app captures and uploads. Your backend does everything else, because anything inside an app can be extracted.
- Your app asks your backend to start a check.
- Your backend creates a capture session and returns capture_token, upload_url and policy.
- The app captures frames with the live camera and uploads them.
- The app tells your backend it has finished, and your backend calls verify.
expo-upload.tsx
const form = new FormData();
form.append("frame", { uri: photo.uri, name: "frame.jpg", type: "image/jpeg" });
await fetch(session.upload_url, {
method: "POST",
headers: { Authorization: `Capture ${session.capture_token}` },
body: form,
});A rooted phone or modified app can inject a video stream into the camera path. Warka's checks raise the cost of common attacks, and they don't remove this risk.
Native Android and iOS snippets are in examples/mobile in the repository.