{"routes":[{"method":"POST","path":"/v1/compute-power","policy_id":"compute-power-v2","protocol":"l402","payment_mode":"single_use","price":"$0.10","price_sats":133,"bazaar":null},{"method":"POST","path":"/v1/compute-power","policy_id":"compute-power-v2","protocol":"x402","payment_mode":"single_use","price":"$0.10","price_sats":null,"bazaar":{"info":{"description":"Compute split-aware workout work and power from a structured request payload.","input":{"type":"json","example":{"athlete_uuid":"11111111-1111-1111-1111-111111111111","evaluation_context":"completed","performed_date":"2026-03-20","duration_seconds":60,"user":{"height":{"value":1.778,"unit":"m"},"body_mass":{"value":81.64,"unit":"kg"}},"splits":[{"duration_seconds":60,"work":{"movements":[{"movement":"air_squat","reps":20,"spec_overrides":{}}]}}]}},"output":{"type":"json"}},"inputSchema":{"$defs":{"EvaluationContext":{"enum":["completed","planned","hypothetical"],"title":"EvaluationContext","type":"string"},"PositiveMeasurementInput":{"additionalProperties":false,"properties":{"value":{"description":"Numeric measurement value. When used under work.movements[].inputs, this value is per rep.","exclusiveMinimum":0,"title":"Value","type":"number"},"unit":{"description":"Explicit unit label for this measurement. When used under work.movements[].inputs, the unit applies to each rep.","title":"Unit","type":"string"}},"required":["value","unit"],"title":"PositiveMeasurementInput","type":"object"},"ResponseUnits":{"additionalProperties":false,"properties":{"total_work":{"anyOf":[{"enum":["J","ft·lbf"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional output unit override for total work.","title":"Total Work"},"average_power":{"anyOf":[{"enum":["W","ft·lbf/min"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional output unit override for power.","title":"Average Power"}},"title":"ResponseUnits","type":"object"},"Sex":{"enum":["female","male"],"title":"Sex","type":"string"},"SplitInput":{"additionalProperties":false,"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Label"},"duration_seconds":{"exclusiveMinimum":0,"title":"Duration Seconds","type":"integer"},"rest_seconds_after":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Rest Seconds After"},"work":{"$ref":"#/$defs/SplitWorkInput"}},"required":["duration_seconds","work"],"title":"SplitInput","type":"object"},"SplitWorkInput":{"additionalProperties":false,"properties":{"movements":{"items":{"$ref":"#/$defs/WodMovement"},"minItems":1,"title":"Movements","type":"array"}},"required":["movements"],"title":"SplitWorkInput","type":"object"},"User":{"additionalProperties":false,"properties":{"height":{"$ref":"#/$defs/PositiveMeasurementInput","description":"Athlete height. Allowed units: m, cm, in."},"body_mass":{"$ref":"#/$defs/PositiveMeasurementInput","description":"Athlete body mass. Allowed units: kg, lb."},"age_years":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Optional athlete age in whole years.","title":"Age Years"},"sex":{"anyOf":[{"$ref":"#/$defs/Sex"},{"type":"null"}],"default":null,"description":"Optional athlete sex. Allowed values: female, male."}},"required":["height","body_mass"],"title":"User","type":"object"},"WodMovement":{"additionalProperties":false,"properties":{"movement":{"title":"Movement","type":"string"},"reps":{"description":"Number of reps performed for this movement entry. Total modeled work is reps multiplied by per-rep work.","exclusiveMinimum":0,"title":"Reps","type":"integer"},"spec_overrides":{"additionalProperties":{"type":"number"},"title":"Spec Overrides","type":"object"},"inputs":{"additionalProperties":{"$ref":"#/$defs/PositiveMeasurementInput"},"description":"Movement-specific measurable inputs such as external_load, travel_distance, box_height, target_height, or calories. All input values are interpreted per rep. For accumulative inputs such as travel_distance and calories, total modeled amount is reps multiplied by the provided input value.","title":"Inputs","type":"object"}},"required":["movement","reps"],"title":"WodMovement","type":"object"}},"additionalProperties":false,"properties":{"athlete_uuid":{"format":"uuid","title":"Athlete Uuid","type":"string"},"evaluation_context":{"$ref":"#/$defs/EvaluationContext"},"performed_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Performed Date"},"planned_for_date":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"title":"Planned For Date"},"scenario_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Scenario Label"},"duration_seconds":{"exclusiveMinimum":0,"title":"Duration Seconds","type":"integer"},"user":{"$ref":"#/$defs/User"},"splits":{"items":{"$ref":"#/$defs/SplitInput"},"minItems":1,"title":"Splits","type":"array"},"response_units":{"anyOf":[{"$ref":"#/$defs/ResponseUnits"},{"type":"null"}],"default":null,"description":"Optional output formatting overrides. If omitted, defaults are inferred from user.height.unit and user.body_mass.unit."}},"required":["athlete_uuid","evaluation_context","duration_seconds","user","splits"],"title":"ComputeRequest","type":"object"},"outputSchema":{"$defs":{"MeasurementValue":{"additionalProperties":false,"properties":{"value":{"title":"Value","type":"number"},"unit":{"title":"Unit","type":"string"}},"required":["value","unit"],"title":"MeasurementValue","type":"object"},"MovementBreakdown":{"additionalProperties":false,"properties":{"movement":{"title":"Movement","type":"string"},"reps":{"title":"Reps","type":"integer"},"total_work":{"$ref":"#/$defs/MeasurementValue"}},"required":["movement","reps","total_work"],"title":"MovementBreakdown","type":"object"},"MovementRollup":{"additionalProperties":false,"properties":{"movement":{"title":"Movement","type":"string"},"total_reps":{"title":"Total Reps","type":"integer"},"occurrence_count":{"title":"Occurrence Count","type":"integer"},"total_work":{"$ref":"#/$defs/MeasurementValue"},"active_duration_seconds_isolated":{"title":"Active Duration Seconds Isolated","type":"integer"},"active_duration_seconds_grouped":{"title":"Active Duration Seconds Grouped","type":"integer"},"average_power_when_isolated":{"anyOf":[{"$ref":"#/$defs/MeasurementValue"},{"type":"null"}],"default":null}},"required":["movement","total_reps","occurrence_count","total_work","active_duration_seconds_isolated","active_duration_seconds_grouped"],"title":"MovementRollup","type":"object"},"PRFlag":{"additionalProperties":false,"description":"A Personal Record set by the just-computed workout.\n\nReturned in ``PowerResponse.pr_flags`` so the client can fire celebration\nUI without an extra round-trip. The ``value_si`` interpretation depends\non ``pr_type`` — see ``PersonalRecordModel``'s docstring for the unit\nmapping.","properties":{"pr_type":{"enum":["best_avg_power","best_total_reps","best_signature","domain_best"],"title":"Pr Type","type":"string"},"movement_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Movement Name"},"domain":{"anyOf":[{"enum":["short","medium","long"],"type":"string"},{"type":"null"}],"default":null,"title":"Domain"},"value_si":{"title":"Value Si","type":"number"},"value_secondary_si":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Value Secondary Si"},"prior_value_si":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Prior Value Si"},"prior_value_secondary_si":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Prior Value Secondary Si"},"percent_improvement":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Percent Improvement"},"percent_improvement_secondary":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Percent Improvement Secondary"}},"required":["pr_type","value_si"],"title":"PRFlag","type":"object"},"PowerResults":{"additionalProperties":false,"properties":{"session":{"$ref":"#/$defs/SessionResults"},"splits":{"items":{"$ref":"#/$defs/SplitResults"},"title":"Splits","type":"array"},"summary":{"$ref":"#/$defs/SummaryResults"},"movement_rollups":{"items":{"$ref":"#/$defs/MovementRollup"},"title":"Movement Rollups","type":"array"}},"required":["session","splits","summary","movement_rollups"],"title":"PowerResults","type":"object"},"SessionResults":{"additionalProperties":false,"properties":{"duration_seconds":{"title":"Duration Seconds","type":"integer"},"accounted_duration_seconds":{"title":"Accounted Duration Seconds","type":"integer"},"active_duration_seconds":{"title":"Active Duration Seconds","type":"integer"},"recovery_duration_seconds":{"title":"Recovery Duration Seconds","type":"integer"},"unattributed_duration_seconds":{"title":"Unattributed Duration Seconds","type":"integer"},"total_work":{"$ref":"#/$defs/MeasurementValue"},"average_power_elapsed":{"$ref":"#/$defs/MeasurementValue"},"average_power_active":{"$ref":"#/$defs/MeasurementValue"}},"required":["duration_seconds","accounted_duration_seconds","active_duration_seconds","recovery_duration_seconds","unattributed_duration_seconds","total_work","average_power_elapsed","average_power_active"],"title":"SessionResults","type":"object"},"SplitResults":{"additionalProperties":false,"properties":{"index":{"title":"Index","type":"integer"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Label"},"duration_seconds":{"title":"Duration Seconds","type":"integer"},"rest_seconds_after":{"title":"Rest Seconds After","type":"integer"},"total_work":{"$ref":"#/$defs/MeasurementValue"},"average_power_active":{"$ref":"#/$defs/MeasurementValue"},"movement_breakdown":{"items":{"$ref":"#/$defs/MovementBreakdown"},"title":"Movement Breakdown","type":"array"},"comparison_signature":{"title":"Comparison Signature","type":"string"}},"required":["index","duration_seconds","rest_seconds_after","total_work","average_power_active","movement_breakdown","comparison_signature"],"title":"SplitResults","type":"object"},"SummaryResults":{"additionalProperties":false,"properties":{"peak_split_power":{"anyOf":[{"$ref":"#/$defs/MeasurementValue"},{"type":"null"}],"default":null},"min_split_power":{"anyOf":[{"$ref":"#/$defs/MeasurementValue"},{"type":"null"}],"default":null},"mean_split_power":{"anyOf":[{"$ref":"#/$defs/MeasurementValue"},{"type":"null"}],"default":null},"power_dropoff_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Power Dropoff Percent"},"consistency_score":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Consistency Score"}},"title":"SummaryResults","type":"object"},"WorkoutMetadata":{"additionalProperties":false,"properties":{"workout_id":{"format":"uuid","title":"Workout Id","type":"string"},"revision_id":{"format":"uuid","title":"Revision Id","type":"string"},"revision_number":{"title":"Revision Number","type":"integer"},"revision_status":{"enum":["canonical","superseded","voided"],"title":"Revision Status","type":"string"},"supersedes_revision_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}],"default":null,"title":"Supersedes Revision Id"}},"required":["workout_id","revision_id","revision_number","revision_status"],"title":"WorkoutMetadata","type":"object"}},"additionalProperties":false,"properties":{"workout":{"anyOf":[{"$ref":"#/$defs/WorkoutMetadata"},{"type":"null"}],"default":null},"results":{"$ref":"#/$defs/PowerResults"},"notes":{"items":{"type":"string"},"title":"Notes","type":"array"},"pr_flags":{"items":{"$ref":"#/$defs/PRFlag"},"title":"Pr Flags","type":"array"}},"required":["results"],"title":"PowerResponse","type":"object"}}},{"method":"POST","path":"/v1/workouts/{workout_id}/revisions","policy_id":"workout-revision-v1","protocol":"l402","payment_mode":"single_use","price":"$0.04","price_sats":53,"bazaar":null},{"method":"POST","path":"/v1/workouts/{workout_id}/revisions","policy_id":"workout-revision-v1","protocol":"x402","payment_mode":"single_use","price":"$0.04","price_sats":null,"bazaar":null}]}