get /v1/hello
Responses
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
Opt-in dev wellness service: profiles, goals, equipment, schedule gaps, and short activity prompts.
Every endpoint requires a GitHub OAuth bearer token. Obtain one via the device
flow (GET /v1/auth/github/device) and send it as
Authorization: Bearer ….
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
| Status | Description | Body |
|---|---|---|
| 200 | OK | DeviceFlowStartResponse (application/json) |
| application/json | DeviceFlowPollRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | AccessTokenResponse (application/json) |
| 400 | Bad Request | AuthErrorResponse (application/json) |
| Name | In | Type |
|---|---|---|
| returnPath | query | string |
| Status | Description | Body |
|---|---|---|
| 400 | Bad Request | AuthErrorResponse (application/json) |
| Name | In | Type |
|---|---|---|
| code | query | string |
| state | query | string |
| error | query | string |
| error_description | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | AccessTokenResponse (application/json) |
| 400 | Bad Request | AuthErrorResponse (application/json) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | AuthenticatedUserResponse (application/json) |
| 404 | Not Found | AuthErrorResponse (application/json) |
Returns the user's accepted consent (if any) and the current canonical text.
| Status | Description | Body |
|---|---|---|
| 200 | OK | ConsentStateResponse (application/json) |
Idempotently accepts the named consent version using the server's canonical text.
| application/json | AcceptConsentRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ConsentSnapshot (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
Revokes consent and cascade-deletes profile, goals, and equipment.
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ProfileResponse (application/json) |
| 404 | Not Found | - |
| application/json | UpsertProfileRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ProfileResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| 404 | Not Found | - |
| Status | Description | Body |
|---|---|---|
| 200 | OK | GoalResponse[] (application/json) |
| application/json | CreateGoalRequest |
| Status | Description | Body |
|---|---|---|
| 201 | Created | GoalResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | GoalResponse (application/json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| application/json | UpdateGoalRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | GoalResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| 404 | Not Found | - |
| Status | Description | Body |
|---|---|---|
| 200 | OK | EquipmentResponse[] (application/json) |
| application/json | CreateEquipmentRequest |
| Status | Description | Body |
|---|---|---|
| 201 | Created | EquipmentResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| 409 | Conflict | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | EquipmentResponse (application/json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| application/json | UpdateEquipmentRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | EquipmentResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| 404 | Not Found | - |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ScheduleSourceResponse[] (application/json) |
| application/json | CreateScheduleSourceRequest |
| Status | Description | Body |
|---|---|---|
| 201 | Created | ScheduleSourceResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ScheduleSourceResponse (application/json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| application/json | UpdateScheduleSourceRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ScheduleSourceResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| 404 | Not Found | - |
| 409 | Conflict | ProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ScheduleSyncResponse (application/json) |
| 404 | Not Found | - |
| 409 | Conflict | ProblemDetails (application/problem+json) |
| 422 | Unprocessable Entity | ProblemDetails (application/problem+json) |
| 503 | Service Unavailable | ProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| from | query | string (date-time) |
| to | query | string (date-time) |
| sourceId | query | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ScheduleEventResponse[] (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| application/json | PushScheduleEventsRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ScheduleEventResponse[] (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| 404 | Not Found | - |
| 409 | Conflict | ProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| returnPath | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
| Name | In | Type |
|---|---|---|
| returnPath | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
| Name | In | Type |
|---|---|---|
| code | query | string |
| state | query | string |
| error | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
| Name | In | Type |
|---|---|---|
| code | query | string |
| state | query | string |
| error | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
| Name | In | Type |
|---|---|---|
| from | query | string (date-time) |
| to | query | string (date-time) |
| tz | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | GapResponse[] (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| availableEquipmentTag | query | string[] |
| bodyArea | query | BodyArea |
| maxDurationSeconds | query | integer (int32) | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ActivityResponse[] (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| limit | query | integer (int32) | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | PromptResponse[] (application/json) |
| Name | In | Type |
|---|---|---|
| tz | query | string |
| channel | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | PromptResponse (application/json) |
| 204 | No Content | - |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | PromptResponse (application/json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | PromptResponse (application/json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| id * | path | string (uuid) |
| application/json | FeedbackRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | PromptResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| 404 | Not Found | - |
| Name | In | Type |
|---|---|---|
| tz | query | string |
| channel | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
| Name | In | Type |
|---|---|---|
| tz | query | string |
| channel | query | string |
| Status | Description | Body |
|---|---|---|
| 200 | OK | - |
| Status | Description | Body |
|---|---|---|
| 200 | OK | PlayerStateResponse (application/json) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | BadgeResponse[] (application/json) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | MilestoneResponse[] (application/json) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | LeaderboardEntry[] (application/json) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | SocialProfileResponse (application/json) |
| 404 | Not Found | - |
| application/json | UpsertSocialProfileRequest |
| Status | Description | Body |
|---|---|---|
| 200 | OK | SocialProfileResponse (application/json) |
| 400 | Bad Request | HttpValidationProblemDetails (application/problem+json) |
| Name | In | Type |
|---|---|---|
| followeeId * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| 400 | Bad Request | - |
| 409 | Conflict | - |
| Name | In | Type |
|---|---|---|
| followeeId * | path | string (uuid) |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | - |
| 404 | Not Found | - |
| Status | Description | Body |
|---|---|---|
| 200 | OK | FollowerResponse[] (application/json) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | FollowResponse[] (application/json) |
| Status | Description | Body |
|---|---|---|
| 200 | OK | FeedItemResponse[] (application/json) |
| Property | Type |
|---|---|
| version * | string |
| Property | Type |
|---|---|
| accessToken * | string |
| tokenType * | string |
| expiresAt * | string (date-time) |
| user * | AuthenticatedUserResponse |
| Property | Type |
|---|---|
| id * | string (uuid) |
| slug * | string |
| title * | string |
| description * | string |
| bodyArea * | BodyArea |
| intensity * | IntensityLevel |
| durationSeconds * | integer (int32) | string |
| equipmentTags * | string[] |
| animationProvider * | string |
| animationAssetId * | string |
| licenseAttribution * | string | null |
| Property | Type |
|---|---|
| id * | string (uuid) |
| gitHubId * | integer (int64) | string |
| login * | string |
| displayName * | string | null |
| avatarUrl * | string | null |
| Property | Type |
|---|---|
| error * | string |
| description | string | null |
| Property | Type |
|---|---|
| key * | string |
| name * | string |
| description * | string |
| icon * | string |
| category * | string |
| isHidden * | boolean |
| earned * | boolean |
| earnedAt * | string | null |
FullUpperLowerCoreNeckBackWristsHipsAnklesBreathPosture | Property | Type |
|---|---|
| version * | string |
| text * | string |
| acceptedAt * | string (date-time) |
| Property | Type |
|---|---|
| accepted * | null | ConsentSnapshot |
| current * | CurrentConsentText |
| Property | Type |
|---|---|
| tag * | string |
| displayName * | string |
| notes | string | null |
| Property | Type |
|---|---|
| title * | string |
| description | string | null |
| category | GoalCategory |
| targetMetric | string | null |
| startDate * | string (date) |
| endDate | string | null |
| Property | Type |
|---|---|
| type * | ScheduleSourceType |
| displayName * | string |
| Property | Type |
|---|---|
| version * | string |
| text * | string |
VscodeCliWeb | Property | Type |
|---|---|
| sessionId * | string |
| Property | Type |
|---|---|
| sessionId * | string |
| userCode * | string |
| verificationUri * | string |
| expiresInSeconds * | integer (int32) | string |
| intervalSeconds * | integer (int32) | string |
| Property | Type |
|---|---|
| id * | string (uuid) |
| tag * | string |
| displayName * | string |
| notes * | string | null |
| createdAt * | string (date-time) |
| Property | Type |
|---|---|
| rating | integer (int16) | string |
| Property | Type |
|---|---|
| id * | string (uuid) |
| type * | FeedItemType |
| message * | string |
| createdAt * | string (date-time) |
PromptCompletedBadgeEarnedMilestoneAchievedLevelUpGoalCreatedFollowed UnspecifiedSedentaryLightModerateActive | Property | Type |
|---|---|
| followerId * | string (uuid) |
| followedAt * | string (date-time) |
| Property | Type |
|---|---|
| followeeId * | string (uuid) |
| followedAt * | string (date-time) |
| Property | Type |
|---|---|
| startUtc * | string (date-time) |
| endUtc * | string (date-time) |
| durationMinutes * | integer (int32) | string |
MobilityStrengthBreathingPostureCardioLight | Property | Type |
|---|---|
| id * | string (uuid) |
| title * | string |
| description * | string | null |
| category * | GoalCategory |
| targetMetric * | string | null |
| startDate * | string (date) |
| endDate * | string | null |
| createdAt * | string (date-time) |
| updatedAt * | string (date-time) |
| Property | Type |
|---|---|
| type | string | null |
| title | string | null |
| status | integer | string | null |
| detail | string | null |
| instance | string | null |
| errors | object |
LowMediumHigh | Property | Type |
|---|---|
| userId * | string (uuid) |
| displayName * | string |
| totalXp * | integer (int32) | string |
| level * | integer (int32) | string |
| rankTier * | RankTier |
| Property | Type |
|---|---|
| key * | string |
| name * | string |
| description * | string |
| isHidden * | boolean |
| achieved * | boolean |
| achievedAt * | string | null |
| Property | Type |
|---|---|
| level * | integer (int32) | string |
| totalXp * | integer (int32) | string |
| xpIntoLevel * | integer (int32) | string |
| xpForNextLevel * | integer (int32) | string |
| currentStreak * | integer (int32) | string |
| longestStreak * | integer (int32) | string |
| rankTier * | RankTier |
| Property | Type |
|---|---|
| type | string | null |
| title | string | null |
| status | integer | string | null |
| detail | string | null |
| instance | string | null |
| Property | Type |
|---|---|
| id * | string (uuid) |
| ageRange * | string | null |
| heightCm * | number | string | null |
| weightKg * | number | string | null |
| fitnessBaseline * | FitnessBaseline |
| preferredIntensity * | IntensityLevel |
| limitations * | string | null |
| timeOfDayPreference * | string | null |
| updatedAt * | string (date-time) |
| Property | Type |
|---|---|
| id * | string (uuid) |
| activityId * | string (uuid) |
| activitySlug * | string |
| activityTitle * | string |
| activityDescription * | string |
| bodyArea * | BodyArea |
| intensity * | IntensityLevel |
| durationSeconds * | integer (int32) | string |
| equipmentTags * | string[] |
| animationProvider * | string |
| animationAssetId * | string |
| licenseAttribution * | string | null |
| gapStartUtc * | string (date-time) |
| gapEndUtc * | string (date-time) |
| deliveredAt * | string (date-time) |
| deliveredVia * | DeliveryChannel |
| dismissedAt * | string | null |
| completedAt * | string | null |
| feedbackRating * | integer | string | null |
| Property | Type |
|---|---|
| externalId * | string |
| startUtc * | string (date-time) |
| endUtc * | string (date-time) |
| busy | boolean |
| Property | Type |
|---|---|
| sourceId * | string (uuid) |
| items * | PushScheduleEventItem[] |
BronzeSilverGoldPlatinumDiamondLegend | Property | Type |
|---|---|
| id * | string (uuid) |
| sourceId * | string (uuid) |
| externalId * | string | null |
| startUtc * | string (date-time) |
| endUtc * | string (date-time) |
| busy * | boolean |
ConnectedNeedsReconnectDisabledErrorPendingConnection | Property | Type |
|---|---|
| id * | string (uuid) |
| type * | ScheduleSourceType |
| displayName * | string |
| connectionStatus * | ScheduleSourceConnectionStatus |
| scope * | string | null |
| lastSyncAt * | string | null |
| lastRefreshAt * | string | null |
| lastSyncErrorCode * | string | null |
| lastSyncErrorAt * | string | null |
| createdAt * | string (date-time) |
UserGoogleMicrosoft | Property | Type |
|---|---|
| synced * | integer (int32) | string |
| Property | Type |
|---|---|
| userId * | string (uuid) |
| displayName * | string |
| bio * | string | null |
| isPublic * | boolean |
| Property | Type |
|---|---|
| displayName * | string |
| notes | string | null |
| Property | Type |
|---|---|
| title * | string |
| description | string | null |
| category | GoalCategory |
| targetMetric | string | null |
| startDate * | string (date) |
| endDate | string | null |
| Property | Type |
|---|---|
| displayName | string | null |
| connectionStatus | null | ScheduleSourceConnectionStatus |
| Property | Type |
|---|---|
| ageRange | string | null |
| heightCm | number | string | null |
| weightKg | number | string | null |
| fitnessBaseline | FitnessBaseline |
| preferredIntensity | IntensityLevel |
| limitations | string | null |
| timeOfDayPreference | string | null |
| Property | Type |
|---|---|
| displayName * | string |
| bio | string | null |
| isPublic | boolean |