---
title: "Recording Upload Started"
method: POST
path: "/recordings/upload-started"
tags: ["recordings"]
---

# Recording Upload Started

`POST /recordings/upload-started`

Called by mobile app BEFORE starting S3 upload.

Creates a recording row with status='uploading' to enable real-time tracking.

IDEMPOTENT: Uses UPSERT to handle retries gracefully. If the recording already exists,
it updates the existing record instead of failing.

BACKWARD COMPATIBILITY:
- Old mobile apps won't call this endpoint
- They'll go straight to /tools/transcribe_v3 which handles creation
- This is optional for new apps to get real-time upload status

REALTIME TRIGGER:
- INSERT/UPDATE on recordings table triggers Supabase Realtime notification
- Mobile can show "Uploading..." status immediately

## Request body

- UploadStartedRequest
  - `recording_id` string, required — UUID generated by mobile app for this recording
  - `task_id` string, required — Task ID to associate with this recording (required)
  - `bucket` string, required — S3 bucket name
  - `object_key` string, required — S3 object key
  - `file_size` integer, required — File size in bytes
  - `location_lat` number, nullable — GPS latitude
  - `location_lng` number, nullable — GPS longitude
  - `location_accuracy` number, nullable — GPS accuracy in meters
  - `start_timestamp` integer, nullable — Recording start time as Unix timestamp (seconds)

## Response `201`

Successful Response

- unknown

## Other responses

- `404` — Not found
- `422` — Validation Error

---

[API](https://skmtc.dev/noso/apis/crucible-backend-api.md) · [All operations](https://skmtc.dev/noso/apis/crucible-backend-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/noso/crucible-backend-api/revisions/d96feef8e2ef/schema)
