Run AI-powered analyses on evidence files. All processing happens locally on your machine using Apple Silicon MLX acceleration. No data ever leaves your device.
/api/v1/analysis/transcriptionStart an AI transcription of a video or audio evidence file. Uses MLX Whisper running locally on Apple Silicon for fast, private transcription. Supports speaker diarization and timestamp alignment.
{
"evidenceId": "ev-a1b2c3d4",
"language": "en",
"model": "large-v3",
"options": {
"speakerDiarization": true,
"wordTimestamps": true,
"maxSpeakers": 5
}
}{
"analysisId": "an-x9y8z7w6",
"type": "transcription",
"status": "processing",
"evidenceId": "ev-a1b2c3d4",
"estimatedDuration": 120,
"startedAt": "2024-03-20T15:00:00Z",
"model": "large-v3",
"device": "Apple M2 Max (MLX)"
}| Code | Description |
|---|---|
400 | Invalid evidence ID or unsupported file format. |
404 | Evidence file not found. |
409 | Analysis already in progress for this evidence. |
503 | System resources unavailable. Try again shortly. |
/api/v1/analysis/contradictionsRun contradiction detection between a video transcript and a police report or witness statement. Identifies discrepancies in timelines, descriptions of events, and stated facts.
{
"evidenceId": "ev-a1b2c3d4",
"compareWith": {
"type": "document",
"documentId": "ev-d5e6f7g8"
},
"options": {
"sensitivity": "high",
"categories": ["timeline", "actions", "statements", "locations"],
"includeContext": true
}
}{
"analysisId": "an-c0n7r4d1",
"type": "contradiction_detection",
"status": "processing",
"evidenceId": "ev-a1b2c3d4",
"comparedWith": "ev-d5e6f7g8",
"estimatedDuration": 45,
"startedAt": "2024-03-20T16:00:00Z"
}| Code | Description |
|---|---|
400 | Invalid evidence IDs or missing comparison document. |
404 | One or both evidence files not found. |
422 | Evidence must be transcribed before contradiction detection. |
503 | System resources unavailable. |
/api/v1/analysis/facesRun face recognition on video evidence to identify and track individuals across frames. Uses on-device ML models with no cloud processing. Results help establish presence and timeline.
{
"evidenceId": "ev-a1b2c3d4",
"options": {
"minConfidence": 0.85,
"trackAcrossFrames": true,
"sampleRate": 2,
"knownFaces": ["face-lib-officer-jones", "face-lib-defendant"]
}
}{
"analysisId": "an-f4c3r3c0",
"type": "face_recognition",
"status": "processing",
"evidenceId": "ev-a1b2c3d4",
"estimatedDuration": 300,
"startedAt": "2024-03-20T17:00:00Z"
}| Code | Description |
|---|---|
400 | Invalid evidence ID or unsupported video format. |
404 | Evidence file not found. |
409 | Face recognition already in progress for this evidence. |
503 | System resources unavailable. |
/api/v1/analysis/:id/statusCheck the current status and progress of a running analysis. Returns progress percentage, estimated time remaining, and any warnings.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Required | The unique analysis ID (e.g., "an-x9y8z7w6"). |
{
"analysisId": "an-x9y8z7w6",
"type": "transcription",
"status": "processing",
"progress": 67,
"estimatedTimeRemaining": 40,
"startedAt": "2024-03-20T15:00:00Z",
"device": "Apple M2 Max (MLX)",
"resourceUsage": {
"cpu": 45,
"memory": 8192,
"gpu": 78
}
}| Code | Description |
|---|---|
404 | Analysis not found with the specified ID. |
500 | Internal server error. |
/api/v1/analysis/:id/resultsGet the results of a completed analysis. Response format varies by analysis type (transcription, contradiction detection, or face recognition).
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Required | The unique analysis ID. |
format | string | Optional | Response format: "json" (default), "srt" (transcription only), "vtt" (transcription only). |
{
"analysisId": "an-x9y8z7w6",
"type": "transcription",
"status": "completed",
"completedAt": "2024-03-20T15:02:00Z",
"results": {
"segments": [
{
"start": 0.0,
"end": 4.5,
"text": "Step out of the vehicle please.",
"speaker": "SPEAKER_01",
"confidence": 0.97
},
{
"start": 5.2,
"end": 8.1,
"text": "What did I do wrong, officer?",
"speaker": "SPEAKER_02",
"confidence": 0.94
}
],
"speakers": [
{ "id": "SPEAKER_01", "totalDuration": 245.5 },
{ "id": "SPEAKER_02", "totalDuration": 122.3 }
],
"totalDuration": 3847.5,
"language": "en",
"wordCount": 4521
}
}| Code | Description |
|---|---|
404 | Analysis not found with the specified ID. |
409 | Analysis is still in progress. Check status endpoint. |
500 | Internal server error. |