Skip to main content

Activities

Activities represent individual training sessions or races. Each activity belongs to an athlete and can have a nutrition prescription, selected products, and post-activity feedback attached.

Activity lifecycle

  1. Create the activity with type, duration, and optional intensity/thermal stress
  2. Calculate a nutrition prescription for it
  3. Add products the athlete plans to use (optional — for preparation planning)
  4. Submit feedback after the activity (optional — improves future prescriptions)

Creating an activity

Activity fields

Multi-sport activities

For triathlons and brick workouts, specify sub-activities:
Saturday calculates prescriptions tailored to the activity type — you fuel differently on the bike than on a run.

Calculating a prescription

This uses the activity’s parameters and the athlete’s profile to generate a personalized prescription. Recalculating overwrites the previous prescription — use this when activity parameters change (e.g., updated weather forecast). The response is tier-aware, with the same semantics as /v1/nutrition/calculate:
  • Full tier (subscribed, covered, or in-trial athletes): tier: "full" with the exact prescription object (carb/sodium/fluid totals and per-hour rates), stored on the activity. Trial responses also carry tier_source: "trial", trial_ends_at, and trial_calls_remaining_today — each calculation debits the trial’s daily call allowance, exactly like nutrition calculate.
  • Teaser tier: tier: "teaser" with per-hour ranges (carb_range_g_per_hr, sodium_range_mg_per_hr, fluid_range_ml_per_hr), a subscription_cta with the athlete’s subscribe link, and required attribution. Nothing is stored — GET .../prescription keeps returning the last full-tier result, if any.
safety metadata is always included regardless of tier.

Getting a stored prescription

Returns the most recently calculated prescription for this activity, wrapped with safety metadata:
The {prescription, safety} envelope is consistent across all Saturday endpoints that return prescription data. Always read prescription.* for values and safety.* for guardrail information. The not_instructions: true flag signals that these are recommendations for human consideration, not executable commands.

Getting an activity with prescription

The activity response includes the prescription inline, along with any attached products.

Listing activities

Supports filtering by date range and type.

Submitting feedback

Post-activity feedback improves future prescriptions:

Feedback fields

Feedback is the single most valuable signal for improving future prescriptions. The more activities with feedback, the more personalized Saturday becomes. Encourage athletes to submit feedback — even simple ratings help.

Activity type inference

If your platform has activity metadata but not a clean type, Saturday can infer it:
Response:
For multi-sport titles like “Bike/run brick”, use POST /v1/infer/brick-types.