curl --request GET \
--url https://api.uplift.ai/v1/captures \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.uplift.ai/v1/captures"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.uplift.ai/v1/captures', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.uplift.ai/v1/captures",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.uplift.ai/v1/captures"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.uplift.ai/v1/captures")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uplift.ai/v1/captures")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyList Captures
Returns a paginated list of captures for the organization with optional filters. Results are sorted newest first. All organization captures are included unless filtered; use source=api to restrict to captures with source equal to api. A capture linked to multiple athletes may appear more than once in captures[]; total_count is the distinct capture count.
curl --request GET \
--url https://api.uplift.ai/v1/captures \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.uplift.ai/v1/captures"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.uplift.ai/v1/captures', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.uplift.ai/v1/captures",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.uplift.ai/v1/captures"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.uplift.ai/v1/captures")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uplift.ai/v1/captures")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyQuery parameters
All query parameters are optional. See the operation above for types and constraints.| Parameter | Purpose |
|---|---|
athlete_id | UUID; restrict to captures for that athlete in your organization. Returns 400 athlete_id not found when the athlete is missing or not in your organization. |
source | When set to api, only captures with source equal to api are returned. |
status | One of awaiting_upload, processing, completed, error. |
activity | Case-insensitive filter on activity (trimmed and lowercased for matching). Returned values preserve stored casing. |
movement | Case-insensitive filter on movement (trimmed and lowercased for matching). Returned values preserve stored casing. |
limit | Page size; integer 1–500. Defaults to 100 when omitted. Out-of-range values return 400. |
offset | Rows to skip; non-negative integer. Defaults to 0 when omitted. Negative values return 400. |
List behavior
- Scope — Returns all captures in your organization. Captures from other sources (for example, the mobile app) are included unless you pass
source=api. Deleted captures are excluded. - Sort order — Newest first (by capture time).
- Duplicate rows — A capture linked to more than one athlete can appear more than once in
captures[].total_countis the distinct capture count matching your filters.
200 responses include captures (array of Capture), total_count, offset, and limit. The response offset and limit echo the values used for the page (from the request, or defaults when omitted).
Movement dimensions
EachCapture in captures[] may include additional top-level dimension fields based on its activity and movement.
| Activity | Movement | Dimensions |
|---|---|---|
agility | cutting | direction |
baseball | hitting | bat_length, handedness |
baseball | pitching | handedness |
basketball | free_throw | handedness |
basketball | jump_shot | handedness |
basketball | layup | handedness |
golf | swing | handedness |
jump | broad | arm_position |
jump | countermovement | arm_position |
jump | drop_vertical | arm_position |
jump | single_leg | arm_position, footedness |
jump | single_leg_broad | arm_position, footedness |
jump | squat | arm_position |
lunge | forward | footedness |
lunge | side | footedness |
range_of_motion | ankle_flexion | body_position, footedness |
range_of_motion | cervical_rotation | direction |
range_of_motion | sfma_shoulder_extension | handedness |
range_of_motion | sfma_shoulder_flexion | handedness |
range_of_motion | shoulder_9090 | handedness |
range_of_motion | shoulder_flexion | handedness |
range_of_motion | t_spine_rotation | handedness |
softball | hitting | bat_length, handedness |
softball | pitching | handedness |
squat | single_leg | footedness |
stability | plank | plank_orientation, plank_position |
stability | rotary | handedness |
stability | single_leg_stance | eyes, footedness |
stability | y_balance_lower_quarter | footedness, y_balance_lower_quarter_direction |
stability | y_balance_upper_quarter | handedness, y_balance_upper_quarter_direction |
tennis | backhand | handedness |
tennis | forehand | handedness |
tennis | overhand_serve | handedness, overhand_serve_type |
tennis | underhand_serve | handedness |
track_and_field | discus | handedness |
track_and_field | shot_put | handedness |
Capture fields.
Example Capture fields
For baseball + hitting:
{
"session_id": "…",
"activity": "baseball",
"movement": "hitting",
"handedness": "…",
"bat_length": "…",
"status": "completed"
}
jump + countermovement:
{
"session_id": "…",
"activity": "jump",
"movement": "countermovement",
"arm_position": "…",
"status": "completed"
}
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Restrict to captures for this athlete. Must exist in the organization; otherwise returns 400 with athlete_id not found.
When api, only captures with source equal to api are returned.
api Filter by capture status.
awaiting_upload, processing, completed, error Case-insensitive filter on activity (trimmed and lowercased before matching). Response values preserve stored casing.
128Case-insensitive filter on movement (trimmed and lowercased before matching). Response values preserve stored casing.
128Page size. Integer from 1 to 500 inclusive; default 100 when omitted. Out-of-range values return 400.
1 <= x <= 500Rows to skip. Non-negative integer; default 0 when omitted. Negative values return 400.
x >= 0Response
Page of captures matching filters, sorted newest first. Each item in captures is a Capture object that may include additional top-level movement dimension fields based on its activity and movement. See Movement dimensions for the field catalog. total_count is the distinct capture count; a capture linked to multiple athletes may appear more than once in captures[].
Capture objects for this page. Each object includes the fixed Capture fields plus any published movement dimensions for that activity/movement pair.
Show child attributes
Show child attributes
Distinct capture count matching filters (not just this page). May be less than captures.length when a capture is linked to multiple athletes.
Offset used for this page (echoes the request value, or 0 when omitted).
Page size used for this page (echoes the request value, or 100 when omitted).