Upload Tracking endpoint (video & image)

Upload or link a video/image, run pose estimation, and receive results via WebView messages.

Sections

Base URL

https://app.posetracker.com/pose_tracker/upload_tracking

Quick start

Video upload:

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&exercise=squat

Image upload:

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&source=image
chevron-rightLegacy: full single-page reference (kept temporarily)hashtag

Upload Tracking is a PoseTracker endpoint that handles video and image uploads for pose analysis.

  • Video: upload a file or pass a URL. Run pose estimation in real time. Optionally draw a skeleton overlay, track exercises (reps, progression, recommendations), and export a new video with the overlay.

  • Image: upload a file or pass a URL. Run pose estimation once. Get keypoints, computed angles, and one image with the skeleton drawn. No exercise tracking.

Base URL

https://app.posetracker.com/pose_tracker/upload_tracking

Everything is controlled via query parameters.

You can embed this page in a WebView. It returns results to the host app via sendDataToNative-style messages (see below).

Quick start

Video (user uploads a file)

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&exercise=squat

Image (user uploads a file)

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&source=image

Query parameters

Required

token (required)

Your PoseTracker API key.

If missing or invalid, the page shows:

  • Invalid params. Please refer to our API documentation. Missing token=YOUR API_KEY

  • A link to the tracking-endpoint documentation

Example:

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY

Source type and remote media URL

These parameters define what is analyzed (video vs image) and where media comes from (remote URL vs user upload).

source (optional)

  • video (default)

  • image

Behavior:

  • source=video enables overlay + export + exercise tracking (when exercise is set).

  • source=image runs pose estimation once and returns a single overlay image. No tracking features.

videoSrc (optional, video only)

A direct URL to a video to analyze (S3, CDN, etc).

  • When set, the video loads automatically.

  • You can hide the upload UI with showUpload=false.

  • The media server must support CORS (see CORS for remote URLs).

imageSrc (optional, image only)

A direct URL to an image to analyze.

Same behavior and CORS requirements as videoSrc.

Upload UI rules:

  • source=video and no videoSrc: show Upload a video button (unless showUpload=false).

  • source=image and no imageSrc: show Upload an image button (unless showUpload=false).

  • When videoSrc / imageSrc is set: the media loads from that URL and analysis starts when ready.

Feature parameters (plan-gated)

These flags control what data and features are enabled. Some are restricted by plan (see Plan restrictions).

Defaults:

  • skeleton=true

  • Everything else defaults to false

keypoints (optional)

  • true or false (default false)

  • When true, keypoint coordinates are sent to the host app.

  • Plan: developer/custom/company only.

angles (optional)

  • true or false (default false)

  • When true, computed body angles are sent to the host app.

  • Plan: developer/custom/company only.

skeleton (optional)

  • true (default) or false

  • Controls whether the skeleton is drawn on top of the video/image.

  • Detection can still run even if skeleton drawing is disabled.

blazepose (optional)

  • true or false (default false)

  • When true, use BlazePose instead of MoveNet.

  • Plan: developer/custom/company only.

export (optional, video only)

  • true or false (default false)

  • When true, the user can export a new video with the skeleton overlay.

  • Plan: developer/custom/company only.

recommendations (optional, video only)

  • true or false (default false)

  • Enables posture recommendations during exercise tracking.

  • Plan: developer/custom/company only.

progression (optional, video only)

  • true or false (default false)

  • Enables progression data per repetition.

  • Plan: developer/custom/company only.

Exercise parameters (video only)

These are only used when source=video and exercise/movement tracking is supported.

exercise (recommended for video tracking)

Movement identifier. Required for rep counter, progression, and recommendations.

Examples:

  • squat

  • pushup

  • lunge

  • plank

  • balance_leg_left

  • balance_leg_right

  • balance_leg

  • jumping_jack

  • low_impact_jack

difficulty (optional)

  • easy (default)

  • normal

  • pro

Affects validation thresholds for counting repetitions.

UI customization parameters (optional)

Use these to adapt the upload UI and layout to your app.

showUpload

  • true (default) or false

  • Show or hide the upload button.

uploadLabel

Button label. Examples: Upload a video, Upload an image.

uploadButtonClass

CSS class name(s) applied to the upload button.

uploadButtonStyle

Inline-style string (semicolon-separated). Only a safe subset of CSS properties is applied.

Examples of supported properties:

  • background-color

  • color

  • padding

  • border-radius

  • font-size

uploadButtonPosition

  • top

  • bottom

  • floating

containerClass

CSS class name(s) applied to the main container.

width / height

Display width/height in pixels.

Messages sent to the host app (WebView / native)

The page emits structured messages so the host app can react (logs, UI, storage).

Message naming and transport depend on your integration. The list below describes the logical message types and payloads.

Common messages (video and image)

initialization

Status while loading media or initializing the pose model.

Typical fields:

  • message

  • ready (boolean)

environment

Sent after backend init.

Typical fields:

  • webgl (boolean)

error

Sent for any error (invalid token, CORS issues, model load failures, etc).

Typical fields:

  • code (example values: video_load_error, image_load_error, cross_origin_video)

  • message

Video-only messages

keypoints (when keypoints=true)

Array of keypoints with:

  • name

  • x, y, z

  • score

angles (when angles=true)

Computed angles object.

posture

Current posture / “ready” state for the exercise.

counter

Repetition count. Includes final=true when the video ends.

progression (when progression=true)

Per-rep progression payload.

recommendations (when recommendations=true)

Posture recommendations during the exercise.

keypoints_batch (when keypoints=true)

Time-stamped keypoints for the whole video.

exercise_summary

Final summary (counter, recommendations, progression).

export_ready (when export=true)

Sent when export finishes. Includes:

  • url (blob URL of the exported video)

Image-only messages

keypoints (when keypoints=true)

Single set of keypoints.

angles (when angles=true)

Single set of computed angles.

image_overlay

Data URL of the image with skeleton drawn.

Example format:

data:image/png;base64,...

Plan restrictions

Free plan

These parameters are not allowed:

  • keypoints

  • angles

  • blazepose

  • recommendations

  • progression

  • export

If any of them are set to true, the page shows an error like:

  • You cannot use developer features

  • A link to the tracking-endpoint documentation

Developer / Custom / Company plans

All feature parameters above are allowed.

CORS for remote URLs

This section applies when using videoSrc or imageSrc hosted on another domain (S3, CDN, etc).

Requirements:

  • The media server must include appropriate CORS headers.

  • The response must allow GET on the media resource.

  • Access-Control-Allow-Origin must include the front origin (for example https://app.posetracker.com).

If CORS is missing or incorrect, the browser may block pixel access. The page reports an error message such as:

  • video_load_error

  • image_load_error

  • cross_origin_video

Example: S3 CORS configuration

Use a bucket CORS rule that allows GET from https://app.posetracker.com.

[
  {
    "AllowedHeaders": ["*"],
    "AllowedMethods": ["GET"],
    "AllowedOrigins": ["https://app.posetracker.com"],
    "ExposeHeaders": []
  }
]

Example URLs

Video — upload only (user picks file)

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&exercise=squat

Video — direct URL + keypoints + angles

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&videoSrc=https://your-cdn.com/video.mp4&exercise=pushup&keypoints=true&angles=true

Video — export with overlay

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&videoSrc=https://your-cdn.com/video.mp4&exercise=lunge&export=true&keypoints=true

Image — direct URL

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&source=image&imageSrc=https://your-cdn.com/photo.jpg&keypoints=true&angles=true

Image — upload only

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&source=image&keypoints=true&angles=true

Image — minimal (overlay only, no keypoints/angles messages)

https://app.posetracker.com/pose_tracker/upload_tracking?token=YOUR_API_KEY&source=image&imageSrc=https://your-cdn.com/photo.jpg

When to use what

  • Analyze video and count reps:

    • source=video

    • Upload or videoSrc=...

    • exercise=...

    • Optional: keypoints=true, angles=true

  • Analyze video and export an overlay video:

    • source=video

    • Upload or videoSrc=...

    • export=true

    • exercise=...

  • Analyze image and get keypoints/angles/overlay:

    • source=image

    • Upload or imageSrc=...

    • keypoints=true

    • angles=true

Last updated