Skip to main content
Question

Athlete capacity increase — Developer Program form submitted for Esprit Trail (Client ID 232321)

  • June 9, 2026
  • 3 replies
  • 54 views

Forum|alt.badge.img

Hi everyone,

Posting here for visibility on a Developer Program form submission, as suggested by the support auto-response.

CONTEXT

I just submitted the Developer Program form on June 9, 2026 to request an athlete-capacity increase for my application Esprit Trail (Client ID 232321), currently in Single Player Mode. Form confirmation acknowledged the submission ("Thank you for submitting your application for review — Strava API Team").

WHAT THE APP DOES

Esprit Trail is a companion app for trail runners: AI-assisted training plans, a curated trail-race calendar, training-spots discovery and a community space. Connecting Strava is the recommended onboarding path so the athlete's past and new activities populate their stats, training plan and history.

- Web: https://esprit-trail.vercel.app
- Distribution: PWA on the web + Android app published on Google Play (TWA wrapper)

API USAGE SUMMARY

- OAuth 2.0 authorization code flow with refresh-token handling
- Scopes: activity:read_all, profile:read_all (read-only)
- Endpoints: POST /oauth/token, GET /api/v3/athlete, GET /api/v3/athlete/activities (paginated, "after" cursor)
- Activity import is user-initiated from /settings/connections/strava — no scheduled polling
- Webhooks not yet implemented; planned for the first month after Single Player Mode is lifted
- Storage in Supabase with Row Level Security per athlete; full GDPR Article 17 deletion available from the connection page

BRAND GUIDELINES COMPLIANCE

- Official "Connect with Strava" button (1.1 asset, orange 237x48) used wherever an athlete initiates the OAuth flow (settings page + two points in the onboarding flow)
- Official "Powered by Strava" horizontal orange logo displayed as attribution on the Strava connection page
- No recreated, modified or animated Strava logos anywhere
- No Strava logo as the app icon (our own runner-sunset logo)
- Strava name/logos appear near, but separate from, our brand and never more prominently
- The "Connect with Strava" button links to https://www.strava.com/oauth/authorize via our server-side redirect at /api/oauth/strava

WHAT I'M HOPING FOR

- Visibility for the form submission (Client ID 232321) so it doesn't fall through
- Any tips from devs who recently went through the same review process — timing, gotchas, common reasons for back-and-forth

Estimated capacity needed: 100 to 300 connected athletes over the next 3 months (closed beta then progressive public launch).

Happy to share more details if useful.

Thanks!
Guillaume — Esprit Trail

3 replies

Forum|alt.badge.img+3
  • Hub Rookie
  • June 9, 2026

Hey ​@Esprit TRAIL ! Appreciate the detailed write-up but your app has a fundamental policy violation that will get it rejected.

The AI training plans are a hard blocker. Strava's current policy explicitly bans using API data with AI models or similar applications. This isn't a grey area or something you can get approval for, it's a flat out ban. If your training plans use Strava activity data fed into an LLM, that feature needs to go before you resubmit.

Webhooks being absent is the second flag. Ship them before resubmitting, don't wait.

Until the LLM issue is resolved, the rest of the submission doesn't matter.

Good luck!


Forum|alt.badge.img+3
  • Hub Rookie
  • June 9, 2026

Not sure why my reply didn't go through but TLDR this app will be rejected due to use of AI/LLMs. Please read API policy.


Forum|alt.badge.img
  • Author
  • Hub Rookie
  • June 10, 2026

Hey @Mark_AJ, thanks a lot for the detailed review and for catching this early — exactly the kind of feedback that saves a full submission cycle.

Two things to address your points head-on :

1. AI / LLM ban — Coach IA is fully cloistered from Strava data.

I audited the code on this point this morning. Our AI training-plan generator (/api/coach/plan) only takes user-typed inputs as Claude prompt inputs : goal, target date, weekly km, longest recent run, weekly availability, terrain preference, injuries, and a free-text field. No Strava activity, no Strava stats, no Strava-derived value is ever fed to the LLM. The Strava sync populates the athlete's profile (recent activities, history, stats) and stays there — strictly UI display. The coach is generated from declared self-assessment, not from Strava data.

We've also just shipped (today) an explicit in-app disclaimer on the /coach screen so athletes can see this guarantee themselves :

"Strava data is never sent to the model. The AI Coach is generated only from your declared inputs (goal, volume, availability). Your Strava activities stay on your profile and don't leave for coaching — compliant with the Strava API policy."

Live on https://esprit-trail.vercel.app/coach.

2. Webhooks — shipped today.

You were right that we should ship webhooks before resubmitting. They went live today :

  • Callback endpoint : https://esprit-trail.vercel.app/api/webhooks/strava/event (responds to the hub.challenge validation, ACKs events under 2s, logs async to Supabase)
  • Subscription will be created server-side via our admin endpoint once we resubmit. Subscription scope : activity create/update/delete + athlete deauthorization.
  • We replace the previous user-triggered re-sync with on-event ingestion as Strava recommends.

I'll resubmit the Developer Program form with these two changes called out explicitly. If there's anything else you'd like me to clarify before I resubmit, I'm all ears.

Cheers — and thanks again for the no-nonsense feedback. Guillaume