Skip to main content
POST
/
captures
Create capture (reserve upload)
curl --request POST \
  --url https://api.uplift.ai/v1/captures \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "athlete_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "session_group_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "camera_configuration": {
    "camera_setup_selection": "single.front_on",
    "camera_orientation": "portrait"
  },
  "movement_attributes": {
    "activity": "<string>",
    "movement": "<string>"
  },
  "file_name": "<string>",
  "capture_time": "2023-11-07T05:31:56Z"
}
'
{
  "session_id": "<string>",
  "session_group_id": "<string>",
  "upload_url": "<string>",
  "upload_fields": {},
  "upload_expires_at": "2023-11-07T05:31:56Z",
  "status": "NEW"
}

Documentation Index

Fetch the complete documentation index at: https://docs.uplift.ai/llms.txt

Use this file to discover all available pages before exploring further.

Example Request Body

{
  "athlete_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "session_group_id": "11111111-2222-3333-4444-555555555555",
  "file_name": "swing-001.mov",
  "capture_time": "2026-05-13T12:00:00.000Z",
  "camera_configuration": {
    "camera_setup_selection": "single.down_the_line",
    "camera_orientation": "landscape"
  },
  "movement_attributes": {
    "activity": "golf",
    "movement": "full_swing"
  }
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
athlete_id
string<uuid>
required

UUID of an athlete that belongs to the same organization as the API key.

session_group_id
string<uuid>
required

Identifies the capture group. If a session group row already exists, it must match the organization and athlete. If configdata.source is set and is not api, the session group is not eligible for this endpoint.

camera_configuration
object
required

Additional keys are allowed and forwarded into session configdata.keyvaluepairs.

movement_attributes
object
required

Additional keys are movement dimensions validated against published protocol dimension mappings.

file_name
string
required

Video file name; must not contain / or \\. Must use a .mov extension (case-insensitive). If omitted or blank after processing, the request fails with 400.

Maximum string length: 255
capture_time
string<date-time>

ISO 8601 capture time; must not be in the future. Used as session create time when reserving; defaults to current server time if omitted.

Response

Reservation succeeded. POST the file to upload_url with all upload_fields before upload_expires_at.

session_id
string

Capture/session identifier assigned for this reservation.

session_group_id
string

Echo of the request session_group_id.

upload_url
string

S3 endpoint URL for multipart/form-data POST.

upload_fields
object

Form fields that must be included in the POST body exactly as returned (policy, signature, key, Content-Type, etc.).

upload_expires_at
string<date-time>

When the pre-signed POST is no longer valid (30 minutes after issuance).

status
enum<string>

Literal NEW while the capture awaits upload.

Available options:
NEW