# Query Params details

**Canonical endpoint**

```
GET https://app.posetracker.com/pose_tracker/tracking?token=...&exercise=...
```

***

### Minimum required URL (real-time)

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

***

### Query parameters

The full parameter reference is maintained here:

* **Shared query parameters (Tracking + Upload Tracking)**

#### Important real-time parameters

* `token` (required)
* `exercise` (required)
* `placement`, `postureBox`, `placementCountdownSeconds` (recommended)
* Optional: `minGrade` (repetition exercises only)

***

### minGrade (optional, repetition exercises only)

Use `minGrade` if you want PoseTracker to **only count “valid” reps**.

Example:

```
https://app.posetracker.com/pose_tracker/tracking?token=YOUR_API_KEY&exercise=squat&minGrade=B
```

* Counts only reps graded **A or B**
* Does not count reps graded **C, D, or F**
* Ignored for duration and custom exercises

> The grade is sent inside the `counter` event as `counter.form_score.grade`.

***

### Typical realtime message flow

1. `initialization`
2. `posture` (placement) until ready + optional countdown
3. `counter` (on each counted rep)
   * includes `form_score` for the rep that was just counted
4. optional outputs (plan-gated): `progression`, `recommendations`, `keypoints`, `angles`
5. `error` at any time

See full payloads:

* **Tracking Endpoint Message to handle**
