Skip to content
English - United Kingdom
  • There are no suggestions because the search field is empty.

Downloading attachments

Retrieve all files associated with an Issue, then request a time-limited URL to download each one. The API returns two types of attachments:

  • Reporter attachments: Files uploaded by reporters through messages, such as documents, images, and videos
  • Issue attachments: Files uploaded by case managers directly to the Issue

Downloading a file takes two steps. First list the attachments on the Issue to get their IDs, then request a download URL for the ID you want.

On this page: Query parameter · Response structure · Attachment types · Response scenarios · Download URLs

Query parameter

To retrieve Issue attachments along with Issue data, include the attachments=true query parameter.

GET /v1/public/issues/{id}?attachments=true

If the attachments parameter is not provided or set to false, Issue-related attachments will not be included in the response.

curl -X GET '{API_BASE_URL}/v1/public/issues/1001?attachments=true' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'

The attachments key is added to the Issue response. For the rest of that response, see Retrieving Issues.

Response structure

The attachments object contains two arrays:

  • reporter: attachments from the reporter
  • issue: attachments from the case handler

Both arrays share the same object structure.

Field Type Description
id Integer Unique identifier for the attachment. Use this to request a download URL.
type String MIME type of the file.
creator String Name of the user who uploaded the file, or "Reporter" for anonymous uploads.
fileExists Boolean Whether the file is currently available in storage.
name String Original filename of the attachment.
size Integer File size in bytes.
description String or null Optional description of the file.
folderId Integer or null ID of the folder containing this file.
createdAt String ISO 8601 timestamp when the attachment was created.
issueId Integer ID of the Issue. Issue attachments only.
messageId Integer ID of the message. Reporter attachments only.

Attachment types

Reporter attachments

Reporter attachments are files uploaded by reporters via the web or app.

The following message item types are excluded from the API response:

  • Text messages
  • Audio recordings
  • Conversation transcripts
  • Questions

Issue attachments

Issue attachments are files uploaded directly to Issues by case handlers.

Response scenarios

Each example shows the attachments object only. It appears alongside the other Issue fields in the full response.

Reporter attachments only

"attachments": {
"reporter": [
{
"id": 15,
"messageId": 42,
"name": "evidence_photo.jpg",
"size": 245760,
"type": "image/jpeg",
"creator": "Reporter",
"description": null,
"fileExists": true,
"folderId": null,
"createdAt": "2025-11-15T14:30:22.123Z"
},
{
"id": 16,
"messageId": 42,
"name": "incident_report.pdf",
"size": 512000,
"type": "application/pdf",
"creator": "Reporter",
"description": null,
"fileExists": true,
"folderId": null,
"createdAt": "2025-11-15T14:31:05.456Z"
}
],
"issue": []
}

Both reporter and Issue attachments

Files from both the reporter and case handlers. Issue attachments carry issueId and often a description and folderId.

"attachments": {
"reporter": [
{
"id": 20,
"messageId": 55,
"name": "screenshot.png",
"size": 102400,
"type": "image/png",
"creator": "Reporter",
"description": null,
"fileExists": true,
"folderId": null,
"createdAt": "2025-11-10T09:15:33.789Z"
}
],
"issue": [
{
"id": 8,
"issueId": 1002,
"name": "investigation_notes.docx",
"size": 48128,
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"creator": "Jane Smith",
"description": "Initial investigation findings",
"fileExists": true,
"folderId": 3,
"createdAt": "2025-11-12T16:45:12.345Z"
}
]
}

No attachments

An Issue where no files have been uploaded returns both arrays empty.

"attachments": {
"reporter": [],
"issue": []
}

Multiple file types from a reporter

Reporters can attach any file type. Note the sizes: video attachments are considerably larger than documents.

"attachments": {
"reporter": [
{
"id": 25,
"messageId": 67,
"name": "damage_video.mp4",
"size": 5242880,
"type": "video/mp4",
"creator": "Reporter",
"description": null,
"fileExists": true,
"folderId": null,
"createdAt": "2025-11-16T11:22:33.456Z"
},
{
"id": 26,
"messageId": 67,
"name": "damage_photo_1.jpg",
"size": 307200,
"type": "image/jpeg",
"creator": "Reporter",
"description": null,
"fileExists": true,
"folderId": null,
"createdAt": "2025-11-16T11:22:34.567Z"
},
{
"id": 28,
"messageId": 67,
"name": "repair_estimate.xlsx",
"size": 15360,
"type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"creator": "Reporter",
"description": null,
"fileExists": true,
"folderId": null,
"createdAt": "2025-11-16T11:23:15.789Z"
}
],
"issue": []
}

Attachments in folders

Issue attachments organised within folders share a folderId.

"attachments": {
"reporter": [],
"issue": [
{
"id": 12,
"issueId": 1005,
"name": "audit_report_q4.pdf",
"size": 1024000,
"type": "application/pdf",
"creator": "Sarah Johnson",
"description": "Q4 audit findings",
"fileExists": true,
"folderId": 5,
"createdAt": "2025-11-14T14:30:00.000Z"
},
{
"id": 13,
"issueId": 1005,
"name": "corrective_action_plan.docx",
"size": 40960,
"type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"creator": "Michael Brown",
"description": "Proposed corrective actions",
"fileExists": true,
"folderId": 5,
"createdAt": "2025-11-15T09:15:30.000Z"
}
]
}

Identified reports

On identified reports, such as those from the Employee Hub, creator holds the reporter's name rather than "Reporter".

"attachments": {
"reporter": [
{
"id": 35,
"messageId": 82,
"name": "policy_question.pdf",
"size": 102400,
"type": "application/pdf",
"creator": "Emily Davis",
"description": null,
"fileExists": true,
"folderId": null,
"createdAt": "2025-11-17T10:45:00.000Z"
}
],
"issue": []
}

Files removed by data retention

On a closed Issue where data retention has run, the physical files are removed but the attachment metadata is preserved for audit purposes.

Every attachment then has fileExists: false, folderId: null, an empty name, and size: 0. The id, type, creator, and timestamps remain.

"attachments": {
"reporter": [
{
"id": 35,
"messageId": 31,
"name": "",
"size": 0,
"type": "image/png",
"creator": "Reporter",
"description": null,
"fileExists": false,
"folderId": null,
"createdAt": "2025-12-16T03:46:46.365Z"
}
],
"issue": [
{
"id": 10,
"issueId": 10,
"name": "",
"size": 0,
"type": "image/png",
"creator": "Jane Smith",
"description": null,
"fileExists": false,
"folderId": null,
"createdAt": "2025-12-16T03:55:24.497Z"
}
]
}

An attachment still appears in the response after its file has been removed. A download URL is only issued when fileExists is true.

Download URLs

The Public API provides secure, time-limited download URLs for attachments. There are two endpoints, one for each attachment type. In both, the id is the ID of the attachment as returned in the attachments object.

Attachment type Endpoint
Reporter GET /v1/public/reporter-attachments/{id}/download-url
Issue GET /v1/public/issue-attachments/{id}/download-url
Path parameter Type Required Description
id Integer Yes The attachment ID.

Take the id from the attachment you want. For an attachment with "id": 25 in the reporter array, the request is:

curl -X GET '{API_BASE_URL}/v1/public/reporter-attachments/25/download-url' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'

For an attachment with "id": 12 in the issue array:

curl -X GET '{API_BASE_URL}/v1/public/issue-attachments/12/download-url' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'

Response

{
"url": "https://s3.amazonaws.com/bucket/path/to/file?X-Amz-Algorithm=...",
"expiresAt": "2025-11-18T10:15:30.000Z"
}
Field Type Description
url String Pre-signed URL for downloading the file.
expiresAt String ISO 8601 expiration timestamp for the download URL.

Download URL properties

  • Download URLs are valid for 10 minutes from the time of generation.
  • The expiresAt timestamp is in UTC, indicated by the Z suffix.
  • After expiration, you must request a new download URL.
  • URLs are pre-signed and do not require additional authentication. Do not log them or pass them to systems that should not have access to the file.
  • A download URL is only issued if the attachment's fileExists field is true.

Errors

See the API error reference for the full list, and Retrieving Issues for errors on the get Issue endpoint.

Related