Uploads

Presigned upload URLs, upload records and ordering for report and listing media.

Base URL
https://api.reportauto.eu

Uploads

Media 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.

Create presigned URLs

POST/v2/uploads

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

Parameters

report_idintegerRequired

ID of the report the upload belongs to. Must be accessible by the caller.

filetypeenumRequired

Kind of file being uploaded.

typestringRequired

Category of the upload, for example GARAGE, EXTERIOR or INTERIOR.

descriptionstring

Human-readable description of what the file shows.

formatstring

File extension, for example heic, jpg or mp4.

locationstring

Capture coordinates as "latitude, longitude".

camerainfoobject

Camera metadata recorded at capture time.

  • The response is an array of single-key objects, keyed by the description sent in the request.
  • Send several objects in one call to get a batch of presigned URLs.
cURL
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  ]'
Response
[
  {
    "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=..."
    }
  }
]

Create upload records for stored files

POST/v2/uploads

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

Parameters

filepathstringRequired

Full storage URL the file was written to.

filenamestringRequired

Name of the stored object.

fileurlbasestringRequired

CDN base URL the file is served from.

processedinteger

Processing state. 1 marks the file as already processed.

report_idintegerRequired

ID of the report the upload belongs to.

filetypestringRequired

image or video.

typestringRequired

Category of the upload, e.g. GARAGE.

descriptionstring

Description of the file content.

locationstring

Capture coordinates as "latitude, longitude".

camerainfoobject

Camera metadata, same shape as above.

cURL
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  ]'
Response
[
  {
    "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
    }
  }
]

Update an upload

PATCH/api/uploads/:upload_id

Updates the processing state or stored path of a single upload.

Authentication Bearer token

Path parameters

upload_idintegerRequired

ID of the upload to update.

Parameters

processedinteger

New processing state.

filepathstring

Storage URL of the processed file.

  • The Postman collection carries a second, identically shaped request named “Delete Upload” against the same path — deletion is modelled as a state update rather than a DELETE.
cURL
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  }'

Sort uploads

PATCH/v2/uploads/sort

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

Parameters

orderarray of integersRequired

Upload IDs in the desired order.

cURL
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] }'

Upload the file bytes

PUT<presigned_url>

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

  • Presigned URLs in this workspace are issued with a 24 hour expiry.
cURL
1curl -X PUT "$PRESIGNED_URL" \
2  -H "Content-Type: application/octet-stream" \
3  --data-binary "@/path/to/photo.jpg"

Convert and store a HEIC image

PUThttps://bpkaebiopj.execute-api.us-east-1.amazonaws.com/prod/convert

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

  • This is a standalone AWS Lambda service, not part of the Caroom API host.
cURL
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"
Response
{
  "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"
}