Presigned upload URLs, upload records and ordering for report and listing media.
https://api.reportauto.euMedia attached to a report or listing is uploaded in two steps: ask the API for a presigned URL, then PUT the file bytes straight to storage. The API only ever handles the metadata.
Creates one upload record per object in the request body and returns a presigned URL for each. Upload the file bytes to that URL, then the backend associates the processed file with the report. Presigned URLs are temporary and expire.
Authentication API key in the Authorization header
ID of the report the upload belongs to. Must be accessible by the caller.
Kind of file being uploaded.
Category of the upload, for example GARAGE, EXTERIOR or INTERIOR.
Human-readable description of what the file shows.
File extension, for example heic, jpg or mp4.
Capture coordinates as "latitude, longitude".
Camera metadata recorded at capture time.
1curl -X POST "https://api.reportauto.eu/v2/uploads" \
2 -H "Authorization: API_KEY $CAROOM_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '[
5 {
6 "report_id": 9837,
7 "filetype": "image",
8 "format": "heic",
9 "type": "GARAGE",
10 "description": "Wardrobe",
11 "location": "58.3855869, 26.7093266",
12 "camerainfo": {
13 "timetaken": "2020-12-29 15:45:38.474",
14 "exposure": 0.0833,
15 "zoom": 0,
16 "orientation": "LANDSCAPE-LEFT"
17 }
18 }
19 ]'[
{
"Wardrobe": {
"id": 14332,
"type": "GARAGE",
"filename": "cabe9a56-945c-4f68-b9c7-aff17ad4a975",
"description": "Wardrobe",
"location": null,
"filepath": "https://caroom-us.s3.us-east-1.amazonaws.com/raw/...",
"processed": 5,
"camerainfo": "{\"exposure\":0.0833,\"zoom\":0}",
"fileurlbase": "https://d30s8rpq2bfonk.cloudfront.net",
"filetype": "image",
"presigned_url": "https://caroom-us.s3.us-east-1.amazonaws.com/raw/...?X-Amz-Signature=..."
}
}
]Same endpoint as above, used when the file already sits in storage — typically after the HEIC conversion service has written it. Supplying filepath, filename and fileurlbase registers the file instead of asking for a presigned URL.
Authentication API key in the Authorization header
Full storage URL the file was written to.
Name of the stored object.
CDN base URL the file is served from.
Processing state. 1 marks the file as already processed.
ID of the report the upload belongs to.
image or video.
Category of the upload, e.g. GARAGE.
Description of the file content.
Capture coordinates as "latitude, longitude".
Camera metadata, same shape as above.
1curl -X POST "https://api.reportauto.eu/v2/uploads" \
2 -H "Authorization: API_KEY $CAROOM_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '[
5 {
6 "filepath": "https://caroom-us.s3.us-east-1.amazonaws.com/qr_raw/api-upload.jpg",
7 "filename": "api-upload.jpg",
8 "fileurlbase": "https://d30s8rpq2bfonk.cloudfront.net",
9 "processed": 1,
10 "report_id": 9837,
11 "filetype": "image",
12 "type": "GARAGE",
13 "description": "Wardrobe"
14 }
15 ]'[
{
"Wardrobe": {
"id": 14331,
"type": "GARAGE",
"filename": "api-upload.jpg",
"description": "Wardrobe",
"location": null,
"filepath": "https://caroom-us.s3.us-east-1.amazonaws.com/qr_raw/api-upload.jpg",
"processed": 1,
"fileurlbase": "https://d30s8rpq2bfonk.cloudfront.net",
"filetype": "image",
"lrprocessedpath": null,
"processedpath": null,
"processedimagescount": null
}
}
]Updates the processing state or stored path of a single upload.
Authentication Bearer token
ID of the upload to update.
New processing state.
Storage URL of the processed file.
1curl -X PATCH "https://api.reportauto.eu/api/uploads/11751" \
2 -H "Authorization: $CAROOM_ACCESS_TOKEN" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "processed": 1,
6 "filepath": "https://d26zjt3dme7nl7.cloudfront.net/raw/11a803d9.jpg"
7 }'Sets the display order of a report’s uploads. Send the upload IDs in the order they should appear.
Authentication API key in the Authorization header
Upload IDs in the desired order.
1curl -X PATCH "https://api.reportauto.eu/v2/uploads/sort" \
2 -H "Authorization: API_KEY $CAROOM_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{ "order": [14222, 14225, 14224, 14223, 14226] }'Sends the raw file to storage using the presigned URL returned by the create call. This request goes to object storage directly, not to the Caroom API, and carries no Authorization header — the signature in the query string authorises it.
Authentication None — the presigned URL is the credential
1curl -X PUT "$PRESIGNED_URL" \
2 -H "Content-Type: application/octet-stream" \
3 --data-binary "@/path/to/photo.jpg"Converts an Apple HEIC image to a web-compatible format and writes it to storage. Send the raw file as the request body; the response carries the public URL to register with the create-upload call.
Authentication None
1curl -X PUT "https://bpkaebiopj.execute-api.us-east-1.amazonaws.com/prod/convert" \
2 -H "Content-Type: application/octet-stream" \
3 --data-binary "@/path/to/IMG_3172.heic"{
"success": true,
"message": "HEIC conversion successful",
"url": "https://caroom-us.s3.us-east-1.amazonaws.com/qr_raw/api-upload.jpg",
"s3Location": "s3://caroom-us/qr_raw/api-upload.jpg",
"s3Bucket": "caroom-us",
"s3Key": "qr_raw/api-upload.jpg",
"originalSize": 2313954,
"convertedSize": 3366447,
"timestamp": "2026-02-03T17:43:54.937Z"
}