Skip to content

Biodiversity Dashboard API

Retrieve biodiversity analysis data for projects and sites, and manage audio file uploads.


Project Biodiversity Summary

Retrieves the Biodiversity Analysis summary for a specific project.

HTTP request

GET https://api.darukaa.com/api/v1/projects/{project_id}/biodiversity/summary

Path parameters

Parameter Type Required Description
project_id string (UUID) Yes Unique project identifier to retrieve biodiversity summary

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/projects/aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9/biodiversity/summary" \
  -H "Authorization: Bearer <your_access_token>"
response = requests.get(
    f"https://api.darukaa.com/api/v1/projects/{project_id}/biodiversity/summary",
    headers=headers
)
bio_summary = response.json()
const response = await fetch(`https://api.darukaa.com/api/v1/projects/${projectId}/biodiversity/summary`, {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const bioSummary = await response.json();

Status codes

Code Description
200 Success - Biodiversity summary retrieved successfully
401 Unauthorized - Invalid or missing access token
404 Not Found - Project with the specified ID does not exist

Response body

Success (200)

{
  "cameras_installed": 15,
  "audio_devices_installed": 8,
  "total_images_videos": 1250,
  "total_audiofiles": 320,
  "exsitu_species_distribution": {
    "critically_endangered": [{"total": 2, "species_list": ["Species A", "Species B"]}],
    "endangered": [{"total": 5, "species_list": ["Species C", "Species D"]}],
    "vulnerable": [{"total": 8, "species_list": ["Species E"]}],
    "near_threatened": [{"total": 12, "species_list": []}],
    "least_concerned": [{"total": 45, "species_list": []}],
    "unknown": [{"total": 3, "species_list": []}]
  },
  "insitu_species_distribution": {
    "critically_endangered": [{"total": 1, "species_list": ["Species F"]}],
    "endangered": [{"total": 2, "species_list": ["Species G", "Species C"]}],
    "vulnerable": [{"total": 4, "species_list": ["Species E"]}],
    "near_threatened": [{"total": 6, "species_list": []}],
    "least_concerned": [{"total": 20, "species_list": []}],
    "unknown": [{"total": 1, "species_list": []}]
  },
  "biodiversity_score": 0.75,
  "species_diversity": 2.45,
  "taxonomic_dissimilarity": 0.32,
  "species_richness": 75,
  "habitat_health": 0.82,
  "mean_species_abundance": 0.65,
  "mean_ndvi": 0.58,
  "cp_land": 0.12,
  "hdi": 0.88,
  "insitu_data": [],
  "insitu_species_count": 1250,
  "project_id": "aac71ba6-xxxx-xxxx-xxxx-f0b9"
}
Field Type Description
cameras_installed integer Total number of camera traps deployed across the project
audio_devices_installed integer Total number of acoustic/audio monitoring devices installed
total_images_videos integer Count of all image/video records collected from wildlife monitoring
total_audiofiles integer Count of all audio files collected across the project
exsitu_species_distribution object/null Project-level ex-situ species distribution grouped by IUCN categories
insitu_species_distribution object/null Project-level in-situ species distribution grouped by IUCN categories
biodiversity_score number/null Composite biodiversity performance score (if computed)
species_diversity number/null Diversity index across all monitored species
taxonomic_dissimilarity number/null Measure of taxonomic variation among detected species
species_richness number/null Number of unique species detected across all sites
habitat_health number/null Index reflecting overall habitat condition/quality
mean_species_abundance number/null Mean Species Abundance (MSA) across the project
mean_ndvi number/null Mean Normalized Difference Vegetation Index across the project
cp_land number/null Project CP Land feature score
hdi number/null Habitat Diversity Index
insitu_data array/null Project in-situ detection events
insitu_species_count integer/null Total number of in-situ species recorded
project_id UUID string Identifier of the project this summary represents

Site Biodiversity Analysis

Retrieves the Biodiversity Analysis summary for a specific site.

HTTP request

GET https://api.darukaa.com/api/v1/sites/{site_id}/biodiversity

Path parameters

Parameter Type Required Description
site_id string (UUID) Yes Unique identifier of the site to fetch biodiversity analysis for

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/sites/59b525b2-xxxx-xxxx-xxxx-e8cace14883c/biodiversity" \
  -H "Authorization: Bearer <your_access_token>"
site_id = "59b525b2-xxxx-xxxx-xxxx-e8cace14883c"
response = requests.get(
    f"https://api.darukaa.com/api/v1/sites/{site_id}/biodiversity",
    headers=headers
)
site_bio = response.json()
const siteId = "59b525b2-xxxx-xxxx-xxxx-e8cace14883c";
const response = await fetch(`https://api.darukaa.com/api/v1/sites/${siteId}/biodiversity`, {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const siteBio = await response.json();

Status codes

Code Description
200 Success - Site biodiversity analysis retrieved successfully
401 Unauthorized - Invalid or missing access token
404 Not Found - Site with the specified ID does not exist

Response body

Success (200)

{
  "camera_installed": 5,
  "audio_devices": 3,
  "total_audiofiles": 120,
  "total_images_videos": 450,
  "biodiversity_score": 0.72,
  "mean_species_abundance": 0.68,
  "species_richness": 25,
  "species_diversity": 2.15,
  "taxonomic_dissimilarity": 0.28,
  "habitat_health": 0.78,
  "mean_ndvi": 0.62,
  "cp_land": 0.15,
  "hdi": 0.81,
  "insitu_data": [],
  "insitu_species_count": 450,
  "exsitu_species_distribution": {
    "critically_endangered": [{"total": 1, "species_list": ["Species A"]}],
    "endangered": [{"total": 2, "species_list": ["Species B", "Species C"]}],
    "vulnerable": [{"total": 3, "species_list": ["Species D"]}],
    "near_threatened": [{"total": 5, "species_list": []}],
    "least_concerned": [{"total": 12, "species_list": []}],
    "unknown": [{"total": 2, "species_list": []}]
  },
  "insitu_species_distribution": {
    "critically_endangered": [{"total": 1, "species_list": ["Species A"]}],
    "endangered": [{"total": 1, "species_list": ["Species B"]}],
    "vulnerable": [{"total": 1, "species_list": ["Species D"]}],
    "near_threatened": [{"total": 2, "species_list": []}],
    "least_concerned": [{"total": 8, "species_list": []}],
    "unknown": [{"total": 1, "species_list": []}]
  },
  "calculated_at": "2025-12-04T13:30:00Z",
  "site_id": "59b525b2-xxxx-xxxx-xxxx-e8cace14883c",
  "project_id": "aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9"
}
Field Type Description
camera_installed integer/null Number of camera traps installed at the site
audio_devices integer/null Number of acoustic/audio devices deployed at the site
total_audiofiles integer/null Total number of audio files collected from the site
total_images_videos integer/null Total number of images and videos collected
biodiversity_score number/null Composite biodiversity score
mean_species_abundance number/null Mean Species Abundance (MSA) index
species_richness number/null Species richness score
species_diversity number/null Species diversity score
taxonomic_dissimilarity number/null Measure of taxonomic dissimilarity
habitat_health number/null Scaled index (0–1) representing overall habitat quality/health
mean_ndvi number/null Mean Normalized Difference Vegetation Index across the site
cp_land number/null CP Land feature score
hdi number/null Habitat Diversity Index
insitu_data array/null Project in-situ detection events
insitu_species_count integer/null Total count of detection events
exsitu_species_distribution object Grouped ex-situ species data by IUCN category
insitu_species_distribution object Grouped in-situ species data by IUCN category
calculated_at datetime/null Timestamp when biodiversity analysis was last computed
site_id UUID string Unique identifier of the site
project_id UUID string Unique identifier of the parent project


List Site Biodiversity Analyses for a Project

Retrieve Biodiversity Analysis details for all sites within a specific project.

HTTP request

GET https://api.darukaa.com/api/v1/projects/{project_id}/biodiversity/sites

Path parameters

Parameter Type Required Description
project_id string (UUID) Yes Unique project identifier

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/projects/aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9/biodiversity/sites" \
  -H "Authorization: Bearer <your_access_token>"

Status codes

Code Description
200 Success - List of site biodiversity analyses retrieved successfully
401 Unauthorized - Invalid or missing access token
404 Not Found - Project with the specified ID does not exist

Response body

Returns an array of BiodiversitySiteAnalysis objects (same structure as Site Biodiversity Analysis).


Get Project In-situ Species Distribution

Retrieve the in-situ species conservation status distribution for a project.

HTTP request

GET https://api.darukaa.com/api/v1/projects/{project_id}/biodiversity/insitu-summary

Path parameters

Parameter Type Required Description
project_id string (UUID) Yes Unique project identifier

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/projects/aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9/biodiversity/insitu-summary" \
  -H "Authorization: Bearer <your_access_token>"

Status codes

Code Description
200 Success - In-situ summary retrieved successfully
401 Unauthorized - Invalid or missing access token
404 Not Found - Project with the specified ID does not exist

Response body

Returns a SpeciesDistribution object tracking in-situ species status.

{
  "critically_endangered": [{"total": 1, "species_list": ["Species F"]}],
  "endangered": [{"total": 2, "species_list": ["Species G", "Species C"]}],
  "vulnerable": [{"total": 4, "species_list": ["Species E"]}],
  "near_threatened": [{"total": 6, "species_list": []}],
  "least_concerned": [{"total": 20, "species_list": []}],
  "unknown": [{"total": 1, "species_list": []}]
}

Get Site In-situ Species Distribution

Retrieve the in-situ species conservation status distribution for a site.

HTTP request

GET https://api.darukaa.com/api/v1/sites/{site_id}/biodiversity/insitu-summary

Path parameters

Parameter Type Required Description
site_id string (UUID) Yes Unique site identifier

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/sites/59b525b2-xxxx-xxxx-xxxx-e8cace14883c/biodiversity/insitu-summary" \
  -H "Authorization: Bearer <your_access_token>"

Status codes

Code Description
200 Success - In-situ summary retrieved successfully

Response body

Returns a SpeciesDistribution object tracking in-situ species status (similar to Project In-situ Species Distribution).


Get Project Top Audio Clips

Retrieve top 10 unique species audio clips for a project grouped by species.

HTTP request

GET https://api.darukaa.com/api/v1/projects/{project_id}/biodiversity/audio-clips

Path parameters

Parameter Type Required Description
project_id string (UUID) Yes Unique project identifier

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/projects/aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9/biodiversity/audio-clips" \
  -H "Authorization: Bearer <your_access_token>"

Status codes

Code Description
200 Success - Clips retrieved successfully

Response body

Returns a dictionary mapping species names to arrays of top HighValueClip objects.

{
  "Panthera tigris": [
    {
      "common_name": "Tiger",
      "scientific_name": "Panthera tigris",
      "date": "2025-10-12",
      "time": "08:15:30",
      "confidence": 0.98,
      "url": "gs://bucket/audio.wav",
      "file_name": "audio.wav",
      "seq": 1
    }
  ]
}

Get Site Top Audio Clips

Retrieve the top 10 high-value audio clips for a site.

HTTP request

GET https://api.darukaa.com/api/v1/sites/{site_id}/biodiversity/audio-clips

Path parameters

Parameter Type Required Description
site_id string (UUID) Yes Unique site identifier

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/sites/59b525b2-xxxx-xxxx-xxxx-e8cace14883c/biodiversity/audio-clips" \
  -H "Authorization: Bearer <your_access_token>"

Status codes

Code Description
200 Success - Clips retrieved successfully

Response body

Returns a dictionary mapping species names to arrays of top HighValueClip objects.

Upload Audio Files

Uploads audio files for a given deployment. A maximum of 20 audio files can be uploaded in a single request.

HTTP request

POST https://api.darukaa.com/api/v1/deployments/{deployment_id}/audio/upload

Path parameters

Parameter Type Required Description
deployment_id string Yes Deployment identifier against which audio files are being uploaded

Headers

Header Value Required
Authorization Bearer Yes
Content-Type application/json Yes

Request body

The request body contains data with the following structure:

{
  "files": ["data:audio/wav;base64,..."]
}
Field Type Required Description
files array[string] Yes List of audio files encoded as base64 strings. Each string should be in format: "data:audio/{format};base64,{base64_encoded_data}"

Upload limits

Limit Type Value Description
Max files per request 20 Hard limit on number of files per request
Max audio file size 25 MB Per file size limit
Max audio duration 300 seconds (5 minutes) Per file duration limit
Supported formats wav, mp3, m4a, webm Audio file formats accepted

Example request

import base64

deployment_id = "deployment_123"

# Read and encode audio file
with open("audio_sample.wav", "rb") as audio_file:
    audio_data = base64.b64encode(audio_file.read()).decode('utf-8')
    audio_base64 = f"data:audio/wav;base64,{audio_data}"

payload = {
    "files": [audio_base64]
}

response = requests.post(
    f"https://api.darukaa.com/api/v1/deployments/{deployment_id}/audio/upload",
    headers=headers,
    json=payload
)
const deploymentId = "deployment_123";

// Read and encode audio file
const fileInput = document.querySelector('input[type="file"]');
const file = fileInput.files[0];

const reader = new FileReader();
reader.onload = async function(e) {
  const base64 = e.target.result.split(',')[1];
  const audioBase64 = `data:audio/wav;base64,${base64}`;

  const response = await fetch(`https://api.darukaa.com/api/v1/deployments/${deploymentId}/audio/upload`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      files: [audioBase64]
    })
  });
};
reader.readAsDataURL(file);
# Note: For cURL, you'll need to base64 encode the file first
# base64 audio_sample.wav > audio_base64.txt
curl -X POST "https://api.darukaa.com/api/v1/deployments/deployment_123/audio/upload" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{"files": ["data:audio/wav;base64,<base64_encoded_audio_data>"]}'

Status codes

Code Description
201 Success - Audio files uploaded successfully
400 Bad Request - Invalid file format or exceeds size limit
401 Unauthorized - Invalid or missing access token
404 Not Found - Deployment with the specified ID does not exist

Response body

Success (201)

{
  "status": "success",
  "message": "Files uploaded successfully",
  "stored_file_paths": [
    "gs://bucket/deployments/deployment_123/file1.wav",
    "gs://bucket/deployments/deployment_123/file2.wav"
  ]
}
Field Type Description
status string Operation result — typically "success" when upload completes
message string Human-readable confirmation message
stored_file_paths array[string] List of paths/URIs where uploaded files were stored in GCS

Run Inference

Runs AI inference on a single uploaded audio file.

HTTP request

POST https://api.darukaa.com/api/v1/admin/inference/file/{file_id}

Path parameters

Parameter Type Required Description
file_id string (UUID) Yes Unique file identifier for which inference will be executed

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X POST "https://api.darukaa.com/api/v1/admin/inference/file/aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9" \
  -H "Authorization: Bearer <your_access_token>"
file_id = "aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9"
response = requests.post(
    f"https://api.darukaa.com/api/v1/admin/inference/file/{file_id}",
    headers=headers
)
inference_result = response.json()
const fileId = "aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9";
const response = await fetch(`https://api.darukaa.com/api/v1/admin/inference/file/${fileId}`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const inferenceResult = await response.json();

Status codes

Code Description
200 Success - Inference executed successfully
401 Unauthorized - Invalid or missing access token
404 Not Found - File with the specified ID does not exist

Response body

Success (200)

{
  "file_id": "aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9",
  "data": {
    "predictions": [
      {
        "data": [{"species": "Bird A", "confidence": 0.85, "timestamp": "00:00:15"}],
        "source": {
          "lat": "12.3456",
          "long": "78.9012",
          "url": "gs://bucket/audio/file.wav"
        },
        "status": true
      }
    ],
    "model_version_id": "v1.2.3",
    "deployed_model_id": "model_abc123",
    "model_resource_name": "projects/project/models/model_abc123"
  },
  "acoustic_indices": {
    "bi": 2.45,
    "aci": 1250.5,
    "adi": 3.2,
    "aei": 0.65,
    "ndsi": 0.45,
    "file_datetime": "2025-12-04T10:30:00Z"
  },
  "spectrogram_url": "gs://bucket/spectrograms/file.png",
  "inference_id": "inf_xyz789",
  "created_at": "2025-12-04T13:30:00Z",
  "updated_at": "2025-12-04T13:30:00Z"
}

Failure (401)

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid or missing access token",
    "details": "Please provide a valid Bearer token in the Authorization header",
    "request_id": "req_abc123",
    "timestamp": "2025-12-04T13:30:00Z"
  }
}

Failure (404)

{
  "error": {
    "code": "FILE_NOT_FOUND",
    "message": "File not found",
    "details": "No file exists with the ID: aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9",
    "request_id": "req_abc123",
    "timestamp": "2025-12-04T13:30:00Z"
  }
}
Field Type Description
file_id UUID string ID of the file on which inference was executed
data object Contains inference prediction results + model metadata
data.predictions array List of predicted outputs from the inference model
data.predictions[].data array Inference output features (empty if no detection)
data.predictions[].source object Metadata linked to the audio file origin
data.predictions[].source.lat string Latitude of recording location
data.predictions[].source.long string Longitude of recording location
data.predictions[].source.url string Cloud storage path of source audio file
data.predictions[].status boolean Whether inference prediction executed successfully
data.model_version_id string Version of the ML model used
data.deployed_model_id string ID of deployed inference model instance
data.model_resource_name string Cloud resource name of deployed model
acoustic_indices object Calculated eco-acoustic indices from audio
acoustic_indices.bi number Bioacoustic index
acoustic_indices.aci number Acoustic Complexity Index
acoustic_indices.adi number Acoustic Diversity Index
acoustic_indices.aei number Acoustic Evenness Index
acoustic_indices.ndsi number Normalized Difference Soundscape Index
acoustic_indices.file_datetime string Timestamp when file was recorded
spectrogram_url string Cloud path to generated spectrogram image
inference_id UUID string Unique ID for inference execution record
created_at datetime Date-time when inference record was created
updated_at datetime Date-time when inference metadata was last updated

List Files for Deployment

Retrieves all files for a specific deployment with uploader details.

HTTP request

GET https://api.darukaa.com/api/v1/admin/files/{deployment_id}

Path parameters

Parameter Type Required Description
deployment_id string (UUID) Yes Deployment identifier to retrieve files for

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/admin/files/aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9" \
  -H "Authorization: Bearer <your_access_token>"
deployment_id = "aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9"
response = requests.get(
    f"https://api.darukaa.com/api/v1/admin/files/{deployment_id}",
    headers=headers
)
files = response.json()
const deploymentId = "aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9";
const response = await fetch(`https://api.darukaa.com/api/v1/admin/files/${deploymentId}`, {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const files = await response.json();

Status codes

Code Description
200 Success - Files retrieved successfully
401 Unauthorized - Invalid or missing access token
404 Not Found - Deployment with the specified ID does not exist

Response body

Success (200)

[
  {
    "file_id": "aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9",
    "name": "audio_sample.wav",
    "url": "gs://bucket/path/to/file.wav",
    "created_at": "2025-12-04T13:30:00Z",
    "updated_at": "2025-12-04T13:30:00Z",
    "deployment_id": "aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9",
    "uploaded_by_user": {
      "email": "user@example.com",
      "first_name": "John",
      "created_at": "2025-01-01T00:00:00Z",
      "updated_at": "2025-12-04T13:30:00Z"
    },
    "inferences": []
  }
]

Failure (401)

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid or missing access token",
    "details": "Please provide a valid Bearer token in the Authorization header",
    "request_id": "req_abc123",
    "timestamp": "2025-12-04T13:30:00Z"
  }
}

Failure (404)

{
  "error": {
    "code": "DEPLOYMENT_NOT_FOUND",
    "message": "Deployment not found",
    "details": "No deployment exists with the ID: aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9",
    "request_id": "req_abc123",
    "timestamp": "2025-12-04T13:30:00Z"
  }
}
Field Type Description
file_id UUID string Unique identifier of the file stored in deployment
name string Original filename or assigned reference name
url string Cloud storage path / signed URL reference for download or inference
created_at datetime Timestamp when file was uploaded/registered
updated_at datetime Timestamp of last modification or metadata update
deployment_id UUID string ID of deployment the file belongs to
uploaded_by_user object Details of uploader account
uploaded_by_user.email string Email of uploader
uploaded_by_user.first_name string First name of uploader
uploaded_by_user.created_at datetime Timestamp user account was created
uploaded_by_user.updated_at datetime Timestamp of last profile update
inferences array List of inference runs made on this file (empty if none)

List Files Needing Inference

Retrieves files for a deployment that do not have an inference record.

HTTP request

GET https://api.darukaa.com/api/v1/admin/files/{deployment_id}/inference

Path parameters

Parameter Type Required Description
deployment_id string (UUID) Yes Deployment identifier to filter files with no inference record

Headers

Header Value Required
Authorization Bearer Yes

Example request

curl -X GET "https://api.darukaa.com/api/v1/admin/files/aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9/inference" \
  -H "Authorization: Bearer <your_access_token>"
deployment_id = "aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9"
response = requests.get(
    f"https://api.darukaa.com/api/v1/admin/files/{deployment_id}/inference",
    headers=headers
)
files = response.json()
const deploymentId = "aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9";
const response = await fetch(`https://api.darukaa.com/api/v1/admin/files/${deploymentId}/inference`, {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const files = await response.json();

Status codes

Code Description
200 Success - Files retrieved successfully
401 Unauthorized - Invalid or missing access token
404 Not Found - Deployment with the specified ID does not exist

Response body

Success (200)

[
  {
    "file_id": "aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9",
    "name": "audio_sample_2025_12_04.wav",
    "url": "gs://bucket/path/to/file.wav",
    "created_at": "2025-12-04T13:30:00Z",
    "updated_at": "2025-12-04T13:30:00Z",
    "deployment_id": "aac71ba6-bd8d-44c4-b4c0-8ed1594f0b9",
    "location": {
      "location_id": "32667a47-61e6-47d4-b259-29ba70f5e8b2",
      "location_name": "Site A - Device 1",
      "location": "12.3456, 78.9012",
      "created_at": "2025-12-04T13:30:00Z",
      "updated_at": "2025-12-04T13:30:00Z",
      "site_id": "32667a47-61e6-47d4-b259-29ba70f5e8b2"
    }
  }
]

Failure (401)

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid or missing access token",
    "details": "Please provide a valid Bearer token in the Authorization header",
    "request_id": "req_abc123",
    "timestamp": "2025-12-04T13:30:00Z"
  }
}

Failure (404)

{
  "error": {
    "code": "DEPLOYMENT_NOT_FOUND",
    "message": "Deployment not found",
    "details": "No deployment exists with the ID: aacxxxa6-bxxd-44c4-xxxx-8ed1xxxx0b9",
    "request_id": "req_abc123",
    "timestamp": "2025-12-04T13:30:00Z"
  }
}
Field Type Description
file_id UUID string Unique ID of the file pending inference
name string Original filename or assigned display name
url string Cloud storage location or signed URL for fetching the file
created_at datetime Timestamp when file was uploaded
updated_at datetime Last update time on file entry
deployment_id UUID string ID of deployment to which file belongs
location object Deployment file physical location details
location.location_id UUID string Unique location identifier
location.location_name string Name assigned to the location asset
location.location string Geo-reference or textual location reference
location.created_at datetime Timestamp when location entry was created
location.updated_at datetime Last update timestamp for location entry
location.site_id UUID string Associated site identifier for location