Tutorial
Insurance Claims App
Build a fraud-proof claims app with Immutis. A complete tutorial for insurance companies.
45 min
Intermediate
React Native
1-10 users
Overview
In this tutorial, you'll build a complete insurance claims app that: • Captures photos with hardware attestation • Records GPS location automatically • Verifies evidence authenticity • Generates forensic certificates By the end, you'll have a production-ready claims workflow.
Project Setup
Create a new React Native or iOS/Android project: npx create-expo-app ClaimsApp cd ClaimsApp npm install @immutis/react-native Or use your existing insurance app.
Step 1: Configure Immutis
Wrap your app with ImmutisProvider:
// App.tsx
import { ImmutisProvider } from '@immutis/react-native'
export default function App() {
return (
<ImmutisProvider
apiKey={process.env.IMUTIS_API_KEY}
environment="production"
>
<NavigationContainer>
<AppNavigator />
</NavigationContainer>
</ImmutisProvider>
)
}Step 2: Create Claims Screen
// screens/NewClaim.tsx
import { useImmutis } from '@immutis/react-native'
import { useState } from 'react'
export function NewClaimScreen({ navigation }) {
const { capture } = useImmutis()
const [capturing, setCapturing] = useState(false)
const handleCapture = async () => {
setCapturing(true)
try {
// Capture evidence with location and timestamp
const evidence = await capture({
type: 'photo',
location: true,
timestamp: true,
metadata: {
claimType: 'property-damage',
userId: currentUser.id
}
})
// Navigate to review
navigation.navigate('ReviewClaim', { evidence })
} catch (error) {
Alert.alert('Error', 'Failed to capture evidence')
} finally {
setCapturing(false)
}
}
return (
<View style={styles.container}>
<Text style={styles.title}>Document Damage</Text>
<Button onPress={handleCapture} disabled={capturing}>
{capturing ? 'Capturing...' : 'Take Photo'}
</Button>
</View>
)
}Step 3: Automatic Location
Location is captured automatically when you pass location: true. The evidence will include: • latitude: number • longitude: number • altitude: number (if available) • accuracy: number (meters) This proves exactly where the damage was documented.
Step 4: Review & Submit
// screens/ReviewClaim.tsx
export function ReviewClaimScreen({ route, navigation }) {
const { evidence } = route.params
return (
<View>
<Image source={{ uri: evidence.thumbnail }} />
<Text>Location: {evidence.latitude}, {evidence.longitude}</Text>
<Text>Timestamp: {new Date(evidence.timestamp).toLocaleString()}</Text>
<Button onPress={() => submitClaim(evidence)}>
Submit Claim
</Button>
</View>
)
}Step 5: Backend Verification
When a claim is disputed, verify authenticity:
// server/claims.js
async function verifyClaim(evidenceId) {
const response = await axios.post(
`https://api.immutis.com/v1/evidence/${evidenceId}/verify`,
{ standards: ['sha256', 'hardware', 'timestamp'] },
{ headers: { Authorization: `Bearer ${API_KEY}` }}
)
return response.data
}
// Generate forensic certificate
async function generateCertificate(evidenceId) {
return axios.post(
`https://api.immutis.com/v1/evidence/${evidenceId}/certificate`,
{ format: 'forensic' },
{ headers: { Authorization: `Bearer ${API_KEY}` }}
)
}Step 6: Generate Certificates
For legal proceedings, generate a certificate:
async function handleDispute(claimId) {
const claim = await getClaim(claimId)
// Verify first
const verification = await verifyClaim(claim.evidenceId)
if (!verification.valid) {
throw new Error('Evidence not authentic')
}
// Generate certificate
const cert = await generateCertificate(claim.evidenceId)
// Send to legal team
await sendCertificateToLegal(cert.downloadUrl)
}Complete Flow
1. User captures damage photo → Hardware attestated 2. Location & timestamp added automatically 3. Evidence stored securely 4. Claim submitted for review 5. Adjuster verifies if needed 6. Certificate generated for legal This creates a complete chain of custody for each claim.