Evidences API
The Evidences endpoint of the Investigation Service exposes CRUD operations on evidences. An evidence is a single forensic artefact – typically a latent print, a face image, a video, a DNA profile or a supporting document – that always belongs to exactly one case.
For the conceptual background see Cases and Evidence.
Operations
| Operation | Verb / path |
|---|---|
| Evidence creation | PUT evidences/{evidenceId}/create |
| Evidence retrieval | GET evidences/{evidenceId} |
| Evidence update | PUT evidences/{evidenceId}/update |
| Evidence soft-delete | POST evidences/{evidenceId}/delete |
| Evidence export | POST evidences/{evidenceId}/export |
| Evidence import | POST evidences/import |
| Evidence status | GET evidences/{evidenceId}/status |
Client instance
- C#
- Java
using Innovatrics.Abis.Rest.Api;
static EvidencesApi GetEvidencesApiInstance(string accessToken)
{
return new EvidencesApi(BuildAbisConfiguration(accessToken));
}
import com.innovatrics.abis.rest.api.EvidencesApi;
private static EvidencesApi getEvidencesApiInstance(String accessToken) {
return new EvidencesApi(buildAbisClient(accessToken));
}
Creation
Evidence is created with a client-supplied UUID. Supported asset types include Face, Print (rolled / plain fingerprint), Latent, DNA, Video and Other.
The example below uploads a face image and a latent print; in real-world integrations you will typically receive the binary from a workflow that scans, photographs or imports the artefact.
- C#
- Java
var ea = GetEvidencesApiInstance(accessToken);
var createEvidenceRequest = new CreateEvidenceRequest
{
Name = "Suspect Face Image",
AssetType = AssetType.Face,
CaseId = Guid.Parse("existing-case-id"),
Description = "Face image captured from surveillance camera",
Location = "Bank ATM - Main Street",
CapturedAt = DateTime.UtcNow,
CapturedById = 1,
UploadDuration = 1500,
Image = new Image
{
Format = "jpg",
DataBytes = Convert.ToBase64String(File.ReadAllBytes("face-image.jpg"))
}
};
var evidenceId = Guid.NewGuid().ToString();
var evidenceResponse = ea.CreateEvidence(evidenceId, createEvidenceRequest);
Console.WriteLine($"Evidence created with ID: {evidenceResponse.Id}");
EvidencesApi ea = getEvidencesApiInstance(accessToken);
CreateEvidenceRequest createEvidenceRequest = new CreateEvidenceRequest()
.name("Latent Fingerprint")
.assetType(AssetType.LATENT)
.caseId(UUID.fromString("existing-case-id"))
.description("Latent fingerprint found on weapon")
.location("Crime scene - Kitchen knife")
.capturedAt(OffsetDateTime.now())
.capturedById(1L)
.uploadDuration(2000L);
String evidenceId = UUID.randomUUID().toString();
EvidenceResponse evidenceResponse = ea.createEvidence(evidenceId, createEvidenceRequest);
System.out.println("Evidence created with ID: " + evidenceResponse.getId());
Retrieval
The evidence response carries metadata, the URL to the original image, and any SMT / face / body characteristics that have been assigned. Use the per-modality endpoints documented in the OpenAPI spec to retrieve raw images and templates one at a time.
- C#
- Java
var ea = GetEvidencesApiInstance(accessToken);
var evidenceResponse = ea.GetEvidence("existing-evidence-id");
Console.WriteLine($"Evidence Name: {evidenceResponse.Name}");
Console.WriteLine($"Asset Type: {evidenceResponse.AssetType}");
Console.WriteLine($"Description: {evidenceResponse.Description}");
Console.WriteLine($"Captured At: {evidenceResponse.CapturedAt}");
EvidencesApi ea = getEvidencesApiInstance(accessToken);
EvidenceResponse evidenceResponse = ea.getEvidence("existing-evidence-id");
System.out.println("Evidence Name: " + evidenceResponse.getName());
System.out.println("Asset Type: " + evidenceResponse.getAssetType());
System.out.println("Description: " + evidenceResponse.getDescription());
System.out.println("Captured At: " + evidenceResponse.getCapturedAt());
Update
Evidence updates can change the metadata of an existing evidence and / or its underlying file. The response carries the updated representation.
- C#
- Java
var ea = GetEvidencesApiInstance(accessToken);
var updateEvidenceRequest = new UpdateEvidenceRequest
{
Name = "Updated Suspect Face Image",
Description = "Enhanced face image from surveillance camera - improved quality",
Location = "Bank ATM - Main Street (Camera 2)"
};
var updated = ea.UpdateEvidence("existing-evidence-id", updateEvidenceRequest);
Console.WriteLine($"Evidence updated: {updated.Name}");
EvidencesApi ea = getEvidencesApiInstance(accessToken);
UpdateEvidenceRequest updateEvidenceRequest = new UpdateEvidenceRequest()
.name("Updated Suspect Face Image")
.description("Enhanced face image from surveillance camera - improved quality")
.location("Bank ATM - Main Street (Camera 2)");
EvidenceResponse updated = ea.updateEvidence("existing-evidence-id", updateEvidenceRequest);
System.out.println("Evidence updated: " + updated.getName());
Deletion
Evidences are soft-deleted; they remain in ABIS for audit. Hard-delete is reserved for compliance scenarios and is restricted by the workflow engine.
- C#
- Java
var ea = GetEvidencesApiInstance(accessToken);
var deleted = ea.DeleteEvidence("evidence-to-delete");
Console.WriteLine($"Evidence deleted: {deleted.Id}");
Console.WriteLine($"Deleted at: {deleted.DeletedAt}");
EvidencesApi ea = getEvidencesApiInstance(accessToken);
EvidenceResponse deleted = ea.deleteEvidence("evidence-to-delete");
System.out.println("Evidence deleted: " + deleted.getId());
System.out.println("Deleted at: " + deleted.getDeletedAt());
Export and import
Evidences can be exchanged with other agencies using standard ANSI/NIST-ITL containers. The export endpoint produces a single binary package; the import endpoint reads a package and reconstructs the evidence (and optionally a parent case) in the local deployment.
Status history
GET evidences/{evidenceId}/status returns the full ACE-V status history of an evidence – every transition with the user, timestamp, status, resolution and free-text note. This is what the ACE-V status history sidebar in the UI is rendered from.