WorkCapacity
Power Oracle Docs

Worked Examples

Complete Power Oracle examples with full requests, response excerpts, and plain-English interpretation.

These examples are realistic and beginner-friendly. Each one shows the full request JSON, a small response excerpt, and how to read results.session, results.splits, results.summary, and notes.

Example 1: Benchmark-Style Workout With 2 Splits

This example treats each round as a grouped split. That is useful when round timing is known but per-movement timing inside the round is not.

Request

{
  "athlete_uuid": "11111111-1111-1111-1111-111111111111",
  "evaluation_context": "completed",
  "performed_date": "2026-03-20",
  "duration_seconds": 180,
  "user": {
    "height": { "value": 70, "unit": "in" },
    "body_mass": { "value": 180, "unit": "lb" },
    "age_years": 35,
    "sex": "male"
  },
  "splits": [
    {
      "label": "Round 1",
      "duration_seconds": 78,
      "work": {
        "movements": [
          {
            "movement": "thruster",
            "reps": 21,
            "inputs": {
              "external_load": { "value": 95, "unit": "lb" }
            },
            "spec_overrides": {}
          },
          {
            "movement": "pull_up",
            "reps": 21,
            "spec_overrides": {}
          }
        ]
      }
    },
    {
      "label": "Round 2",
      "duration_seconds": 54,
      "work": {
        "movements": [
          {
            "movement": "thruster",
            "reps": 15,
            "inputs": {
              "external_load": { "value": 95, "unit": "lb" }
            },
            "spec_overrides": {}
          },
          {
            "movement": "pull_up",
            "reps": 15,
            "spec_overrides": {}
          }
        ]
      }
    }
  ]
}

Response Excerpt

{
  "results": {
    "session": {
      "duration_seconds": 180,
      "active_duration_seconds": 132,
      "unattributed_duration_seconds": 48,
      "average_power_elapsed": { "value": 11291.0, "unit": "ft·lbf/min" },
      "average_power_active": { "value": 15396.82, "unit": "ft·lbf/min" }
    },
    "splits": [
      {
        "label": "Round 1",
        "average_power_active": { "value": 15199.42, "unit": "ft·lbf/min" }
      },
      {
        "label": "Round 2",
        "average_power_active": { "value": 15681.94, "unit": "ft·lbf/min" }
      }
    ],
    "summary": {
      "power_dropoff_percent": 3.08,
      "consistency_score": 98.44
    },
    "movement_rollups": [
      {
        "movement": "thruster",
        "active_duration_seconds_grouped": 132,
        "average_power_when_isolated": null
      }
    ]
  }
}

Interpretation

results.session says the whole session lasted 180 seconds, with 132 seconds explicitly accounted as active work and 48 seconds left unattributed.

results.splits shows round-level output. Round 2 is slightly higher than Round 1 in active power.

results.summary shows the rounds were very consistent and did not collapse.

notes matters here because the session denominator includes the full 180 seconds, while the split denominator only uses active time.

movement_rollups preserve movement totals, but grouped timing means movement-specific power is not attributed inside the round.

Example 2: Interval Workout With Explicit Recovery

This example uses one split per rowing interval and stores recovery in rest_seconds_after.

Request

{
  "athlete_uuid": "11111111-1111-1111-1111-111111111111",
  "evaluation_context": "completed",
  "performed_date": "2026-03-20",
  "duration_seconds": 465,
  "user": {
    "height": { "value": 70, "unit": "in" },
    "body_mass": { "value": 180, "unit": "lb" },
    "age_years": 35,
    "sex": "male"
  },
  "splits": [
    {
      "label": "500 m row 1",
      "duration_seconds": 110,
      "rest_seconds_after": 60,
      "work": {
        "movements": [
          {
            "movement": "row",
            "reps": 1,
            "inputs": {
              "travel_distance": { "value": 500, "unit": "m" }
            },
            "spec_overrides": {}
          }
        ]
      }
    },
    {
      "label": "500 m row 2",
      "duration_seconds": 115,
      "rest_seconds_after": 60,
      "work": {
        "movements": [
          {
            "movement": "row",
            "reps": 1,
            "inputs": {
              "travel_distance": { "value": 500, "unit": "m" }
            },
            "spec_overrides": {}
          }
        ]
      }
    },
    {
      "label": "500 m row 3",
      "duration_seconds": 120,
      "work": {
        "movements": [
          {
            "movement": "row",
            "reps": 1,
            "inputs": {
              "travel_distance": { "value": 500, "unit": "m" }
            },
            "spec_overrides": {}
          }
        ]
      }
    }
  ]
}

Response Excerpt

{
  "results": {
    "session": {
      "duration_seconds": 465,
      "active_duration_seconds": 345,
      "recovery_duration_seconds": 120,
      "unattributed_duration_seconds": 0,
      "average_power_elapsed": { "value": 6939.43, "unit": "ft·lbf/min" },
      "average_power_active": { "value": 9353.14, "unit": "ft·lbf/min" }
    },
    "splits": [
      {
        "label": "500 m row 1",
        "average_power_active": { "value": 9778.29, "unit": "ft·lbf/min" }
      },
      {
        "label": "500 m row 3",
        "average_power_active": { "value": 8963.43, "unit": "ft·lbf/min" }
      }
    ],
    "summary": {
      "power_dropoff_percent": 8.33,
      "consistency_score": 96.45
    }
  }
}

Interpretation

results.session clearly separates 345 seconds of active work from 120 seconds of recovery.

results.splits shows each interval on its own denominator, which makes the fade across intervals visible.

results.summary quantifies the drop from the best interval to the slowest interval.

notes confirms that rest_seconds_after counts in session accounting but not in split active power.

Example 3: Hypothetical Planning Scenario

This example uses evaluation_context: hypothetical to model a planned strength piece before it happens.

Request

{
  "athlete_uuid": "11111111-1111-1111-1111-111111111111",
  "evaluation_context": "hypothetical",
  "scenario_label": "front squat triples with fixed rest",
  "duration_seconds": 435,
  "user": {
    "height": { "value": 70, "unit": "in" },
    "body_mass": { "value": 180, "unit": "lb" },
    "age_years": 35,
    "sex": "male"
  },
  "splits": [
    {
      "label": "Set 1",
      "duration_seconds": 15,
      "rest_seconds_after": 120,
      "work": {
        "movements": [
          {
            "movement": "front_squat",
            "reps": 3,
            "inputs": {
              "external_load": { "value": 225, "unit": "lb" }
            },
            "spec_overrides": {}
          }
        ]
      }
    },
    {
      "label": "Set 2",
      "duration_seconds": 15,
      "rest_seconds_after": 120,
      "work": {
        "movements": [
          {
            "movement": "front_squat",
            "reps": 3,
            "inputs": {
              "external_load": { "value": 225, "unit": "lb" }
            },
            "spec_overrides": {}
          }
        ]
      }
    },
    {
      "label": "Set 3",
      "duration_seconds": 15,
      "work": {
        "movements": [
          {
            "movement": "front_squat",
            "reps": 3,
            "inputs": {
              "external_load": { "value": 225, "unit": "lb" }
            },
            "spec_overrides": {}
          }
        ]
      }
    }
  ]
}

Response Excerpt

{
  "results": {
    "session": {
      "duration_seconds": 435,
      "active_duration_seconds": 45,
      "recovery_duration_seconds": 240,
      "unattributed_duration_seconds": 150,
      "average_power_elapsed": { "value": 716.9, "unit": "ft·lbf/min" },
      "average_power_active": { "value": 6930.0, "unit": "ft·lbf/min" }
    },
    "summary": {
      "power_dropoff_percent": 0.0,
      "consistency_score": 100.0
    },
    "movement_rollups": [
      {
        "movement": "front_squat",
        "total_reps": 9,
        "average_power_when_isolated": { "value": 6930.0, "unit": "ft·lbf/min" }
      }
    ]
  }
}

Interpretation

results.session treats the planned session as a model, not a completed event.

results.splits shows one split per set and makes the work/rest pattern explicit.

results.summary shows perfectly even split power because each set used the same load and duration.

notes reminds you that unattributed duration is still visible if the planned top-level session time is larger than the sum of active work and known rest.

Next Step