Objectuve API Reference
Objectuve API
The Objectuve API is a single GraphQL endpoint with real-time WebSocket subscriptions.
GraphQL endpoint: POST /graphql
WebSocket: WS /cable
Authentication
Objectuve uses Clerk for authentication. Clerk issues RS256 JWTs verified via JWKS on the backend.
Include the Clerk session token in every authenticated request using the SessionToken header:
SessionToken: <clerk-jwt-token>
Obtain a token via Clerk.session.getToken() on the client.
Important: The header name is
SessionToken(PascalCase). It is notAuthorizationorBearer.
On first sign-in, call the syncUser mutation to create or sync the local user record. This returns firstSignIn: true for new users who need onboarding.
Key Features
- User Management — Sync Clerk profiles, manage usernames, photos, and showcased achievements
- Goal Tracking — Create goals with milestones, log progress events, track streaks and XP
- Habit Check-ins — One-tap daily check-ins with streak tracking and freeze tokens
- Communities — Create and join interest groups, share goals, post updates, view feeds
- Mood Logging — Daily check-ins (amazing / happy / calm / meh / tired / low) with optional goal linkage
- Coach Features — Generate milestones, refine descriptions, request advice, and receive personalized insights
- Gamification — XP, levels, ranks (Open Road → Horizon), badges (Common / Rare / Epic / Legendary)
- Real-time — Subscribe to live notification and action updates via WebSocket (ActionCable)
ID Convention
All record IDs exposed by this API are public_id values — URL-safe base64 tokens. Internal integer IDs are never returned. Use public_id values for all lookups and references.
Related Resources
- Design System — Brand, tokens, and component patterns
- Documentation — Architecture, feature guides, and operations
- Storybook — Interactive component playground
API Endpoints
# Production:
https://api.objectuve.com/graphql
# Staging:
https://staging.api.objectuve.com/graphql
# Local Development:
http://localhost:3000/graphql
Version
1.0.0
Queries
accountabilityPartner
Description
Returns the active accountability partner for a user, or null if none.
Response
Returns an AccountabilityPartner
Arguments
| Name | Description |
|---|---|
userId - ID
|
public_id of the user whose accountability partner to retrieve. Defaults to the current user. |
Example
Query
query accountabilityPartner($userId: ID) {
accountabilityPartner(userId: $userId) {
accountabilityPartnerSince
firstName
lastName
longestMutualStreak
mutualStreakCount
mutualStreakLastDate
nudgeSentToday
partnerCheckedInToday
photo {
...UserPhotoFragment
}
publicId
userCheckedInToday
username
}
}
Variables
{"userId": "4"}
Response
{
"data": {
"accountabilityPartner": {
"accountabilityPartnerSince": ISO8601DateTime,
"firstName": "xyz789",
"lastName": "abc123",
"longestMutualStreak": 123,
"mutualStreakCount": 123,
"mutualStreakLastDate": ISO8601Date,
"nudgeSentToday": false,
"partnerCheckedInToday": false,
"photo": UserPhoto,
"publicId": 4,
"userCheckedInToday": false,
"username": "abc123"
}
}
}
activeSeasonalEvent
Description
The current active seasonal event, if any. Nil when seasonal_events_enabled is off.
Response
Returns a SeasonalEvent
Example
Query
query activeSeasonalEvent {
activeSeasonalEvent {
badgeIcon
badgeName
createdAtTime
currentUserParticipant {
...SeasonalEventParticipantFragment
}
description
endDate
isActive
isParticipating
name
participantCount
publicId
slug
startDate
status
targetGoalCount
updatedAtTime
}
}
Response
{
"data": {
"activeSeasonalEvent": {
"badgeIcon": "abc123",
"badgeName": "xyz789",
"createdAtTime": "xyz789",
"currentUserParticipant": SeasonalEventParticipant,
"description": "xyz789",
"endDate": ISO8601Date,
"isActive": false,
"isParticipating": false,
"name": "abc123",
"participantCount": 987,
"publicId": "4",
"slug": "abc123",
"startDate": ISO8601Date,
"status": "abc123",
"targetGoalCount": 987,
"updatedAtTime": "abc123"
}
}
}
activeSeasonalEvents
Description
Lists currently active seasonal events. Empty when seasonal_events_enabled is off.
Response
Returns [SeasonalEvent!]
Example
Query
query activeSeasonalEvents {
activeSeasonalEvents {
badgeIcon
badgeName
createdAtTime
currentUserParticipant {
...SeasonalEventParticipantFragment
}
description
endDate
isActive
isParticipating
name
participantCount
publicId
slug
startDate
status
targetGoalCount
updatedAtTime
}
}
Response
{
"data": {
"activeSeasonalEvents": [
{
"badgeIcon": "abc123",
"badgeName": "abc123",
"createdAtTime": "abc123",
"currentUserParticipant": SeasonalEventParticipant,
"description": "xyz789",
"endDate": ISO8601Date,
"isActive": true,
"isParticipating": false,
"name": "xyz789",
"participantCount": 987,
"publicId": 4,
"slug": "abc123",
"startDate": ISO8601Date,
"status": "xyz789",
"targetGoalCount": 987,
"updatedAtTime": "xyz789"
}
]
}
}
adminActions
Description
Admin only. Audit log, newest first, cursor-paginated.
Response
Returns an AdminActionConnection!
Arguments
| Name | Description |
|---|---|
actionType - String
|
|
actorId - ID
|
|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
scopedTo - String
|
Bucket filter — e.g. 'demo_data' narrows to Phase 30 demo-data actions. |
targetType - String
|
Example
Query
query adminActions(
$actionType: String,
$actorId: ID,
$after: String,
$before: String,
$first: Int,
$last: Int,
$scopedTo: String,
$targetType: String
) {
adminActions(
actionType: $actionType,
actorId: $actorId,
after: $after,
before: $before,
first: $first,
last: $last,
scopedTo: $scopedTo,
targetType: $targetType
) {
edges {
...AdminActionEdgeFragment
}
nodes {
...AdminActionFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"actionType": "abc123",
"actorId": "4",
"after": "abc123",
"before": "abc123",
"first": 987,
"last": 123,
"scopedTo": "xyz789",
"targetType": "abc123"
}
Response
{
"data": {
"adminActions": {
"edges": [AdminActionEdge],
"nodes": [AdminAction],
"pageInfo": PageInfo
}
}
}
adminAiUsage
Description
Returns aggregated AI spend and usage for the admin dashboard. Admin only.
Response
Returns an AdminAiUsage
Arguments
| Name | Description |
|---|---|
daysBack - Int
|
Number of days to look back for AI spend aggregation. Defaults to 30. Default = 30 |
Example
Query
query adminAiUsage($daysBack: Int) {
adminAiUsage(daysBack: $daysBack) {
budgetCents
budgetUtilizationPercent
dailySeries {
...DailyUsagePointFragment
}
perFeature {
...FeatureUsagePointFragment
}
perModel {
...ModelUsagePointFragment
}
perResolvedModel {
...ResolvedModelUsagePointFragment
}
totalCalls
totalSpendCents
totalTokens
}
}
Variables
{"daysBack": 30}
Response
{
"data": {
"adminAiUsage": {
"budgetCents": 123,
"budgetUtilizationPercent": 987.65,
"dailySeries": [DailyUsagePoint],
"perFeature": [FeatureUsagePoint],
"perModel": [ModelUsagePoint],
"perResolvedModel": [ResolvedModelUsagePoint],
"totalCalls": 123,
"totalSpendCents": 987,
"totalTokens": 987
}
}
}
adminSearchUsers
Description
Admin only. pg_trgm-backed user search; sub-200ms on 100K users.
Response
Returns a UserConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
query - String!
|
Trigram search string; 4+ chars recommended. |
Example
Query
query adminSearchUsers(
$after: String,
$before: String,
$first: Int,
$last: Int,
$query: String!
) {
adminSearchUsers(
after: $after,
before: $before,
first: $first,
last: $last,
query: $query
) {
edges {
...UserEdgeFragment
}
nodes {
...UserFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "abc123",
"before": "xyz789",
"first": 123,
"last": 987,
"query": "abc123"
}
Response
{
"data": {
"adminSearchUsers": {
"edges": [UserEdge],
"nodes": [User],
"pageInfo": PageInfo
}
}
}
adminStats
Description
Returns platform-wide statistics for the admin dashboard. Admin only.
Response
Returns an AdminStats
Arguments
| Name | Description |
|---|---|
daysBack - Int
|
Number of days to look back for time-series metrics. Defaults to 90. Default = 90 |
Example
Query
query adminStats($daysBack: Int) {
adminStats(daysBack: $daysBack) {
completedGoals
criticalFlags
goalCategories {
...CategoryStatsFragment
}
goalsLast7Days
growthData {
...GrowthDataPointFragment
}
pendingFlags
pendingReports
publicGoals
recentActivity {
...ActivityItemFragment
}
supporterStats {
...SupporterStatsFragment
}
totalEncouragements
totalEvents
totalGoals
totalMilestones
totalUpdates
totalUsers
usersLast30Days
usersLast7Days
}
}
Variables
{"daysBack": 90}
Response
{
"data": {
"adminStats": {
"completedGoals": 123,
"criticalFlags": 123,
"goalCategories": [CategoryStats],
"goalsLast7Days": 987,
"growthData": [GrowthDataPoint],
"pendingFlags": 987,
"pendingReports": 123,
"publicGoals": 987,
"recentActivity": [ActivityItem],
"supporterStats": SupporterStats,
"totalEncouragements": 123,
"totalEvents": 123,
"totalGoals": 987,
"totalMilestones": 987,
"totalUpdates": 123,
"totalUsers": 123,
"usersLast30Days": 123,
"usersLast7Days": 123
}
}
}
adminTeamsMonitoring
Description
Admin-only. Read-only Teams monitoring list (M11, PRIVACY-3): seat count, subscription status, and last-active per team.
Response
Returns [AdminTeamMonitoring!]
Example
Query
query adminTeamsMonitoring {
adminTeamsMonitoring {
lastActiveAt
seatCountUsed
seatLimit
subscriptionStatus
teamName
teamPublicId
}
}
Response
{
"data": {
"adminTeamsMonitoring": [
{
"lastActiveAt": ISO8601DateTime,
"seatCountUsed": 987,
"seatLimit": 987,
"subscriptionStatus": "xyz789",
"teamName": "abc123",
"teamPublicId": "abc123"
}
]
}
}
aiEmployee
Description
Fetch a single AI employee by public_id. Admin only.
Response
Returns an AiEmployee
Arguments
| Name | Description |
|---|---|
id - String!
|
Example
Query
query aiEmployee($id: String!) {
aiEmployee(id: $id) {
active
aiEmployeeMemories {
...AiEmployeeMemoryFragment
}
aiRuns {
...AiRunFragment
}
approvalRateData {
...ApprovalRateDataFragment
}
autonomyLevel
crew
currentMonthCost
description
id
lastRun {
...AiRunFragment
}
mcpServers
modelPreference
monthlyBudgetCents
name
nextRunAt
postFilterSkill
promotionCriteria {
...PromotionCriteriaFragment
}
roleKey
scheduleCron
skillRefs
taskPrompt
}
}
Variables
{"id": "xyz789"}
Response
{
"data": {
"aiEmployee": {
"active": true,
"aiEmployeeMemories": [AiEmployeeMemory],
"aiRuns": [AiRun],
"approvalRateData": [ApprovalRateData],
"autonomyLevel": "xyz789",
"crew": "xyz789",
"currentMonthCost": 123,
"description": "abc123",
"id": "xyz789",
"lastRun": AiRun,
"mcpServers": ["abc123"],
"modelPreference": "abc123",
"monthlyBudgetCents": 987,
"name": "abc123",
"nextRunAt": ISO8601DateTime,
"postFilterSkill": "abc123",
"promotionCriteria": PromotionCriteria,
"roleKey": "abc123",
"scheduleCron": "xyz789",
"skillRefs": ["xyz789"],
"taskPrompt": "abc123"
}
}
}
aiEmployees
Description
Admin only. AI employee list, cursor-paginated.
Response
Returns an AiEmployeeConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
autonomy - String
|
|
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
roleKey - String
|
|
status - String
|
Example
Query
query aiEmployees(
$after: String,
$autonomy: String,
$before: String,
$first: Int,
$last: Int,
$roleKey: String,
$status: String
) {
aiEmployees(
after: $after,
autonomy: $autonomy,
before: $before,
first: $first,
last: $last,
roleKey: $roleKey,
status: $status
) {
edges {
...AiEmployeeEdgeFragment
}
nodes {
...AiEmployeeFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "xyz789",
"autonomy": "abc123",
"before": "abc123",
"first": 123,
"last": 987,
"roleKey": "xyz789",
"status": "xyz789"
}
Response
{
"data": {
"aiEmployees": {
"edges": [AiEmployeeEdge],
"nodes": [AiEmployee],
"pageInfo": PageInfo
}
}
}
aiRequest
Description
Fetch a single async AiRequest by public_id. Owning user only; the reconnect-recovery counterpart to aiRequestUpdate (v4.60 Phase 1).
Response
Returns an AiRequest
Arguments
| Name | Description |
|---|---|
id - ID!
|
public_id of the AiRequest to retrieve. |
Example
Query
query aiRequest($id: ID!) {
aiRequest(id: $id) {
completedAt
createdAt
errorCode
errorMessage
id
kind
resultJson
status
}
}
Variables
{"id": "4"}
Response
{
"data": {
"aiRequest": {
"completedAt": ISO8601DateTime,
"createdAt": ISO8601DateTime,
"errorCode": "abc123",
"errorMessage": "abc123",
"id": "4",
"kind": "xyz789",
"resultJson": "xyz789",
"status": "abc123"
}
}
}
aiRun
Description
Fetch a single AI run by public_id. Admin only.
Example
Query
query aiRun($id: String!) {
aiRun(id: $id) {
aiArtifacts {
...AiArtifactFragment
}
aiEmployee {
...AiEmployeeFragment
}
completionTokens
costCents
createdAt
durationSeconds
errorMessage
finishedAt
id
numTurns
promptTokens
runLog
startedAt
status
triggeredBy
}
}
Variables
{"id": "xyz789"}
Response
{
"data": {
"aiRun": {
"aiArtifacts": [AiArtifact],
"aiEmployee": AiEmployee,
"completionTokens": 987,
"costCents": 123,
"createdAt": ISO8601DateTime,
"durationSeconds": 123,
"errorMessage": "xyz789",
"finishedAt": ISO8601DateTime,
"id": "abc123",
"numTurns": 987,
"promptTokens": 987,
"runLog": {},
"startedAt": ISO8601DateTime,
"status": "abc123",
"triggeredBy": "xyz789"
}
}
}
allyActivityFeed
Description
Returns paginated activity events from the current user's accepted allies. Each item carries a kind discriminator (GOAL / JOIN / POST / ACHIEVEMENT / FOLLOW) and a per-kind details payload.
Response
Returns [AllyActivity!]
Example
Query
query allyActivityFeed(
$limit: Int,
$offset: Int,
$userId: ID!
) {
allyActivityFeed(
limit: $limit,
offset: $offset,
userId: $userId
) {
action
allyId
allyName
allyPhoto
communityId
communityName
details
id
kind
target
timestamp
}
}
Variables
{"limit": 123, "offset": 987, "userId": "4"}
Response
{
"data": {
"allyActivityFeed": [
{
"action": "abc123",
"allyId": 4,
"allyName": "abc123",
"allyPhoto": "abc123",
"communityId": "4",
"communityName": "xyz789",
"details": {},
"id": 4,
"kind": "ACHIEVEMENT",
"target": "xyz789",
"timestamp": "xyz789"
}
]
}
}
allyInvitePreview
Description
Public preview of an invite token — returns inviter name, avatar, and validity. No auth required. Rate-limited (60 req/min per IP for anonymous callers; per user when authenticated.).
Response
Returns an AllyInvitePreview!
Arguments
| Name | Description |
|---|---|
token - String!
|
Invite token from the deep link. |
Example
Query
query allyInvitePreview($token: String!) {
allyInvitePreview(token: $token) {
invalidReason
inviterAvatarUrl
inviterName
valid
}
}
Variables
{"token": "abc123"}
Response
{
"data": {
"allyInvitePreview": {
"invalidReason": "xyz789",
"inviterAvatarUrl": "xyz789",
"inviterName": "xyz789",
"valid": true
}
}
}
askDocsQuestion
Description
Ask a question about the Objectuve engineering docs corpus. Requires a Clerk session on an @objectuve.com email, verified server-side. Rate-limited 20 req/min per user. Returns DISABLED (not an error) when the assistant is off.
Response
Returns a DocsAssistantAnswer!
Arguments
| Name | Description |
|---|---|
question - String!
|
The question to ask the docs assistant. |
Example
Query
query askDocsQuestion($question: String!) {
askDocsQuestion(question: $question) {
answer
citations {
...DocsAssistantCitationFragment
}
state
}
}
Variables
{"question": "xyz789"}
Response
{
"data": {
"askDocsQuestion": {
"answer": "xyz789",
"citations": [DocsAssistantCitation],
"state": "ANSWERED"
}
}
}
askGuideQuestion
Description
Ask a question about the Objectuve guide. No auth required. Rate-limited (20 req/min per IP for anonymous callers; per user when authenticated). Returns DISABLED (not an error) when the assistant is off.
Response
Returns a GuideAssistantAnswer!
Arguments
| Name | Description |
|---|---|
question - String!
|
The question to ask the guide assistant. |
Example
Query
query askGuideQuestion($question: String!) {
askGuideQuestion(question: $question) {
answer
citations {
...GuideAssistantCitationFragment
}
state
}
}
Variables
{"question": "abc123"}
Response
{
"data": {
"askGuideQuestion": {
"answer": "abc123",
"citations": [GuideAssistantCitation],
"state": "ANSWERED"
}
}
}
authzCheck
Description
Checks whether the current user has a specific permission (e.g. admin).
Response
Returns a Result
Example
Query
query authzCheck(
$concern: String!,
$id: ID!
) {
authzCheck(
concern: $concern,
id: $id
) {
success
}
}
Variables
{"concern": "xyz789", "id": 4}
Response
{"data": {"authzCheck": {"success": true}}}
badgeHolderCount
Description
Public. Distinct number of users who have unlocked a given badge. Returns 0 for unknown keys (validated against the BadgeCatalog allowlist). Cached for 1 hour.
Response
Returns an Int!
Arguments
| Name | Description |
|---|---|
badgeKey - String!
|
Badge key from Achievements::BadgeCatalog::BADGE_KEYS. |
Example
Query
query badgeHolderCount($badgeKey: String!) {
badgeHolderCount(badgeKey: $badgeKey)
}
Variables
{"badgeKey": "xyz789"}
Response
{"data": {"badgeHolderCount": 123}}
badgeStats
Description
Returns the unlock percentage for each badge across all users. Cached for 1 hour.
Response
Returns [BadgeStat!]
Example
Query
query badgeStats {
badgeStats {
badgeKey
percentage
}
}
Response
{
"data": {
"badgeStats": [
{
"badgeKey": "xyz789",
"percentage": 987.65
}
]
}
}
blockedUsers
Description
Returns the authenticated user's blocked set (either direction — a block hides content symmetrically). Auth required.
Response
Returns [UserSearchResult!]!
Example
Query
query blockedUsers {
blockedUsers {
achievementStats {
...AchievementStatsFragment
}
actions {
...UserActionFragment
}
admin
adminRoles
allyStatus
coachingPreferences {
...CoachingPreferencesFragment
}
colorTheme
completedCommunityChallenges {
...ChallengeParticipantFragment
}
completedSeasonalEvents {
...SeasonalEventParticipantFragment
}
createdAtTime
currentInsights {
...InsightPackFragment
}
dashboardPreferences {
...DashboardPreferencesFragment
}
daysSinceLastActive
demo
details {
...UserDetailFragment
}
email
emailVerified
featureTourStatus
feedItems {
...UserFeedItemFragment
}
firstName
goItAlone
goalMotivationProfile {
...GoalMotivationProfileFragment
}
goals {
...GoalFragment
}
graceDays
hasAlly
hasCreatedFromTemplate
hasDigestEnabled
isSupporter
lastDigestSentAt
lastName
latestEnneagramAssessment {
...EnneagramAssessmentFragment
}
level
longestStreak
moodGoalInsight {
...InsightPackFragment
}
nextLevelThreshold
nextOnTheShelfBadge {
...NextBadgeFragment
}
notifications {
...UserNotificationFragment
}
onboardingStatus {
...OnboardingStatusFragment
}
paceSuggestion {
...PaceSuggestionFragment
}
photo {
...UserPhotoFragment
}
privateMode
progressToNextLevel
publicId
recentlyUnlockedBadges {
...RecentlyUnlockedBadgeFragment
}
requiredCheckinsCompleteToday
showcasedAchievements
signInDates
signupAgeDays
stats {
...UserStatsFragment
}
streak
streakRepairOffer {
...StreakRepairOfferFragment
}
supporterTier
supporterUntil
timeToFirstGoalSeconds
todaysMood
unlockedAchievementKeys
updatedAtTime
username
welcomeBackOffer {
...WelcomeBackOfferFragment
}
xp
}
}
Response
{
"data": {
"blockedUsers": [
{
"achievementStats": AchievementStats,
"actions": [UserAction],
"admin": false,
"adminRoles": ["xyz789"],
"allyStatus": "ACCEPTED",
"coachingPreferences": CoachingPreferences,
"colorTheme": "abc123",
"completedCommunityChallenges": [
ChallengeParticipant
],
"completedSeasonalEvents": [
SeasonalEventParticipant
],
"createdAtTime": "xyz789",
"currentInsights": [InsightPack],
"dashboardPreferences": DashboardPreferences,
"daysSinceLastActive": 123,
"demo": true,
"details": UserDetail,
"email": "abc123",
"emailVerified": false,
"featureTourStatus": {},
"feedItems": [UserFeedItem],
"firstName": "abc123",
"goItAlone": true,
"goalMotivationProfile": GoalMotivationProfile,
"goals": [Goal],
"graceDays": ["xyz789"],
"hasAlly": false,
"hasCreatedFromTemplate": true,
"hasDigestEnabled": false,
"isSupporter": true,
"lastDigestSentAt": "abc123",
"lastName": "abc123",
"latestEnneagramAssessment": EnneagramAssessment,
"level": 123,
"longestStreak": 987,
"moodGoalInsight": InsightPack,
"nextLevelThreshold": 123,
"nextOnTheShelfBadge": NextBadge,
"notifications": [UserNotification],
"onboardingStatus": OnboardingStatus,
"paceSuggestion": PaceSuggestion,
"photo": UserPhoto,
"privateMode": true,
"progressToNextLevel": 123.45,
"publicId": "4",
"recentlyUnlockedBadges": [RecentlyUnlockedBadge],
"requiredCheckinsCompleteToday": true,
"showcasedAchievements": ["abc123"],
"signInDates": ["xyz789"],
"signupAgeDays": 987,
"stats": UserStats,
"streak": 987,
"streakRepairOffer": StreakRepairOffer,
"supporterTier": "abc123",
"supporterUntil": ISO8601DateTime,
"timeToFirstGoalSeconds": 123,
"todaysMood": "abc123",
"unlockedAchievementKeys": [
"abc123"
],
"updatedAtTime": "abc123",
"username": "abc123",
"welcomeBackOffer": WelcomeBackOffer,
"xp": 987
}
]
}
}
coachConversation
Description
Returns the persisted Coach conversation thread for the authenticated user. Scoped per goal if goal_id is provided; returns the global thread otherwise.
Response
Returns a CoachConversation
Arguments
| Name | Description |
|---|---|
goalId - String
|
public_id of the goal to scope the thread to. Omit for the global thread. |
Example
Query
query coachConversation($goalId: String) {
coachConversation(goalId: $goalId) {
goalId
id
lastMessageAt
messages {
...CoachMessageFragment
}
}
}
Variables
{"goalId": "xyz789"}
Response
{
"data": {
"coachConversation": {
"goalId": "abc123",
"id": "xyz789",
"lastMessageAt": ISO8601DateTime,
"messages": [CoachMessage]
}
}
}
coachModelSetting
Description
Returns the runtime Coach Gemini model setting: current value, allowlisted options with current rates, and the last 5 changes. Admin only.
Response
Returns a CoachModelSetting!
Example
Query
query coachModelSetting {
coachModelSetting {
currentModel
options {
...CoachModelOptionFragment
}
recentChanges {
...CoachModelChangeFragment
}
}
}
Response
{
"data": {
"coachModelSetting": {
"currentModel": "abc123",
"options": [CoachModelOption],
"recentChanges": [CoachModelChange]
}
}
}
communities
Description
Lists communities, optionally filtered by user membership or goal category.
Response
Returns [Community!]
Example
Query
query communities(
$goalCategoryIds: [ID!],
$userId: ID
) {
communities(
goalCategoryIds: $goalCategoryIds,
userId: $userId
) {
activeChallenge {
...CommunityChallengeFragment
}
activeMembers
archiveDaysLeft
archivedAt
badges {
...CommunityBadgesFragment
}
category
checkInsPerWeek
coverImage
createdAt
createdAtTime
demo
description
editorialPosition
editorialSlot
feedItems {
...CommunityFeedItemFragment
}
goalCategory {
...GoalCategoryFragment
}
goals {
...GoalFragment
}
growthRate
guidelines
healthScore
icon
id
imageUrl
isDefault
isDefaultForTeam
isFeatured
isFounding
isGated
isMember
isVerified
joinPolicy
leadMembershipId
leadName
memberCount
members {
...CommunityMemberFragment
}
membersToDiscoverable
name
pastChallenges {
...CommunityChallengeFragment
}
privacy
private
publicId
reason {
...CommunityReasonFragment
}
teamId
teamName
totalGoals
upcomingChallenges {
...CommunityChallengeFragment
}
updatedAtTime
userProgressPercent
}
}
Variables
{
"goalCategoryIds": ["4"],
"userId": "4"
}
Response
{
"data": {
"communities": [
{
"activeChallenge": CommunityChallenge,
"activeMembers": 987,
"archiveDaysLeft": 123,
"archivedAt": ISO8601DateTime,
"badges": CommunityBadges,
"category": "xyz789",
"checkInsPerWeek": 123,
"coverImage": "xyz789",
"createdAt": ISO8601DateTime,
"createdAtTime": "abc123",
"demo": false,
"description": "xyz789",
"editorialPosition": 123,
"editorialSlot": "abc123",
"feedItems": [CommunityFeedItem],
"goalCategory": GoalCategory,
"goals": [Goal],
"growthRate": 987.65,
"guidelines": "abc123",
"healthScore": 123,
"icon": "abc123",
"id": 4,
"imageUrl": "xyz789",
"isDefault": false,
"isDefaultForTeam": false,
"isFeatured": true,
"isFounding": true,
"isGated": false,
"isMember": false,
"isVerified": true,
"joinPolicy": "xyz789",
"leadMembershipId": 4,
"leadName": "abc123",
"memberCount": 987,
"members": [CommunityMember],
"membersToDiscoverable": 987,
"name": "abc123",
"pastChallenges": [CommunityChallenge],
"privacy": "xyz789",
"private": true,
"publicId": 4,
"reason": CommunityReason,
"teamId": "4",
"teamName": "xyz789",
"totalGoals": 123,
"upcomingChallenges": [CommunityChallenge],
"updatedAtTime": "xyz789",
"userProgressPercent": 123.45
}
]
}
}
community
Description
Fetches a community by its public_id. Authorization: For a team-scoped room (teamId present), requires an actual CommunityMember record — seated team membership alone is not enough. Admins bypass. teamId-nil (public/free) communities are unaffected. See Communities § Room Access Boundary.
Response
Returns a Community
Arguments
| Name | Description |
|---|---|
id - ID!
|
public_id of the community to retrieve. |
Example
Query
query community($id: ID!) {
community(id: $id) {
activeChallenge {
...CommunityChallengeFragment
}
activeMembers
archiveDaysLeft
archivedAt
badges {
...CommunityBadgesFragment
}
category
checkInsPerWeek
coverImage
createdAt
createdAtTime
demo
description
editorialPosition
editorialSlot
feedItems {
...CommunityFeedItemFragment
}
goalCategory {
...GoalCategoryFragment
}
goals {
...GoalFragment
}
growthRate
guidelines
healthScore
icon
id
imageUrl
isDefault
isDefaultForTeam
isFeatured
isFounding
isGated
isMember
isVerified
joinPolicy
leadMembershipId
leadName
memberCount
members {
...CommunityMemberFragment
}
membersToDiscoverable
name
pastChallenges {
...CommunityChallengeFragment
}
privacy
private
publicId
reason {
...CommunityReasonFragment
}
teamId
teamName
totalGoals
upcomingChallenges {
...CommunityChallengeFragment
}
updatedAtTime
userProgressPercent
}
}
Variables
{"id": "4"}
Response
{
"data": {
"community": {
"activeChallenge": CommunityChallenge,
"activeMembers": 123,
"archiveDaysLeft": 987,
"archivedAt": ISO8601DateTime,
"badges": CommunityBadges,
"category": "abc123",
"checkInsPerWeek": 123,
"coverImage": "abc123",
"createdAt": ISO8601DateTime,
"createdAtTime": "xyz789",
"demo": false,
"description": "xyz789",
"editorialPosition": 987,
"editorialSlot": "abc123",
"feedItems": [CommunityFeedItem],
"goalCategory": GoalCategory,
"goals": [Goal],
"growthRate": 123.45,
"guidelines": "xyz789",
"healthScore": 123,
"icon": "xyz789",
"id": "4",
"imageUrl": "xyz789",
"isDefault": true,
"isDefaultForTeam": false,
"isFeatured": false,
"isFounding": true,
"isGated": true,
"isMember": true,
"isVerified": false,
"joinPolicy": "abc123",
"leadMembershipId": "4",
"leadName": "xyz789",
"memberCount": 987,
"members": [CommunityMember],
"membersToDiscoverable": 123,
"name": "abc123",
"pastChallenges": [CommunityChallenge],
"privacy": "xyz789",
"private": true,
"publicId": 4,
"reason": CommunityReason,
"teamId": 4,
"teamName": "xyz789",
"totalGoals": 987,
"upcomingChallenges": [CommunityChallenge],
"updatedAtTime": "abc123",
"userProgressPercent": 123.45
}
}
}
communityBadges
Description
Returns the threshold and status marks for a community. Authorization: For a team-scoped room (teamId present), requires an actual CommunityMember record — seated team membership alone is not enough. Admins bypass. teamId-nil (public/free) communities are unaffected. See Communities § Room Access Boundary.
Response
Returns a CommunityBadges
Arguments
| Name | Description |
|---|---|
communityId - ID!
|
public_id of the community. |
Example
Query
query communityBadges($communityId: ID!) {
communityBadges(communityId: $communityId) {
club1k
featured
streak100
wins500
}
}
Variables
{"communityId": 4}
Response
{
"data": {
"communityBadges": {
"club1k": false,
"featured": true,
"streak100": true,
"wins500": true
}
}
}
communityChallenge
Description
Fetches a community challenge by public_id.
Response
Returns a CommunityChallenge
Arguments
| Name | Description |
|---|---|
id - ID!
|
public_id of the challenge to retrieve. |
Example
Query
query communityChallenge($id: ID!) {
communityChallenge(id: $id) {
badgeIcon
badgeName
community {
...CommunityFragment
}
createdAtTime
creator {
...UserFragment
}
currentUserParticipant {
...ChallengeParticipantFragment
}
description
endDate
isParticipating
name
participantCount
publicId
startDate
status
targetGoalCount
targetGoalType {
...GoalTypeFragment
}
updatedAtTime
}
}
Variables
{"id": "4"}
Response
{
"data": {
"communityChallenge": {
"badgeIcon": "abc123",
"badgeName": "abc123",
"community": Community,
"createdAtTime": "abc123",
"creator": User,
"currentUserParticipant": ChallengeParticipant,
"description": "abc123",
"endDate": ISO8601Date,
"isParticipating": true,
"name": "abc123",
"participantCount": 987,
"publicId": "4",
"startDate": ISO8601Date,
"status": "abc123",
"targetGoalCount": 123,
"targetGoalType": GoalType,
"updatedAtTime": "xyz789"
}
}
}
communityChallengeLeaderboard
Description
Paginated leaderboard for a challenge, ranked by progress_count DESC.
Response
Returns [ChallengeParticipant!]
Example
Query
query communityChallengeLeaderboard(
$challengeId: ID!,
$completedOnly: Boolean,
$limit: Int,
$offset: Int
) {
communityChallengeLeaderboard(
challengeId: $challengeId,
completedOnly: $completedOnly,
limit: $limit,
offset: $offset
) {
communityChallenge {
...CommunityChallengeFragment
}
completed
completedAt
progressCount
progressPercent
publicId
rank
user {
...UserFragment
}
userPublicId
}
}
Variables
{
"challengeId": "4",
"completedOnly": true,
"limit": 987,
"offset": 123
}
Response
{
"data": {
"communityChallengeLeaderboard": [
{
"communityChallenge": CommunityChallenge,
"completed": false,
"completedAt": ISO8601DateTime,
"progressCount": 987,
"progressPercent": 123.45,
"publicId": "4",
"rank": 987,
"user": User,
"userPublicId": "xyz789"
}
]
}
}
communityChallenges
Description
Lists challenges in a community, optionally filtered by status.
Response
Returns [CommunityChallenge!]
Example
Query
query communityChallenges(
$communityId: ID!,
$status: String
) {
communityChallenges(
communityId: $communityId,
status: $status
) {
badgeIcon
badgeName
community {
...CommunityFragment
}
createdAtTime
creator {
...UserFragment
}
currentUserParticipant {
...ChallengeParticipantFragment
}
description
endDate
isParticipating
name
participantCount
publicId
startDate
status
targetGoalCount
targetGoalType {
...GoalTypeFragment
}
updatedAtTime
}
}
Variables
{
"communityId": "4",
"status": "abc123"
}
Response
{
"data": {
"communityChallenges": [
{
"badgeIcon": "xyz789",
"badgeName": "xyz789",
"community": Community,
"createdAtTime": "xyz789",
"creator": User,
"currentUserParticipant": ChallengeParticipant,
"description": "xyz789",
"endDate": ISO8601Date,
"isParticipating": true,
"name": "xyz789",
"participantCount": 123,
"publicId": 4,
"startDate": ISO8601Date,
"status": "xyz789",
"targetGoalCount": 123,
"targetGoalType": GoalType,
"updatedAtTime": "abc123"
}
]
}
}
communityFeed
Description
Returns the paginated post feed for a community, ordered by most recent. Authorization: For a team-scoped room (teamId present), requires an actual CommunityMember record — seated team membership alone is not enough. Admins bypass. teamId-nil (public/free) communities are unaffected. See Communities § Room Access Boundary.
Response
Returns [CommunityPost!]
Example
Query
query communityFeed(
$communityId: ID!,
$limit: Int,
$offset: Int
) {
communityFeed(
communityId: $communityId,
limit: $limit,
offset: $offset
) {
comments {
...PostCommentFragment
}
communityId
content
goalId
goalName
id
likes
timestamp
type
userId
userName
userPhoto
}
}
Variables
{
"communityId": "4",
"limit": 123,
"offset": 123
}
Response
{
"data": {
"communityFeed": [
{
"comments": [PostComment],
"communityId": "4",
"content": "abc123",
"goalId": "4",
"goalName": "xyz789",
"id": "4",
"likes": 987,
"timestamp": "abc123",
"type": "xyz789",
"userId": "4",
"userName": "xyz789",
"userPhoto": "xyz789"
}
]
}
}
communityGoals
Description
Returns paginated goals shared into a community. Authorization: For a team-scoped room (teamId present), requires an actual CommunityMember record — seated team membership alone is not enough. Admins bypass. teamId-nil (public/free) communities are unaffected. See Communities § Room Access Boundary.
Response
Returns [Goal!]
Example
Query
query communityGoals(
$communityId: ID!,
$limit: Int,
$offset: Int
) {
communityGoals(
communityId: $communityId,
limit: $limit,
offset: $offset
) {
allEvents {
...GoalEventFragment
}
appLink
averageCheckInTime
category {
...GoalCategoryFragment
}
checkedInToday
collectiveGoalContribution {
...GoalCollectiveContributionFragment
}
comments {
...GoalEventCommentFragment
}
completed
completedAtTime
completionRate
completionReflection
content
createdAtTime
currentAmount
dayOfWeekDistribution
daysToUpdate
demo
dueToday
durationMinutes
encouragements {
...GoalEventEncouragementFragment
}
events {
...GoalEventFragment
}
followersCount
fromTemplate {
...GoalTemplateFragment
}
fromTemplateName
habitCompletions {
...HabitCompletionFragment
}
habitStreak
identityPrompt
imageUrl
kind {
...GoalTypeFragment
}
lastCheckedInDate
lifeArea
longestHabitStreak
milestones {
...GoalFragment
}
name
nonAllyFollowersCount
parentGoalId
pastAttemptContext
position
preBreakHabitStreak
private
publicId
quickUpdatePrompts
recurrenceDays
recurrenceInterval
recurrenceType
sharedWithPartner
status
streakFreezesAvailable
streakFreezesUsed
streakRepairEligibleUntil
streakRepairedCount
targetAmount
targetDateTime
totalCheckIns
unit
updatedAtTime
user {
...UserFragment
}
visibility
}
}
Variables
{"communityId": 4, "limit": 987, "offset": 987}
Response
{
"data": {
"communityGoals": [
{
"allEvents": [GoalEvent],
"appLink": "xyz789",
"averageCheckInTime": 987.65,
"category": GoalCategory,
"checkedInToday": false,
"collectiveGoalContribution": GoalCollectiveContribution,
"comments": [GoalEventComment],
"completed": false,
"completedAtTime": "abc123",
"completionRate": 123.45,
"completionReflection": "abc123",
"content": "abc123",
"createdAtTime": "abc123",
"currentAmount": 987.65,
"dayOfWeekDistribution": [123],
"daysToUpdate": 123,
"demo": true,
"dueToday": true,
"durationMinutes": 987,
"encouragements": [GoalEventEncouragement],
"events": [GoalEvent],
"followersCount": 987,
"fromTemplate": GoalTemplate,
"fromTemplateName": "abc123",
"habitCompletions": [HabitCompletion],
"habitStreak": 123,
"identityPrompt": "abc123",
"imageUrl": "xyz789",
"kind": GoalType,
"lastCheckedInDate": "xyz789",
"lifeArea": "abc123",
"longestHabitStreak": 123,
"milestones": [Goal],
"name": "abc123",
"nonAllyFollowersCount": 987,
"parentGoalId": "xyz789",
"pastAttemptContext": "xyz789",
"position": 987,
"preBreakHabitStreak": 123,
"private": true,
"publicId": 4,
"quickUpdatePrompts": ["xyz789"],
"recurrenceDays": ["abc123"],
"recurrenceInterval": 987,
"recurrenceType": "xyz789",
"sharedWithPartner": true,
"status": "completed",
"streakFreezesAvailable": 987,
"streakFreezesUsed": 987,
"streakRepairEligibleUntil": "abc123",
"streakRepairedCount": 987,
"targetAmount": 123.45,
"targetDateTime": "xyz789",
"totalCheckIns": 123,
"unit": "abc123",
"updatedAtTime": "abc123",
"user": User,
"visibility": "ALLIES"
}
]
}
}
communityInsights
Description
Returns community engagement insights and recommendations for a user.
Response
Returns a CommunityInsights
Arguments
| Name | Description |
|---|---|
userId - ID!
|
public_id of the user to generate insights for. |
Example
Query
query communityInsights($userId: ID!) {
communityInsights(userId: $userId) {
achievementsUnlocked
communitiesJoined
hasGoalSignal
partnersCount
postsThisWeek
suggestedCommunities {
...SuggestedCommunityFragment
}
suggestedCount
totalEngagement
trendingCommunities {
...TrendingCommunityFragment
}
upcomingEvents {
...CommunityEventFragment
}
yourActivity {
...UserActivityFragment
}
}
}
Variables
{"userId": 4}
Response
{
"data": {
"communityInsights": {
"achievementsUnlocked": 123,
"communitiesJoined": 123,
"hasGoalSignal": true,
"partnersCount": 987,
"postsThisWeek": 123,
"suggestedCommunities": [SuggestedCommunity],
"suggestedCount": 123,
"totalEngagement": 987,
"trendingCommunities": [TrendingCommunity],
"upcomingEvents": [CommunityEvent],
"yourActivity": [UserActivity]
}
}
}
communityMemberCheck
Description
Checks whether a given user is a member of a community.
Response
Returns a Result
Example
Query
query communityMemberCheck(
$cid: ID!,
$id: ID
) {
communityMemberCheck(
cid: $cid,
id: $id
) {
success
}
}
Variables
{"cid": "4", "id": 4}
Response
{"data": {"communityMemberCheck": {"success": true}}}
communityMembers
Description
Returns paginated members of a community. Authorization: For a team-scoped room (teamId present), requires an actual CommunityMember record — seated team membership alone is not enough. Admins bypass. teamId-nil (public/free) communities are unaffected. See Communities § Room Access Boundary.
Response
Returns [CommunityMember!]
Example
Query
query communityMembers(
$communityId: ID!,
$limit: Int,
$offset: Int
) {
communityMembers(
communityId: $communityId,
limit: $limit,
offset: $offset
) {
createdAtTime
goalsCompleted
helpfulCount
id
joinedDate
points
postsCount
rank
role
updatedAtTime
user {
...UserFragment
}
userPublicId
}
}
Variables
{
"communityId": "4",
"limit": 987,
"offset": 987
}
Response
{
"data": {
"communityMembers": [
{
"createdAtTime": "xyz789",
"goalsCompleted": 123,
"helpfulCount": 123,
"id": 4,
"joinedDate": "abc123",
"points": 987,
"postsCount": 123,
"rank": 987,
"role": "abc123",
"updatedAtTime": "abc123",
"user": User,
"userPublicId": "xyz789"
}
]
}
}
communitySuggestions
Description
Returns communities suggested for a user based on their goals and interests.
Response
Returns [CommunitySuggestion!]
Arguments
| Name | Description |
|---|---|
userId - ID
|
public_id of the user to generate suggestions for. Defaults to the current user. |
Example
Query
query communitySuggestions($userId: ID) {
communitySuggestions(userId: $userId) {
content
goalCategory {
...GoalCategoryFragment
}
goalKind {
...GoalTypeFragment
}
id
}
}
Variables
{"userId": "4"}
Response
{
"data": {
"communitySuggestions": [
{
"content": "xyz789",
"goalCategory": GoalCategory,
"goalKind": GoalType,
"id": 4
}
]
}
}
connectedApps
Description
Returns the current user's Connected Apps state: available providers plus their own connections and mappings. Requires authentication.
Response
Returns a ConnectedApps!
Example
Query
query connectedApps {
connectedApps {
connections {
...IntegrationConnectionFragment
}
mappings {
...HabitIntegrationMappingFragment
}
providers {
...IntegrationProviderFragment
}
}
}
Response
{
"data": {
"connectedApps": {
"connections": [IntegrationConnection],
"mappings": [HabitIntegrationMapping],
"providers": [IntegrationProvider]
}
}
}
contentReports
Description
Admin only. Pending user-submitted content reports, newest first.
Response
Returns [ContentReport!]!
Example
Query
query contentReports {
contentReports {
contentPreview
createdAt
details
id
reason
reportableType
reporterName
status
}
}
Response
{
"data": {
"contentReports": [
{
"contentPreview": "abc123",
"createdAt": "abc123",
"details": "abc123",
"id": "abc123",
"reason": "xyz789",
"reportableType": "xyz789",
"reporterName": "abc123",
"status": "xyz789"
}
]
}
}
criticalPathReminderPreferences
Description
Returns the daily reminder preferences for the authenticated user.
Response
Returns a CriticalPathReminderPreferences!
Example
Query
query criticalPathReminderPreferences {
criticalPathReminderPreferences {
enabled
timeOfDay
timezone
timezoneNeedsConfirmation
}
}
Response
{
"data": {
"criticalPathReminderPreferences": {
"enabled": false,
"timeOfDay": "xyz789",
"timezone": "xyz789",
"timezoneNeedsConfirmation": true
}
}
}
criticalPathStimXpStatus
Description
Returns the authenticated user's Stim XP totals, streak, theme, and theme catalog.
Response
Returns a StimXpStatus!
Example
Query
query criticalPathStimXpStatus {
criticalPathStimXpStatus {
activeTheme
currentStimStreak
longestStimStreak
themesCatalog {
...CriticalPathThemeFragment
}
totalStimXp
unlockedThemes
}
}
Response
{
"data": {
"criticalPathStimXpStatus": {
"activeTheme": "xyz789",
"currentStimStreak": 123,
"longestStimStreak": 123,
"themesCatalog": [CriticalPathTheme],
"totalStimXp": 987,
"unlockedThemes": ["abc123"]
}
}
}
criticalPathToday
Description
Returns today's Critical Path puzzle status for the authenticated user.
Response
Returns a CriticalPathPlayStatus!
Example
Query
query criticalPathToday {
criticalPathToday {
completed
elapsedSeconds
percentile
puzzleDate
puzzleSeed
typicalSeconds
}
}
Response
{
"data": {
"criticalPathToday": {
"completed": false,
"elapsedSeconds": 987,
"percentile": 123,
"puzzleDate": ISO8601Date,
"puzzleSeed": 987,
"typicalSeconds": 987
}
}
}
curatableCommunities
Description
Returns discoverable communities with their editorial fields, ordered by editorial_slot, editorial_position, then name. Admin only.
Response
Returns [Community!]
Example
Query
query curatableCommunities {
curatableCommunities {
activeChallenge {
...CommunityChallengeFragment
}
activeMembers
archiveDaysLeft
archivedAt
badges {
...CommunityBadgesFragment
}
category
checkInsPerWeek
coverImage
createdAt
createdAtTime
demo
description
editorialPosition
editorialSlot
feedItems {
...CommunityFeedItemFragment
}
goalCategory {
...GoalCategoryFragment
}
goals {
...GoalFragment
}
growthRate
guidelines
healthScore
icon
id
imageUrl
isDefault
isDefaultForTeam
isFeatured
isFounding
isGated
isMember
isVerified
joinPolicy
leadMembershipId
leadName
memberCount
members {
...CommunityMemberFragment
}
membersToDiscoverable
name
pastChallenges {
...CommunityChallengeFragment
}
privacy
private
publicId
reason {
...CommunityReasonFragment
}
teamId
teamName
totalGoals
upcomingChallenges {
...CommunityChallengeFragment
}
updatedAtTime
userProgressPercent
}
}
Response
{
"data": {
"curatableCommunities": [
{
"activeChallenge": CommunityChallenge,
"activeMembers": 987,
"archiveDaysLeft": 123,
"archivedAt": ISO8601DateTime,
"badges": CommunityBadges,
"category": "abc123",
"checkInsPerWeek": 987,
"coverImage": "xyz789",
"createdAt": ISO8601DateTime,
"createdAtTime": "abc123",
"demo": false,
"description": "xyz789",
"editorialPosition": 123,
"editorialSlot": "xyz789",
"feedItems": [CommunityFeedItem],
"goalCategory": GoalCategory,
"goals": [Goal],
"growthRate": 987.65,
"guidelines": "xyz789",
"healthScore": 123,
"icon": "abc123",
"id": 4,
"imageUrl": "abc123",
"isDefault": true,
"isDefaultForTeam": false,
"isFeatured": true,
"isFounding": false,
"isGated": false,
"isMember": false,
"isVerified": true,
"joinPolicy": "abc123",
"leadMembershipId": 4,
"leadName": "abc123",
"memberCount": 123,
"members": [CommunityMember],
"membersToDiscoverable": 123,
"name": "abc123",
"pastChallenges": [CommunityChallenge],
"privacy": "abc123",
"private": false,
"publicId": 4,
"reason": CommunityReason,
"teamId": 4,
"teamName": "xyz789",
"totalGoals": 123,
"upcomingChallenges": [CommunityChallenge],
"updatedAtTime": "abc123",
"userProgressPercent": 123.45
}
]
}
}
dataImportStatus
Description
Reads commit progress/result for a DataImport owned by the authenticated user.
Response
Returns a DataImport
Arguments
| Name | Description |
|---|---|
id - ID!
|
public_id of the DataImport to read. |
Example
Query
query dataImportStatus($id: ID!) {
dataImportStatus(id: $id) {
collisions {
...DataImportCollisionFragment
}
committedAt
completionCount
createdAt
createdCount
currentStep
currentStreak
failedCount
goalCount
id
rowErrors {
...DataImportRowIssueFragment
}
rowWarnings {
...DataImportRowIssueFragment
}
skippedCount
source
status
totalSteps
}
}
Variables
{"id": "4"}
Response
{
"data": {
"dataImportStatus": {
"collisions": [DataImportCollision],
"committedAt": ISO8601DateTime,
"completionCount": 987,
"createdAt": ISO8601DateTime,
"createdCount": 987,
"currentStep": 123,
"currentStreak": 987,
"failedCount": 987,
"goalCount": 987,
"id": 4,
"rowErrors": [DataImportRowIssue],
"rowWarnings": [DataImportRowIssue],
"skippedCount": 987,
"source": "abc123",
"status": "xyz789",
"totalSteps": 987
}
}
}
demoDataRunStatus
Description
Polls Rails.cache for the progress of an in-flight demo-data job.
Response
Returns a DemoDataRunStatus!
Arguments
| Name | Description |
|---|---|
jobId - ID!
|
Example
Query
query demoDataRunStatus($jobId: ID!) {
demoDataRunStatus(jobId: $jobId) {
currentStep
error
finishedAt
scope
startedAt
status
totalSteps
}
}
Variables
{"jobId": 4}
Response
{
"data": {
"demoDataRunStatus": {
"currentStep": 123,
"error": "xyz789",
"finishedAt": ISO8601DateTime,
"scope": "abc123",
"startedAt": ISO8601DateTime,
"status": "xyz789",
"totalSteps": 987
}
}
}
demoScopePreview
Description
Live counts of demo-tagged records across all 12 demo-bearing tables.
Response
Returns a DemoScopePreview!
Example
Query
query demoScopePreview {
demoScopePreview {
aiArtifacts
aiEmployees
aiRuns
communities
feedItems
feedbackComments
feedbackPosts
feedbackVotes
goalEvents
goals
totalRecords
userAllies
users
}
}
Response
{
"data": {
"demoScopePreview": {
"aiArtifacts": 987,
"aiEmployees": 123,
"aiRuns": 123,
"communities": 123,
"feedItems": 987,
"feedbackComments": 987,
"feedbackPosts": 123,
"feedbackVotes": 123,
"goalEvents": 123,
"goals": 987,
"totalRecords": 987,
"userAllies": 123,
"users": 123
}
}
}
editorialCommunities
Description
Returns up to 8 communities admin-assigned to the given editorial slot, ordered by editorial_position then editorial_updated_at. Unknown slots return [].
Response
Returns [Community!]
Arguments
| Name | Description |
|---|---|
slot - String!
|
Editorial slot to fetch (e.g. "active_now", "just_started", "most_members"). |
Example
Query
query editorialCommunities($slot: String!) {
editorialCommunities(slot: $slot) {
activeChallenge {
...CommunityChallengeFragment
}
activeMembers
archiveDaysLeft
archivedAt
badges {
...CommunityBadgesFragment
}
category
checkInsPerWeek
coverImage
createdAt
createdAtTime
demo
description
editorialPosition
editorialSlot
feedItems {
...CommunityFeedItemFragment
}
goalCategory {
...GoalCategoryFragment
}
goals {
...GoalFragment
}
growthRate
guidelines
healthScore
icon
id
imageUrl
isDefault
isDefaultForTeam
isFeatured
isFounding
isGated
isMember
isVerified
joinPolicy
leadMembershipId
leadName
memberCount
members {
...CommunityMemberFragment
}
membersToDiscoverable
name
pastChallenges {
...CommunityChallengeFragment
}
privacy
private
publicId
reason {
...CommunityReasonFragment
}
teamId
teamName
totalGoals
upcomingChallenges {
...CommunityChallengeFragment
}
updatedAtTime
userProgressPercent
}
}
Variables
{"slot": "xyz789"}
Response
{
"data": {
"editorialCommunities": [
{
"activeChallenge": CommunityChallenge,
"activeMembers": 123,
"archiveDaysLeft": 987,
"archivedAt": ISO8601DateTime,
"badges": CommunityBadges,
"category": "xyz789",
"checkInsPerWeek": 987,
"coverImage": "xyz789",
"createdAt": ISO8601DateTime,
"createdAtTime": "abc123",
"demo": false,
"description": "xyz789",
"editorialPosition": 987,
"editorialSlot": "xyz789",
"feedItems": [CommunityFeedItem],
"goalCategory": GoalCategory,
"goals": [Goal],
"growthRate": 987.65,
"guidelines": "xyz789",
"healthScore": 987,
"icon": "abc123",
"id": 4,
"imageUrl": "xyz789",
"isDefault": false,
"isDefaultForTeam": true,
"isFeatured": false,
"isFounding": false,
"isGated": true,
"isMember": true,
"isVerified": true,
"joinPolicy": "xyz789",
"leadMembershipId": 4,
"leadName": "abc123",
"memberCount": 987,
"members": [CommunityMember],
"membersToDiscoverable": 123,
"name": "abc123",
"pastChallenges": [CommunityChallenge],
"privacy": "abc123",
"private": false,
"publicId": "4",
"reason": CommunityReason,
"teamId": 4,
"teamName": "abc123",
"totalGoals": 987,
"upcomingChallenges": [CommunityChallenge],
"updatedAtTime": "abc123",
"userProgressPercent": 987.65
}
]
}
}
enneagramAssessment
Description
Returns the latest non-deleted Enneagram assessment for a user. Auth: own user or admin.
Response
Returns an EnneagramAssessment
Arguments
| Name | Description |
|---|---|
userId - ID!
|
public_id of the user whose latest assessment to retrieve. |
Example
Query
query enneagramAssessment($userId: ID!) {
enneagramAssessment(userId: $userId) {
completedAt
dominantType
id
scores
tritype
wing
}
}
Variables
{"userId": 4}
Response
{
"data": {
"enneagramAssessment": {
"completedAt": ISO8601DateTime,
"dominantType": 987,
"id": 4,
"scores": {},
"tritype": "abc123",
"wing": 987
}
}
}
enneagramAssessmentHistory
Description
Returns all Enneagram assessments for a user, newest first. Auth: own user or admin.
Response
Returns [EnneagramAssessment!]!
Arguments
| Name | Description |
|---|---|
userId - ID!
|
public_id of the user whose assessment history to retrieve. |
Example
Query
query enneagramAssessmentHistory($userId: ID!) {
enneagramAssessmentHistory(userId: $userId) {
completedAt
dominantType
id
scores
tritype
wing
}
}
Variables
{"userId": "4"}
Response
{
"data": {
"enneagramAssessmentHistory": [
{
"completedAt": ISO8601DateTime,
"dominantType": 987,
"id": 4,
"scores": {},
"tritype": "xyz789",
"wing": 987
}
]
}
}
feedbackPost
Description
Returns a single feedback post by public ID.
Response
Returns a FeedbackPost
Arguments
| Name | Description |
|---|---|
id - ID!
|
Public ID of the feedback post. |
Example
Query
query feedbackPost($id: ID!) {
feedbackPost(id: $id) {
category
commentCount
comments {
...FeedbackCommentFragment
}
createdAt
description
id
shippedAt
status
tags {
...FeedbackTagFragment
}
title
user {
...UserFragment
}
voteCount
votedByCurrentUser
}
}
Variables
{"id": "4"}
Response
{
"data": {
"feedbackPost": {
"category": "abc123",
"commentCount": 123,
"comments": [FeedbackComment],
"createdAt": ISO8601DateTime,
"description": "xyz789",
"id": 4,
"shippedAt": ISO8601DateTime,
"status": "abc123",
"tags": [FeedbackTag],
"title": "abc123",
"user": User,
"voteCount": 987,
"votedByCurrentUser": true
}
}
}
feedbackPosts
Description
Returns feedback posts, filterable by category, status, and search.
Response
Returns [FeedbackPost!]
Arguments
| Name | Description |
|---|---|
category - String
|
Filter by category (feature, improvement, bug, other). |
filter - String
|
Filter view: my_posts (current user posts), my_votes (posts user voted on). |
search - String
|
Search titles and descriptions (case-insensitive). |
sort - String
|
Sort order: votes (default), newest. |
status - String
|
Filter by status (open, planned, in_progress, completed, declined). |
tags - [String!]
|
Filter by tag slugs (any-of). Posts carrying any of the given tags are returned. |
Example
Query
query feedbackPosts(
$category: String,
$filter: String,
$search: String,
$sort: String,
$status: String,
$tags: [String!]
) {
feedbackPosts(
category: $category,
filter: $filter,
search: $search,
sort: $sort,
status: $status,
tags: $tags
) {
category
commentCount
comments {
...FeedbackCommentFragment
}
createdAt
description
id
shippedAt
status
tags {
...FeedbackTagFragment
}
title
user {
...UserFragment
}
voteCount
votedByCurrentUser
}
}
Variables
{
"category": "xyz789",
"filter": "xyz789",
"search": "xyz789",
"sort": "abc123",
"status": "abc123",
"tags": ["abc123"]
}
Response
{
"data": {
"feedbackPosts": [
{
"category": "xyz789",
"commentCount": 987,
"comments": [FeedbackComment],
"createdAt": ISO8601DateTime,
"description": "xyz789",
"id": "4",
"shippedAt": ISO8601DateTime,
"status": "xyz789",
"tags": [FeedbackTag],
"title": "xyz789",
"user": User,
"voteCount": 987,
"votedByCurrentUser": true
}
]
}
}
feedbackStats
Description
Returns feedback board statistics for admin dashboard. Admin only.
Response
Returns a FeedbackStats
Example
Query
query feedbackStats {
feedbackStats {
categoryBreakdown {
...FeedbackCategoryBreakdownFragment
}
completedPosts
declinedPosts
inProgressPosts
openPosts
plannedPosts
postsThisWeek
topPosts {
...FeedbackPostFragment
}
totalComments
totalPosts
totalVotes
}
}
Response
{
"data": {
"feedbackStats": {
"categoryBreakdown": [FeedbackCategoryBreakdown],
"completedPosts": 123,
"declinedPosts": 987,
"inProgressPosts": 123,
"openPosts": 123,
"plannedPosts": 123,
"postsThisWeek": 987,
"topPosts": [FeedbackPost],
"totalComments": 987,
"totalPosts": 987,
"totalVotes": 987
}
}
}
feedbackTags
Description
Returns feedback tags, non-archived by default. Admin only.
Response
Returns [FeedbackTag!]
Arguments
| Name | Description |
|---|---|
includeArchived - Boolean
|
Include archived tags (for the admin UI). Default = false |
Example
Query
query feedbackTags($includeArchived: Boolean) {
feedbackTags(includeArchived: $includeArchived) {
archived
createdAt
description
id
name
position
postsCount
slug
}
}
Variables
{"includeArchived": false}
Response
{
"data": {
"feedbackTags": [
{
"archived": false,
"createdAt": ISO8601DateTime,
"description": "xyz789",
"id": "4",
"name": "xyz789",
"position": 123,
"postsCount": 123,
"slug": "xyz789"
}
]
}
}
feedbackWeeklySummary
Description
Coach-analyzed themed summary of the past week of feedback. Admin only. Null when feedback_ai_summary_enabled is off or there is nothing to summarize.
Response
Returns a FeedbackWeeklySummary
Example
Query
query feedbackWeeklySummary {
feedbackWeeklySummary {
emergingRequests
generatedAt
themes {
...FeedbackThemeFragment
}
}
}
Response
{
"data": {
"feedbackWeeklySummary": {
"emergingRequests": ["xyz789"],
"generatedAt": ISO8601DateTime,
"themes": [FeedbackTheme]
}
}
}
findUserForInvite
Description
Phase 75. Looks up a user by username or email for ally invite. Exactly one arg required. Auth-required. Rate-limited (10/min). Returns nil for not-found or soft-deleted users (no enumeration).
Response
Returns a User
Example
Query
query findUserForInvite(
$email: String,
$username: String
) {
findUserForInvite(
email: $email,
username: $username
) {
achievementStats {
...AchievementStatsFragment
}
actions {
...UserActionFragment
}
admin
adminRoles
coachingPreferences {
...CoachingPreferencesFragment
}
colorTheme
completedCommunityChallenges {
...ChallengeParticipantFragment
}
completedSeasonalEvents {
...SeasonalEventParticipantFragment
}
createdAtTime
currentInsights {
...InsightPackFragment
}
dashboardPreferences {
...DashboardPreferencesFragment
}
daysSinceLastActive
demo
details {
...UserDetailFragment
}
email
emailVerified
featureTourStatus
feedItems {
...UserFeedItemFragment
}
firstName
goItAlone
goalMotivationProfile {
...GoalMotivationProfileFragment
}
goals {
...GoalFragment
}
graceDays
hasAlly
hasCreatedFromTemplate
hasDigestEnabled
isSupporter
lastDigestSentAt
lastName
latestEnneagramAssessment {
...EnneagramAssessmentFragment
}
level
longestStreak
moodGoalInsight {
...InsightPackFragment
}
nextLevelThreshold
nextOnTheShelfBadge {
...NextBadgeFragment
}
notifications {
...UserNotificationFragment
}
onboardingStatus {
...OnboardingStatusFragment
}
paceSuggestion {
...PaceSuggestionFragment
}
photo {
...UserPhotoFragment
}
privateMode
progressToNextLevel
publicId
recentlyUnlockedBadges {
...RecentlyUnlockedBadgeFragment
}
requiredCheckinsCompleteToday
showcasedAchievements
signInDates
signupAgeDays
stats {
...UserStatsFragment
}
streak
streakRepairOffer {
...StreakRepairOfferFragment
}
supporterTier
supporterUntil
timeToFirstGoalSeconds
todaysMood
unlockedAchievementKeys
updatedAtTime
username
welcomeBackOffer {
...WelcomeBackOfferFragment
}
xp
}
}
Variables
{
"email": "xyz789",
"username": "abc123"
}
Response
{
"data": {
"findUserForInvite": {
"achievementStats": AchievementStats,
"actions": [UserAction],
"admin": true,
"adminRoles": ["xyz789"],
"coachingPreferences": CoachingPreferences,
"colorTheme": "abc123",
"completedCommunityChallenges": [
ChallengeParticipant
],
"completedSeasonalEvents": [
SeasonalEventParticipant
],
"createdAtTime": "xyz789",
"currentInsights": [InsightPack],
"dashboardPreferences": DashboardPreferences,
"daysSinceLastActive": 987,
"demo": true,
"details": UserDetail,
"email": "abc123",
"emailVerified": false,
"featureTourStatus": {},
"feedItems": [UserFeedItem],
"firstName": "xyz789",
"goItAlone": true,
"goalMotivationProfile": GoalMotivationProfile,
"goals": [Goal],
"graceDays": ["xyz789"],
"hasAlly": false,
"hasCreatedFromTemplate": false,
"hasDigestEnabled": true,
"isSupporter": false,
"lastDigestSentAt": "xyz789",
"lastName": "abc123",
"latestEnneagramAssessment": EnneagramAssessment,
"level": 987,
"longestStreak": 987,
"moodGoalInsight": InsightPack,
"nextLevelThreshold": 123,
"nextOnTheShelfBadge": NextBadge,
"notifications": [UserNotification],
"onboardingStatus": OnboardingStatus,
"paceSuggestion": PaceSuggestion,
"photo": UserPhoto,
"privateMode": false,
"progressToNextLevel": 123.45,
"publicId": "4",
"recentlyUnlockedBadges": [RecentlyUnlockedBadge],
"requiredCheckinsCompleteToday": true,
"showcasedAchievements": ["xyz789"],
"signInDates": ["abc123"],
"signupAgeDays": 123,
"stats": UserStats,
"streak": 123,
"streakRepairOffer": StreakRepairOffer,
"supporterTier": "xyz789",
"supporterUntil": ISO8601DateTime,
"timeToFirstGoalSeconds": 123,
"todaysMood": "abc123",
"unlockedAchievementKeys": ["abc123"],
"updatedAtTime": "abc123",
"username": "xyz789",
"welcomeBackOffer": WelcomeBackOffer,
"xp": 987
}
}
}
formingCommunities
Description
Returns up to 12 newly forming communities (0-4 members), newest first, excluding communities the caller admins. Requires authentication.
Response
Returns [Community!]
Example
Query
query formingCommunities {
formingCommunities {
activeChallenge {
...CommunityChallengeFragment
}
activeMembers
archiveDaysLeft
archivedAt
badges {
...CommunityBadgesFragment
}
category
checkInsPerWeek
coverImage
createdAt
createdAtTime
demo
description
editorialPosition
editorialSlot
feedItems {
...CommunityFeedItemFragment
}
goalCategory {
...GoalCategoryFragment
}
goals {
...GoalFragment
}
growthRate
guidelines
healthScore
icon
id
imageUrl
isDefault
isDefaultForTeam
isFeatured
isFounding
isGated
isMember
isVerified
joinPolicy
leadMembershipId
leadName
memberCount
members {
...CommunityMemberFragment
}
membersToDiscoverable
name
pastChallenges {
...CommunityChallengeFragment
}
privacy
private
publicId
reason {
...CommunityReasonFragment
}
teamId
teamName
totalGoals
upcomingChallenges {
...CommunityChallengeFragment
}
updatedAtTime
userProgressPercent
}
}
Response
{
"data": {
"formingCommunities": [
{
"activeChallenge": CommunityChallenge,
"activeMembers": 987,
"archiveDaysLeft": 123,
"archivedAt": ISO8601DateTime,
"badges": CommunityBadges,
"category": "xyz789",
"checkInsPerWeek": 123,
"coverImage": "xyz789",
"createdAt": ISO8601DateTime,
"createdAtTime": "xyz789",
"demo": true,
"description": "abc123",
"editorialPosition": 987,
"editorialSlot": "abc123",
"feedItems": [CommunityFeedItem],
"goalCategory": GoalCategory,
"goals": [Goal],
"growthRate": 123.45,
"guidelines": "xyz789",
"healthScore": 987,
"icon": "abc123",
"id": 4,
"imageUrl": "xyz789",
"isDefault": false,
"isDefaultForTeam": false,
"isFeatured": false,
"isFounding": false,
"isGated": true,
"isMember": true,
"isVerified": true,
"joinPolicy": "xyz789",
"leadMembershipId": "4",
"leadName": "xyz789",
"memberCount": 123,
"members": [CommunityMember],
"membersToDiscoverable": 987,
"name": "xyz789",
"pastChallenges": [CommunityChallenge],
"privacy": "xyz789",
"private": false,
"publicId": "4",
"reason": CommunityReason,
"teamId": 4,
"teamName": "xyz789",
"totalGoals": 987,
"upcomingChallenges": [CommunityChallenge],
"updatedAtTime": "xyz789",
"userProgressPercent": 123.45
}
]
}
}
funnelStats
Description
Onboarding funnel aggregates and TTFG percentiles. Admin only.
Response
Returns an OnboardingFunnel
Example
Query
query funnelStats(
$periodSeconds: Int,
$variantId: String
) {
funnelStats(
periodSeconds: $periodSeconds,
variantId: $variantId
) {
firstGoal
signedIn
ttfgP50Seconds
ttfgP90Seconds
variantId
wizardCompleted
wizardStarted
}
}
Variables
{
"periodSeconds": 123,
"variantId": "abc123"
}
Response
{
"data": {
"funnelStats": {
"firstGoal": 123,
"signedIn": 123,
"ttfgP50Seconds": 123,
"ttfgP90Seconds": 987,
"variantId": "xyz789",
"wizardCompleted": 123,
"wizardStarted": 123
}
}
}
gdprRequest
Description
Fetch a GDPR request by public_id. super_admin or support only.
Response
Returns a GdprRequest
Arguments
| Name | Description |
|---|---|
publicId - String!
|
public_id of the GDPR request. |
Example
Query
query gdprRequest($publicId: String!) {
gdprRequest(publicId: $publicId) {
cascadePreview {
...CascadePreviewFragment
}
dueBy
exportExpiresAt
exportFileUrl
fulfilledAt
fulfilledBy {
...UserFragment
}
notes
publicId
receivedAt
requestType
requestorEmail
status
}
}
Variables
{"publicId": "xyz789"}
Response
{
"data": {
"gdprRequest": {
"cascadePreview": CascadePreview,
"dueBy": ISO8601DateTime,
"exportExpiresAt": ISO8601DateTime,
"exportFileUrl": "abc123",
"fulfilledAt": ISO8601DateTime,
"fulfilledBy": User,
"notes": "abc123",
"publicId": "xyz789",
"receivedAt": ISO8601DateTime,
"requestType": "abc123",
"requestorEmail": "abc123",
"status": "xyz789"
}
}
}
gdprRequests
Description
GDPR request queue. super_admin or support only.
Response
Returns a GdprRequestConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
requestType - String
|
Filter by request type. |
status - String
|
Filter by status. |
Example
Query
query gdprRequests(
$after: String,
$before: String,
$first: Int,
$last: Int,
$requestType: String,
$status: String
) {
gdprRequests(
after: $after,
before: $before,
first: $first,
last: $last,
requestType: $requestType,
status: $status
) {
edges {
...GdprRequestEdgeFragment
}
nodes {
...GdprRequestFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "xyz789",
"before": "abc123",
"first": 123,
"last": 987,
"requestType": "abc123",
"status": "xyz789"
}
Response
{
"data": {
"gdprRequests": {
"edges": [GdprRequestEdge],
"nodes": [GdprRequest],
"pageInfo": PageInfo
}
}
}
goal
Description
Fetches a private goal owned by the authenticated user.
Example
Query
query goal($id: ID!) {
goal(id: $id) {
allEvents {
...GoalEventFragment
}
appLink
averageCheckInTime
category {
...GoalCategoryFragment
}
checkedInToday
collectiveGoalContribution {
...GoalCollectiveContributionFragment
}
comments {
...GoalEventCommentFragment
}
completed
completedAtTime
completionRate
completionReflection
content
createdAtTime
currentAmount
dayOfWeekDistribution
daysToUpdate
demo
dueToday
durationMinutes
encouragements {
...GoalEventEncouragementFragment
}
events {
...GoalEventFragment
}
followersCount
fromTemplate {
...GoalTemplateFragment
}
fromTemplateName
habitCompletions {
...HabitCompletionFragment
}
habitStreak
identityPrompt
imageUrl
kind {
...GoalTypeFragment
}
lastCheckedInDate
lifeArea
longestHabitStreak
milestones {
...GoalFragment
}
name
nonAllyFollowersCount
parentGoalId
pastAttemptContext
position
preBreakHabitStreak
private
publicId
quickUpdatePrompts
recurrenceDays
recurrenceInterval
recurrenceType
sharedWithPartner
status
streakFreezesAvailable
streakFreezesUsed
streakRepairEligibleUntil
streakRepairedCount
targetAmount
targetDateTime
totalCheckIns
unit
updatedAtTime
user {
...UserFragment
}
visibility
}
}
Variables
{"id": 4}
Response
{
"data": {
"goal": {
"allEvents": [GoalEvent],
"appLink": "xyz789",
"averageCheckInTime": 987.65,
"category": GoalCategory,
"checkedInToday": true,
"collectiveGoalContribution": GoalCollectiveContribution,
"comments": [GoalEventComment],
"completed": true,
"completedAtTime": "xyz789",
"completionRate": 987.65,
"completionReflection": "xyz789",
"content": "abc123",
"createdAtTime": "xyz789",
"currentAmount": 987.65,
"dayOfWeekDistribution": [123],
"daysToUpdate": 123,
"demo": false,
"dueToday": true,
"durationMinutes": 987,
"encouragements": [GoalEventEncouragement],
"events": [GoalEvent],
"followersCount": 123,
"fromTemplate": GoalTemplate,
"fromTemplateName": "abc123",
"habitCompletions": [HabitCompletion],
"habitStreak": 123,
"identityPrompt": "abc123",
"imageUrl": "xyz789",
"kind": GoalType,
"lastCheckedInDate": "abc123",
"lifeArea": "xyz789",
"longestHabitStreak": 123,
"milestones": [Goal],
"name": "abc123",
"nonAllyFollowersCount": 123,
"parentGoalId": "abc123",
"pastAttemptContext": "xyz789",
"position": 123,
"preBreakHabitStreak": 987,
"private": false,
"publicId": 4,
"quickUpdatePrompts": ["abc123"],
"recurrenceDays": ["xyz789"],
"recurrenceInterval": 987,
"recurrenceType": "abc123",
"sharedWithPartner": true,
"status": "completed",
"streakFreezesAvailable": 123,
"streakFreezesUsed": 987,
"streakRepairEligibleUntil": "xyz789",
"streakRepairedCount": 123,
"targetAmount": 987.65,
"targetDateTime": "xyz789",
"totalCheckIns": 123,
"unit": "abc123",
"updatedAtTime": "xyz789",
"user": User,
"visibility": "ALLIES"
}
}
}
goalCategories
Description
Returns all available goal categories (fitness, learning, personal, etc.).
Response
Returns [GoalCategory!]
Example
Query
query goalCategories {
goalCategories {
id
name
}
}
Response
{
"data": {
"goalCategories": [
{
"id": "4",
"name": "abc123"
}
]
}
}
goalEvent
Description
Fetches a single goal progress event by public_id.
Response
Returns a GoalEvent
Arguments
| Name | Description |
|---|---|
id - ID!
|
public_id of the goal event to retrieve. |
Example
Query
query goalEvent($id: ID!) {
goalEvent(id: $id) {
clientTimestampTime
comments {
...GoalEventCommentFragment
}
content
createdAtTime
encouragements {
...GoalEventEncouragementFragment
}
goal {
...GoalFragment
}
id
media {
...GoalMediaFragment
}
milestoneName
mood
publicId
reactions {
...GoalEventReactionFragment
}
source
}
}
Variables
{"id": 4}
Response
{
"data": {
"goalEvent": {
"clientTimestampTime": "xyz789",
"comments": [GoalEventComment],
"content": "abc123",
"createdAtTime": "abc123",
"encouragements": [GoalEventEncouragement],
"goal": Goal,
"id": "4",
"media": GoalMedia,
"milestoneName": "abc123",
"mood": "xyz789",
"publicId": "4",
"reactions": [GoalEventReaction],
"source": "xyz789"
}
}
}
goalKinds
Description
Returns all available goal types/kinds (habit, milestone, quantity, etc.).
Response
Returns [GoalType!]
Example
Query
query goalKinds {
goalKinds {
description
displayNumber
id
name
}
}
Response
{
"data": {
"goalKinds": [
{
"description": "xyz789",
"displayNumber": 987,
"id": 4,
"name": "xyz789"
}
]
}
}
goalProgressData
Description
Returns progress visualization data for a goal.
Response
Returns a GoalProgressData
Example
Query
query goalProgressData(
$id: ID!,
$lookbackDays: Int,
$period: String
) {
goalProgressData(
id: $id,
lookbackDays: $lookbackDays,
period: $period
) {
averagePerWeek
dataPoints {
...ProgressDataPointFragment
}
pace
streakData {
...ProgressDataPointFragment
}
totalEvents
}
}
Variables
{
"id": "4",
"lookbackDays": 123,
"period": "xyz789"
}
Response
{
"data": {
"goalProgressData": {
"averagePerWeek": 987.65,
"dataPoints": [ProgressDataPoint],
"pace": "abc123",
"streakData": [ProgressDataPoint],
"totalEvents": 987
}
}
}
goalSummary
Description
Aggregated KPI counts for the current user's goals.
Response
Returns a GoalSummary!
Example
Query
query goalSummary {
goalSummary {
avgProgress
completedCount
needAttentionCount
totalGoals
}
}
Response
{
"data": {
"goalSummary": {
"avgProgress": 987.65,
"completedCount": 987,
"needAttentionCount": 987,
"totalGoals": 123
}
}
}
goalTemplates
Description
Returns all non-deleted goal templates ordered by (theme, display_order). Auth required.
Response
Returns [GoalTemplate!]!
Example
Query
query goalTemplates {
goalTemplates {
category {
...GoalCategoryFragment
}
description
displayOrder
estimatedDurationDays
imageUrl
milestones {
...GoalTemplateMilestoneFragment
}
name
publicId
theme
}
}
Response
{
"data": {
"goalTemplates": [
{
"category": GoalCategory,
"description": "abc123",
"displayOrder": 123,
"estimatedDurationDays": 123,
"imageUrl": "xyz789",
"milestones": [GoalTemplateMilestone],
"name": "xyz789",
"publicId": 4,
"theme": "xyz789"
}
]
}
}
goals
Description
Lists top-level goals (no parent) for the authenticated user or a specified user (admin only).
Response
Returns [Goal!]
Arguments
| Name | Description |
|---|---|
userId - ID
|
public_id of the user whose goals to retrieve. Omit to use the current user. |
Example
Query
query goals($userId: ID) {
goals(userId: $userId) {
allEvents {
...GoalEventFragment
}
appLink
averageCheckInTime
category {
...GoalCategoryFragment
}
checkedInToday
collectiveGoalContribution {
...GoalCollectiveContributionFragment
}
comments {
...GoalEventCommentFragment
}
completed
completedAtTime
completionRate
completionReflection
content
createdAtTime
currentAmount
dayOfWeekDistribution
daysToUpdate
demo
dueToday
durationMinutes
encouragements {
...GoalEventEncouragementFragment
}
events {
...GoalEventFragment
}
followersCount
fromTemplate {
...GoalTemplateFragment
}
fromTemplateName
habitCompletions {
...HabitCompletionFragment
}
habitStreak
identityPrompt
imageUrl
kind {
...GoalTypeFragment
}
lastCheckedInDate
lifeArea
longestHabitStreak
milestones {
...GoalFragment
}
name
nonAllyFollowersCount
parentGoalId
pastAttemptContext
position
preBreakHabitStreak
private
publicId
quickUpdatePrompts
recurrenceDays
recurrenceInterval
recurrenceType
sharedWithPartner
status
streakFreezesAvailable
streakFreezesUsed
streakRepairEligibleUntil
streakRepairedCount
targetAmount
targetDateTime
totalCheckIns
unit
updatedAtTime
user {
...UserFragment
}
visibility
}
}
Variables
{"userId": "4"}
Response
{
"data": {
"goals": [
{
"allEvents": [GoalEvent],
"appLink": "abc123",
"averageCheckInTime": 987.65,
"category": GoalCategory,
"checkedInToday": false,
"collectiveGoalContribution": GoalCollectiveContribution,
"comments": [GoalEventComment],
"completed": false,
"completedAtTime": "xyz789",
"completionRate": 123.45,
"completionReflection": "xyz789",
"content": "xyz789",
"createdAtTime": "xyz789",
"currentAmount": 123.45,
"dayOfWeekDistribution": [123],
"daysToUpdate": 987,
"demo": true,
"dueToday": true,
"durationMinutes": 123,
"encouragements": [GoalEventEncouragement],
"events": [GoalEvent],
"followersCount": 123,
"fromTemplate": GoalTemplate,
"fromTemplateName": "abc123",
"habitCompletions": [HabitCompletion],
"habitStreak": 123,
"identityPrompt": "xyz789",
"imageUrl": "xyz789",
"kind": GoalType,
"lastCheckedInDate": "abc123",
"lifeArea": "abc123",
"longestHabitStreak": 987,
"milestones": [Goal],
"name": "xyz789",
"nonAllyFollowersCount": 123,
"parentGoalId": "xyz789",
"pastAttemptContext": "abc123",
"position": 123,
"preBreakHabitStreak": 987,
"private": true,
"publicId": 4,
"quickUpdatePrompts": ["abc123"],
"recurrenceDays": ["xyz789"],
"recurrenceInterval": 123,
"recurrenceType": "xyz789",
"sharedWithPartner": true,
"status": "completed",
"streakFreezesAvailable": 123,
"streakFreezesUsed": 123,
"streakRepairEligibleUntil": "abc123",
"streakRepairedCount": 123,
"targetAmount": 123.45,
"targetDateTime": "xyz789",
"totalCheckIns": 987,
"unit": "abc123",
"updatedAtTime": "xyz789",
"user": User,
"visibility": "ALLIES"
}
]
}
}
isFollowingGoal
Description
Checks whether the authenticated user is currently following a goal.
me
Description
Returns the currently authenticated user. Requires authentication.
Response
Returns a User
Example
Query
query me {
me {
achievementStats {
...AchievementStatsFragment
}
actions {
...UserActionFragment
}
admin
adminRoles
coachingPreferences {
...CoachingPreferencesFragment
}
colorTheme
completedCommunityChallenges {
...ChallengeParticipantFragment
}
completedSeasonalEvents {
...SeasonalEventParticipantFragment
}
createdAtTime
currentInsights {
...InsightPackFragment
}
dashboardPreferences {
...DashboardPreferencesFragment
}
daysSinceLastActive
demo
details {
...UserDetailFragment
}
email
emailVerified
featureTourStatus
feedItems {
...UserFeedItemFragment
}
firstName
goItAlone
goalMotivationProfile {
...GoalMotivationProfileFragment
}
goals {
...GoalFragment
}
graceDays
hasAlly
hasCreatedFromTemplate
hasDigestEnabled
isSupporter
lastDigestSentAt
lastName
latestEnneagramAssessment {
...EnneagramAssessmentFragment
}
level
longestStreak
moodGoalInsight {
...InsightPackFragment
}
nextLevelThreshold
nextOnTheShelfBadge {
...NextBadgeFragment
}
notifications {
...UserNotificationFragment
}
onboardingStatus {
...OnboardingStatusFragment
}
paceSuggestion {
...PaceSuggestionFragment
}
photo {
...UserPhotoFragment
}
privateMode
progressToNextLevel
publicId
recentlyUnlockedBadges {
...RecentlyUnlockedBadgeFragment
}
requiredCheckinsCompleteToday
showcasedAchievements
signInDates
signupAgeDays
stats {
...UserStatsFragment
}
streak
streakRepairOffer {
...StreakRepairOfferFragment
}
supporterTier
supporterUntil
timeToFirstGoalSeconds
todaysMood
unlockedAchievementKeys
updatedAtTime
username
welcomeBackOffer {
...WelcomeBackOfferFragment
}
xp
}
}
Response
{
"data": {
"me": {
"achievementStats": AchievementStats,
"actions": [UserAction],
"admin": false,
"adminRoles": ["xyz789"],
"coachingPreferences": CoachingPreferences,
"colorTheme": "xyz789",
"completedCommunityChallenges": [
ChallengeParticipant
],
"completedSeasonalEvents": [
SeasonalEventParticipant
],
"createdAtTime": "xyz789",
"currentInsights": [InsightPack],
"dashboardPreferences": DashboardPreferences,
"daysSinceLastActive": 987,
"demo": true,
"details": UserDetail,
"email": "xyz789",
"emailVerified": true,
"featureTourStatus": {},
"feedItems": [UserFeedItem],
"firstName": "xyz789",
"goItAlone": false,
"goalMotivationProfile": GoalMotivationProfile,
"goals": [Goal],
"graceDays": ["abc123"],
"hasAlly": false,
"hasCreatedFromTemplate": true,
"hasDigestEnabled": true,
"isSupporter": true,
"lastDigestSentAt": "xyz789",
"lastName": "xyz789",
"latestEnneagramAssessment": EnneagramAssessment,
"level": 123,
"longestStreak": 123,
"moodGoalInsight": InsightPack,
"nextLevelThreshold": 123,
"nextOnTheShelfBadge": NextBadge,
"notifications": [UserNotification],
"onboardingStatus": OnboardingStatus,
"paceSuggestion": PaceSuggestion,
"photo": UserPhoto,
"privateMode": false,
"progressToNextLevel": 987.65,
"publicId": "4",
"recentlyUnlockedBadges": [RecentlyUnlockedBadge],
"requiredCheckinsCompleteToday": false,
"showcasedAchievements": ["xyz789"],
"signInDates": ["xyz789"],
"signupAgeDays": 123,
"stats": UserStats,
"streak": 123,
"streakRepairOffer": StreakRepairOffer,
"supporterTier": "xyz789",
"supporterUntil": ISO8601DateTime,
"timeToFirstGoalSeconds": 987,
"todaysMood": "xyz789",
"unlockedAchievementKeys": ["xyz789"],
"updatedAtTime": "abc123",
"username": "xyz789",
"welcomeBackOffer": WelcomeBackOffer,
"xp": 987
}
}
}
moderationQueue
Description
Admin only. Pending moderation flags, cursor-paginated.
Response
Returns a ContentFlagConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
ageBucket - String
|
Single-select age bucket: under_1h|under_24h|under_7d|older_than_7d. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
flaggableType - [String!]
|
Filter by polymorphic flaggable class name (e.g. CommunityPost). |
flaggedUserId - String
|
Public_id of the user whose flagged content should be returned. |
last - Int
|
Returns the last n elements from the list. |
severity - [String!]
|
Filter by severity: low|medium|high|critical. Multi-select ORs within; AND with other filters. |
source - [String!]
|
Filter by source: profanity_filter|ai_screen|user_report. |
Example
Query
query moderationQueue(
$after: String,
$ageBucket: String,
$before: String,
$first: Int,
$flaggableType: [String!],
$flaggedUserId: String,
$last: Int,
$severity: [String!],
$source: [String!]
) {
moderationQueue(
after: $after,
ageBucket: $ageBucket,
before: $before,
first: $first,
flaggableType: $flaggableType,
flaggedUserId: $flaggedUserId,
last: $last,
severity: $severity,
source: $source
) {
edges {
...ContentFlagEdgeFragment
}
nodes {
...ContentFlagFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "abc123",
"ageBucket": "xyz789",
"before": "abc123",
"first": 987,
"flaggableType": ["xyz789"],
"flaggedUserId": "xyz789",
"last": 987,
"severity": ["xyz789"],
"source": ["abc123"]
}
Response
{
"data": {
"moderationQueue": {
"edges": [ContentFlagEdge],
"nodes": [ContentFlag],
"pageInfo": PageInfo
}
}
}
myAllyInvites
Description
Returns the authenticated user's active accountability-partner invites. Auth required.
Response
Returns [AllyInvite!]!
Example
Query
query myAllyInvites {
myAllyInvites {
createdAt
expiresAt
id
status
token
}
}
Response
{
"data": {
"myAllyInvites": [
{
"createdAt": ISO8601DateTime,
"expiresAt": ISO8601DateTime,
"id": "4",
"status": "abc123",
"token": "xyz789"
}
]
}
}
myLatestDataExport
Description
Returns the most recent self-service data export request for the authenticated user.
Response
Returns a GdprRequest
Example
Query
query myLatestDataExport {
myLatestDataExport {
cascadePreview {
...CascadePreviewFragment
}
dueBy
exportExpiresAt
exportFileUrl
fulfilledAt
fulfilledBy {
...UserFragment
}
notes
publicId
receivedAt
requestType
requestorEmail
status
}
}
Response
{
"data": {
"myLatestDataExport": {
"cascadePreview": CascadePreview,
"dueBy": ISO8601DateTime,
"exportExpiresAt": ISO8601DateTime,
"exportFileUrl": "xyz789",
"fulfilledAt": ISO8601DateTime,
"fulfilledBy": User,
"notes": "abc123",
"publicId": "abc123",
"receivedAt": ISO8601DateTime,
"requestType": "abc123",
"requestorEmail": "xyz789",
"status": "abc123"
}
}
}
myTeam
Description
The authenticated user's Team, if any. Null when the user has no team membership.
Response
Returns a Team
Example
Query
query myTeam {
myTeam {
billingOwner {
...UserFragment
}
coachName
memberCount
memberships {
...TeamMembershipFragment
}
name
publicId
slug
subscription {
...TeamSubscriptionFragment
}
}
}
Response
{
"data": {
"myTeam": {
"billingOwner": User,
"coachName": "xyz789",
"memberCount": 123,
"memberships": [TeamMembership],
"name": "xyz789",
"publicId": "4",
"slug": "xyz789",
"subscription": TeamSubscription
}
}
}
myTeams
Description
Every team the authenticated user belongs to, ordered joined_at ASC. Backs the team-picker switcher (OBJ-1821). Empty array, never null, for a user with no memberships.
Response
Returns [TeamSwitcherEntry!]!
Example
Query
query myTeams {
myTeams {
role
team {
...TeamFragment
}
}
}
Response
{
"data": {
"myTeams": [
{
"role": "abc123",
"team": Team
}
]
}
}
notificationHistory
Description
Returns paginated notification history for the current user, newest first.
Response
Returns a NotificationHistory
Example
Query
query notificationHistory(
$limit: Int,
$offset: Int,
$teamId: ID
) {
notificationHistory(
limit: $limit,
offset: $offset,
teamId: $teamId
) {
hasMore
items {
...UserNotificationFragment
}
totalCount
unreadCount
}
}
Variables
{"limit": 123, "offset": 123, "teamId": 4}
Response
{
"data": {
"notificationHistory": {
"hasMore": true,
"items": [UserNotification],
"totalCount": 987,
"unreadCount": 123
}
}
}
outgoingAllyRequests
Description
Returns pending ally requests the authenticated user has sent. Auth required.
Response
Returns [UserSearchResult!]!
Example
Query
query outgoingAllyRequests {
outgoingAllyRequests {
achievementStats {
...AchievementStatsFragment
}
actions {
...UserActionFragment
}
admin
adminRoles
allyStatus
coachingPreferences {
...CoachingPreferencesFragment
}
colorTheme
completedCommunityChallenges {
...ChallengeParticipantFragment
}
completedSeasonalEvents {
...SeasonalEventParticipantFragment
}
createdAtTime
currentInsights {
...InsightPackFragment
}
dashboardPreferences {
...DashboardPreferencesFragment
}
daysSinceLastActive
demo
details {
...UserDetailFragment
}
email
emailVerified
featureTourStatus
feedItems {
...UserFeedItemFragment
}
firstName
goItAlone
goalMotivationProfile {
...GoalMotivationProfileFragment
}
goals {
...GoalFragment
}
graceDays
hasAlly
hasCreatedFromTemplate
hasDigestEnabled
isSupporter
lastDigestSentAt
lastName
latestEnneagramAssessment {
...EnneagramAssessmentFragment
}
level
longestStreak
moodGoalInsight {
...InsightPackFragment
}
nextLevelThreshold
nextOnTheShelfBadge {
...NextBadgeFragment
}
notifications {
...UserNotificationFragment
}
onboardingStatus {
...OnboardingStatusFragment
}
paceSuggestion {
...PaceSuggestionFragment
}
photo {
...UserPhotoFragment
}
privateMode
progressToNextLevel
publicId
recentlyUnlockedBadges {
...RecentlyUnlockedBadgeFragment
}
requiredCheckinsCompleteToday
showcasedAchievements
signInDates
signupAgeDays
stats {
...UserStatsFragment
}
streak
streakRepairOffer {
...StreakRepairOfferFragment
}
supporterTier
supporterUntil
timeToFirstGoalSeconds
todaysMood
unlockedAchievementKeys
updatedAtTime
username
welcomeBackOffer {
...WelcomeBackOfferFragment
}
xp
}
}
Response
{
"data": {
"outgoingAllyRequests": [
{
"achievementStats": AchievementStats,
"actions": [UserAction],
"admin": false,
"adminRoles": ["xyz789"],
"allyStatus": "ACCEPTED",
"coachingPreferences": CoachingPreferences,
"colorTheme": "xyz789",
"completedCommunityChallenges": [
ChallengeParticipant
],
"completedSeasonalEvents": [
SeasonalEventParticipant
],
"createdAtTime": "abc123",
"currentInsights": [InsightPack],
"dashboardPreferences": DashboardPreferences,
"daysSinceLastActive": 123,
"demo": false,
"details": UserDetail,
"email": "xyz789",
"emailVerified": false,
"featureTourStatus": {},
"feedItems": [UserFeedItem],
"firstName": "abc123",
"goItAlone": true,
"goalMotivationProfile": GoalMotivationProfile,
"goals": [Goal],
"graceDays": ["xyz789"],
"hasAlly": false,
"hasCreatedFromTemplate": false,
"hasDigestEnabled": false,
"isSupporter": true,
"lastDigestSentAt": "abc123",
"lastName": "abc123",
"latestEnneagramAssessment": EnneagramAssessment,
"level": 987,
"longestStreak": 987,
"moodGoalInsight": InsightPack,
"nextLevelThreshold": 123,
"nextOnTheShelfBadge": NextBadge,
"notifications": [UserNotification],
"onboardingStatus": OnboardingStatus,
"paceSuggestion": PaceSuggestion,
"photo": UserPhoto,
"privateMode": true,
"progressToNextLevel": 123.45,
"publicId": 4,
"recentlyUnlockedBadges": [RecentlyUnlockedBadge],
"requiredCheckinsCompleteToday": false,
"showcasedAchievements": ["abc123"],
"signInDates": ["abc123"],
"signupAgeDays": 123,
"stats": UserStats,
"streak": 987,
"streakRepairOffer": StreakRepairOffer,
"supporterTier": "abc123",
"supporterUntil": ISO8601DateTime,
"timeToFirstGoalSeconds": 987,
"todaysMood": "xyz789",
"unlockedAchievementKeys": [
"xyz789"
],
"updatedAtTime": "abc123",
"username": "xyz789",
"welcomeBackOffer": WelcomeBackOffer,
"xp": 123
}
]
}
}
pendingAllyRequests
Description
Returns incoming pending ally requests for the authenticated user. Auth required.
Response
Returns [UserAlly!]!
Example
Query
query pendingAllyRequests {
pendingAllyRequests {
accountabilityPartner
accountabilityPartnerSince
createdAtTime
firstName
id
lastName
mutualCount
mutualStreakCount
partnerStatus
photo {
...UserPhotoFragment
}
publicId
status
user {
...PendingAllyUserFragment
}
username
}
}
Response
{
"data": {
"pendingAllyRequests": [
{
"accountabilityPartner": false,
"accountabilityPartnerSince": ISO8601DateTime,
"createdAtTime": "xyz789",
"firstName": "xyz789",
"id": 4,
"lastName": "abc123",
"mutualCount": 987,
"mutualStreakCount": 123,
"partnerStatus": "xyz789",
"photo": UserPhoto,
"publicId": "abc123",
"status": "xyz789",
"user": PendingAllyUser,
"username": "abc123"
}
]
}
}
pendingArtifacts
Description
Admin only. Artifacts awaiting review, cursor-paginated.
Response
Returns an AiArtifactConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
employeeId - ID
|
|
first - Int
|
Returns the first n elements from the list. |
kind - String
|
|
last - Int
|
Returns the last n elements from the list. |
Example
Query
query pendingArtifacts(
$after: String,
$before: String,
$employeeId: ID,
$first: Int,
$kind: String,
$last: Int
) {
pendingArtifacts(
after: $after,
before: $before,
employeeId: $employeeId,
first: $first,
kind: $kind,
last: $last
) {
edges {
...AiArtifactEdgeFragment
}
nodes {
...AiArtifactFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "abc123",
"before": "abc123",
"employeeId": 4,
"first": 123,
"kind": "abc123",
"last": 987
}
Response
{
"data": {
"pendingArtifacts": {
"edges": [AiArtifactEdge],
"nodes": [AiArtifact],
"pageInfo": PageInfo
}
}
}
pendingCounts
Description
Per-queue pending item counts for the admin sidebar, filtered by role. Admin only.
Response
Returns a PendingCounts!
Example
Query
query pendingCounts {
pendingCounts {
gdprRequests
moderationQueue
reviewQueue
}
}
Response
{
"data": {
"pendingCounts": {
"gdprRequests": 123,
"moderationQueue": 123,
"reviewQueue": 987
}
}
}
personalAnalyticsActivityHeatmap
Description
Trailing 90-day activity heatmap for the current user. Auth required; gated behind personal_analytics_enabled.
Response
Returns an AnalyticsActivityHeatmap
Example
Query
query personalAnalyticsActivityHeatmap {
personalAnalyticsActivityHeatmap {
days {
...AnalyticsHeatmapDayFragment
}
}
}
Response
{
"data": {
"personalAnalyticsActivityHeatmap": {
"days": [AnalyticsHeatmapDay]
}
}
}
personalAnalyticsCompletionByCategory
Description
Completion-by-category series for the current user, month-to-date. Auth required; gated behind personal_analytics_enabled.
Response
Returns an AnalyticsCompletionByCategory
Example
Query
query personalAnalyticsCompletionByCategory {
personalAnalyticsCompletionByCategory {
series {
...AnalyticsCategoryCompletionFragment
}
}
}
Response
{
"data": {
"personalAnalyticsCompletionByCategory": {
"series": [AnalyticsCategoryCompletion]
}
}
}
personalAnalyticsMonthInReview
Description
Month-in-review hero card for the current user, month-to-date. Auth required; gated behind personal_analytics_enabled.
Response
Returns an AnalyticsMonthInReview
Example
Query
query personalAnalyticsMonthInReview {
personalAnalyticsMonthInReview {
bestCategory {
...AnalyticsCategoryCompletionFragment
}
bestStreak
daysActive
daysInMonth
goalsDone
xpEarned
}
}
Response
{
"data": {
"personalAnalyticsMonthInReview": {
"bestCategory": AnalyticsCategoryCompletion,
"bestStreak": 987,
"daysActive": 987,
"daysInMonth": 123,
"goalsDone": 987,
"xpEarned": 987
}
}
}
personalAnalyticsStreakHistory
Description
Trailing 26-week streak history for the current user. Auth required; gated behind personal_analytics_enabled.
Response
Returns an AnalyticsStreakHistory
Example
Query
query personalAnalyticsStreakHistory {
personalAnalyticsStreakHistory {
currentRun
points {
...AnalyticsStreakPointFragment
}
}
}
Response
{
"data": {
"personalAnalyticsStreakHistory": {
"currentRun": 987,
"points": [AnalyticsStreakPoint]
}
}
}
personalAnalyticsXpOverTime
Description
Trailing 26-week cumulative XP for the current user. Auth required; gated behind personal_analytics_enabled.
Response
Returns an AnalyticsXpOverTime
Example
Query
query personalAnalyticsXpOverTime {
personalAnalyticsXpOverTime {
points {
...AnalyticsXpPointFragment
}
}
}
Response
{
"data": {
"personalAnalyticsXpOverTime": {
"points": [AnalyticsXpPoint]
}
}
}
pickableFeedbackTags
Description
Returns non-archived feedback tags, ordered by position then name. Any authenticated user — for the feedback create-post picker and board filter.
Response
Returns [FeedbackTag!]!
Example
Query
query pickableFeedbackTags {
pickableFeedbackTags {
archived
createdAt
description
id
name
position
postsCount
slug
}
}
Response
{
"data": {
"pickableFeedbackTags": [
{
"archived": false,
"createdAt": ISO8601DateTime,
"description": "xyz789",
"id": "4",
"name": "abc123",
"position": 987,
"postsCount": 987,
"slug": "xyz789"
}
]
}
}
plans
Description
Returns all active subscription plans (Supporter tiers).
Response
Returns [Plan!]!
Example
Query
query plans {
plans {
active
currency
interval
name
priceCents
priceDisplay
publicId
slug
}
}
Response
{
"data": {
"plans": [
{
"active": false,
"currency": "abc123",
"interval": "xyz789",
"name": "xyz789",
"priceCents": 123,
"priceDisplay": "xyz789",
"publicId": 4,
"slug": "abc123"
}
]
}
}
publicFeedbackPost
Description
Returns a single public feedback post by public ID. Null when not found, soft-deleted, or the read path is disabled.
Response
Returns a PublicFeedbackPost
Arguments
| Name | Description |
|---|---|
id - ID!
|
Public ID of the feedback post. |
Example
Query
query publicFeedbackPost($id: ID!) {
publicFeedbackPost(id: $id) {
author {
...PublicFeedbackAuthorFragment
}
category
commentCount
comments {
...PublicFeedbackCommentFragment
}
createdAt
description
id
shippedAt
status
tags {
...FeedbackTagFragment
}
title
voteCount
}
}
Variables
{"id": "4"}
Response
{
"data": {
"publicFeedbackPost": {
"author": PublicFeedbackAuthor,
"category": "xyz789",
"commentCount": 987,
"comments": [PublicFeedbackComment],
"createdAt": ISO8601DateTime,
"description": "abc123",
"id": "4",
"shippedAt": ISO8601DateTime,
"status": "xyz789",
"tags": [FeedbackTag],
"title": "xyz789",
"voteCount": 987
}
}
}
publicFeedbackPosts
Description
Public, unauthenticated feedback board listing. Null when the read path is disabled. Rate-limited (30 req/min per IP for anonymous callers; per user when authenticated).
Response
Returns [PublicFeedbackPost!]
Example
Query
query publicFeedbackPosts(
$status: String,
$tags: [String!]
) {
publicFeedbackPosts(
status: $status,
tags: $tags
) {
author {
...PublicFeedbackAuthorFragment
}
category
commentCount
comments {
...PublicFeedbackCommentFragment
}
createdAt
description
id
shippedAt
status
tags {
...FeedbackTagFragment
}
title
voteCount
}
}
Variables
{
"status": "abc123",
"tags": ["abc123"]
}
Response
{
"data": {
"publicFeedbackPosts": [
{
"author": PublicFeedbackAuthor,
"category": "xyz789",
"commentCount": 123,
"comments": [PublicFeedbackComment],
"createdAt": ISO8601DateTime,
"description": "xyz789",
"id": 4,
"shippedAt": ISO8601DateTime,
"status": "abc123",
"tags": [FeedbackTag],
"title": "abc123",
"voteCount": 123
}
]
}
}
publicGoal
Description
Fetches a publicly visible goal by public_id. Returns an error if the goal is private.
Example
Query
query publicGoal($id: ID!) {
publicGoal(id: $id) {
allEvents {
...GoalEventFragment
}
appLink
averageCheckInTime
category {
...GoalCategoryFragment
}
checkedInToday
collectiveGoalContribution {
...GoalCollectiveContributionFragment
}
comments {
...GoalEventCommentFragment
}
completed
completedAtTime
completionRate
completionReflection
content
createdAtTime
currentAmount
dayOfWeekDistribution
daysToUpdate
demo
dueToday
durationMinutes
encouragements {
...GoalEventEncouragementFragment
}
events {
...GoalEventFragment
}
followersCount
fromTemplate {
...GoalTemplateFragment
}
fromTemplateName
habitCompletions {
...HabitCompletionFragment
}
habitStreak
identityPrompt
imageUrl
kind {
...GoalTypeFragment
}
lastCheckedInDate
lifeArea
longestHabitStreak
milestones {
...GoalFragment
}
name
nonAllyFollowersCount
parentGoalId
pastAttemptContext
position
preBreakHabitStreak
private
publicId
quickUpdatePrompts
recurrenceDays
recurrenceInterval
recurrenceType
sharedWithPartner
status
streakFreezesAvailable
streakFreezesUsed
streakRepairEligibleUntil
streakRepairedCount
targetAmount
targetDateTime
totalCheckIns
unit
updatedAtTime
user {
...UserFragment
}
visibility
}
}
Variables
{"id": 4}
Response
{
"data": {
"publicGoal": {
"allEvents": [GoalEvent],
"appLink": "abc123",
"averageCheckInTime": 987.65,
"category": GoalCategory,
"checkedInToday": false,
"collectiveGoalContribution": GoalCollectiveContribution,
"comments": [GoalEventComment],
"completed": true,
"completedAtTime": "xyz789",
"completionRate": 987.65,
"completionReflection": "xyz789",
"content": "abc123",
"createdAtTime": "xyz789",
"currentAmount": 987.65,
"dayOfWeekDistribution": [987],
"daysToUpdate": 123,
"demo": false,
"dueToday": true,
"durationMinutes": 123,
"encouragements": [GoalEventEncouragement],
"events": [GoalEvent],
"followersCount": 987,
"fromTemplate": GoalTemplate,
"fromTemplateName": "abc123",
"habitCompletions": [HabitCompletion],
"habitStreak": 123,
"identityPrompt": "xyz789",
"imageUrl": "abc123",
"kind": GoalType,
"lastCheckedInDate": "xyz789",
"lifeArea": "xyz789",
"longestHabitStreak": 987,
"milestones": [Goal],
"name": "abc123",
"nonAllyFollowersCount": 987,
"parentGoalId": "abc123",
"pastAttemptContext": "xyz789",
"position": 123,
"preBreakHabitStreak": 987,
"private": true,
"publicId": 4,
"quickUpdatePrompts": ["xyz789"],
"recurrenceDays": ["xyz789"],
"recurrenceInterval": 123,
"recurrenceType": "xyz789",
"sharedWithPartner": false,
"status": "completed",
"streakFreezesAvailable": 987,
"streakFreezesUsed": 987,
"streakRepairEligibleUntil": "xyz789",
"streakRepairedCount": 123,
"targetAmount": 987.65,
"targetDateTime": "abc123",
"totalCheckIns": 987,
"unit": "abc123",
"updatedAtTime": "abc123",
"user": User,
"visibility": "ALLIES"
}
}
}
recentArtifacts
Description
Admin only. Recently processed (approved/rejected/delivered) artifacts from the last 7 days, cursor-paginated.
Response
Returns an AiArtifactConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
employeeId - ID
|
|
first - Int
|
Returns the first n elements from the list. |
kind - String
|
|
last - Int
|
Returns the last n elements from the list. |
Example
Query
query recentArtifacts(
$after: String,
$before: String,
$employeeId: ID,
$first: Int,
$kind: String,
$last: Int
) {
recentArtifacts(
after: $after,
before: $before,
employeeId: $employeeId,
first: $first,
kind: $kind,
last: $last
) {
edges {
...AiArtifactEdgeFragment
}
nodes {
...AiArtifactFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "xyz789",
"before": "xyz789",
"employeeId": 4,
"first": 123,
"kind": "abc123",
"last": 123
}
Response
{
"data": {
"recentArtifacts": {
"edges": [AiArtifactEdge],
"nodes": [AiArtifact],
"pageInfo": PageInfo
}
}
}
recommendedCommunities
Description
Returns communities recommended for a user based on their goal interests.
Response
Returns [SuggestedCommunity!]
Example
Query
query recommendedCommunities(
$limit: Int,
$userId: ID!
) {
recommendedCommunities(
limit: $limit,
userId: $userId
) {
activeMembers
category
coverImage
description
isRecommended
matchScore
members {
...DiscoveryMemberFragment
}
mutualAllies
name
publicId
reason {
...CommunityReasonFragment
}
}
}
Variables
{"limit": 987, "userId": 4}
Response
{
"data": {
"recommendedCommunities": [
{
"activeMembers": 987,
"category": "xyz789",
"coverImage": "xyz789",
"description": "xyz789",
"isRecommended": true,
"matchScore": 123,
"members": [DiscoveryMember],
"mutualAllies": 123,
"name": "abc123",
"publicId": "4",
"reason": CommunityReason
}
]
}
}
searchUsers
Description
Auth-gated user search by username or email; pg_trgm-backed; rate-limited 10/min/user. Returns per-result allyStatus enrichment. Excludes the searching user and users who have blocked them.
Response
Returns a UserSearchResultConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
query - String!
|
Search query, minimum 2 characters. |
Example
Query
query searchUsers(
$after: String,
$before: String,
$first: Int,
$last: Int,
$query: String!
) {
searchUsers(
after: $after,
before: $before,
first: $first,
last: $last,
query: $query
) {
edges {
...UserSearchResultEdgeFragment
}
nodes {
...UserSearchResultFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "abc123",
"before": "abc123",
"first": 987,
"last": 123,
"query": "abc123"
}
Response
{
"data": {
"searchUsers": {
"edges": [UserSearchResultEdge],
"nodes": [UserSearchResult],
"pageInfo": PageInfo
}
}
}
seasonalEvent
Description
Fetches a seasonal event by its public_id, regardless of status or is_active. Nil (never a GraphQL error) for an unknown id, a soft-deleted event, or when seasonal_events_enabled is off.
Response
Returns a SeasonalEvent
Arguments
| Name | Description |
|---|---|
id - ID!
|
public_id of the seasonal event to retrieve. |
Example
Query
query seasonalEvent($id: ID!) {
seasonalEvent(id: $id) {
badgeIcon
badgeName
createdAtTime
currentUserParticipant {
...SeasonalEventParticipantFragment
}
description
endDate
isActive
isParticipating
name
participantCount
publicId
slug
startDate
status
targetGoalCount
updatedAtTime
}
}
Variables
{"id": 4}
Response
{
"data": {
"seasonalEvent": {
"badgeIcon": "abc123",
"badgeName": "xyz789",
"createdAtTime": "abc123",
"currentUserParticipant": SeasonalEventParticipant,
"description": "abc123",
"endDate": ISO8601Date,
"isActive": false,
"isParticipating": false,
"name": "xyz789",
"participantCount": 123,
"publicId": 4,
"slug": "abc123",
"startDate": ISO8601Date,
"status": "abc123",
"targetGoalCount": 123,
"updatedAtTime": "abc123"
}
}
}
seasonalEvents
Description
Returns all seasonal events, newest first. Admin only.
Response
Returns [SeasonalEvent!]
Example
Query
query seasonalEvents {
seasonalEvents {
badgeIcon
badgeName
createdAtTime
currentUserParticipant {
...SeasonalEventParticipantFragment
}
description
endDate
isActive
isParticipating
name
participantCount
publicId
slug
startDate
status
targetGoalCount
updatedAtTime
}
}
Response
{
"data": {
"seasonalEvents": [
{
"badgeIcon": "xyz789",
"badgeName": "abc123",
"createdAtTime": "abc123",
"currentUserParticipant": SeasonalEventParticipant,
"description": "xyz789",
"endDate": ISO8601Date,
"isActive": true,
"isParticipating": true,
"name": "abc123",
"participantCount": 987,
"publicId": 4,
"slug": "xyz789",
"startDate": ISO8601Date,
"status": "abc123",
"targetGoalCount": 123,
"updatedAtTime": "abc123"
}
]
}
}
suggestedAllies
Description
Returns suggested ally candidates ranked by shared community overlap. Auth required.
Response
Returns [AllySuggestion!]!
Arguments
| Name | Description |
|---|---|
limit - Int
|
Maximum number of suggestions to return. Defaults to 10, capped at 25. |
Example
Query
query suggestedAllies($limit: Int) {
suggestedAllies(limit: $limit) {
allyStatus
firstName
lastName
mutualCount
photo {
...UserPhotoFragment
}
publicId
reason
username
}
}
Variables
{"limit": 123}
Response
{
"data": {
"suggestedAllies": [
{
"allyStatus": "ACCEPTED",
"firstName": "abc123",
"lastName": "abc123",
"mutualCount": 123,
"photo": UserPhoto,
"publicId": "abc123",
"reason": "xyz789",
"username": "xyz789"
}
]
}
}
systemHealth
Description
Admin-only self-health probes for infra + identity.
Response
Returns a SystemHealth!
Example
Query
query systemHealth {
systemHealth {
agentRunnerReachable
currentAdminPublicId
currentAdminRoleList
databaseReachable
deployRevision
deployTimestamp
litellmReachable
redisReachable
sidekiqReachable
}
}
Response
{
"data": {
"systemHealth": {
"agentRunnerReachable": true,
"currentAdminPublicId": "xyz789",
"currentAdminRoleList": ["abc123"],
"databaseReachable": false,
"deployRevision": "xyz789",
"deployTimestamp": "abc123",
"litellmReachable": true,
"redisReachable": true,
"sidekiqReachable": true
}
}
}
teamHome
Description
Aggregate read backing TeamHomeView (N13). Null when the team does not exist, or the caller is not a member (PRIVACY-2).
Example
Query
query teamHome($teamId: String!) {
teamHome(teamId: $teamId) {
activeRoomId
billingState
collectiveGoal {
...CollectiveGoalFragment
}
collectiveGoalPrivacyContractAcknowledged
feed {
...TeamFeedItemFragment
}
isFreshMember
role
rooms {
...CommunityFragment
}
team {
...TeamFragment
}
trialDaysLeft
}
}
Variables
{"teamId": "xyz789"}
Response
{
"data": {
"teamHome": {
"activeRoomId": 4,
"billingState": "abc123",
"collectiveGoal": CollectiveGoal,
"collectiveGoalPrivacyContractAcknowledged": false,
"feed": [TeamFeedItem],
"isFreshMember": false,
"role": "abc123",
"rooms": [Community],
"team": Team,
"trialDaysLeft": 123
}
}
}
teamInvitePreview
Description
Public preview of a team invite by code — team name, inviter first name, and member count. No auth required. Never distinguishes expired/revoked/exhausted from each other ("unavailable"), only from a code that never existed ("not_found"). Rate-limited (60 req/min per IP for anonymous callers; per user when authenticated).
Response
Returns a TeamInvitePreview!
Arguments
| Name | Description |
|---|---|
code - String!
|
Invite code from the /join-team/{code} URL. |
Example
Query
query teamInvitePreview($code: String!) {
teamInvitePreview(code: $code) {
inviterName
memberCount
status
teamName
}
}
Variables
{"code": "abc123"}
Response
{
"data": {
"teamInvitePreview": {
"inviterName": "abc123",
"memberCount": 987,
"status": "xyz789",
"teamName": "abc123"
}
}
}
teamLeaderboard
Description
Aggregate read backing TeamLeaderboardView (N19). Null when the teams_leaderboards kill switch is off, the team/community does not exist, or the caller is not a member (PRIVACY-2).
Response
Returns a TeamLeaderboard
Example
Query
query teamLeaderboard(
$communityId: String,
$period: String!,
$teamId: String!
) {
teamLeaderboard(
communityId: $communityId,
period: $period,
teamId: $teamId
) {
entries {
...TeamLeaderboardEntryFragment
}
period
rooms {
...CommunityFragment
}
team {
...TeamFragment
}
yourMembershipOptedOut
}
}
Variables
{
"communityId": "xyz789",
"period": "abc123",
"teamId": "abc123"
}
Response
{
"data": {
"teamLeaderboard": {
"entries": [TeamLeaderboardEntry],
"period": "abc123",
"rooms": [Community],
"team": Team,
"yourMembershipOptedOut": true
}
}
}
teamLeaderboardOptOutStats
Description
Admin-only. Raw per-team leaderboard opt-out counts (LEADERBOARD-5 anti-metric monitoring).
Response
Returns [TeamLeaderboardOptOutStat!]
Example
Query
query teamLeaderboardOptOutStats {
teamLeaderboardOptOutStats {
memberCount
optedOutCount
teamName
}
}
Response
{
"data": {
"teamLeaderboardOptOutStats": [
{
"memberCount": 987,
"optedOutCount": 987,
"teamName": "abc123"
}
]
}
}
teamMemberActivity
Description
Read-only team-scoped activity summary for one member (N7b "View activity"). Null when the team or member does not exist, the member is not seated on the team, or the caller lacks manage_team (owner/admin only).
Response
Returns a TeamMemberActivity
Example
Query
query teamMemberActivity(
$memberId: String!,
$teamId: String!
) {
teamMemberActivity(
memberId: $memberId,
teamId: $teamId
) {
collectiveGoalContributions
lastActiveDays
lastActiveLabel
optedOut
periodStats {
...TeamMemberActivityPeriodStatFragment
}
subCommunityNames
}
}
Variables
{
"memberId": "xyz789",
"teamId": "abc123"
}
Response
{
"data": {
"teamMemberActivity": {
"collectiveGoalContributions": 123,
"lastActiveDays": 987,
"lastActiveLabel": "abc123",
"optedOut": true,
"periodStats": [TeamMemberActivityPeriodStat],
"subCommunityNames": ["xyz789"]
}
}
}
teamNotificationPreferences
Description
Returns the team notification preferences for the authenticated user.
Response
Returns a TeamNotificationPreferences!
Example
Query
query teamNotificationPreferences {
teamNotificationPreferences {
enabled
}
}
Response
{"data": {"teamNotificationPreferences": {"enabled": false}}}
teamPulseEligibility
Description
Whether the viewer should be prompted for this quarter's pulse survey. Null when the team does not exist, or the caller is not a member (PRIVACY-2).
teamSettings
Description
Aggregate read backing Team Settings (N7). Null when the team does not exist, or the caller is not a member (PRIVACY-2).
Response
Returns a TeamSettings
Arguments
| Name | Description |
|---|---|
teamId - String!
|
Example
Query
query teamSettings($teamId: String!) {
teamSettings(teamId: $teamId) {
maxSubCommunities
members {
...TeamMemberSummaryFragment
}
pendingInvites {
...TeamPendingInviteFragment
}
role
seatLimit
seatsUsed
subCommunities {
...CommunityFragment
}
team {
...TeamFragment
}
}
}
Variables
{"teamId": "xyz789"}
Response
{
"data": {
"teamSettings": {
"maxSubCommunities": 987,
"members": [TeamMemberSummary],
"pendingInvites": [TeamPendingInvite],
"role": "abc123",
"seatLimit": 987,
"seatsUsed": 123,
"subCommunities": [Community],
"team": Team
}
}
}
tourFunnelStats
Description
Tour-completion funnel aggregates per tour id. Admin only.
Response
Returns [TourFunnel!]
Arguments
| Name | Description |
|---|---|
periodSeconds - Int
|
Window in seconds, scoped by user signup date (default 30 days = 2,592,000). |
Example
Query
query tourFunnelStats($periodSeconds: Int) {
tourFunnelStats(periodSeconds: $periodSeconds) {
completed
completionRate
dismissed
started
tourId
}
}
Variables
{"periodSeconds": 987}
Response
{
"data": {
"tourFunnelStats": [
{
"completed": 123,
"completionRate": 987.65,
"dismissed": 123,
"started": 123,
"tourId": "xyz789"
}
]
}
}
trendingCommunities
Description
Returns communities with the highest recent growth or activity.
Response
Returns [TrendingCommunity!]
Arguments
| Name | Description |
|---|---|
limit - Int
|
Maximum number of trending communities to return. Defaults to 5. |
Example
Query
query trendingCommunities($limit: Int) {
trendingCommunities(limit: $limit) {
activeMembers
category
coverImage
description
growthRate
isTrending
name
publicId
reason {
...CommunityReasonFragment
}
totalGoals
totalMembers
}
}
Variables
{"limit": 987}
Response
{
"data": {
"trendingCommunities": [
{
"activeMembers": 123,
"category": "abc123",
"coverImage": "xyz789",
"description": "abc123",
"growthRate": 123.45,
"isTrending": false,
"name": "xyz789",
"publicId": "4",
"reason": CommunityReason,
"totalGoals": 987,
"totalMembers": 123
}
]
}
}
unifiedFeed
Description
Returns a paginated unified activity feed combining ally activity, community posts, notifications, and own progress.
Response
Returns a UnifiedFeed
Example
Query
query unifiedFeed(
$limit: Int,
$offset: Int
) {
unifiedFeed(
limit: $limit,
offset: $offset
) {
hasMore
items {
...UnifiedFeedItemFragment
}
totalCount
}
}
Variables
{"limit": 123, "offset": 123}
Response
{
"data": {
"unifiedFeed": {
"hasMore": true,
"items": [UnifiedFeedItem],
"totalCount": 123
}
}
}
user
Description
Fetches a user by public_id. Requires authentication; admins can fetch any user.
Example
Query
query user($id: ID!) {
user(id: $id) {
achievementStats {
...AchievementStatsFragment
}
actions {
...UserActionFragment
}
admin
adminRoles
coachingPreferences {
...CoachingPreferencesFragment
}
colorTheme
completedCommunityChallenges {
...ChallengeParticipantFragment
}
completedSeasonalEvents {
...SeasonalEventParticipantFragment
}
createdAtTime
currentInsights {
...InsightPackFragment
}
dashboardPreferences {
...DashboardPreferencesFragment
}
daysSinceLastActive
demo
details {
...UserDetailFragment
}
email
emailVerified
featureTourStatus
feedItems {
...UserFeedItemFragment
}
firstName
goItAlone
goalMotivationProfile {
...GoalMotivationProfileFragment
}
goals {
...GoalFragment
}
graceDays
hasAlly
hasCreatedFromTemplate
hasDigestEnabled
isSupporter
lastDigestSentAt
lastName
latestEnneagramAssessment {
...EnneagramAssessmentFragment
}
level
longestStreak
moodGoalInsight {
...InsightPackFragment
}
nextLevelThreshold
nextOnTheShelfBadge {
...NextBadgeFragment
}
notifications {
...UserNotificationFragment
}
onboardingStatus {
...OnboardingStatusFragment
}
paceSuggestion {
...PaceSuggestionFragment
}
photo {
...UserPhotoFragment
}
privateMode
progressToNextLevel
publicId
recentlyUnlockedBadges {
...RecentlyUnlockedBadgeFragment
}
requiredCheckinsCompleteToday
showcasedAchievements
signInDates
signupAgeDays
stats {
...UserStatsFragment
}
streak
streakRepairOffer {
...StreakRepairOfferFragment
}
supporterTier
supporterUntil
timeToFirstGoalSeconds
todaysMood
unlockedAchievementKeys
updatedAtTime
username
welcomeBackOffer {
...WelcomeBackOfferFragment
}
xp
}
}
Variables
{"id": "4"}
Response
{
"data": {
"user": {
"achievementStats": AchievementStats,
"actions": [UserAction],
"admin": true,
"adminRoles": ["abc123"],
"coachingPreferences": CoachingPreferences,
"colorTheme": "abc123",
"completedCommunityChallenges": [
ChallengeParticipant
],
"completedSeasonalEvents": [
SeasonalEventParticipant
],
"createdAtTime": "abc123",
"currentInsights": [InsightPack],
"dashboardPreferences": DashboardPreferences,
"daysSinceLastActive": 987,
"demo": true,
"details": UserDetail,
"email": "abc123",
"emailVerified": true,
"featureTourStatus": {},
"feedItems": [UserFeedItem],
"firstName": "abc123",
"goItAlone": false,
"goalMotivationProfile": GoalMotivationProfile,
"goals": [Goal],
"graceDays": ["abc123"],
"hasAlly": false,
"hasCreatedFromTemplate": true,
"hasDigestEnabled": true,
"isSupporter": false,
"lastDigestSentAt": "xyz789",
"lastName": "xyz789",
"latestEnneagramAssessment": EnneagramAssessment,
"level": 987,
"longestStreak": 987,
"moodGoalInsight": InsightPack,
"nextLevelThreshold": 987,
"nextOnTheShelfBadge": NextBadge,
"notifications": [UserNotification],
"onboardingStatus": OnboardingStatus,
"paceSuggestion": PaceSuggestion,
"photo": UserPhoto,
"privateMode": false,
"progressToNextLevel": 123.45,
"publicId": "4",
"recentlyUnlockedBadges": [RecentlyUnlockedBadge],
"requiredCheckinsCompleteToday": true,
"showcasedAchievements": ["abc123"],
"signInDates": ["xyz789"],
"signupAgeDays": 123,
"stats": UserStats,
"streak": 123,
"streakRepairOffer": StreakRepairOffer,
"supporterTier": "xyz789",
"supporterUntil": ISO8601DateTime,
"timeToFirstGoalSeconds": 123,
"todaysMood": "abc123",
"unlockedAchievementKeys": ["xyz789"],
"updatedAtTime": "abc123",
"username": "abc123",
"welcomeBackOffer": WelcomeBackOffer,
"xp": 987
}
}
}
userAllies
Description
Returns a user's accepted ally (friend) connections.
Response
Returns [UserAlly!]
Arguments
| Name | Description |
|---|---|
userId - ID!
|
public_id of the user whose allies to retrieve. |
Example
Query
query userAllies($userId: ID!) {
userAllies(userId: $userId) {
accountabilityPartner
accountabilityPartnerSince
createdAtTime
firstName
id
lastName
mutualCount
mutualStreakCount
partnerStatus
photo {
...UserPhotoFragment
}
publicId
status
user {
...PendingAllyUserFragment
}
username
}
}
Variables
{"userId": "4"}
Response
{
"data": {
"userAllies": [
{
"accountabilityPartner": true,
"accountabilityPartnerSince": ISO8601DateTime,
"createdAtTime": "xyz789",
"firstName": "xyz789",
"id": "4",
"lastName": "xyz789",
"mutualCount": 123,
"mutualStreakCount": 987,
"partnerStatus": "xyz789",
"photo": UserPhoto,
"publicId": "xyz789",
"status": "abc123",
"user": PendingAllyUser,
"username": "xyz789"
}
]
}
}
userByUsername
Description
Looks up a user by username and returns their public profile (public-safe fields only). Auth-required. Rate-limited (30/min). Returns nil for not-found, soft-deleted, or blank usernames.
Response
Returns a PublicProfile
Arguments
| Name | Description |
|---|---|
username - String!
|
Username (handle) to look up. Case-insensitive. |
Example
Query
query userByUsername($username: String!) {
userByUsername(username: $username) {
achievementStats {
...AchievementStatsFragment
}
alliesCount
allyGoals {
...PublicGoalFragment
}
allyStatus
firstName
lastName
level
longestStreak
nextLevelThreshold
nextOnTheShelfBadge {
...NextBadgeFragment
}
partnerGoals {
...PublicGoalFragment
}
photo {
...UserPhotoFragment
}
progressToNextLevel
publicGoals {
...PublicGoalFragment
}
publicId
showcasedAchievements
signInDates
signupAgeDays
streak
unlockedBadges {
...RecentlyUnlockedBadgeFragment
}
username
viewerIsAccountabilityPartner
xp
}
}
Variables
{"username": "abc123"}
Response
{
"data": {
"userByUsername": {
"achievementStats": AchievementStats,
"alliesCount": 123,
"allyGoals": [PublicGoal],
"allyStatus": "abc123",
"firstName": "abc123",
"lastName": "xyz789",
"level": 987,
"longestStreak": 123,
"nextLevelThreshold": 987,
"nextOnTheShelfBadge": NextBadge,
"partnerGoals": [PublicGoal],
"photo": UserPhoto,
"progressToNextLevel": 987.65,
"publicGoals": [PublicGoal],
"publicId": 4,
"showcasedAchievements": ["xyz789"],
"signInDates": ["xyz789"],
"signupAgeDays": 987,
"streak": 987,
"unlockedBadges": [RecentlyUnlockedBadge],
"username": "xyz789",
"viewerIsAccountabilityPartner": false,
"xp": 123
}
}
}
users
Description
Admin only. Cursor-paginated user list, created_at DESC.
Response
Returns a UserConnection!
Arguments
| Name | Description |
|---|---|
after - String
|
Returns the elements in the list that come after the specified cursor. |
before - String
|
Returns the elements in the list that come before the specified cursor. |
first - Int
|
Returns the first n elements from the list. |
last - Int
|
Returns the last n elements from the list. |
Example
Query
query users(
$after: String,
$before: String,
$first: Int,
$last: Int
) {
users(
after: $after,
before: $before,
first: $first,
last: $last
) {
edges {
...UserEdgeFragment
}
nodes {
...UserFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{
"after": "abc123",
"before": "abc123",
"first": 987,
"last": 987
}
Response
{
"data": {
"users": {
"edges": [UserEdge],
"nodes": [User],
"pageInfo": PageInfo
}
}
}
weeklyDigestPreferences
Description
Returns the weekly digest email preferences for the authenticated user.
Response
Returns a WeeklyDigestPreferences!
Example
Query
query weeklyDigestPreferences {
weeklyDigestPreferences {
deliveryDay
enabled
}
}
Response
{
"data": {
"weeklyDigestPreferences": {
"deliveryDay": "abc123",
"enabled": true
}
}
}
wordCloud
Description
Generates word frequency data from a model column for admin analytics.
Response
Returns [WordCloud!]
Example
Query
query wordCloud(
$column: String!,
$model: String!
) {
wordCloud(
column: $column,
model: $model
) {
name
value
}
}
Variables
{
"column": "abc123",
"model": "xyz789"
}
Response
{
"data": {
"wordCloud": [
{"name": "xyz789", "value": 123}
]
}
}
Mutations
acceptAllyInvite
Description
Accepts an accountability-partner invite by token. Creates or upgrades the relationship to an accepted partnership.
Response
Returns an AcceptAllyInvitePayload!
Arguments
| Name | Description |
|---|---|
inviteToken - String!
|
Token from the invite deep link. |
Example
Query
mutation acceptAllyInvite($inviteToken: String!) {
acceptAllyInvite(inviteToken: $inviteToken) {
errors
userAlly {
...UserAllyFragment
}
}
}
Variables
{"inviteToken": "abc123"}
Response
{
"data": {
"acceptAllyInvite": {
"errors": ["abc123"],
"userAlly": UserAlly
}
}
}
acceptAllyRequest
Description
Accepts a pending ally request.
Response
Returns an AcceptAllyRequestPayload!
Arguments
| Name | Description |
|---|---|
requestId - ID!
|
public_id of the UserAlly record (the pending request) to accept. |
Example
Query
mutation acceptAllyRequest($requestId: ID!) {
acceptAllyRequest(requestId: $requestId) {
errors
userAlly {
...UserAllyFragment
}
}
}
Variables
{"requestId": 4}
Response
{
"data": {
"acceptAllyRequest": {
"errors": ["xyz789"],
"userAlly": UserAlly
}
}
}
acceptHabitIntegrationMapping
Description
Accepts a proposed (or manual) mapping from a connected provider activity type to a habit.
Response
Returns an AcceptHabitIntegrationMappingPayload!
Example
Query
mutation acceptHabitIntegrationMapping(
$confidenceScore: Float,
$goalId: ID!,
$integrationConnectionId: ID!,
$providerActivityType: String!
) {
acceptHabitIntegrationMapping(
confidenceScore: $confidenceScore,
goalId: $goalId,
integrationConnectionId: $integrationConnectionId,
providerActivityType: $providerActivityType
) {
errors
mapping {
...HabitIntegrationMappingFragment
}
}
}
Variables
{
"confidenceScore": 987.65,
"goalId": 4,
"integrationConnectionId": 4,
"providerActivityType": "abc123"
}
Response
{
"data": {
"acceptHabitIntegrationMapping": {
"errors": ["abc123"],
"mapping": HabitIntegrationMapping
}
}
}
acceptPaceSuggestion
Description
Applies a pace suggestion's computed target date to the goal (one-tap accept).
Response
Returns an AcceptPaceSuggestionPayload!
Arguments
| Name | Description |
|---|---|
goalId - ID!
|
public_id of the goal the suggestion targets. |
Example
Query
mutation acceptPaceSuggestion($goalId: ID!) {
acceptPaceSuggestion(goalId: $goalId) {
errors
goal {
...GoalFragment
}
previousTargetDate
proposedTargetDate
}
}
Variables
{"goalId": 4}
Response
{
"data": {
"acceptPaceSuggestion": {
"errors": ["abc123"],
"goal": Goal,
"previousTargetDate": "abc123",
"proposedTargetDate": "abc123"
}
}
}
acceptPartnerRequest
Description
Accepts a pending accountability partner request from an ally.
Response
Returns an AcceptPartnerRequestPayload!
Arguments
| Name | Description |
|---|---|
allyPublicId - ID!
|
public_id of the ally whose partner request to accept. |
Example
Query
mutation acceptPartnerRequest($allyPublicId: ID!) {
acceptPartnerRequest(allyPublicId: $allyPublicId) {
errors
userAlly {
...UserAllyFragment
}
}
}
Variables
{"allyPublicId": "4"}
Response
{
"data": {
"acceptPartnerRequest": {
"errors": ["abc123"],
"userAlly": UserAlly
}
}
}
acceptStreakMercy
Description
Accepts the Streak Mercy offer — backfills system-granted freeze completions for all missed days to genuinely restore the habit streak, then marks the offer consumed.
Response
Returns an AcceptStreakMercyPayload!
Arguments
| Name | Description |
|---|---|
goalId - ID!
|
public_id of the habit goal to restore. |
Example
Query
mutation acceptStreakMercy($goalId: ID!) {
acceptStreakMercy(goalId: $goalId) {
errors
goal {
...GoalFragment
}
}
}
Variables
{"goalId": "4"}
Response
{
"data": {
"acceptStreakMercy": {
"errors": ["abc123"],
"goal": Goal
}
}
}
acceptTeamInvite
Description
Called by the invitee once they are signed up and authenticated. No team-scoped authorization — the accepting user has no membership yet.
Response
Returns an AcceptTeamInvitePayload!
Arguments
| Name | Description |
|---|---|
code - String!
|
Example
Query
mutation acceptTeamInvite($code: String!) {
acceptTeamInvite(code: $code) {
communityCount
errors
preselectedCommunityIds
seatCapExceeded
team {
...TeamFragment
}
teamMembership {
...TeamMembershipFragment
}
}
}
Variables
{"code": "abc123"}
Response
{
"data": {
"acceptTeamInvite": {
"communityCount": 123,
"errors": ["xyz789"],
"preselectedCommunityIds": ["xyz789"],
"seatCapExceeded": true,
"team": Team,
"teamMembership": TeamMembership
}
}
}
acknowledgeAction
Description
Marks a gamification action as acknowledged, clearing it from the user action queue.
Response
Returns an AcknowledgeActionPayload!
Arguments
| Name | Description |
|---|---|
id - ID!
|
The public ID of the user action to acknowledge. |
Example
Query
mutation acknowledgeAction($id: ID!) {
acknowledgeAction(id: $id) {
errors
result {
...ResultFragment
}
}
}
Variables
{"id": 4}
Response
{
"data": {
"acknowledgeAction": {
"errors": ["xyz789"],
"result": Result
}
}
}
acknowledgeAllNotifications
Description
Marks every unread notification as acknowledged for the authenticated user, optionally scoped to a single team (mirrors notificationHistory's teamId).
Response
Returns an AcknowledgeAllNotificationsPayload!
Arguments
| Name | Description |
|---|---|
teamId - ID
|
Scope to one team's notifications instead of the whole inbox. |
Example
Query
mutation acknowledgeAllNotifications($teamId: ID) {
acknowledgeAllNotifications(teamId: $teamId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"teamId": "4"}
Response
{
"data": {
"acknowledgeAllNotifications": {
"errors": ["xyz789"],
"result": Result
}
}
}
acknowledgeCollectiveGoalPrivacyContract
Description
First-time-only server-side acknowledgment of TeamPrivacyContractView (N18/GOALS-16). Persists in UserAction, never localStorage. Gated by the teams_collective_goals kill switch.
Response
Example
Query
mutation acknowledgeCollectiveGoalPrivacyContract {
acknowledgeCollectiveGoalPrivacyContract {
acknowledged
errors
}
}
Response
{
"data": {
"acknowledgeCollectiveGoalPrivacyContract": {
"acknowledged": true,
"errors": ["xyz789"]
}
}
}
acknowledgeNotification
Description
Marks a notification as acknowledged (read/dismissed) for the authenticated user.
Response
Returns an AcknowledgeNotificationPayload!
Arguments
| Name | Description |
|---|---|
id - ID!
|
The public ID of the notification to acknowledge. |
Example
Query
mutation acknowledgeNotification($id: ID!) {
acknowledgeNotification(id: $id) {
errors
result {
...ResultFragment
}
}
}
Variables
{"id": "4"}
Response
{
"data": {
"acknowledgeNotification": {
"errors": ["abc123"],
"result": Result
}
}
}
addCommunitySuggestion
Description
Submits a suggestion for a new community topic or interest area.
Response
Returns an AddCommunitySuggestionPayload!
Example
Query
mutation addCommunitySuggestion(
$content: String!,
$goalCategoryId: ID,
$goalTypeId: ID
) {
addCommunitySuggestion(
content: $content,
goalCategoryId: $goalCategoryId,
goalTypeId: $goalTypeId
) {
communitySuggestion {
...CommunitySuggestionFragment
}
errors
}
}
Variables
{
"content": "abc123",
"goalCategoryId": "4",
"goalTypeId": 4
}
Response
{
"data": {
"addCommunitySuggestion": {
"communitySuggestion": CommunitySuggestion,
"errors": ["abc123"]
}
}
}
addGoal
Description
Creates a new goal for the authenticated user.
Response
Returns an AddGoalPayload!
Arguments
| Name | Description |
|---|---|
appLink - String
|
External app URL (https:// or a custom app scheme, e.g. duolingo://) opened on check-in for one-click redirect to another app. |
content - String
|
Optional longer description or motivation note. |
daysToUpdate - Int
|
How frequently in days the user plans to log progress. |
durationMinutes - Int
|
Optional time-per-session in minutes for habits. |
file - Upload
|
Cover image file upload. Takes precedence over image_url when provided. |
fromTemplateId - ID
|
public_id of the GoalTemplate this goal is created from. Triggers milestone creation and goal_created_from_template telemetry. |
goalCategoryId - ID
|
ID of the goal category (fitness, learning, etc.). Fetch options via goalCategories query. |
goalTypeId - ID
|
ID of the goal type (habit, milestone, quantity). Fetch options via goalKinds query. |
identityPrompt - String
|
Optional free-text identity framing (e.g. "Who you're becoming"). Personalizes Coach messaging when present. Max 240 chars. |
imageUrl - String
|
URL of a cover image for the goal. |
lifeArea - String
|
The area of life this goal belongs to (e.g. career, health). |
milestones - [MilestoneInput!]
|
Ordered milestone steps to create atomically with the goal. Consumed when fromTemplateId is present. |
name - String!
|
Display name of the goal (e.g. "Run a 5K"). |
parentGoalId - ID
|
public_id of a parent goal to nest this under as a milestone. |
pastAttemptContext - String
|
Optional free-text context on a prior attempt at this goal. Personalizes Coach messaging when present. Max 200 chars. |
private - Boolean
|
Deprecated; use visibility. When true, the goal is visible only to the owner. Defaults to false. |
recurrenceDays - [String!]
|
Days for weekly/custom_days recurrence (e.g. ["mon", "wed", "fri"]). |
recurrenceInterval - Int
|
Number of days between check-ins for interval recurrence. |
recurrenceType - String
|
Recurrence pattern for habits: daily, weekly, custom_days, or interval. |
targetDate - String
|
ISO date string for the target completion date (e.g. "2026-12-31"). |
visibility - GoalVisibilityEnum
|
Who can see the goal. Wins over private when both are sent. |
Example
Query
mutation addGoal(
$appLink: String,
$content: String,
$daysToUpdate: Int,
$durationMinutes: Int,
$file: Upload,
$fromTemplateId: ID,
$goalCategoryId: ID,
$goalTypeId: ID,
$identityPrompt: String,
$imageUrl: String,
$lifeArea: String,
$milestones: [MilestoneInput!],
$name: String!,
$parentGoalId: ID,
$pastAttemptContext: String,
$private: Boolean,
$recurrenceDays: [String!],
$recurrenceInterval: Int,
$recurrenceType: String,
$targetDate: String,
$visibility: GoalVisibilityEnum
) {
addGoal(
appLink: $appLink,
content: $content,
daysToUpdate: $daysToUpdate,
durationMinutes: $durationMinutes,
file: $file,
fromTemplateId: $fromTemplateId,
goalCategoryId: $goalCategoryId,
goalTypeId: $goalTypeId,
identityPrompt: $identityPrompt,
imageUrl: $imageUrl,
lifeArea: $lifeArea,
milestones: $milestones,
name: $name,
parentGoalId: $parentGoalId,
pastAttemptContext: $pastAttemptContext,
private: $private,
recurrenceDays: $recurrenceDays,
recurrenceInterval: $recurrenceInterval,
recurrenceType: $recurrenceType,
targetDate: $targetDate,
visibility: $visibility
) {
errors
goal {
...GoalFragment
}
}
}
Variables
{
"appLink": "abc123",
"content": "xyz789",
"daysToUpdate": 987,
"durationMinutes": 123,
"file": Upload,
"fromTemplateId": "4",
"goalCategoryId": "4",
"goalTypeId": 4,
"identityPrompt": "abc123",
"imageUrl": "xyz789",
"lifeArea": "xyz789",
"milestones": [MilestoneInput],
"name": "xyz789",
"parentGoalId": 4,
"pastAttemptContext": "xyz789",
"private": false,
"recurrenceDays": ["abc123"],
"recurrenceInterval": 123,
"recurrenceType": "abc123",
"targetDate": "abc123",
"visibility": "ALLIES"
}
Response
{
"data": {
"addGoal": {
"errors": ["xyz789"],
"goal": Goal
}
}
}
addGoalEvent
Description
Logs a progress event for a goal. Each event is immutable once created.
Response
Returns an AddGoalEventPayload!
Arguments
| Name | Description |
|---|---|
clientEventId - String
|
Client-generated UUID for idempotent retry of offline-queued events. Repeat calls with the same client_event_id return the original event. |
clientTimestamp - String
|
ISO-8601 local timestamp when the event actually occurred. Used as effective time for streak calculation. |
content - String!
|
The progress update text describing what was accomplished. |
file - Upload
|
Image file upload. Takes precedence over image_url when provided. |
goalId - ID!
|
public_id of the goal this progress event belongs to. |
imageUrl - String
|
Optional URL of an image to attach to the progress event. |
mood - String
|
Optional mood at the time of logging (e.g. amazing, happy, calm, meh, tired, low). |
Example
Query
mutation addGoalEvent(
$clientEventId: String,
$clientTimestamp: String,
$content: String!,
$file: Upload,
$goalId: ID!,
$imageUrl: String,
$mood: String
) {
addGoalEvent(
clientEventId: $clientEventId,
clientTimestamp: $clientTimestamp,
content: $content,
file: $file,
goalId: $goalId,
imageUrl: $imageUrl,
mood: $mood
) {
errors
goalEvent {
...GoalEventFragment
}
}
}
Variables
{
"clientEventId": "abc123",
"clientTimestamp": "xyz789",
"content": "xyz789",
"file": Upload,
"goalId": "4",
"imageUrl": "abc123",
"mood": "abc123"
}
Response
{
"data": {
"addGoalEvent": {
"errors": ["xyz789"],
"goalEvent": GoalEvent
}
}
}
addGoalEventComment
Description
Adds a comment to a goal progress event.
Response
Returns an AddGoalEventCommentPayload!
Example
Query
mutation addGoalEventComment(
$content: String,
$goalEventId: ID!
) {
addGoalEventComment(
content: $content,
goalEventId: $goalEventId
) {
errors
goalEventComment {
...GoalEventCommentFragment
}
}
}
Variables
{
"content": "xyz789",
"goalEventId": "4"
}
Response
{
"data": {
"addGoalEventComment": {
"errors": ["xyz789"],
"goalEventComment": GoalEventComment
}
}
}
addGoalToCommunity
Description
Shares an existing goal into a community feed.
Response
Returns an AddGoalToCommunityPayload!
Example
Query
mutation addGoalToCommunity(
$communityId: ID!,
$goalId: ID!
) {
addGoalToCommunity(
communityId: $communityId,
goalId: $goalId
) {
communityGoal {
...CommunityGoalFragment
}
errors
}
}
Variables
{"communityId": "4", "goalId": 4}
Response
{
"data": {
"addGoalToCommunity": {
"communityGoal": CommunityGoal,
"errors": ["xyz789"]
}
}
}
addMoodLog
Description
Records a mood check-in for the authenticated user. Mood options: amazing, happy, calm, meh, tired, low.
Response
Returns an AddMoodLogPayload!
Arguments
| Name | Description |
|---|---|
goalId - ID
|
Optional public ID of a goal to associate with this mood check-in. |
mood - String!
|
The mood value for this check-in. Accepted values: amazing, happy, calm, meh, tired, low. |
note - String
|
An optional free-text note accompanying the mood entry (max 300 characters). |
Example
Query
mutation addMoodLog(
$goalId: ID,
$mood: String!,
$note: String
) {
addMoodLog(
goalId: $goalId,
mood: $mood,
note: $note
) {
errors
moodLog {
...MoodLogFragment
}
}
}
Variables
{
"goalId": 4,
"mood": "xyz789",
"note": "abc123"
}
Response
{
"data": {
"addMoodLog": {
"errors": ["abc123"],
"moodLog": MoodLog
}
}
}
addPostComment
Description
Adds a comment to a community post.
Response
Returns an AddPostCommentPayload!
Example
Query
mutation addPostComment(
$content: String!,
$postId: ID!
) {
addPostComment(
content: $content,
postId: $postId
) {
errors
postComment {
...PostCommentFragment
}
}
}
Variables
{"content": "xyz789", "postId": 4}
Response
{
"data": {
"addPostComment": {
"errors": ["xyz789"],
"postComment": PostComment
}
}
}
adjustTeamSeats
Description
Owner-only. Updates a team's seat count.
Response
Returns an AdjustTeamSeatsPayload!
Example
Query
mutation adjustTeamSeats(
$seatCount: Int!,
$teamId: String!
) {
adjustTeamSeats(
seatCount: $seatCount,
teamId: $teamId
) {
errors
teamSubscription {
...TeamSubscriptionFragment
}
}
}
Variables
{"seatCount": 123, "teamId": "xyz789"}
Response
{
"data": {
"adjustTeamSeats": {
"errors": ["xyz789"],
"teamSubscription": TeamSubscription
}
}
}
approveAiArtifact
Description
Approves a pending AI artifact, optionally applying an edited payload.
Response
Returns an ApproveAiArtifactPayload!
Example
Query
mutation approveAiArtifact(
$artifactId: String!,
$editedPayload: String
) {
approveAiArtifact(
artifactId: $artifactId,
editedPayload: $editedPayload
) {
artifact {
...AiArtifactFragment
}
errors
}
}
Variables
{
"artifactId": "abc123",
"editedPayload": "xyz789"
}
Response
{
"data": {
"approveAiArtifact": {
"artifact": AiArtifact,
"errors": ["xyz789"]
}
}
}
archiveFeedbackTag
Description
Archives a feedback tag, hiding it from the pickable list without detaching it from posts (admin only).
Response
Returns an ArchiveFeedbackTagPayload!
Arguments
| Name | Description |
|---|---|
tagId - ID!
|
Public ID of the feedback tag. |
Example
Query
mutation archiveFeedbackTag($tagId: ID!) {
archiveFeedbackTag(tagId: $tagId) {
errors
feedbackTag {
...FeedbackTagFragment
}
}
}
Variables
{"tagId": 4}
Response
{
"data": {
"archiveFeedbackTag": {
"errors": ["abc123"],
"feedbackTag": FeedbackTag
}
}
}
archiveSubCommunity
Description
Owner/Admin-only. Starts the 30-day read-only archive window for a sub-community.
Response
Returns an ArchiveSubCommunityPayload!
Example
Query
mutation archiveSubCommunity(
$communityId: String!,
$teamId: String!
) {
archiveSubCommunity(
communityId: $communityId,
teamId: $teamId
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"communityId": "abc123",
"teamId": "abc123"
}
Response
{
"data": {
"archiveSubCommunity": {
"community": Community,
"errors": ["abc123"]
}
}
}
beginDataImport
Description
Parses an uploaded goals/habit_completions CSV pair into a staged DataImport preview.
Response
Returns a BeginImportPayload!
Example
Query
mutation beginDataImport(
$goalsFile: Upload,
$habitCompletionsFile: Upload
) {
beginDataImport(
goalsFile: $goalsFile,
habitCompletionsFile: $habitCompletionsFile
) {
dataImport {
...DataImportFragment
}
errors
}
}
Variables
{
"goalsFile": Upload,
"habitCompletionsFile": Upload
}
Response
{
"data": {
"beginDataImport": {
"dataImport": DataImport,
"errors": ["xyz789"]
}
}
}
blockAlly
Description
Blocks a user, preventing ally requests in either direction.
Response
Returns a BlockAllyPayload!
Arguments
| Name | Description |
|---|---|
targetUserId - ID!
|
public_id of the user to block. |
Example
Query
mutation blockAlly($targetUserId: ID!) {
blockAlly(targetUserId: $targetUserId) {
errors
success
}
}
Variables
{"targetUserId": 4}
Response
{
"data": {
"blockAlly": {
"errors": ["xyz789"],
"success": true
}
}
}
bulkReviewContentFlags
Description
Reviews up to 50 content flags atomically. Requires moderator+ role.
Response
Returns a BulkReviewContentFlagsPayload!
Arguments
| Name | Description |
|---|---|
action - String!
|
"approve" or "reject". |
flagIds - [String!]!
|
Array of flag public_ids (max 50). |
reason - String!
|
Bulk reason (min 3 chars, recorded per flag). |
Example
Query
mutation bulkReviewContentFlags(
$action: String!,
$flagIds: [String!]!,
$reason: String!
) {
bulkReviewContentFlags(
action: $action,
flagIds: $flagIds,
reason: $reason
) {
errors
reviewedCount
}
}
Variables
{
"action": "abc123",
"flagIds": ["abc123"],
"reason": "abc123"
}
Response
{
"data": {
"bulkReviewContentFlags": {
"errors": ["xyz789"],
"reviewedCount": 987
}
}
}
cancelSupporterSubscription
Description
Cancels the current Supporter subscription at the end of the billing period.
Response
Returns a CancelSupporterSubscriptionPayload!
Example
Query
mutation cancelSupporterSubscription {
cancelSupporterSubscription {
errors
success
}
}
Response
{
"data": {
"cancelSupporterSubscription": {
"errors": ["xyz789"],
"success": false
}
}
}
cancelTeamSubscription
Description
Owner-only. Cancels a team's subscription.
Response
Returns a CancelTeamSubscriptionPayload!
Arguments
| Name | Description |
|---|---|
teamId - String!
|
Example
Query
mutation cancelTeamSubscription($teamId: String!) {
cancelTeamSubscription(teamId: $teamId) {
errors
success
}
}
Variables
{"teamId": "abc123"}
Response
{
"data": {
"cancelTeamSubscription": {
"errors": ["abc123"],
"success": true
}
}
}
checkInHabit
Description
Records a one-tap check-in for a habit goal.
Response
Returns a CheckInHabitPayload!
Arguments
| Name | Description |
|---|---|
clientEventId - String
|
Client-generated UUID for idempotent retry of offline-queued check-ins. Repeat calls with the same client_event_id return the original completion. |
completedDate - String
|
ISO date string (YYYY-MM-DD) to credit this check-in to, for offline/widget syncs made before the current day. Must be within the last 7 days in the user's timezone; omit to default to today. |
goalId - ID!
|
public_id of the habit goal to check in. |
note - String
|
Optional one-sentence journal note for this check-in (max 280 characters). Ignored when the micro_journal_enabled flag is off for the user. |
Example
Query
mutation checkInHabit(
$clientEventId: String,
$completedDate: String,
$goalId: ID!,
$note: String
) {
checkInHabit(
clientEventId: $clientEventId,
completedDate: $completedDate,
goalId: $goalId,
note: $note
) {
checkinToken
errors
goal {
...GoalFragment
}
goalEvent {
...GoalEventFragment
}
}
}
Variables
{
"clientEventId": "abc123",
"completedDate": "abc123",
"goalId": "4",
"note": "abc123"
}
Response
{
"data": {
"checkInHabit": {
"checkinToken": "xyz789",
"errors": ["abc123"],
"goal": Goal,
"goalEvent": GoalEvent
}
}
}
checkValidUsername
Description
Checks whether a username is available and meets formatting requirements.
Response
Returns a CheckValidUsernamePayload!
Arguments
| Name | Description |
|---|---|
username - String!
|
The username to check for availability and format validity. |
Example
Query
mutation checkValidUsername($username: String!) {
checkValidUsername(username: $username) {
errors
result {
...ResultFragment
}
}
}
Variables
{"username": "xyz789"}
Response
{
"data": {
"checkValidUsername": {
"errors": ["xyz789"],
"result": Result
}
}
}
claimAiArtifact
Description
Claims a pending AI artifact for the reviewing operator without resolving it.
Response
Returns a ClaimAiArtifactPayload!
Arguments
| Name | Description |
|---|---|
artifactId - String!
|
Example
Query
mutation claimAiArtifact($artifactId: String!) {
claimAiArtifact(artifactId: $artifactId) {
artifact {
...AiArtifactFragment
}
errors
}
}
Variables
{"artifactId": "xyz789"}
Response
{
"data": {
"claimAiArtifact": {
"artifact": AiArtifact,
"errors": ["xyz789"]
}
}
}
claimStreakInsurance
Description
Claims the Supporter monthly streak insurance benefit, restoring a broken streak with no XP cost.
Response
Returns a ClaimStreakInsurancePayload!
Arguments
| Name | Description |
|---|---|
goalId - ID!
|
public_id of the habit goal to restore via insurance. |
Example
Query
mutation claimStreakInsurance($goalId: ID!) {
claimStreakInsurance(goalId: $goalId) {
errors
goal {
...GoalFragment
}
}
}
Variables
{"goalId": "4"}
Response
{
"data": {
"claimStreakInsurance": {
"errors": ["xyz789"],
"goal": Goal
}
}
}
commitDataImport
Description
Commits a staged DataImport, creating the imported goals and check-ins asynchronously.
Response
Returns a CommitImportPayload!
Example
Query
mutation commitDataImport(
$id: ID!,
$skipGoalExternalIds: [String!]
) {
commitDataImport(
id: $id,
skipGoalExternalIds: $skipGoalExternalIds
) {
dataImport {
...DataImportFragment
}
errors
}
}
Variables
{"id": "4", "skipGoalExternalIds": [""]}
Response
{
"data": {
"commitDataImport": {
"dataImport": DataImport,
"errors": ["abc123"]
}
}
}
completeOnboardingAndCreateGoal
Description
Atomically completes onboarding and creates the first goal.
Response
Returns a CompleteOnboardingAndCreateGoalPayload!
Example
Query
mutation completeOnboardingAndCreateGoal(
$goalCategoryId: ID,
$goalName: String!,
$onboardingAnswers: JSON
) {
completeOnboardingAndCreateGoal(
goalCategoryId: $goalCategoryId,
goalName: $goalName,
onboardingAnswers: $onboardingAnswers
) {
errors
goal {
...GoalFragment
}
user {
...UserFragment
}
}
}
Variables
{
"goalCategoryId": "4",
"goalName": "xyz789",
"onboardingAnswers": {}
}
Response
{
"data": {
"completeOnboardingAndCreateGoal": {
"errors": ["xyz789"],
"goal": Goal,
"user": User
}
}
}
connectChessCom
Description
Connects the current user's Chess.com account by username.
Response
Returns a ConnectChessComPayload!
Arguments
| Name | Description |
|---|---|
externalUsername - String!
|
Chess.com username to connect. |
Example
Query
mutation connectChessCom($externalUsername: String!) {
connectChessCom(externalUsername: $externalUsername) {
errors
integrationConnection {
...IntegrationConnectionFragment
}
}
}
Variables
{"externalUsername": "xyz789"}
Response
{
"data": {
"connectChessCom": {
"errors": ["xyz789"],
"integrationConnection": IntegrationConnection
}
}
}
connectStrava
Description
Starts the Strava OAuth connect flow. Open the returned URL in an in-app browser.
Response
Returns a ConnectStravaPayload!
Example
Query
mutation connectStrava {
connectStrava {
authorizeUrl
errors
}
}
Response
{
"data": {
"connectStrava": {
"authorizeUrl": "xyz789",
"errors": ["xyz789"]
}
}
}
createAllyInvite
Description
Creates a new accountability-partner invite token for the authenticated user.
Response
Returns a CreateAllyInvitePayload!
Example
Query
mutation createAllyInvite {
createAllyInvite {
errors
invite {
...AllyInviteFragment
}
}
}
Response
{
"data": {
"createAllyInvite": {
"errors": ["xyz789"],
"invite": AllyInvite
}
}
}
createCheckoutSession
Description
Creates a Stripe Checkout session for a Supporter plan. Returns a redirect URL.
Response
Returns a CreateCheckoutSessionPayload!
Arguments
| Name | Description |
|---|---|
amountCents - Int
|
Custom amount in cents for lifetime plan (min 10000 = $100). Ignored for other plans. |
cancelUrl - String!
|
URL to redirect to if the user cancels checkout. |
planSlug - String!
|
Plan to purchase: monthly, yearly, or lifetime. |
successUrl - String!
|
URL to redirect to after successful checkout. |
Example
Query
mutation createCheckoutSession(
$amountCents: Int,
$cancelUrl: String!,
$planSlug: String!,
$successUrl: String!
) {
createCheckoutSession(
amountCents: $amountCents,
cancelUrl: $cancelUrl,
planSlug: $planSlug,
successUrl: $successUrl
) {
checkoutUrl
errors
}
}
Variables
{
"amountCents": 123,
"cancelUrl": "xyz789",
"planSlug": "xyz789",
"successUrl": "xyz789"
}
Response
{
"data": {
"createCheckoutSession": {
"checkoutUrl": "xyz789",
"errors": ["abc123"]
}
}
}
createCollectiveGoal
Description
Owner/Admin-only. Creates a team- or sub-community-scoped collective goal (GOALS-10). Gated by the teams_collective_goals kill switch.
Response
Returns a CreateCollectiveGoalPayload!
Example
Query
mutation createCollectiveGoal(
$communityId: String,
$description: String,
$name: String!,
$targetMetric: String!,
$targetValue: Int!,
$teamId: String!
) {
createCollectiveGoal(
communityId: $communityId,
description: $description,
name: $name,
targetMetric: $targetMetric,
targetValue: $targetValue,
teamId: $teamId
) {
collectiveGoal {
...CollectiveGoalFragment
}
errors
teamReadOnly
}
}
Variables
{
"communityId": "xyz789",
"description": "xyz789",
"name": "abc123",
"targetMetric": "xyz789",
"targetValue": 987,
"teamId": "abc123"
}
Response
{
"data": {
"createCollectiveGoal": {
"collectiveGoal": CollectiveGoal,
"errors": ["abc123"],
"teamReadOnly": false
}
}
}
createCommunity
Description
Creates a new community that users can join to share goals and support each other.
Response
Returns a CreateCommunityPayload!
Arguments
| Name | Description |
|---|---|
category - String!
|
The interest category that best represents this community (e.g. fitness, learning, wellness). |
coverImageFile - Upload
|
Cover image file upload. Takes precedence over cover_image_url. |
coverImageUrl - String
|
Optional URL for the community cover or banner image. |
description - String!
|
A short description of the community purpose and focus. |
guidelines - String
|
Optional community rules or participation guidelines shown to members. |
name - String!
|
The display name of the community. |
privacy - String!
|
Visibility setting for the community. Accepted values: public or private. |
Example
Query
mutation createCommunity(
$category: String!,
$coverImageFile: Upload,
$coverImageUrl: String,
$description: String!,
$guidelines: String,
$name: String!,
$privacy: String!
) {
createCommunity(
category: $category,
coverImageFile: $coverImageFile,
coverImageUrl: $coverImageUrl,
description: $description,
guidelines: $guidelines,
name: $name,
privacy: $privacy
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"category": "xyz789",
"coverImageFile": Upload,
"coverImageUrl": "xyz789",
"description": "xyz789",
"guidelines": "xyz789",
"name": "xyz789",
"privacy": "xyz789"
}
Response
{
"data": {
"createCommunity": {
"community": Community,
"errors": ["abc123"]
}
}
}
createCommunityChallenge
Description
Creates a time-boxed challenge inside a community. Community admin only.
Response
Returns a CreateCommunityChallengePayload!
Arguments
| Name | Description |
|---|---|
badgeIcon - String!
|
Emoji or icon for the completion badge. |
badgeName - String!
|
Name of the completion badge. |
communityId - ID!
|
public_id of the community to create the challenge in. |
description - String
|
Optional description of the challenge. |
endDate - ISO8601Date!
|
Date when the challenge ends. |
name - String!
|
Display name of the challenge. |
startDate - ISO8601Date!
|
Date when the challenge begins. |
targetGoalCount - Int
|
Number of qualifying goal events needed to complete. Defaults to 1. |
targetGoalTypeId - ID
|
Optional GoalType ID to restrict which events count. Nil means any goal event counts. |
Example
Query
mutation createCommunityChallenge(
$badgeIcon: String!,
$badgeName: String!,
$communityId: ID!,
$description: String,
$endDate: ISO8601Date!,
$name: String!,
$startDate: ISO8601Date!,
$targetGoalCount: Int,
$targetGoalTypeId: ID
) {
createCommunityChallenge(
badgeIcon: $badgeIcon,
badgeName: $badgeName,
communityId: $communityId,
description: $description,
endDate: $endDate,
name: $name,
startDate: $startDate,
targetGoalCount: $targetGoalCount,
targetGoalTypeId: $targetGoalTypeId
) {
communityChallenge {
...CommunityChallengeFragment
}
errors
}
}
Variables
{
"badgeIcon": "xyz789",
"badgeName": "abc123",
"communityId": "4",
"description": "xyz789",
"endDate": ISO8601Date,
"name": "abc123",
"startDate": ISO8601Date,
"targetGoalCount": 987,
"targetGoalTypeId": "4"
}
Response
{
"data": {
"createCommunityChallenge": {
"communityChallenge": CommunityChallenge,
"errors": ["abc123"]
}
}
}
createCommunityPost
Description
Creates a post in a community. Supports text updates and goal shares.
Response
Returns a CreateCommunityPostPayload!
Example
Query
mutation createCommunityPost(
$communityId: ID!,
$content: String!,
$type: String!
) {
createCommunityPost(
communityId: $communityId,
content: $content,
type: $type
) {
errors
post {
...CommunityPostFragment
}
}
}
Variables
{
"communityId": "4",
"content": "abc123",
"type": "abc123"
}
Response
{
"data": {
"createCommunityPost": {
"errors": ["xyz789"],
"post": CommunityPost
}
}
}
createFeedbackComment
Description
Adds a comment to a feedback post.
Response
Returns a CreateFeedbackCommentPayload!
Example
Query
mutation createFeedbackComment(
$body: String!,
$isOfficial: Boolean,
$postId: ID!
) {
createFeedbackComment(
body: $body,
isOfficial: $isOfficial,
postId: $postId
) {
errors
feedbackComment {
...FeedbackCommentFragment
}
}
}
Variables
{
"body": "abc123",
"isOfficial": true,
"postId": "4"
}
Response
{
"data": {
"createFeedbackComment": {
"errors": ["abc123"],
"feedbackComment": FeedbackComment
}
}
}
createFeedbackPost
Description
Creates a new feedback post (feature request, improvement, bug report).
Response
Returns a CreateFeedbackPostPayload!
Example
Query
mutation createFeedbackPost(
$category: String!,
$description: String,
$tagIds: [ID!],
$title: String!
) {
createFeedbackPost(
category: $category,
description: $description,
tagIds: $tagIds,
title: $title
) {
errors
feedbackPost {
...FeedbackPostFragment
}
}
}
Variables
{
"category": "xyz789",
"description": "abc123",
"tagIds": [4],
"title": "abc123"
}
Response
{
"data": {
"createFeedbackPost": {
"errors": ["abc123"],
"feedbackPost": FeedbackPost
}
}
}
createFeedbackTag
Description
Creates a new feedback tag (admin only).
Response
Returns a CreateFeedbackTagPayload!
Example
Query
mutation createFeedbackTag(
$description: String,
$name: String!
) {
createFeedbackTag(
description: $description,
name: $name
) {
errors
feedbackTag {
...FeedbackTagFragment
}
}
}
Variables
{
"description": "abc123",
"name": "abc123"
}
Response
{
"data": {
"createFeedbackTag": {
"errors": ["xyz789"],
"feedbackTag": FeedbackTag
}
}
}
createSeasonalEvent
Description
Admin only. Creates a platform-wide seasonal event.
Response
Returns a CreateSeasonalEventPayload!
Arguments
| Name | Description |
|---|---|
badgeIcon - String!
|
|
badgeName - String!
|
|
description - String
|
|
endDate - ISO8601Date!
|
|
name - String!
|
|
slug - String!
|
|
startDate - ISO8601Date!
|
|
targetGoalCount - Int
|
Example
Query
mutation createSeasonalEvent(
$badgeIcon: String!,
$badgeName: String!,
$description: String,
$endDate: ISO8601Date!,
$name: String!,
$slug: String!,
$startDate: ISO8601Date!,
$targetGoalCount: Int
) {
createSeasonalEvent(
badgeIcon: $badgeIcon,
badgeName: $badgeName,
description: $description,
endDate: $endDate,
name: $name,
slug: $slug,
startDate: $startDate,
targetGoalCount: $targetGoalCount
) {
errors
seasonalEvent {
...SeasonalEventFragment
}
}
}
Variables
{
"badgeIcon": "abc123",
"badgeName": "xyz789",
"description": "xyz789",
"endDate": ISO8601Date,
"name": "abc123",
"slug": "xyz789",
"startDate": ISO8601Date,
"targetGoalCount": 123
}
Response
{
"data": {
"createSeasonalEvent": {
"errors": ["abc123"],
"seasonalEvent": SeasonalEvent
}
}
}
createSubCommunity
Description
Owner/Admin-only. Creates a new sub-community (room) scoped to the team.
Response
Returns a CreateSubCommunityPayload!
Example
Query
mutation createSubCommunity(
$description: String,
$icon: String,
$joinPolicy: String,
$leadMembershipId: String,
$makeDefault: Boolean,
$name: String!,
$teamId: String!
) {
createSubCommunity(
description: $description,
icon: $icon,
joinPolicy: $joinPolicy,
leadMembershipId: $leadMembershipId,
makeDefault: $makeDefault,
name: $name,
teamId: $teamId
) {
community {
...CommunityFragment
}
errors
teamReadOnly
}
}
Variables
{
"description": "xyz789",
"icon": "xyz789",
"joinPolicy": "abc123",
"leadMembershipId": "xyz789",
"makeDefault": true,
"name": "abc123",
"teamId": "abc123"
}
Response
{
"data": {
"createSubCommunity": {
"community": Community,
"errors": ["xyz789"],
"teamReadOnly": false
}
}
}
createTeamInvite
Description
Owner/Admin-only. Creates a link (and optionally email-targeted) invite for a team. Email delivery additionally requires the teams_bulk_invite kill switch — the invite/link is always created regardless.
Response
Returns a CreateTeamInvitePayload!
Example
Query
mutation createTeamInvite(
$email: String,
$preselectedCommunityIds: [String!],
$teamId: String!,
$teamRole: String
) {
createTeamInvite(
email: $email,
preselectedCommunityIds: $preselectedCommunityIds,
teamId: $teamId,
teamRole: $teamRole
) {
errors
joinUrl
teamInvite {
...TeamInviteFragment
}
teamReadOnly
}
}
Variables
{
"email": "xyz789",
"preselectedCommunityIds": ["xyz789"],
"teamId": "abc123",
"teamRole": "xyz789"
}
Response
{
"data": {
"createTeamInvite": {
"errors": ["abc123"],
"joinUrl": "xyz789",
"teamInvite": TeamInvite,
"teamReadOnly": false
}
}
}
declineAllyRequest
Description
Declines a pending ally request.
Response
Returns a DeclineAllyRequestPayload!
Arguments
| Name | Description |
|---|---|
requestId - ID!
|
public_id of the UserAlly record (the pending request) to decline. |
Example
Query
mutation declineAllyRequest($requestId: ID!) {
declineAllyRequest(requestId: $requestId) {
errors
success
}
}
Variables
{"requestId": "4"}
Response
{
"data": {
"declineAllyRequest": {
"errors": ["xyz789"],
"success": false
}
}
}
declinePartnerRequest
Description
Declines a pending accountability partner request from an ally.
Response
Returns a DeclinePartnerRequestPayload!
Arguments
| Name | Description |
|---|---|
allyPublicId - ID!
|
public_id of the ally whose partner request to decline. |
Example
Query
mutation declinePartnerRequest($allyPublicId: ID!) {
declinePartnerRequest(allyPublicId: $allyPublicId) {
errors
userAlly {
...UserAllyFragment
}
}
}
Variables
{"allyPublicId": "4"}
Response
{
"data": {
"declinePartnerRequest": {
"errors": ["xyz789"],
"userAlly": UserAlly
}
}
}
deleteDemoEntity
Description
Delete a demo user/goal/community. super_admin only.
Response
Returns a DeleteDemoEntityPayload!
Example
Query
mutation deleteDemoEntity(
$entityId: ID!,
$entityType: String!
) {
deleteDemoEntity(
entityId: $entityId,
entityType: $entityType
) {
errors
success
}
}
Variables
{
"entityId": "4",
"entityType": "xyz789"
}
Response
{
"data": {
"deleteDemoEntity": {
"errors": ["xyz789"],
"success": true
}
}
}
deleteNotification
Description
Permanently deletes a notification record for the authenticated user.
Response
Returns a DeleteNotificationPayload!
Arguments
| Name | Description |
|---|---|
id - ID!
|
The public ID of the notification to delete. |
Example
Query
mutation deleteNotification($id: ID!) {
deleteNotification(id: $id) {
errors
result {
...ResultFragment
}
}
}
Variables
{"id": "4"}
Response
{
"data": {
"deleteNotification": {
"errors": ["abc123"],
"result": Result
}
}
}
deleteOwnAccount
Description
Permanently deletes the authenticated user account and all personal data.
Response
Returns a DeleteOwnAccountPayload!
Example
Query
mutation deleteOwnAccount {
deleteOwnAccount {
errors
success
}
}
Response
{
"data": {
"deleteOwnAccount": {
"errors": ["abc123"],
"success": true
}
}
}
disconnectIntegrationConnection
Description
Disconnects a connected provider. Past check-ins stay; future activity stops syncing.
Response
Returns a DisconnectIntegrationConnectionPayload!
Arguments
| Name | Description |
|---|---|
integrationConnectionId - ID!
|
public_id of the connection to disconnect. |
Example
Query
mutation disconnectIntegrationConnection($integrationConnectionId: ID!) {
disconnectIntegrationConnection(integrationConnectionId: $integrationConnectionId) {
errors
integrationConnection {
...IntegrationConnectionFragment
}
}
}
Variables
{"integrationConnectionId": "4"}
Response
{
"data": {
"disconnectIntegrationConnection": {
"errors": ["xyz789"],
"integrationConnection": IntegrationConnection
}
}
}
dismissDashboardHint
Description
Permanently dismisses a v4.15 dashboard hierarchy one-time surface (migration note or a relocation hint) for the authenticated user.
Response
Returns a DismissDashboardHintPayload!
Arguments
| Name | Description |
|---|---|
hint - String!
|
migration_note | relocation_community | relocation_achieve |
Example
Query
mutation dismissDashboardHint($hint: String!) {
dismissDashboardHint(hint: $hint) {
success
}
}
Variables
{"hint": "xyz789"}
Response
{"data": {"dismissDashboardHint": {"success": false}}}
dismissEnneagramCard
Description
Permanently dismisses the Enneagram dashboard prompt card for the authenticated user.
Response
Returns a DismissEnneagramCardPayload!
Example
Query
mutation dismissEnneagramCard {
dismissEnneagramCard {
success
}
}
Response
{"data": {"dismissEnneagramCard": {"success": true}}}
dismissHabitIntegrationMapping
Description
Removes a habit mapping.
Response
Returns a DismissHabitIntegrationMappingPayload!
Arguments
| Name | Description |
|---|---|
mappingId - ID!
|
public_id of the mapping to dismiss. |
Example
Query
mutation dismissHabitIntegrationMapping($mappingId: ID!) {
dismissHabitIntegrationMapping(mappingId: $mappingId) {
errors
mapping {
...HabitIntegrationMappingFragment
}
}
}
Variables
{"mappingId": "4"}
Response
{
"data": {
"dismissHabitIntegrationMapping": {
"errors": ["abc123"],
"mapping": HabitIntegrationMapping
}
}
}
editHabitIntegrationMapping
Description
Re-points an existing habit mapping at a different habit.
Response
Returns an EditHabitIntegrationMappingPayload!
Example
Query
mutation editHabitIntegrationMapping(
$goalId: ID!,
$mappingId: ID!
) {
editHabitIntegrationMapping(
goalId: $goalId,
mappingId: $mappingId
) {
errors
mapping {
...HabitIntegrationMappingFragment
}
}
}
Variables
{
"goalId": "4",
"mappingId": "4"
}
Response
{
"data": {
"editHabitIntegrationMapping": {
"errors": ["abc123"],
"mapping": HabitIntegrationMapping
}
}
}
endPartnership
Description
Ends the current accountability partnership with an ally.
Response
Returns an EndPartnershipPayload!
Arguments
| Name | Description |
|---|---|
allyPublicId - ID!
|
public_id of the accountability partner to end partnership with. |
Example
Query
mutation endPartnership($allyPublicId: ID!) {
endPartnership(allyPublicId: $allyPublicId) {
errors
userAlly {
...UserAllyFragment
}
}
}
Variables
{"allyPublicId": "4"}
Response
{
"data": {
"endPartnership": {
"errors": ["abc123"],
"userAlly": UserAlly
}
}
}
enqueueClear
Description
Enqueues a full demo-data clear. super_admin only.
Response
Returns an EnqueueClearPayload!
Example
Query
mutation enqueueClear {
enqueueClear {
errors
jobId
}
}
Response
{
"data": {
"enqueueClear": {
"errors": ["abc123"],
"jobId": "abc123"
}
}
}
enqueueReseed
Description
Enqueues a full demo-data reseed. super_admin only.
Response
Returns an EnqueueReseedPayload!
Example
Query
mutation enqueueReseed {
enqueueReseed {
errors
jobId
}
}
Response
{
"data": {
"enqueueReseed": {
"errors": ["xyz789"],
"jobId": "xyz789"
}
}
}
enqueueScopeReset
Description
Enqueues a scope reset for a single demo domain. super_admin only.
Response
Returns an EnqueueScopeResetPayload!
Arguments
| Name | Description |
|---|---|
scope - String!
|
Example
Query
mutation enqueueScopeReset($scope: String!) {
enqueueScopeReset(scope: $scope) {
errors
jobId
scope
}
}
Variables
{"scope": "abc123"}
Response
{
"data": {
"enqueueScopeReset": {
"errors": ["abc123"],
"jobId": "xyz789",
"scope": "xyz789"
}
}
}
ensureTodaysCoachMessage
Description
Ensures a coach message exists for the user today, generating one via AI on the first daily call.
Response
Returns an EnsureTodaysCoachMessagePayload!
Example
Query
mutation ensureTodaysCoachMessage {
ensureTodaysCoachMessage {
generated
insight
}
}
Response
{
"data": {
"ensureTodaysCoachMessage": {
"generated": false,
"insight": "xyz789"
}
}
}
executeGdprDeletion
Description
Runs the GDPR deletion cascade for a request. super_admin + step-up required.
Response
Returns an ExecuteDeletionPayload!
Arguments
| Name | Description |
|---|---|
publicId - String!
|
Example
Query
mutation executeGdprDeletion($publicId: String!) {
executeGdprDeletion(publicId: $publicId) {
errors
gdprRequest {
...GdprRequestFragment
}
}
}
Variables
{"publicId": "xyz789"}
Response
{
"data": {
"executeGdprDeletion": {
"errors": ["xyz789"],
"gdprRequest": GdprRequest
}
}
}
executeGdprExport
Description
Enqueues the export build job for a GDPR request. super_admin or support only.
Response
Returns an ExecuteExportPayload!
Arguments
| Name | Description |
|---|---|
publicId - String!
|
Example
Query
mutation executeGdprExport($publicId: String!) {
executeGdprExport(publicId: $publicId) {
errors
gdprRequest {
...GdprRequestFragment
}
}
}
Variables
{"publicId": "xyz789"}
Response
{
"data": {
"executeGdprExport": {
"errors": ["abc123"],
"gdprRequest": GdprRequest
}
}
}
followCommunity
Description
Follows a community to receive updates without becoming a full member.
Response
Returns a FollowCommunityPayload!
Example
Query
mutation followCommunity(
$communityId: ID!,
$userId: ID!
) {
followCommunity(
communityId: $communityId,
userId: $userId
) {
result {
...ResultFragment
}
}
}
Variables
{
"communityId": "4",
"userId": "4"
}
Response
{"data": {"followCommunity": {"result": Result}}}
generateGoalDraft
Description
Uses AI to draft a complete goal (title, category, kind, target date, why, milestones) from a freeform idea.
Response
Returns a GenerateGoalDraftPayload!
Arguments
| Name | Description |
|---|---|
idea - String!
|
The user's freeform sentence describing what they want to achieve. |
Example
Query
mutation generateGoalDraft($idea: String!) {
generateGoalDraft(idea: $idea) {
aiRequest {
...AiRequestFragment
}
draft {
...GoalDraftFragment
}
}
}
Variables
{"idea": "xyz789"}
Response
{
"data": {
"generateGoalDraft": {
"aiRequest": AiRequest,
"draft": GoalDraft
}
}
}
generateMilestones
Description
Uses AI to generate a suggested list of milestone sub-goals for a given goal.
Response
Returns a GenerateMilestonesPayload!
Example
Query
mutation generateMilestones(
$goalContext: String,
$goalName: String!
) {
generateMilestones(
goalContext: $goalContext,
goalName: $goalName
) {
aiRequest {
...AiRequestFragment
}
milestones
}
}
Variables
{
"goalContext": "xyz789",
"goalName": "xyz789"
}
Response
{
"data": {
"generateMilestones": {
"aiRequest": AiRequest,
"milestones": ["abc123"]
}
}
}
getAdvice
Description
Uses AI to provide personalized advice and tips for making progress on a goal.
Response
Returns a GetAdvicePayload!
Example
Query
mutation getAdvice(
$goalId: String,
$page: String!,
$userMessage: String!
) {
getAdvice(
goalId: $goalId,
page: $page,
userMessage: $userMessage
) {
advice
aiRequest {
...AiRequestFragment
}
suggestedActions {
...CoachActionFragment
}
}
}
Variables
{
"goalId": "xyz789",
"page": "abc123",
"userMessage": "abc123"
}
Response
{
"data": {
"getAdvice": {
"advice": "xyz789",
"aiRequest": AiRequest,
"suggestedActions": [CoachAction]
}
}
}
getBillingPortalUrl
Description
Returns a Stripe Billing Portal URL for managing the Supporter subscription.
Response
Returns a GetBillingPortalUrlPayload!
Arguments
| Name | Description |
|---|---|
returnUrl - String!
|
URL to redirect back to after the user leaves the portal. |
Example
Query
mutation getBillingPortalUrl($returnUrl: String!) {
getBillingPortalUrl(returnUrl: $returnUrl) {
errors
portalUrl
}
}
Variables
{"returnUrl": "xyz789"}
Response
{
"data": {
"getBillingPortalUrl": {
"errors": ["abc123"],
"portalUrl": "abc123"
}
}
}
getInsight
Description
Uses AI to generate insights about the user progress, patterns, and trends across their goals.
Response
Returns a GetInsightPayload!
Arguments
| Name | Description |
|---|---|
pageContext - String!
|
A string describing the current page or view the user is on, used to tailor the insight to what they are looking at (e.g. "goals dashboard", "mood log history"). |
Example
Query
mutation getInsight($pageContext: String!) {
getInsight(pageContext: $pageContext) {
aiRequest {
...AiRequestFragment
}
ctaLabel
insightId
insightType
message
title
}
}
Variables
{"pageContext": "xyz789"}
Response
{
"data": {
"getInsight": {
"aiRequest": AiRequest,
"ctaLabel": "abc123",
"insightId": "abc123",
"insightType": "abc123",
"message": "abc123",
"title": "abc123"
}
}
}
grantAchievementDebug
Description
Debug/seed-only: grants a badge to the current user. Not available in production.
Response
Returns a GrantAchievementDebugPayload!
Arguments
| Name | Description |
|---|---|
achievementKey - String!
|
Badge key from the achievement catalog to grant to the current user. |
Example
Query
mutation grantAchievementDebug($achievementKey: String!) {
grantAchievementDebug(achievementKey: $achievementKey) {
errors
success
}
}
Variables
{"achievementKey": "abc123"}
Response
{
"data": {
"grantAchievementDebug": {
"errors": ["xyz789"],
"success": false
}
}
}
inviteAllyToCommunity
Description
Invites an accepted ally to join a community the current user is a member of.
Response
Returns an InviteAllyToCommunityPayload!
Example
Query
mutation inviteAllyToCommunity(
$allyPublicId: ID!,
$communityPublicId: ID!
) {
inviteAllyToCommunity(
allyPublicId: $allyPublicId,
communityPublicId: $communityPublicId
) {
alreadyInvited
errors
success
}
}
Variables
{"allyPublicId": 4, "communityPublicId": 4}
Response
{
"data": {
"inviteAllyToCommunity": {
"alreadyInvited": false,
"errors": ["abc123"],
"success": true
}
}
}
joinCommunity
Description
Joins the authenticated user to an existing community.
Response
Returns a JoinCommunityPayload!
Arguments
| Name | Description |
|---|---|
communityId - ID!
|
The public ID of the community to join. |
Example
Query
mutation joinCommunity($communityId: ID!) {
joinCommunity(communityId: $communityId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"communityId": "4"}
Response
{
"data": {
"joinCommunity": {
"errors": ["xyz789"],
"result": Result
}
}
}
joinCommunityChallenge
Description
Joins the authenticated user to an active community challenge.
Response
Returns a JoinCommunityChallengePayload!
Arguments
| Name | Description |
|---|---|
communityChallengeId - ID!
|
public_id of the challenge to join. |
Example
Query
mutation joinCommunityChallenge($communityChallengeId: ID!) {
joinCommunityChallenge(communityChallengeId: $communityChallengeId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"communityChallengeId": "4"}
Response
{
"data": {
"joinCommunityChallenge": {
"errors": ["abc123"],
"result": Result
}
}
}
joinSeasonalEvent
Description
Joins the authenticated user to an active seasonal event. Gated by the seasonal_events_enabled kill switch.
Response
Returns a JoinSeasonalEventPayload!
Arguments
| Name | Description |
|---|---|
seasonalEventId - ID!
|
public_id of the event to join. |
Example
Query
mutation joinSeasonalEvent($seasonalEventId: ID!) {
joinSeasonalEvent(seasonalEventId: $seasonalEventId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"seasonalEventId": 4}
Response
{
"data": {
"joinSeasonalEvent": {
"errors": ["xyz789"],
"result": Result
}
}
}
joinSubCommunity
Description
Any team member may join an open sub-community.
Response
Returns a JoinSubCommunityPayload!
Example
Query
mutation joinSubCommunity(
$communityId: String!,
$teamId: String!
) {
joinSubCommunity(
communityId: $communityId,
teamId: $teamId
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"communityId": "abc123",
"teamId": "xyz789"
}
Response
{
"data": {
"joinSubCommunity": {
"community": Community,
"errors": ["abc123"]
}
}
}
leaveCommunity
Description
Removes the authenticated user from a community they are a member of.
Response
Returns a LeaveCommunityPayload!
Example
Query
mutation leaveCommunity(
$communityId: ID!,
$userId: ID!
) {
leaveCommunity(
communityId: $communityId,
userId: $userId
) {
result {
...ResultFragment
}
}
}
Variables
{
"communityId": "4",
"userId": "4"
}
Response
{"data": {"leaveCommunity": {"result": Result}}}
leaveCommunityChallenge
Description
Removes the authenticated user from a community challenge.
Response
Returns a LeaveCommunityChallengePayload!
Arguments
| Name | Description |
|---|---|
communityChallengeId - ID!
|
public_id of the challenge to leave. |
Example
Query
mutation leaveCommunityChallenge($communityChallengeId: ID!) {
leaveCommunityChallenge(communityChallengeId: $communityChallengeId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"communityChallengeId": "4"}
Response
{
"data": {
"leaveCommunityChallenge": {
"errors": ["abc123"],
"result": Result
}
}
}
leaveSeasonalEvent
Description
Removes the authenticated user from a seasonal event. Gated by the seasonal_events_enabled kill switch.
Response
Returns a LeaveSeasonalEventPayload!
Arguments
| Name | Description |
|---|---|
seasonalEventId - ID!
|
public_id of the event to leave. |
Example
Query
mutation leaveSeasonalEvent($seasonalEventId: ID!) {
leaveSeasonalEvent(seasonalEventId: $seasonalEventId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"seasonalEventId": "4"}
Response
{
"data": {
"leaveSeasonalEvent": {
"errors": ["xyz789"],
"result": Result
}
}
}
leaveSubCommunity
Description
Self-service leave for a sub-community. Idempotent; the default room cannot be left.
Response
Returns a LeaveSubCommunityPayload!
Example
Query
mutation leaveSubCommunity(
$communityId: String!,
$teamId: String!
) {
leaveSubCommunity(
communityId: $communityId,
teamId: $teamId
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"communityId": "abc123",
"teamId": "abc123"
}
Response
{
"data": {
"leaveSubCommunity": {
"community": Community,
"errors": ["xyz789"]
}
}
}
mintCheckInToken
Description
Mints a durable, device-scoped check-in token for background widget check-ins. Returns no token when widget_background_sync_enabled is off for the user.
Response
Returns a MintCheckInTokenPayload!
Arguments
| Name | Description |
|---|---|
deviceId - String!
|
Client-generated, stable identifier for this device. |
Example
Query
mutation mintCheckInToken($deviceId: String!) {
mintCheckInToken(deviceId: $deviceId) {
errors
expiresAt
token
}
}
Variables
{"deviceId": "abc123"}
Response
{
"data": {
"mintCheckInToken": {
"errors": ["abc123"],
"expiresAt": ISO8601DateTime,
"token": "xyz789"
}
}
}
optIntoCollectiveGoal
Description
Links a personal goal to a collective goal as a contribution (GOALS-11). Gated by the teams_collective_goals kill switch.
Response
Returns an OptIntoCollectiveGoalPayload!
Example
Query
mutation optIntoCollectiveGoal(
$collectiveGoalId: String!,
$personalGoalId: String!
) {
optIntoCollectiveGoal(
collectiveGoalId: $collectiveGoalId,
personalGoalId: $personalGoalId
) {
collectiveGoal {
...CollectiveGoalFragment
}
errors
}
}
Variables
{
"collectiveGoalId": "abc123",
"personalGoalId": "abc123"
}
Response
{
"data": {
"optIntoCollectiveGoal": {
"collectiveGoal": CollectiveGoal,
"errors": ["xyz789"]
}
}
}
optOutOfCollectiveGoal
Description
Self-service opt-out from a collective goal (GOALS-12). Preserves contribution history — never destroys the row. Gated by the teams_collective_goals kill switch.
Response
Returns an OptOutOfCollectiveGoalPayload!
Arguments
| Name | Description |
|---|---|
collectiveGoalId - String!
|
Example
Query
mutation optOutOfCollectiveGoal($collectiveGoalId: String!) {
optOutOfCollectiveGoal(collectiveGoalId: $collectiveGoalId) {
collectiveGoal {
...CollectiveGoalFragment
}
errors
}
}
Variables
{"collectiveGoalId": "abc123"}
Response
{
"data": {
"optOutOfCollectiveGoal": {
"collectiveGoal": CollectiveGoal,
"errors": ["abc123"]
}
}
}
pauseAiEmployee
Response
Returns a PauseAiEmployeePayload!
Example
Query
mutation pauseAiEmployee(
$active: Boolean!,
$employeeId: String!
) {
pauseAiEmployee(
active: $active,
employeeId: $employeeId
) {
employee {
...AiEmployeeFragment
}
errors
}
}
Variables
{"active": false, "employeeId": "abc123"}
Response
{
"data": {
"pauseAiEmployee": {
"employee": AiEmployee,
"errors": ["abc123"]
}
}
}
pauseIntegrationConnection
Description
Pauses a connected provider — stops syncing new activity until resumed.
Response
Returns a PauseIntegrationConnectionPayload!
Arguments
| Name | Description |
|---|---|
integrationConnectionId - ID!
|
public_id of the connection to pause. |
Example
Query
mutation pauseIntegrationConnection($integrationConnectionId: ID!) {
pauseIntegrationConnection(integrationConnectionId: $integrationConnectionId) {
errors
integrationConnection {
...IntegrationConnectionFragment
}
}
}
Variables
{"integrationConnectionId": "4"}
Response
{
"data": {
"pauseIntegrationConnection": {
"errors": ["xyz789"],
"integrationConnection": IntegrationConnection
}
}
}
promoteTeamMember
Description
Owner/Admin-only. Changes a team member's role. Cannot set role to owner — use transferTeamBillingOwnership for ownership transfer.
Response
Returns a PromoteTeamMemberPayload!
Example
Query
mutation promoteTeamMember(
$role: String!,
$teamId: String!,
$teamMembershipId: String!
) {
promoteTeamMember(
role: $role,
teamId: $teamId,
teamMembershipId: $teamMembershipId
) {
errors
teamMembership {
...TeamMembershipFragment
}
}
}
Variables
{
"role": "xyz789",
"teamId": "abc123",
"teamMembershipId": "xyz789"
}
Response
{
"data": {
"promoteTeamMember": {
"errors": ["xyz789"],
"teamMembership": TeamMembership
}
}
}
recordCriticalPathPlay
Description
Records a completed Critical Path play for today. Idempotent — re-submitting returns the original play.
Response
Returns a RecordCriticalPathPlayPayload!
Example
Query
mutation recordCriticalPathPlay(
$cols: Int,
$elapsedSeconds: Int!,
$rows: Int
) {
recordCriticalPathPlay(
cols: $cols,
elapsedSeconds: $elapsedSeconds,
rows: $rows
) {
errors
status {
...CriticalPathPlayStatusFragment
}
stimXpEarned
}
}
Variables
{"cols": 987, "elapsedSeconds": 987, "rows": 123}
Response
{
"data": {
"recordCriticalPathPlay": {
"errors": ["abc123"],
"status": CriticalPathPlayStatus,
"stimXpEarned": 123
}
}
}
recordUserAction
Description
Records an onboarding-funnel UserAction event from the client (METRIC-01). Allow-listed onboarding action names only.
Response
Returns a RecordUserActionPayload!
Example
Query
mutation recordUserAction(
$action: String!,
$metadata: JSON
) {
recordUserAction(
action: $action,
metadata: $metadata
) {
errors
result {
...ResultFragment
}
}
}
Variables
{"action": "abc123", "metadata": {}}
Response
{
"data": {
"recordUserAction": {
"errors": ["xyz789"],
"result": Result
}
}
}
refineDescription
Description
Uses AI to refine or generate a compelling goal description.
Response
Returns a RefineDescriptionPayload!
Example
Query
mutation refineDescription(
$currentDescription: String,
$goalName: String!
) {
refineDescription(
currentDescription: $currentDescription,
goalName: $goalName
) {
aiRequest {
...AiRequestFragment
}
description
}
}
Variables
{
"currentDescription": "abc123",
"goalName": "abc123"
}
Response
{
"data": {
"refineDescription": {
"aiRequest": AiRequest,
"description": "abc123"
}
}
}
refineGoal
Description
Uses AI to critique a not-yet-saved goal for specificity, a realistic target date, and right-sizing, returning up to 3 one-tap-acceptable suggestions.
Response
Returns a RefineGoalPayload!
Example
Query
mutation refineGoal(
$categoryName: String,
$description: String,
$kindName: String,
$milestones: [String!],
$name: String!,
$targetDate: String
) {
refineGoal(
categoryName: $categoryName,
description: $description,
kindName: $kindName,
milestones: $milestones,
name: $name,
targetDate: $targetDate
) {
aiRequest {
...AiRequestFragment
}
suggestions {
...GoalRefinementSuggestionFragment
}
}
}
Variables
{
"categoryName": "abc123",
"description": "xyz789",
"kindName": "abc123",
"milestones": [""],
"name": "xyz789",
"targetDate": "abc123"
}
Response
{
"data": {
"refineGoal": {
"aiRequest": AiRequest,
"suggestions": [GoalRefinementSuggestion]
}
}
}
rejectAiArtifact
Description
Rejects a pending AI artifact with a mandatory reason (minimum 10 characters).
Response
Returns a RejectAiArtifactPayload!
Example
Query
mutation rejectAiArtifact(
$artifactId: String!,
$rejectionReason: String!
) {
rejectAiArtifact(
artifactId: $artifactId,
rejectionReason: $rejectionReason
) {
artifact {
...AiArtifactFragment
}
errors
}
}
Variables
{
"artifactId": "xyz789",
"rejectionReason": "abc123"
}
Response
{
"data": {
"rejectAiArtifact": {
"artifact": AiArtifact,
"errors": ["abc123"]
}
}
}
removeAlly
Description
Removes an accepted ally relationship.
Response
Returns a RemoveAllyPayload!
Arguments
| Name | Description |
|---|---|
targetUserId - ID!
|
public_id of the ally to remove. |
Example
Query
mutation removeAlly($targetUserId: ID!) {
removeAlly(targetUserId: $targetUserId) {
errors
success
}
}
Variables
{"targetUserId": 4}
Response
{
"data": {
"removeAlly": {
"errors": ["abc123"],
"success": false
}
}
}
removeTeamMember
Description
Owner/Admin-only. Removes a member: clears their sub-community memberships, anonymizes their leaderboard entries, and soft-deletes their seat. The member's personal account is untouched.
Response
Returns a RemoveTeamMemberPayload!
Example
Query
mutation removeTeamMember(
$teamId: String!,
$teamMembershipId: String!
) {
removeTeamMember(
teamId: $teamId,
teamMembershipId: $teamMembershipId
) {
errors
teamMembership {
...TeamMembershipFragment
}
}
}
Variables
{
"teamId": "xyz789",
"teamMembershipId": "xyz789"
}
Response
{
"data": {
"removeTeamMember": {
"errors": ["abc123"],
"teamMembership": TeamMembership
}
}
}
reorderMilestones
Description
Atomically reorders a goal's milestone/roadmap steps by public_id.
Response
Returns a ReorderMilestonesPayload!
Example
Query
mutation reorderMilestones(
$goalId: ID!,
$orderedMilestoneIds: [ID!]!
) {
reorderMilestones(
goalId: $goalId,
orderedMilestoneIds: $orderedMilestoneIds
) {
errors
goal {
...GoalFragment
}
}
}
Variables
{"goalId": 4, "orderedMilestoneIds": ["4"]}
Response
{
"data": {
"reorderMilestones": {
"errors": ["xyz789"],
"goal": Goal
}
}
}
repairStreak
Description
Repairs a broken streak by charging XP and backfilling system-granted freeze completions for all missed days within the 24–48h repair window.
Response
Returns a RepairStreakPayload!
Arguments
| Name | Description |
|---|---|
goalId - ID!
|
public_id of the habit goal to repair. |
Example
Query
mutation repairStreak($goalId: ID!) {
repairStreak(goalId: $goalId) {
errors
goal {
...GoalFragment
}
user {
...UserFragment
}
}
}
Variables
{"goalId": 4}
Response
{
"data": {
"repairStreak": {
"errors": ["abc123"],
"goal": Goal,
"user": User
}
}
}
reportContent
Response
Returns a ReportContentPayload!
Example
Query
mutation reportContent(
$details: String,
$reason: String!,
$reportableId: ID!,
$reportableType: String!
) {
reportContent(
details: $details,
reason: $reason,
reportableId: $reportableId,
reportableType: $reportableType
) {
contentReport {
...ContentReportFragment
}
errors
}
}
Variables
{
"details": "abc123",
"reason": "abc123",
"reportableId": "4",
"reportableType": "xyz789"
}
Response
{
"data": {
"reportContent": {
"contentReport": ContentReport,
"errors": ["abc123"]
}
}
}
requestDataExport
Description
Requests a GDPR data export for the authenticated user. Subject to a 24h cooldown.
Response
Returns a RequestDataExportPayload!
Example
Query
mutation requestDataExport {
requestDataExport {
errors
gdprRequest {
...GdprRequestFragment
}
}
}
Response
{
"data": {
"requestDataExport": {
"errors": ["xyz789"],
"gdprRequest": GdprRequest
}
}
}
requestMagicCode
Description
Sends a 6-character sign-in code to the given email. Always returns success to avoid leaking account existence.
Response
Returns a RequestMagicCodePayload!
Arguments
| Name | Description |
|---|---|
email - String!
|
Example
Query
mutation requestMagicCode($email: String!) {
requestMagicCode(email: $email) {
errors
success
}
}
Variables
{"email": "xyz789"}
Response
{
"data": {
"requestMagicCode": {
"errors": ["abc123"],
"success": false
}
}
}
rerunHabitIntegrationMapping
Description
Re-scores a connection's not-yet-checked-in activities against the user's current habits.
Response
Returns a RerunHabitIntegrationMappingPayload!
Arguments
| Name | Description |
|---|---|
integrationConnectionId - ID!
|
public_id of the connection to re-run. |
Example
Query
mutation rerunHabitIntegrationMapping($integrationConnectionId: ID!) {
rerunHabitIntegrationMapping(integrationConnectionId: $integrationConnectionId) {
errors
proposals {
...MappingProposalFragment
}
}
}
Variables
{"integrationConnectionId": "4"}
Response
{
"data": {
"rerunHabitIntegrationMapping": {
"errors": ["abc123"],
"proposals": [MappingProposal]
}
}
}
resetOnboarding
Description
Clears the onboarding completion blob so the wizard re-triggers. Omit userPublicId to reset self (any authenticated user). Pass userPublicId to target another user (admin only). Idempotent.
Response
Returns a ResetOnboardingPayload!
Arguments
| Name | Description |
|---|---|
userPublicId - ID
|
Target user public ID. Admin-only. Omit to reset self. |
Example
Query
mutation resetOnboarding($userPublicId: ID) {
resetOnboarding(userPublicId: $userPublicId) {
errors
success
user {
...UserFragment
}
}
}
Variables
{"userPublicId": 4}
Response
{
"data": {
"resetOnboarding": {
"errors": ["xyz789"],
"success": false,
"user": User
}
}
}
resumeIntegrationConnection
Description
Resumes a paused connection.
Response
Returns a ResumeIntegrationConnectionPayload!
Arguments
| Name | Description |
|---|---|
integrationConnectionId - ID!
|
public_id of the connection to resume. |
Example
Query
mutation resumeIntegrationConnection($integrationConnectionId: ID!) {
resumeIntegrationConnection(integrationConnectionId: $integrationConnectionId) {
errors
integrationConnection {
...IntegrationConnectionFragment
}
}
}
Variables
{"integrationConnectionId": 4}
Response
{
"data": {
"resumeIntegrationConnection": {
"errors": ["abc123"],
"integrationConnection": IntegrationConnection
}
}
}
revertLastGoalEvent
Description
Soft-deletes the most recent progress event for a goal (Undo action).
Response
Returns a RevertLastGoalEventPayload!
Arguments
| Name | Description |
|---|---|
goalId - ID!
|
public_id of the goal whose last event should be reverted. |
Example
Query
mutation revertLastGoalEvent($goalId: ID!) {
revertLastGoalEvent(goalId: $goalId) {
errors
goal {
...GoalFragment
}
}
}
Variables
{"goalId": "4"}
Response
{
"data": {
"revertLastGoalEvent": {
"errors": ["xyz789"],
"goal": Goal
}
}
}
reviewContentFlag
Response
Returns a ReviewContentFlagPayload!
Example
Query
mutation reviewContentFlag(
$action: String!,
$flagId: String!
) {
reviewContentFlag(
action: $action,
flagId: $flagId
) {
contentFlag {
...ContentFlagFragment
}
errors
}
}
Variables
{
"action": "xyz789",
"flagId": "xyz789"
}
Response
{
"data": {
"reviewContentFlag": {
"contentFlag": ContentFlag,
"errors": ["xyz789"]
}
}
}
reviewContentReport
Response
Returns a ReviewContentReportPayload!
Example
Query
mutation reviewContentReport(
$action: String!,
$reportId: String!
) {
reviewContentReport(
action: $action,
reportId: $reportId
) {
contentReport {
...ContentReportFragment
}
errors
}
}
Variables
{
"action": "abc123",
"reportId": "abc123"
}
Response
{
"data": {
"reviewContentReport": {
"contentReport": ContentReport,
"errors": ["xyz789"]
}
}
}
revokeAllyInvite
Description
Revokes an active accountability-partner invite. Only the inviter may revoke.
Response
Returns a RevokeAllyInvitePayload!
Arguments
| Name | Description |
|---|---|
inviteToken - String!
|
Token of the invite to revoke. |
Example
Query
mutation revokeAllyInvite($inviteToken: String!) {
revokeAllyInvite(inviteToken: $inviteToken) {
errors
invite {
...AllyInviteFragment
}
}
}
Variables
{"inviteToken": "xyz789"}
Response
{
"data": {
"revokeAllyInvite": {
"errors": ["abc123"],
"invite": AllyInvite
}
}
}
revokeCheckInToken
Description
Revokes the check-in token(s) for a device — call on sign-out or device removal.
Response
Returns a RevokeCheckInTokenPayload!
Arguments
| Name | Description |
|---|---|
deviceId - String!
|
Identifier of the device being signed out or removed. |
Example
Query
mutation revokeCheckInToken($deviceId: String!) {
revokeCheckInToken(deviceId: $deviceId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"deviceId": "abc123"}
Response
{
"data": {
"revokeCheckInToken": {
"errors": ["xyz789"],
"result": Result
}
}
}
revokeTeamInvite
Description
Owner/Admin-only. Revokes a pending team invite.
Response
Returns a RevokeTeamInvitePayload!
Example
Query
mutation revokeTeamInvite(
$teamId: String!,
$teamInviteId: String!
) {
revokeTeamInvite(
teamId: $teamId,
teamInviteId: $teamInviteId
) {
errors
teamInvite {
...TeamInviteFragment
}
}
}
Variables
{
"teamId": "xyz789",
"teamInviteId": "xyz789"
}
Response
{
"data": {
"revokeTeamInvite": {
"errors": ["xyz789"],
"teamInvite": TeamInvite
}
}
}
seedIntegrationActivityDebug
Description
Debug/seed-only: seeds a fresh IntegrationActivity for the current user and surfaces it through the real auto-map pipeline (NewHabitToast). Not available in production.
Response
Returns a SeedIntegrationActivityDebugPayload!
Example
Query
mutation seedIntegrationActivityDebug(
$providerSlug: String!,
$tier: String!
) {
seedIntegrationActivityDebug(
providerSlug: $providerSlug,
tier: $tier
) {
decision
errors
integrationActivity {
...IntegrationActivityFragment
}
}
}
Variables
{
"providerSlug": "xyz789",
"tier": "xyz789"
}
Response
{
"data": {
"seedIntegrationActivityDebug": {
"decision": "xyz789",
"errors": ["xyz789"],
"integrationActivity": IntegrationActivity
}
}
}
sendAllyRequest
Description
Sends an ally request to another user.
Response
Returns a SendAllyRequestPayload!
Arguments
| Name | Description |
|---|---|
targetUserId - ID!
|
public_id of the user to send an ally request to. |
Example
Query
mutation sendAllyRequest($targetUserId: ID!) {
sendAllyRequest(targetUserId: $targetUserId) {
alreadyRequested
errors
userAlly {
...UserAllyFragment
}
}
}
Variables
{"targetUserId": 4}
Response
{
"data": {
"sendAllyRequest": {
"alreadyRequested": true,
"errors": ["abc123"],
"userAlly": UserAlly
}
}
}
sendEncouragement
Description
Sends a peer encouragement notification to another user. Idempotent: one per sender→receiver per day.
Response
Returns a SendEncouragementPayload!
Arguments
| Name | Description |
|---|---|
toUserPublicId - ID!
|
public_id of the user to encourage. |
Example
Query
mutation sendEncouragement($toUserPublicId: ID!) {
sendEncouragement(toUserPublicId: $toUserPublicId) {
errors
success
}
}
Variables
{"toUserPublicId": 4}
Response
{
"data": {
"sendEncouragement": {
"errors": ["xyz789"],
"success": false
}
}
}
sendPartnerNudge
Description
Sends a nudge notification to an accountability partner. Idempotent: one nudge per partnership per direction per day.
Response
Returns a SendPartnerNudgePayload!
Arguments
| Name | Description |
|---|---|
allyPublicId - ID!
|
public_id of the accountability partner to nudge. |
Example
Query
mutation sendPartnerNudge($allyPublicId: ID!) {
sendPartnerNudge(allyPublicId: $allyPublicId) {
errors
success
}
}
Variables
{"allyPublicId": 4}
Response
{
"data": {
"sendPartnerNudge": {
"errors": ["xyz789"],
"success": true
}
}
}
sendPartnerRequest
Description
Sends an accountability partner request to an accepted ally.
Response
Returns a SendPartnerRequestPayload!
Arguments
| Name | Description |
|---|---|
allyPublicId - ID!
|
public_id of the ally to request as accountability partner. |
Example
Query
mutation sendPartnerRequest($allyPublicId: ID!) {
sendPartnerRequest(allyPublicId: $allyPublicId) {
errors
userAlly {
...UserAllyFragment
}
}
}
Variables
{"allyPublicId": "4"}
Response
{
"data": {
"sendPartnerRequest": {
"errors": ["abc123"],
"userAlly": UserAlly
}
}
}
setColorTheme
Description
Sets the Supporter color theme for the authenticated user, synced across devices.
Response
Returns a SetColorThemePayload!
Arguments
| Name | Description |
|---|---|
slug - String!
|
Theme slug to activate. |
Example
Query
mutation setColorTheme($slug: String!) {
setColorTheme(slug: $slug) {
colorTheme
errors
}
}
Variables
{"slug": "abc123"}
Response
{
"data": {
"setColorTheme": {
"colorTheme": "xyz789",
"errors": ["xyz789"]
}
}
}
setCommunityEditorialSlot
Description
Admin only. Sets or clears the editorial slot for a community. Slot null unsets.
Response
Returns a SetCommunityEditorialSlotPayload!
Example
Query
mutation setCommunityEditorialSlot(
$communityId: ID!,
$position: Int,
$slot: String
) {
setCommunityEditorialSlot(
communityId: $communityId,
position: $position,
slot: $slot
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"communityId": 4,
"position": 987,
"slot": "abc123"
}
Response
{
"data": {
"setCommunityEditorialSlot": {
"community": Community,
"errors": ["abc123"]
}
}
}
setCommunityFeatured
Description
Admin only. Toggles whether a community is featured on the discovery page.
Response
Returns a SetCommunityFeaturedPayload!
Example
Query
mutation setCommunityFeatured(
$communityId: ID!,
$featured: Boolean!
) {
setCommunityFeatured(
communityId: $communityId,
featured: $featured
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{"communityId": 4, "featured": false}
Response
{
"data": {
"setCommunityFeatured": {
"community": Community,
"errors": ["abc123"]
}
}
}
setCriticalPathActiveTheme
Description
Sets the active visual theme for the authenticated user. Theme must be unlocked.
Response
Returns a SetCriticalPathActiveThemePayload!
Arguments
| Name | Description |
|---|---|
theme - String!
|
Theme key to activate. |
Example
Query
mutation setCriticalPathActiveTheme($theme: String!) {
setCriticalPathActiveTheme(theme: $theme) {
errors
status {
...StimXpStatusFragment
}
}
}
Variables
{"theme": "abc123"}
Response
{
"data": {
"setCriticalPathActiveTheme": {
"errors": ["abc123"],
"status": StimXpStatus
}
}
}
setCriticalPathReminderPreferences
Description
Sets the daily reminder preferences for the authenticated user.
Response
Example
Query
mutation setCriticalPathReminderPreferences(
$enabled: Boolean!,
$timeOfDay: String,
$timezone: String
) {
setCriticalPathReminderPreferences(
enabled: $enabled,
timeOfDay: $timeOfDay,
timezone: $timezone
) {
errors
preferences {
...CriticalPathReminderPreferencesFragment
}
}
}
Variables
{
"enabled": false,
"timeOfDay": "xyz789",
"timezone": "xyz789"
}
Response
{
"data": {
"setCriticalPathReminderPreferences": {
"errors": ["abc123"],
"preferences": CriticalPathReminderPreferences
}
}
}
setDefaultSubCommunity
Description
Owner/Admin-only. Reassigns the team's default landing room.
Response
Returns a SetDefaultSubCommunityPayload!
Example
Query
mutation setDefaultSubCommunity(
$communityId: String!,
$teamId: String!
) {
setDefaultSubCommunity(
communityId: $communityId,
teamId: $teamId
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"communityId": "xyz789",
"teamId": "xyz789"
}
Response
{
"data": {
"setDefaultSubCommunity": {
"community": Community,
"errors": ["abc123"]
}
}
}
setGoalPartnerSharing
Description
Toggles whether a confirmed accountability partner can see a private goal. Owner-only.
Response
Returns a SetGoalPartnerSharingPayload!
Example
Query
mutation setGoalPartnerSharing(
$goalId: ID!,
$sharedWithPartner: Boolean!
) {
setGoalPartnerSharing(
goalId: $goalId,
sharedWithPartner: $sharedWithPartner
) {
errors
goal {
...GoalFragment
}
}
}
Variables
{"goalId": "4", "sharedWithPartner": false}
Response
{
"data": {
"setGoalPartnerSharing": {
"errors": ["abc123"],
"goal": Goal
}
}
}
setGoalVisibility
Description
Sets who can see a goal: everyone, accepted allies only, or just the owner. Owner-only.
Response
Returns a SetGoalVisibilityPayload!
Arguments
| Name | Description |
|---|---|
goalId - ID!
|
public_id of the goal to update. |
visibility - GoalVisibilityEnum!
|
The new visibility tier for the goal. |
Example
Query
mutation setGoalVisibility(
$goalId: ID!,
$visibility: GoalVisibilityEnum!
) {
setGoalVisibility(
goalId: $goalId,
visibility: $visibility
) {
errors
goal {
...GoalFragment
}
}
}
Variables
{"goalId": 4, "visibility": "ALLIES"}
Response
{
"data": {
"setGoalVisibility": {
"errors": ["abc123"],
"goal": Goal
}
}
}
setLeaderboardVisibility
Description
Member-level opt-out from the team leaderboard (LEADERBOARD-3). Gated by the teams_leaderboards kill switch.
Response
Returns a SetLeaderboardVisibilityPayload!
Example
Query
mutation setLeaderboardVisibility(
$optedOut: Boolean!,
$teamId: String!
) {
setLeaderboardVisibility(
optedOut: $optedOut,
teamId: $teamId
) {
errors
optedOut
}
}
Variables
{"optedOut": true, "teamId": "abc123"}
Response
{
"data": {
"setLeaderboardVisibility": {
"errors": ["abc123"],
"optedOut": false
}
}
}
setSeasonalEventActive
Description
Admin only. Activates or deactivates a seasonal event. Events are historical once run, so this flips a flag rather than deleting the row.
Response
Returns a SetSeasonalEventActivePayload!
Example
Query
mutation setSeasonalEventActive(
$eventId: ID!,
$isActive: Boolean!
) {
setSeasonalEventActive(
eventId: $eventId,
isActive: $isActive
) {
errors
seasonalEvent {
...SeasonalEventFragment
}
}
}
Variables
{"eventId": 4, "isActive": true}
Response
{
"data": {
"setSeasonalEventActive": {
"errors": ["abc123"],
"seasonalEvent": SeasonalEvent
}
}
}
setTeamNotificationPreferences
Description
Sets the team notification preferences for the authenticated user.
Response
Returns a SetTeamNotificationPreferencesPayload!
Arguments
| Name | Description |
|---|---|
enabled - Boolean!
|
Whether to enable team notifications (in-app and push). |
Example
Query
mutation setTeamNotificationPreferences($enabled: Boolean!) {
setTeamNotificationPreferences(enabled: $enabled) {
errors
preferences {
...TeamNotificationPreferencesFragment
}
}
}
Variables
{"enabled": false}
Response
{
"data": {
"setTeamNotificationPreferences": {
"errors": ["abc123"],
"preferences": TeamNotificationPreferences
}
}
}
setWeeklyDigestPreferences
Description
Sets the weekly digest email preferences for the authenticated user.
Response
Returns a SetWeeklyDigestPreferencesPayload!
Example
Query
mutation setWeeklyDigestPreferences(
$deliveryDay: String,
$enabled: Boolean!
) {
setWeeklyDigestPreferences(
deliveryDay: $deliveryDay,
enabled: $enabled
) {
errors
preferences {
...WeeklyDigestPreferencesFragment
}
}
}
Variables
{"deliveryDay": "abc123", "enabled": false}
Response
{
"data": {
"setWeeklyDigestPreferences": {
"errors": ["abc123"],
"preferences": WeeklyDigestPreferences
}
}
}
startTeamBillingPortal
Description
Owner-only. Returns a Stripe Billing Portal URL for managing the team's subscription.
Response
Returns a StartTeamBillingPortalPayload!
Example
Query
mutation startTeamBillingPortal(
$returnUrl: String!,
$teamId: String!
) {
startTeamBillingPortal(
returnUrl: $returnUrl,
teamId: $teamId
) {
errors
portalUrl
}
}
Variables
{
"returnUrl": "xyz789",
"teamId": "xyz789"
}
Response
{
"data": {
"startTeamBillingPortal": {
"errors": ["xyz789"],
"portalUrl": "xyz789"
}
}
}
startTeamCheckout
Description
Opens a Stripe Checkout session for a new or re-subscribing Team.
Response
Returns a StartTeamCheckoutPayload!
Example
Query
mutation startTeamCheckout(
$cancelUrl: String!,
$planSlug: String!,
$seatCount: Int,
$successUrl: String!,
$teamId: String,
$teamName: String
) {
startTeamCheckout(
cancelUrl: $cancelUrl,
planSlug: $planSlug,
seatCount: $seatCount,
successUrl: $successUrl,
teamId: $teamId,
teamName: $teamName
) {
checkoutUrl
errors
}
}
Variables
{
"cancelUrl": "abc123",
"planSlug": "xyz789",
"seatCount": 987,
"successUrl": "xyz789",
"teamId": "xyz789",
"teamName": "xyz789"
}
Response
{
"data": {
"startTeamCheckout": {
"checkoutUrl": "xyz789",
"errors": ["abc123"]
}
}
}
storeDeviceToken
Description
Registers a device push notification token for the authenticated user (iOS/Android).
Response
Returns a StoreDeviceTokenPayload!
Example
Query
mutation storeDeviceToken(
$deviceToken: ID!,
$platform: String
) {
storeDeviceToken(
deviceToken: $deviceToken,
platform: $platform
) {
errors
result {
...ResultFragment
}
}
}
Variables
{"deviceToken": 4, "platform": "xyz789"}
Response
{
"data": {
"storeDeviceToken": {
"errors": ["xyz789"],
"result": Result
}
}
}
storeFeatureTourState
Description
Writes feature-tour completion/dismissal state into UserDetail.data["feature_tours"], keyed by tour id.
Response
Returns a StoreFeatureTourStatePayload!
Example
Query
mutation storeFeatureTourState(
$completed: Boolean,
$dismissed: Boolean,
$tourId: String!
) {
storeFeatureTourState(
completed: $completed,
dismissed: $dismissed,
tourId: $tourId
) {
errors
featureTours
success
}
}
Variables
{
"completed": false,
"dismissed": true,
"tourId": "xyz789"
}
Response
{
"data": {
"storeFeatureTourState": {
"errors": ["xyz789"],
"featureTours": {},
"success": true
}
}
}
storeOnboardingState
Description
Writes v1.8 onboarding completion or progress into UserDetail.data["onboarding"]. Accepts completed_via: "complete" | "skip" only — "backfilled" is server-only.
Response
Returns a StoreOnboardingStatePayload!
Arguments
| Name | Description |
|---|---|
completedVia - OnboardingCompletedVia
|
Set to "complete" or "skip" on wizard exit. Omit when writing progress only. |
progress - OnboardingProgressInput
|
In-flight slide progress. Cleared on wizard exit when completed_via is set. |
Example
Query
mutation storeOnboardingState(
$completedVia: OnboardingCompletedVia,
$progress: OnboardingProgressInput
) {
storeOnboardingState(
completedVia: $completedVia,
progress: $progress
) {
errors
user {
...UserFragment
}
}
}
Variables
{
"completedVia": "complete",
"progress": OnboardingProgressInput
}
Response
{
"data": {
"storeOnboardingState": {
"errors": ["xyz789"],
"user": User
}
}
}
storeUserDetails
Description
Stores or updates arbitrary metadata on the user details JSON blob (e.g. onboarding state, preferences).
Response
Returns a StoreUserDetailsPayload!
Example
Query
mutation storeUserDetails(
$appFeedback: String,
$appVersion: String
) {
storeUserDetails(
appFeedback: $appFeedback,
appVersion: $appVersion
) {
errors
result {
...ResultFragment
}
}
}
Variables
{
"appFeedback": "xyz789",
"appVersion": "abc123"
}
Response
{
"data": {
"storeUserDetails": {
"errors": ["abc123"],
"result": Result
}
}
}
submitEnneagramAssessment
Description
Submits a completed 40-question Enneagram assessment and persists the result.
Response
Returns a SubmitEnneagramAssessmentPayload!
Arguments
| Name | Description |
|---|---|
answers - [AnswerInput!]!
|
Array of exactly 40 forced-choice answers. |
Example
Query
mutation submitEnneagramAssessment($answers: [AnswerInput!]!) {
submitEnneagramAssessment(answers: $answers) {
assessment {
...EnneagramAssessmentFragment
}
errors
}
}
Variables
{"answers": [AnswerInput]}
Response
{
"data": {
"submitEnneagramAssessment": {
"assessment": EnneagramAssessment,
"errors": ["abc123"]
}
}
}
submitTeamPulse
Description
Submits the current member's quarterly team pulse survey response (score 0-10, optional comment). Objectuve-internal telemetry — no team-admin read path exists for this data.
Response
Returns a SubmitTeamPulsePayload!
Example
Query
mutation submitTeamPulse(
$comment: String,
$score: Int!,
$teamId: String!
) {
submitTeamPulse(
comment: $comment,
score: $score,
teamId: $teamId
) {
errors
record {
...TeamPulseConfirmationFragment
}
}
}
Variables
{
"comment": "abc123",
"score": 123,
"teamId": "abc123"
}
Response
{
"data": {
"submitTeamPulse": {
"errors": ["abc123"],
"record": TeamPulseConfirmation
}
}
}
suggestGoals
Description
Uses AI to turn goal-discovery quiz answers into 3-5 suggested goals, each with a rationale.
Response
Returns a SuggestGoalsPayload!
Arguments
| Name | Description |
|---|---|
lifeAreas - [String!]!
|
Up to 3 life-area labels the user picked (Q1). |
pull - String!
|
What would move the needle most right now (Q2). |
rhythm - String!
|
How much time the user can realistically give (Q3). |
why - String
|
What's driving this — optional/skippable (Q4). |
Example
Query
mutation suggestGoals(
$lifeAreas: [String!]!,
$pull: String!,
$rhythm: String!,
$why: String
) {
suggestGoals(
lifeAreas: $lifeAreas,
pull: $pull,
rhythm: $rhythm,
why: $why
) {
aiRequest {
...AiRequestFragment
}
errors
suggestions {
...SuggestedGoalFragment
}
}
}
Variables
{
"lifeAreas": ["abc123"],
"pull": "xyz789",
"rhythm": "abc123",
"why": "abc123"
}
Response
{
"data": {
"suggestGoals": {
"aiRequest": AiRequest,
"errors": ["abc123"],
"suggestions": [SuggestedGoal]
}
}
}
syncUser
Description
Syncs the authenticated Clerk user with the local database. Returns first_sign_in for onboarding detection.
Response
Returns a SyncUserPayload!
Arguments
| Name | Description |
|---|---|
referralCode - String
|
v4.56 Phase 5 (REF-02/REF-03) — a share-link code captured from ?ref= on first landing. Only attributed when this call is a genuine first sign-in. |
timezone - String
|
IANA timezone string from the client (e.g. "America/Chicago"). Used to evaluate day boundaries for streak calculations. |
Example
Query
mutation syncUser(
$referralCode: String,
$timezone: String
) {
syncUser(
referralCode: $referralCode,
timezone: $timezone
) {
errors
firstSignIn
user {
...UserFragment
}
}
}
Variables
{
"referralCode": "xyz789",
"timezone": "abc123"
}
Response
{
"data": {
"syncUser": {
"errors": ["abc123"],
"firstSignIn": true,
"user": User
}
}
}
toggleFeedbackVote
Description
Toggles a vote on a feedback post. Adds a vote if not voted, removes if already voted.
Response
Returns a ToggleFeedbackVotePayload!
Arguments
| Name | Description |
|---|---|
postId - ID!
|
Public ID of the feedback post to vote on. |
Example
Query
mutation toggleFeedbackVote($postId: ID!) {
toggleFeedbackVote(postId: $postId) {
errors
feedbackPost {
...FeedbackPostFragment
}
voted
}
}
Variables
{"postId": 4}
Response
{
"data": {
"toggleFeedbackVote": {
"errors": ["abc123"],
"feedbackPost": FeedbackPost,
"voted": false
}
}
}
toggleFollowGoal
Description
Follows or unfollows a goal. Toggles the follow state for the authenticated user.
Response
Returns a ToggleFollowGoalPayload!
Arguments
| Name | Description |
|---|---|
goalId - ID!
|
public_id of the goal to follow or unfollow. |
Example
Query
mutation toggleFollowGoal($goalId: ID!) {
toggleFollowGoal(goalId: $goalId) {
errors
result {
...ResultFragment
}
}
}
Variables
{"goalId": 4}
Response
{
"data": {
"toggleFollowGoal": {
"errors": ["xyz789"],
"result": Result
}
}
}
toggleGoalEventEncouragement
Description
Toggles an encouragement (like/cheer) reaction on a goal event. Creates one if absent, removes it if present.
Response
Returns a ToggleGoalEventEncouragementPayload!
Arguments
| Name | Description |
|---|---|
goalEventId - ID!
|
public_id of the goal event to encourage or un-encourage. |
Example
Query
mutation toggleGoalEventEncouragement($goalEventId: ID!) {
toggleGoalEventEncouragement(goalEventId: $goalEventId) {
errors
goalEventEncouragement {
...GoalEventEncouragementFragment
}
}
}
Variables
{"goalEventId": 4}
Response
{
"data": {
"toggleGoalEventEncouragement": {
"errors": ["xyz789"],
"goalEventEncouragement": GoalEventEncouragement
}
}
}
toggleGoalEventReaction
Description
Toggles an emoji reaction on a goal event. Creates if absent, removes if same emoji, replaces if different emoji.
Response
Returns a ToggleGoalEventReactionPayload!
Example
Query
mutation toggleGoalEventReaction(
$emoji: String!,
$goalEventId: ID!
) {
toggleGoalEventReaction(
emoji: $emoji,
goalEventId: $goalEventId
) {
errors
goalEventReaction {
...GoalEventReactionFragment
}
}
}
Variables
{
"emoji": "abc123",
"goalEventId": "4"
}
Response
{
"data": {
"toggleGoalEventReaction": {
"errors": ["abc123"],
"goalEventReaction": GoalEventReaction
}
}
}
transferTeamBillingOwnership
Description
Owner-only. Transfers billing ownership to another existing team member.
Response
Returns a TransferTeamBillingOwnershipPayload!
Example
Query
mutation transferTeamBillingOwnership(
$newOwnerId: String!,
$teamId: String!
) {
transferTeamBillingOwnership(
newOwnerId: $newOwnerId,
teamId: $teamId
) {
errors
team {
...TeamFragment
}
}
}
Variables
{
"newOwnerId": "abc123",
"teamId": "abc123"
}
Response
{
"data": {
"transferTeamBillingOwnership": {
"errors": ["abc123"],
"team": Team
}
}
}
triggerAiRun
Response
Returns a TriggerAiRunPayload!
Arguments
| Name | Description |
|---|---|
employeeId - String!
|
Example
Query
mutation triggerAiRun($employeeId: String!) {
triggerAiRun(employeeId: $employeeId) {
errors
run {
...AiRunFragment
}
}
}
Variables
{"employeeId": "xyz789"}
Response
{
"data": {
"triggerAiRun": {
"errors": ["xyz789"],
"run": AiRun
}
}
}
unarchiveSubCommunity
Description
Owner/Admin-only. Reverses an in-progress sub-community archive within the 30-day window.
Response
Returns an UnarchiveSubCommunityPayload!
Example
Query
mutation unarchiveSubCommunity(
$communityId: String!,
$teamId: String!
) {
unarchiveSubCommunity(
communityId: $communityId,
teamId: $teamId
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"communityId": "abc123",
"teamId": "xyz789"
}
Response
{
"data": {
"unarchiveSubCommunity": {
"community": Community,
"errors": ["xyz789"]
}
}
}
unblockUser
Description
Unblocks a user, restoring visibility of their content in both directions.
Response
Returns an UnblockAllyPayload!
Arguments
| Name | Description |
|---|---|
targetUserId - ID!
|
public_id of the user to unblock. |
Example
Query
mutation unblockUser($targetUserId: ID!) {
unblockUser(targetUserId: $targetUserId) {
errors
success
}
}
Variables
{"targetUserId": "4"}
Response
{
"data": {
"unblockUser": {
"errors": ["abc123"],
"success": false
}
}
}
unfollowCommunity
Description
Unfollows a community the authenticated user is currently following.
Response
Returns an UnfollowCommunityPayload!
Example
Query
mutation unfollowCommunity(
$communityId: ID!,
$userId: ID!
) {
unfollowCommunity(
communityId: $communityId,
userId: $userId
) {
result {
...ResultFragment
}
}
}
Variables
{
"communityId": "4",
"userId": "4"
}
Response
{"data": {"unfollowCommunity": {"result": Result}}}
updateAiEmployee
Response
Returns an UpdateAiEmployeePayload!
Arguments
| Name | Description |
|---|---|
autonomyLevel - String
|
|
confirmPromotion - Boolean
|
|
crew - String
|
|
description - String
|
|
employeeId - String!
|
|
mcpServers - [String!]
|
|
modelPreference - String
|
|
monthlyBudgetCents - Int
|
|
name - String
|
|
postFilterSkill - String
|
|
scheduleCron - String
|
|
skillRefs - [String!]
|
|
taskPrompt - String
|
Example
Query
mutation updateAiEmployee(
$autonomyLevel: String,
$confirmPromotion: Boolean,
$crew: String,
$description: String,
$employeeId: String!,
$mcpServers: [String!],
$modelPreference: String,
$monthlyBudgetCents: Int,
$name: String,
$postFilterSkill: String,
$scheduleCron: String,
$skillRefs: [String!],
$taskPrompt: String
) {
updateAiEmployee(
autonomyLevel: $autonomyLevel,
confirmPromotion: $confirmPromotion,
crew: $crew,
description: $description,
employeeId: $employeeId,
mcpServers: $mcpServers,
modelPreference: $modelPreference,
monthlyBudgetCents: $monthlyBudgetCents,
name: $name,
postFilterSkill: $postFilterSkill,
scheduleCron: $scheduleCron,
skillRefs: $skillRefs,
taskPrompt: $taskPrompt
) {
employee {
...AiEmployeeFragment
}
errors
}
}
Variables
{
"autonomyLevel": "abc123",
"confirmPromotion": false,
"crew": "abc123",
"description": "xyz789",
"employeeId": "abc123",
"mcpServers": ["abc123"],
"modelPreference": "xyz789",
"monthlyBudgetCents": 987,
"name": "xyz789",
"postFilterSkill": "xyz789",
"scheduleCron": "xyz789",
"skillRefs": ["xyz789"],
"taskPrompt": "xyz789"
}
Response
{
"data": {
"updateAiEmployee": {
"employee": AiEmployee,
"errors": ["abc123"]
}
}
}
updateCoachModel
Description
Switches the runtime Coach Gemini model. Admin only.
Response
Returns an UpdateCoachModelPayload!
Arguments
| Name | Description |
|---|---|
model - String!
|
Example
Query
mutation updateCoachModel($model: String!) {
updateCoachModel(model: $model) {
errors
setting {
...CoachModelSettingFragment
}
}
}
Variables
{"model": "xyz789"}
Response
{
"data": {
"updateCoachModel": {
"errors": ["xyz789"],
"setting": CoachModelSetting
}
}
}
updateCoachWarmupContext
Description
Stores the user's post-wizard warmup answers for Coach personalization.
Response
Returns an UpdateCoachWarmupContextPayload!
Example
Query
mutation updateCoachWarmupContext(
$feedbackStyle: String!,
$missedDayResponse: String!,
$timeOfDay: String!
) {
updateCoachWarmupContext(
feedbackStyle: $feedbackStyle,
missedDayResponse: $missedDayResponse,
timeOfDay: $timeOfDay
) {
errors
userDetail {
...UserDetailFragment
}
}
}
Variables
{
"feedbackStyle": "abc123",
"missedDayResponse": "xyz789",
"timeOfDay": "abc123"
}
Response
{
"data": {
"updateCoachWarmupContext": {
"errors": ["xyz789"],
"userDetail": UserDetail
}
}
}
updateCoachingPreferences
Description
Updates the current user's AI Coach persona, tone, depth, focus areas, and communication frequency.
Response
Returns an UpdateCoachingPreferencesPayload!
Arguments
| Name | Description |
|---|---|
depth - Int
|
Response depth from 1 (brief) to 5 (detailed). |
focusPrimary - String
|
Primary coaching focus area. |
focusSecondary - String
|
Optional secondary coaching focus area (null to clear). |
persona - String
|
Coaching persona: captain, spark, mirror, rival, sage, or analyst. |
rhythm - String
|
Communication rhythm: morning, evening, bookends, or when_needed. |
toneBrevity - Int
|
Tone brevity from 0 to 4. |
toneWarmth - Int
|
Tone warmth from 0 to 4. |
Example
Query
mutation updateCoachingPreferences(
$depth: Int,
$focusPrimary: String,
$focusSecondary: String,
$persona: String,
$rhythm: String,
$toneBrevity: Int,
$toneWarmth: Int
) {
updateCoachingPreferences(
depth: $depth,
focusPrimary: $focusPrimary,
focusSecondary: $focusSecondary,
persona: $persona,
rhythm: $rhythm,
toneBrevity: $toneBrevity,
toneWarmth: $toneWarmth
) {
coachingPreferences {
...CoachingPreferencesFragment
}
errors
}
}
Variables
{
"depth": 987,
"focusPrimary": "xyz789",
"focusSecondary": "abc123",
"persona": "xyz789",
"rhythm": "xyz789",
"toneBrevity": 123,
"toneWarmth": 123
}
Response
{
"data": {
"updateCoachingPreferences": {
"coachingPreferences": CoachingPreferences,
"errors": ["abc123"]
}
}
}
updateDashboardPreferences
Description
Updates the current user's dashboard mode and density preferences (v4.15).
Response
Returns an UpdateDashboardPreferencesPayload!
Example
Query
mutation updateDashboardPreferences(
$density: String,
$migratedFromFull: Boolean,
$mode: String
) {
updateDashboardPreferences(
density: $density,
migratedFromFull: $migratedFromFull,
mode: $mode
) {
dashboardPreferences {
...DashboardPreferencesFragment
}
errors
}
}
Variables
{
"density": "xyz789",
"migratedFromFull": true,
"mode": "abc123"
}
Response
{
"data": {
"updateDashboardPreferences": {
"dashboardPreferences": DashboardPreferences,
"errors": ["xyz789"]
}
}
}
updateDemoCommunity
Description
Inline-edit a demo community. super_admin only.
Response
Returns an UpdateDemoCommunityPayload!
Arguments
| Name | Description |
|---|---|
attributes - DemoCommunityAttributesInput!
|
|
communityId - ID!
|
Example
Query
mutation updateDemoCommunity(
$attributes: DemoCommunityAttributesInput!,
$communityId: ID!
) {
updateDemoCommunity(
attributes: $attributes,
communityId: $communityId
) {
community {
...CommunityFragment
}
errors
}
}
Variables
{
"attributes": DemoCommunityAttributesInput,
"communityId": 4
}
Response
{
"data": {
"updateDemoCommunity": {
"community": Community,
"errors": ["xyz789"]
}
}
}
updateDemoGoal
Description
Inline-edit a demo goal. super_admin only.
Response
Returns an UpdateDemoGoalPayload!
Arguments
| Name | Description |
|---|---|
attributes - DemoGoalAttributesInput!
|
|
goalId - ID!
|
Example
Query
mutation updateDemoGoal(
$attributes: DemoGoalAttributesInput!,
$goalId: ID!
) {
updateDemoGoal(
attributes: $attributes,
goalId: $goalId
) {
errors
goal {
...GoalFragment
}
}
}
Variables
{
"attributes": DemoGoalAttributesInput,
"goalId": "4"
}
Response
{
"data": {
"updateDemoGoal": {
"errors": ["abc123"],
"goal": Goal
}
}
}
updateDemoUser
Description
Inline-edit a demo user. super_admin only.
Response
Returns an UpdateDemoUserPayload!
Arguments
| Name | Description |
|---|---|
attributes - DemoUserAttributesInput!
|
|
userId - ID!
|
Example
Query
mutation updateDemoUser(
$attributes: DemoUserAttributesInput!,
$userId: ID!
) {
updateDemoUser(
attributes: $attributes,
userId: $userId
) {
errors
user {
...UserFragment
}
}
}
Variables
{"attributes": DemoUserAttributesInput, "userId": 4}
Response
{
"data": {
"updateDemoUser": {
"errors": ["xyz789"],
"user": User
}
}
}
updateFeedbackPostStatus
Description
Updates the status of a feedback post (admin only).
Response
Returns an UpdateFeedbackPostStatusPayload!
Example
Query
mutation updateFeedbackPostStatus(
$postId: ID!,
$status: String!
) {
updateFeedbackPostStatus(
postId: $postId,
status: $status
) {
errors
feedbackPost {
...FeedbackPostFragment
}
}
}
Variables
{
"postId": "4",
"status": "xyz789"
}
Response
{
"data": {
"updateFeedbackPostStatus": {
"errors": ["abc123"],
"feedbackPost": FeedbackPost
}
}
}
updateFeedbackPostTags
Description
Updates the tags on a feedback post (admin only).
Response
Returns an UpdateFeedbackPostTagsPayload!
Example
Query
mutation updateFeedbackPostTags(
$postId: ID!,
$tagIds: [ID!]!
) {
updateFeedbackPostTags(
postId: $postId,
tagIds: $tagIds
) {
errors
feedbackPost {
...FeedbackPostFragment
}
}
}
Variables
{"postId": 4, "tagIds": ["4"]}
Response
{
"data": {
"updateFeedbackPostTags": {
"errors": ["xyz789"],
"feedbackPost": FeedbackPost
}
}
}
updateFeedbackTag
Description
Updates an existing feedback tag (admin only).
Response
Returns an UpdateFeedbackTagPayload!
Example
Query
mutation updateFeedbackTag(
$description: String,
$name: String,
$tagId: ID!
) {
updateFeedbackTag(
description: $description,
name: $name,
tagId: $tagId
) {
errors
feedbackTag {
...FeedbackTagFragment
}
}
}
Variables
{
"description": "xyz789",
"name": "abc123",
"tagId": "4"
}
Response
{
"data": {
"updateFeedbackTag": {
"errors": ["xyz789"],
"feedbackTag": FeedbackTag
}
}
}
updateGoal
Description
Updates an existing goal owned by the authenticated user.
Response
Returns an UpdateGoalPayload!
Arguments
| Name | Description |
|---|---|
appLink - String
|
Updated external app URL (https:// or a custom app scheme, e.g. duolingo://) opened on check-in for one-click redirect to another app. |
completed - Boolean
|
When true, marks the goal as completed. |
completionReflection - String
|
Optional free-text reflection captured when the goal is marked complete. Personalizes Coach messaging when present. Max 200 chars. |
content - String
|
Updated description or motivation note. |
daysToUpdate - Int
|
Updated frequency in days that the user plans to log progress. |
deleted - Boolean
|
When true, soft-deletes the goal. |
durationMinutes - Int
|
Optional time-per-session in minutes for habits. |
file - Upload
|
Cover image file upload. Takes precedence over image_url when provided. |
goalCategoryId - ID
|
Updated goal category ID. Fetch options via goalCategories query. |
goalId - ID!
|
public_id of the goal to update. |
goalTypeId - ID
|
Updated goal type ID. Fetch options via goalKinds query. |
identityPrompt - String
|
Optional free-text identity framing (e.g. "Who you're becoming"). Personalizes Coach messaging when present. Max 240 chars. |
imageUrl - String
|
Updated URL of a cover image for the goal. |
name - String
|
Updated display name for the goal. |
pastAttemptContext - String
|
Optional free-text context on a prior attempt at this goal. Personalizes Coach messaging when present. Max 200 chars. |
private - Boolean
|
Deprecated; use visibility. When true, the goal is visible only to the owner. |
recurrenceDays - [String!]
|
Updated days for weekly/custom_days recurrence. |
recurrenceInterval - Int
|
Updated number of days between check-ins for interval recurrence. |
recurrenceType - String
|
Updated recurrence pattern for habits: daily, weekly, custom_days, or interval. |
steps - [StepInput!]
|
Structured roadmap step diff. Upserts by public_id; omitted existing steps soft-delete. |
targetDate - String
|
Updated ISO date string for the target completion date (e.g. "2026-12-31"). |
visibility - GoalVisibilityEnum
|
Who can see the goal. Wins over private when both are sent. |
Example
Query
mutation updateGoal(
$appLink: String,
$completed: Boolean,
$completionReflection: String,
$content: String,
$daysToUpdate: Int,
$deleted: Boolean,
$durationMinutes: Int,
$file: Upload,
$goalCategoryId: ID,
$goalId: ID!,
$goalTypeId: ID,
$identityPrompt: String,
$imageUrl: String,
$name: String,
$pastAttemptContext: String,
$private: Boolean,
$recurrenceDays: [String!],
$recurrenceInterval: Int,
$recurrenceType: String,
$steps: [StepInput!],
$targetDate: String,
$visibility: GoalVisibilityEnum
) {
updateGoal(
appLink: $appLink,
completed: $completed,
completionReflection: $completionReflection,
content: $content,
daysToUpdate: $daysToUpdate,
deleted: $deleted,
durationMinutes: $durationMinutes,
file: $file,
goalCategoryId: $goalCategoryId,
goalId: $goalId,
goalTypeId: $goalTypeId,
identityPrompt: $identityPrompt,
imageUrl: $imageUrl,
name: $name,
pastAttemptContext: $pastAttemptContext,
private: $private,
recurrenceDays: $recurrenceDays,
recurrenceInterval: $recurrenceInterval,
recurrenceType: $recurrenceType,
steps: $steps,
targetDate: $targetDate,
visibility: $visibility
) {
errors
goal {
...GoalFragment
}
}
}
Variables
{
"appLink": "abc123",
"completed": false,
"completionReflection": "xyz789",
"content": "abc123",
"daysToUpdate": 987,
"deleted": true,
"durationMinutes": 987,
"file": Upload,
"goalCategoryId": "4",
"goalId": 4,
"goalTypeId": 4,
"identityPrompt": "xyz789",
"imageUrl": "abc123",
"name": "xyz789",
"pastAttemptContext": "xyz789",
"private": false,
"recurrenceDays": ["abc123"],
"recurrenceInterval": 987,
"recurrenceType": "xyz789",
"steps": [StepInput],
"targetDate": "abc123",
"visibility": "ALLIES"
}
Response
{
"data": {
"updateGoal": {
"errors": ["abc123"],
"goal": Goal
}
}
}
updateGoalEvent
Description
Updates the content or media of an existing goal progress event.
Response
Returns an UpdateGoalEventPayload!
Arguments
| Name | Description |
|---|---|
content - String
|
Updated progress update text. |
deleted - Boolean
|
When true, soft-deletes the goal event. |
file - Upload
|
Image file upload. Takes precedence over image_url when provided. |
goalEventId - ID!
|
public_id of the goal event to update. |
goalId - ID
|
public_id of the goal this event belongs to. |
imageUrl - String
|
Updated URL of an image attached to the progress event. |
Example
Query
mutation updateGoalEvent(
$content: String,
$deleted: Boolean,
$file: Upload,
$goalEventId: ID!,
$goalId: ID,
$imageUrl: String
) {
updateGoalEvent(
content: $content,
deleted: $deleted,
file: $file,
goalEventId: $goalEventId,
goalId: $goalId,
imageUrl: $imageUrl
) {
errors
goalEvent {
...GoalEventFragment
}
}
}
Variables
{
"content": "abc123",
"deleted": false,
"file": Upload,
"goalEventId": "4",
"goalId": 4,
"imageUrl": "abc123"
}
Response
{
"data": {
"updateGoalEvent": {
"errors": ["xyz789"],
"goalEvent": GoalEvent
}
}
}
updateGoalMotivationSnapshot
Description
Saves any subset of the four Goal Motivation Snapshot answers for the current user. Merge semantics — partial saves do not wipe existing keys.
Response
Returns an UpdateGoalMotivationSnapshotPayload!
Arguments
| Name | Description |
|---|---|
challenge - String
|
Biggest challenge: starting, staying_consistent, momentum_after_setbacks, knowing_progress. |
experience - String
|
Prior goal-tracking experience: never, a_few_times, many_still_going, many_struggled. |
socialContext - String
|
Preferred social context: solo, friend_or_partner, team_or_group. |
workTime - String
|
Preferred work time: morning, afternoon, evening, varies. |
Example
Query
mutation updateGoalMotivationSnapshot(
$challenge: String,
$experience: String,
$socialContext: String,
$workTime: String
) {
updateGoalMotivationSnapshot(
challenge: $challenge,
experience: $experience,
socialContext: $socialContext,
workTime: $workTime
) {
errors
goalMotivationProfile {
...GoalMotivationProfileFragment
}
}
}
Variables
{
"challenge": "xyz789",
"experience": "abc123",
"socialContext": "abc123",
"workTime": "abc123"
}
Response
{
"data": {
"updateGoalMotivationSnapshot": {
"errors": ["abc123"],
"goalMotivationProfile": GoalMotivationProfile
}
}
}
updatePrivacySettings
Description
Updates the authenticated user's privacy toggles (go_it_alone, private_mode). Self-only.
Response
Returns an UpdatePrivacySettingsPayload!
Example
Query
mutation updatePrivacySettings(
$goItAlone: Boolean,
$privateMode: Boolean
) {
updatePrivacySettings(
goItAlone: $goItAlone,
privateMode: $privateMode
) {
errors
user {
...UserFragment
}
}
}
Variables
{"goItAlone": false, "privateMode": true}
Response
{
"data": {
"updatePrivacySettings": {
"errors": ["xyz789"],
"user": User
}
}
}
updateSeasonalEvent
Description
Admin only. Updates a platform-wide seasonal event.
Response
Returns an UpdateSeasonalEventPayload!
Arguments
| Name | Description |
|---|---|
badgeIcon - String!
|
|
badgeName - String!
|
|
description - String
|
|
endDate - ISO8601Date!
|
|
eventId - ID!
|
|
name - String!
|
|
slug - String!
|
|
startDate - ISO8601Date!
|
|
targetGoalCount - Int
|
Example
Query
mutation updateSeasonalEvent(
$badgeIcon: String!,
$badgeName: String!,
$description: String,
$endDate: ISO8601Date!,
$eventId: ID!,
$name: String!,
$slug: String!,
$startDate: ISO8601Date!,
$targetGoalCount: Int
) {
updateSeasonalEvent(
badgeIcon: $badgeIcon,
badgeName: $badgeName,
description: $description,
endDate: $endDate,
eventId: $eventId,
name: $name,
slug: $slug,
startDate: $startDate,
targetGoalCount: $targetGoalCount
) {
errors
seasonalEvent {
...SeasonalEventFragment
}
}
}
Variables
{
"badgeIcon": "xyz789",
"badgeName": "xyz789",
"description": "xyz789",
"endDate": ISO8601Date,
"eventId": 4,
"name": "abc123",
"slug": "xyz789",
"startDate": ISO8601Date,
"targetGoalCount": 987
}
Response
{
"data": {
"updateSeasonalEvent": {
"errors": ["abc123"],
"seasonalEvent": SeasonalEvent
}
}
}
updateShowcasedAchievements
Description
Updates the list of achievement identifiers the user displays on their public profile.
Response
Returns an UpdateShowcasedAchievementsPayload!
Arguments
| Name | Description |
|---|---|
achievementKeys - [String!]!
|
Ordered list of achievement identifier keys to display on the public profile. |
userId - ID!
|
The public ID of the user whose showcased achievements are being updated. |
Example
Query
mutation updateShowcasedAchievements(
$achievementKeys: [String!]!,
$userId: ID!
) {
updateShowcasedAchievements(
achievementKeys: $achievementKeys,
userId: $userId
) {
errors
success
}
}
Variables
{
"achievementKeys": ["xyz789"],
"userId": "4"
}
Response
{
"data": {
"updateShowcasedAchievements": {
"errors": ["abc123"],
"success": false
}
}
}
updateSubCommunity
Description
Owner/Admin-only. Edits an existing sub-community (room) — name, description, icon, join policy, and lead.
Response
Returns an UpdateSubCommunityPayload!
Example
Query
mutation updateSubCommunity(
$communityId: String!,
$description: String,
$icon: String,
$joinPolicy: String,
$leadMembershipId: String,
$name: String,
$teamId: String!
) {
updateSubCommunity(
communityId: $communityId,
description: $description,
icon: $icon,
joinPolicy: $joinPolicy,
leadMembershipId: $leadMembershipId,
name: $name,
teamId: $teamId
) {
community {
...CommunityFragment
}
errors
teamReadOnly
}
}
Variables
{
"communityId": "abc123",
"description": "xyz789",
"icon": "xyz789",
"joinPolicy": "xyz789",
"leadMembershipId": "xyz789",
"name": "abc123",
"teamId": "xyz789"
}
Response
{
"data": {
"updateSubCommunity": {
"community": Community,
"errors": ["abc123"],
"teamReadOnly": true
}
}
}
updateUser
Description
Updates profile information for the authenticated user.
Response
Returns an UpdateUserPayload!
Example
Query
mutation updateUser(
$deleteUser: Boolean,
$email: String,
$firstName: String,
$lastName: String,
$username: String
) {
updateUser(
deleteUser: $deleteUser,
email: $email,
firstName: $firstName,
lastName: $lastName,
username: $username
) {
errors
user {
...UserFragment
}
}
}
Variables
{
"deleteUser": true,
"email": "xyz789",
"firstName": "abc123",
"lastName": "xyz789",
"username": "xyz789"
}
Response
{
"data": {
"updateUser": {
"errors": ["abc123"],
"user": User
}
}
}
updateUserPhoto
Description
Updates the profile photo for the authenticated user.
Response
Returns an UpdateUserPhotoPayload!
Example
Query
mutation updateUserPhoto(
$file: Upload,
$imageUrl: String
) {
updateUserPhoto(
file: $file,
imageUrl: $imageUrl
) {
errors
userPhoto {
...UserPhotoFragment
}
}
}
Variables
{
"file": Upload,
"imageUrl": "xyz789"
}
Response
{
"data": {
"updateUserPhoto": {
"errors": ["abc123"],
"userPhoto": UserPhoto
}
}
}
updateUserRoles
Description
Updates an admin user's RBAC roles securely logging the execution.
Response
Returns an UpdateUserRolesPayload!
Arguments
| Name | Description |
|---|---|
roles - [String!]!
|
|
userId - ID!
|
Example
Query
mutation updateUserRoles(
$roles: [String!]!,
$userId: ID!
) {
updateUserRoles(
roles: $roles,
userId: $userId
) {
errors
user {
...UserFragment
}
}
}
Variables
{"roles": ["abc123"], "userId": 4}
Response
{
"data": {
"updateUserRoles": {
"errors": ["xyz789"],
"user": User
}
}
}
useStreakFreeze
Description
Uses a streak freeze token to proactively cover a habit day before it lapses.
Response
Returns a UseStreakFreezePayload!
Example
Query
mutation useStreakFreeze(
$goalId: ID!,
$missedDate: String!
) {
useStreakFreeze(
goalId: $goalId,
missedDate: $missedDate
) {
errors
goal {
...GoalFragment
}
}
}
Variables
{
"goalId": "4",
"missedDate": "abc123"
}
Response
{
"data": {
"useStreakFreeze": {
"errors": ["xyz789"],
"goal": Goal
}
}
}
verifyMagicCode
Description
Verifies a magic sign-in code and returns a session token.
Response
Returns a VerifyMagicCodePayload!
Example
Query
mutation verifyMagicCode(
$code: String!,
$email: String!
) {
verifyMagicCode(
code: $code,
email: $email
) {
errors
token
user {
...UserFragment
}
}
}
Variables
{
"code": "abc123",
"email": "abc123"
}
Response
{
"data": {
"verifyMagicCode": {
"errors": ["xyz789"],
"token": "abc123",
"user": User
}
}
}
Subscriptions
achievementUnlocked
Description
Streams newly awarded badges for a user in real time.
Response
Returns a UserAction
Arguments
| Name | Description |
|---|---|
userId - ID!
|
public_id of the user to subscribe to achievement unlocks for. |
Example
Query
subscription achievementUnlocked($userId: ID!) {
achievementUnlocked(userId: $userId) {
acknowledged
action
communityName
createdAtTime
id
}
}
Variables
{"userId": 4}
Response
{
"data": {
"achievementUnlocked": {
"acknowledged": false,
"action": "abc123",
"communityName": "abc123",
"createdAtTime": "xyz789",
"id": "4"
}
}
}
aiRequestUpdate
Description
Streams status/result updates for a single async AiRequest in real time.
Response
Returns an AiRequest
Arguments
| Name | Description |
|---|---|
requestId - ID!
|
public_id of the AiRequest to subscribe to. |
Example
Query
subscription aiRequestUpdate($requestId: ID!) {
aiRequestUpdate(requestId: $requestId) {
completedAt
createdAt
errorCode
errorMessage
id
kind
resultJson
status
}
}
Variables
{"requestId": 4}
Response
{
"data": {
"aiRequestUpdate": {
"completedAt": ISO8601DateTime,
"createdAt": ISO8601DateTime,
"errorCode": "abc123",
"errorMessage": "xyz789",
"id": 4,
"kind": "abc123",
"resultJson": "xyz789",
"status": "xyz789"
}
}
}
feedUpdate
Description
Streams a feed invalidation ping for a user in real time.
Response
Returns a FeedUpdatePayload
Arguments
| Name | Description |
|---|---|
userId - ID!
|
public_id of the user to subscribe to feed updates for. |
Example
Query
subscription feedUpdate($userId: ID!) {
feedUpdate(userId: $userId) {
occurredAt
source
}
}
Variables
{"userId": 4}
Response
{
"data": {
"feedUpdate": {
"occurredAt": "abc123",
"source": "abc123"
}
}
}
notificationUpdate
Description
Streams new notifications for a user in real time.
Response
Returns a UserNotification
Arguments
| Name | Description |
|---|---|
userId - ID!
|
public_id of the user to subscribe to notifications for. |
Example
Query
subscription notificationUpdate($userId: ID!) {
notificationUpdate(userId: $userId) {
acknowledged
content
createdAtTime
detailsJson
id
kind
}
}
Variables
{"userId": 4}
Response
{
"data": {
"notificationUpdate": {
"acknowledged": true,
"content": "xyz789",
"createdAtTime": "xyz789",
"detailsJson": "xyz789",
"id": 4,
"kind": "abc123"
}
}
}
Types
AcceptAllyInvitePayload
Description
Autogenerated return type of AcceptAllyInvite.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userAlly - UserAlly
|
Example
{
"errors": ["xyz789"],
"userAlly": UserAlly
}
AcceptAllyRequestPayload
Description
Autogenerated return type of AcceptAllyRequest.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userAlly - UserAlly
|
Example
{
"errors": ["abc123"],
"userAlly": UserAlly
}
AcceptHabitIntegrationMappingPayload
Description
Autogenerated return type of AcceptHabitIntegrationMapping.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
mapping - HabitIntegrationMapping
|
Example
{
"errors": ["xyz789"],
"mapping": HabitIntegrationMapping
}
AcceptPaceSuggestionPayload
Description
Autogenerated return type of AcceptPaceSuggestion.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
|
previousTargetDate - String
|
ISO date string of the target date before this change — pass to updateGoal to undo. |
proposedTargetDate - String
|
ISO date string of the newly applied target date. |
Example
{
"errors": ["xyz789"],
"goal": Goal,
"previousTargetDate": "abc123",
"proposedTargetDate": "abc123"
}
AcceptPartnerRequestPayload
Description
Autogenerated return type of AcceptPartnerRequest.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userAlly - UserAlly
|
Example
{
"errors": ["xyz789"],
"userAlly": UserAlly
}
AcceptStreakMercyPayload
Description
Autogenerated return type of AcceptStreakMercy.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["abc123"],
"goal": Goal
}
AcceptTeamInvitePayload
Description
Autogenerated return type of AcceptTeamInvite.
Fields
| Field Name | Description |
|---|---|
communityCount - Int
|
|
errors - [String!]!
|
|
preselectedCommunityIds - [String!]
|
|
seatCapExceeded - Boolean!
|
True only for the seat-cap-exhausted failure — the frontend shows SeatCapBlockerModal for this and nothing else. |
team - Team
|
The joined team — lets JoinTeamView set the active team scope (OBJ-1830). |
teamMembership - TeamMembership
|
Example
{
"communityCount": 987,
"errors": ["xyz789"],
"preselectedCommunityIds": ["xyz789"],
"seatCapExceeded": true,
"team": Team,
"teamMembership": TeamMembership
}
AccountabilityPartner
Description
The current accountability partner for a user.
Fields
| Field Name | Description |
|---|---|
accountabilityPartnerSince - ISO8601DateTime
|
When the partnership was established. |
firstName - String
|
The partner user's given name. |
lastName - String
|
The partner user's family name. |
longestMutualStreak - Int!
|
All-time longest mutual streak between partners. |
mutualStreakCount - Int!
|
Current mutual check-in streak between partners. |
mutualStreakLastDate - ISO8601Date
|
Date of the most recent mutual bonus award. |
nudgeSentToday - Boolean!
|
Whether the current user has already sent a nudge to their partner today. |
partnerCheckedInToday - Boolean!
|
Whether the partner has checked in today. |
photo - UserPhoto
|
The partner user's profile photo. |
publicId - ID!
|
The partner user's public identifier. |
userCheckedInToday - Boolean!
|
Whether the current user has checked in today. |
username - String
|
The partner user's unique handle. |
Example
{
"accountabilityPartnerSince": ISO8601DateTime,
"firstName": "abc123",
"lastName": "abc123",
"longestMutualStreak": 123,
"mutualStreakCount": 123,
"mutualStreakLastDate": ISO8601Date,
"nudgeSentToday": true,
"partnerCheckedInToday": false,
"photo": UserPhoto,
"publicId": "4",
"userCheckedInToday": true,
"username": "xyz789"
}
AchievementStats
Description
Computed achievement and rank statistics for a user.
Fields
| Field Name | Description |
|---|---|
currentLevel - Int!
|
Actual XP level (1–10). |
currentRankName - String!
|
Rank name corresponding to the user's current level. |
currentVolume - Int!
|
Journey volume: 1 (levels 1–3), 2 (levels 4–6), 3 (level 7+). |
currentXp - Int!
|
Total XP earned by the user. |
earnedCount - Int!
|
Number of badges unlocked through action, excluding first_sign_in ("Day One") — the predicate the achievements empty-state UI gates on, since every signed-in user has Day One and unlocked_count alone can never reach 0 (OBJ-3879). |
last7DaysXp - [Int!]!
|
Daily XP earned for each of the last 7 days, oldest first. |
nextRankName - String
|
Rank name for the next level, or null at max level. |
rarePlusCount - Int!
|
Number of Rare, Epic, or Legendary badges the user has unlocked. |
totalCount - Int!
|
Total number of badges available. |
unlockedCount - Int!
|
Number of badges the user has unlocked. |
xpToNextRank - Int
|
XP needed to reach the next rank, or null at max level. |
Example
{
"currentLevel": 987,
"currentRankName": "xyz789",
"currentVolume": 987,
"currentXp": 987,
"earnedCount": 987,
"last7DaysXp": [123],
"nextRankName": "abc123",
"rarePlusCount": 987,
"totalCount": 123,
"unlockedCount": 123,
"xpToNextRank": 123
}
AcknowledgeActionPayload
Description
Autogenerated return type of AcknowledgeAction.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
AcknowledgeAllNotificationsPayload
Description
Autogenerated return type of AcknowledgeAllNotifications.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["xyz789"],
"result": Result
}
AcknowledgeCollectiveGoalPrivacyContractPayload
Description
Autogenerated return type of AcknowledgeCollectiveGoalPrivacyContract.
Fields
| Field Name | Description |
|---|---|
acknowledged - Boolean
|
|
errors - [String!]!
|
Example
{"acknowledged": true, "errors": ["abc123"]}
AcknowledgeNotificationPayload
Description
Autogenerated return type of AcknowledgeNotification.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
ActivityItem
AddCommunitySuggestionPayload
Description
Autogenerated return type of AddCommunitySuggestion.
Fields
| Field Name | Description |
|---|---|
communitySuggestion - CommunitySuggestion
|
|
errors - [String!]!
|
Example
{
"communitySuggestion": CommunitySuggestion,
"errors": ["xyz789"]
}
AddGoalEventCommentPayload
Description
Autogenerated return type of AddGoalEventComment.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goalEventComment - GoalEventComment
|
Example
{
"errors": ["xyz789"],
"goalEventComment": GoalEventComment
}
AddGoalEventPayload
Description
Autogenerated return type of AddGoalEvent.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goalEvent - GoalEvent
|
Example
{
"errors": ["xyz789"],
"goalEvent": GoalEvent
}
AddGoalPayload
Description
Autogenerated return type of AddGoal.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["abc123"],
"goal": Goal
}
AddGoalToCommunityPayload
Description
Autogenerated return type of AddGoalToCommunity.
Fields
| Field Name | Description |
|---|---|
communityGoal - CommunityGoal
|
|
errors - [String!]!
|
Example
{
"communityGoal": CommunityGoal,
"errors": ["xyz789"]
}
AddMoodLogPayload
Description
Autogenerated return type of AddMoodLog.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
moodLog - MoodLog
|
Example
{
"errors": ["xyz789"],
"moodLog": MoodLog
}
AddPostCommentPayload
Description
Autogenerated return type of AddPostComment.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
postComment - PostComment
|
Example
{
"errors": ["abc123"],
"postComment": PostComment
}
AdjustTeamSeatsPayload
Description
Autogenerated return type of AdjustTeamSeats.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
teamSubscription - TeamSubscription
|
Example
{
"errors": ["abc123"],
"teamSubscription": TeamSubscription
}
AdminAction
Description
A log of administrative actions performed globally.
Fields
| Field Name | Description |
|---|---|
action - String!
|
Legacy alias for actionType — retained for the pre-v1.7 GetRecentActions query. |
actionType - String!
|
Action category — e.g. demo_data_full_reseed, update_demo_user. |
actor - User!
|
The admin user who performed this action. |
adminUser - User!
|
Legacy alias for actor — retained for the pre-v1.7 GetRecentActions query. |
createdAt - String!
|
ISO 8601 timestamp when the action was performed. |
id - ID!
|
Integer ID. |
metadata - JSON
|
Additional action details as JSON. |
targetId - Int
|
Raw polymorphic target DB ID — nullable alongside target_type. Prefer targetPublicId for display; this integer is retained for back-compat with the pre-v1.7 GetRecentActions query. |
targetPublicId - ID
|
Opaque public_id of the polymorphic target when it is a PublicRecord and still present. Null when the target has no public_id (non-PublicRecord reference table) or was deleted. Use this instead of targetId in UIs. |
targetType - String
|
Polymorphic target class — nullable for actions with no target (e.g. full demo-data reseed). |
Example
{
"action": "abc123",
"actionType": "abc123",
"actor": User,
"adminUser": User,
"createdAt": "xyz789",
"id": 4,
"metadata": {},
"targetId": 123,
"targetPublicId": 4,
"targetType": "abc123"
}
AdminActionConnection
Description
The connection type for AdminAction.
Fields
| Field Name | Description |
|---|---|
edges - [AdminActionEdge]
|
A list of edges. |
nodes - [AdminAction]
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
Example
{
"edges": [AdminActionEdge],
"nodes": [AdminAction],
"pageInfo": PageInfo
}
AdminActionEdge
Description
An edge in a connection.
Fields
| Field Name | Description |
|---|---|
cursor - String!
|
A cursor for use in pagination. |
node - AdminAction
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": AdminAction
}
AdminAiUsage
Description
Aggregated AI spend, usage, and budget utilization for the admin dashboard. Admin only.
Fields
| Field Name | Description |
|---|---|
budgetCents - Int!
|
Monthly budget ceiling from Settings.ai.monthly_budget_cents. |
budgetUtilizationPercent - Float!
|
Month-to-date spend as a percent of the monthly budget. |
dailySeries - [DailyUsagePoint!]!
|
Daily time series for the line chart (oldest → newest). |
perFeature - [FeatureUsagePoint!]!
|
Breakdown by feature, sorted by cost_cents DESC. |
perModel - [ModelUsagePoint!]!
|
Breakdown by model, sorted by cost_cents DESC. |
perResolvedModel - [ResolvedModelUsagePoint!]!
|
Breakdown by resolved model, sorted by cost_cents DESC. |
totalCalls - Int!
|
Count of AiUsageEvent rows over the selected window. |
totalSpendCents - Int!
|
Total AI spend in cents over the selected window. |
totalTokens - Int!
|
Sum of total_tokens over the selected window. |
Example
{
"budgetCents": 123,
"budgetUtilizationPercent": 987.65,
"dailySeries": [DailyUsagePoint],
"perFeature": [FeatureUsagePoint],
"perModel": [ModelUsagePoint],
"perResolvedModel": [ResolvedModelUsagePoint],
"totalCalls": 123,
"totalSpendCents": 123,
"totalTokens": 123
}
AdminStats
Description
Admin statistics for platform monitoring
Fields
| Field Name | Description |
|---|---|
completedGoals - Int!
|
|
criticalFlags - Int!
|
Number of critical severity pending flags |
goalCategories - [CategoryStats!]!
|
|
goalsLast7Days - Int!
|
|
growthData - [GrowthDataPoint!]!
|
|
pendingFlags - Int!
|
Number of pending content moderation flags |
pendingReports - Int!
|
Number of pending user content reports |
publicGoals - Int!
|
|
recentActivity - [ActivityItem!]!
|
|
supporterStats - SupporterStats!
|
MRR and active supporter counts by tier |
totalEncouragements - Int!
|
|
totalEvents - Int!
|
|
totalGoals - Int!
|
|
totalMilestones - Int!
|
|
totalUpdates - Int!
|
|
totalUsers - Int!
|
|
usersLast30Days - Int!
|
|
usersLast7Days - Int!
|
Example
{
"completedGoals": 123,
"criticalFlags": 987,
"goalCategories": [CategoryStats],
"goalsLast7Days": 123,
"growthData": [GrowthDataPoint],
"pendingFlags": 123,
"pendingReports": 987,
"publicGoals": 987,
"recentActivity": [ActivityItem],
"supporterStats": SupporterStats,
"totalEncouragements": 123,
"totalEvents": 123,
"totalGoals": 123,
"totalMilestones": 987,
"totalUpdates": 987,
"totalUsers": 987,
"usersLast30Days": 123,
"usersLast7Days": 123
}
AdminTeamMonitoring
Description
Internal read-only monitoring row for a team (M11, PRIVACY-3). Admin-only. Carries no personal goal/mood/journal/coach data — seat and billing state only.
Fields
| Field Name | Description |
|---|---|
lastActiveAt - ISO8601DateTime
|
Most recent updated_at across the team's members. Null for an empty team. |
seatCountUsed - Int!
|
Current seat usage: total number of team memberships. |
seatLimit - Int
|
Seat limit from the subscription. Null if no subscription. |
subscriptionStatus - String
|
Raw TeamSubscription.status: trialing, active, past_due, grace, or canceled. Null if no subscription. |
teamName - String!
|
The team name. |
teamPublicId - String!
|
The team public_id. |
Example
{
"lastActiveAt": ISO8601DateTime,
"seatCountUsed": 123,
"seatLimit": 987,
"subscriptionStatus": "abc123",
"teamName": "xyz789",
"teamPublicId": "abc123"
}
AiArtifact
Fields
| Field Name | Description |
|---|---|
aiRun - AiRun!
|
|
approvalStatus - String!
|
|
claimedAt - ISO8601DateTime
|
|
createdAt - ISO8601DateTime!
|
|
deliveredAt - ISO8601DateTime
|
|
deliveryMetadata - JSON
|
|
editDistance - Float
|
|
id - String!
|
|
kind - String!
|
|
payload - JSON!
|
|
rejectionReason - String
|
|
title - String
|
Example
{
"aiRun": AiRun,
"approvalStatus": "xyz789",
"claimedAt": ISO8601DateTime,
"createdAt": ISO8601DateTime,
"deliveredAt": ISO8601DateTime,
"deliveryMetadata": {},
"editDistance": 123.45,
"id": "abc123",
"kind": "xyz789",
"payload": {},
"rejectionReason": "abc123",
"title": "abc123"
}
AiArtifactConnection
Description
The connection type for AiArtifact.
Fields
| Field Name | Description |
|---|---|
edges - [AiArtifactEdge]
|
A list of edges. |
nodes - [AiArtifact]
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
Example
{
"edges": [AiArtifactEdge],
"nodes": [AiArtifact],
"pageInfo": PageInfo
}
AiArtifactEdge
Description
An edge in a connection.
Fields
| Field Name | Description |
|---|---|
cursor - String!
|
A cursor for use in pagination. |
node - AiArtifact
|
The item at the end of the edge. |
Example
{
"cursor": "abc123",
"node": AiArtifact
}
AiEmployee
Fields
| Field Name | Description |
|---|---|
active - Boolean!
|
|
aiEmployeeMemories - [AiEmployeeMemory!]!
|
|
aiRuns - [AiRun!]!
|
|
approvalRateData - [ApprovalRateData!]!
|
|
autonomyLevel - String!
|
|
crew - String
|
|
currentMonthCost - Int!
|
|
description - String
|
|
id - String!
|
|
lastRun - AiRun
|
|
mcpServers - [String!]!
|
|
modelPreference - String
|
|
monthlyBudgetCents - Int!
|
|
name - String!
|
|
nextRunAt - ISO8601DateTime
|
|
postFilterSkill - String
|
|
promotionCriteria - PromotionCriteria
|
|
roleKey - String!
|
|
scheduleCron - String
|
|
skillRefs - [String!]!
|
|
taskPrompt - String
|
|
Example
{
"active": false,
"aiEmployeeMemories": [AiEmployeeMemory],
"aiRuns": [AiRun],
"approvalRateData": [ApprovalRateData],
"autonomyLevel": "abc123",
"crew": "abc123",
"currentMonthCost": 123,
"description": "xyz789",
"id": "xyz789",
"lastRun": AiRun,
"mcpServers": ["xyz789"],
"modelPreference": "abc123",
"monthlyBudgetCents": 123,
"name": "abc123",
"nextRunAt": ISO8601DateTime,
"postFilterSkill": "abc123",
"promotionCriteria": PromotionCriteria,
"roleKey": "abc123",
"scheduleCron": "xyz789",
"skillRefs": ["xyz789"],
"taskPrompt": "xyz789"
}
AiEmployeeConnection
Description
The connection type for AiEmployee.
Fields
| Field Name | Description |
|---|---|
edges - [AiEmployeeEdge]
|
A list of edges. |
nodes - [AiEmployee]
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
Example
{
"edges": [AiEmployeeEdge],
"nodes": [AiEmployee],
"pageInfo": PageInfo
}
AiEmployeeEdge
Description
An edge in a connection.
Fields
| Field Name | Description |
|---|---|
cursor - String!
|
A cursor for use in pagination. |
node - AiEmployee
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": AiEmployee
}
AiEmployeeMemory
Fields
| Field Name | Description |
|---|---|
id - String!
|
|
memoryData - JSON
|
|
memoryKey - String!
|
|
updatedAt - ISO8601DateTime!
|
Example
{
"id": "xyz789",
"memoryData": {},
"memoryKey": "abc123",
"updatedAt": ISO8601DateTime
}
AiRequest
Fields
| Field Name | Description |
|---|---|
completedAt - ISO8601DateTime
|
|
createdAt - ISO8601DateTime!
|
|
errorCode - String
|
|
errorMessage - String
|
|
id - ID!
|
|
kind - String!
|
|
resultJson - String
|
|
status - String!
|
Example
{
"completedAt": ISO8601DateTime,
"createdAt": ISO8601DateTime,
"errorCode": "xyz789",
"errorMessage": "xyz789",
"id": "4",
"kind": "abc123",
"resultJson": "xyz789",
"status": "xyz789"
}
AiRun
Fields
| Field Name | Description |
|---|---|
aiArtifacts - [AiArtifact!]!
|
|
aiEmployee - AiEmployee!
|
|
completionTokens - Int!
|
|
costCents - Int!
|
|
createdAt - ISO8601DateTime!
|
|
durationSeconds - Int
|
|
errorMessage - String
|
|
finishedAt - ISO8601DateTime
|
|
id - String!
|
|
numTurns - Int
|
|
promptTokens - Int!
|
|
runLog - JSON
|
|
startedAt - ISO8601DateTime
|
|
status - String!
|
|
triggeredBy - String!
|
Example
{
"aiArtifacts": [AiArtifact],
"aiEmployee": AiEmployee,
"completionTokens": 123,
"costCents": 987,
"createdAt": ISO8601DateTime,
"durationSeconds": 987,
"errorMessage": "abc123",
"finishedAt": ISO8601DateTime,
"id": "xyz789",
"numTurns": 987,
"promptTokens": 987,
"runLog": {},
"startedAt": ISO8601DateTime,
"status": "xyz789",
"triggeredBy": "abc123"
}
AllyActivity
Description
A recent progress event from an accepted ally (friend), shown in the ally activity feed.
Fields
| Field Name | Description |
|---|---|
action - String!
|
Verb describing what the ally did (e.g. "checked in on"). |
allyId - ID
|
public_id of the ally user who performed the action. |
allyName - String!
|
Display name of the ally user. |
allyPhoto - String
|
Profile photo URL of the ally user. |
communityId - ID
|
public_id of the community involved, if any. |
communityName - String
|
Name of the community involved, if any. |
details - JSON
|
Per-kind display payload; keys vary by kind. |
id - ID!
|
Public identifier for this activity record. |
kind - AllyActivityKindEnum
|
Activity kind discriminator: JOIN, POST, ACHIEVEMENT, GOAL, or FOLLOW. |
target - String!
|
Name of the goal the ally acted on. |
timestamp - String!
|
Unix timestamp (string) when the activity occurred. |
Example
{
"action": "abc123",
"allyId": "4",
"allyName": "abc123",
"allyPhoto": "xyz789",
"communityId": 4,
"communityName": "abc123",
"details": {},
"id": "4",
"kind": "ACHIEVEMENT",
"target": "abc123",
"timestamp": "xyz789"
}
AllyActivityKindEnum
Description
Discriminator for which activity-kind branch an ally feed row represents.
Values
| Enum Value | Description |
|---|---|
|
|
Ally completed a milestone on a goal. |
|
|
Ally added a new ally. |
|
|
Ally checked in on a goal or habit. |
|
|
Ally joined a community. |
|
|
Ally posted in a community. |
Example
"ACHIEVEMENT"
AllyInvite
Description
An accountability-partner invite token generated by a user.
Fields
| Field Name | Description |
|---|---|
createdAt - ISO8601DateTime!
|
When the invite was created. |
expiresAt - ISO8601DateTime!
|
When this invite expires (7 days from creation). |
id - ID!
|
Public identifier for this invite record. |
status - String!
|
Current status: pending, accepted, expired, or revoked. |
token - String!
|
URL-safe invite token — embed in the deep link. |
Example
{
"createdAt": ISO8601DateTime,
"expiresAt": ISO8601DateTime,
"id": 4,
"status": "abc123",
"token": "xyz789"
}
AllyInvitePreview
Description
Minimal public preview of an accountability-partner invite — safe for unauthenticated access.
Fields
| Field Name | Description |
|---|---|
invalidReason - String
|
Why the invite is invalid: 'expired', 'revoked', or 'not_found'. Null when valid is true. |
inviterAvatarUrl - String
|
URL for the inviter's profile photo, or null if none. |
inviterName - String
|
The inviter's display name. |
valid - Boolean!
|
Whether the invite is active and can be accepted. |
Example
{
"invalidReason": "abc123",
"inviterAvatarUrl": "xyz789",
"inviterName": "abc123",
"valid": false
}
AllyStatusEnum
Description
Relationship status between the searching user and a search result user.
Values
| Enum Value | Description |
|---|---|
|
|
An active ally relationship exists in either direction. |
|
|
Current user has blocked this user. |
|
|
No ally relationship exists. |
|
|
This user sent a pending ally request to the current user. |
|
|
Current user sent a pending ally request to this user. |
Example
"ACCEPTED"
AllySuggestion
Description
A user suggested as a potential ally, with a human-readable rationale.
Fields
| Field Name | Description |
|---|---|
allyStatus - AllyStatusEnum!
|
Relationship status — always NONE for suggestions. |
firstName - String
|
The user's given name. |
lastName - String
|
The user's family name. |
mutualCount - Int!
|
Number of communities shared with the current user. |
photo - UserPhoto
|
The user's profile photo. |
publicId - String!
|
URL-safe public identifier of the suggested user. |
reason - String
|
Short rationale, e.g. "Both in Marathon in 16 weeks". |
username - String
|
The user's unique handle. |
Example
{
"allyStatus": "ACCEPTED",
"firstName": "xyz789",
"lastName": "abc123",
"mutualCount": 123,
"photo": UserPhoto,
"publicId": "abc123",
"reason": "abc123",
"username": "abc123"
}
AnalyticsActivityHeatmap
Description
Personal Analytics: trailing 90-day activity heatmap.
Fields
| Field Name | Description |
|---|---|
days - [AnalyticsHeatmapDay!]!
|
Example
{"days": [AnalyticsHeatmapDay]}
AnalyticsCategoryCompletion
Description
Personal Analytics: one category's completion % for the current month-to-date.
Example
{"category": "abc123", "pct": 987.65}
AnalyticsCompletionByCategory
Description
Personal Analytics: Completion-by-category chart series.
Fields
| Field Name | Description |
|---|---|
series - [AnalyticsCategoryCompletion!]!
|
Example
{"series": [AnalyticsCategoryCompletion]}
AnalyticsHeatmapDay
AnalyticsMonthInReview
Description
Personal Analytics: the Month-in-review hero card.
Fields
| Field Name | Description |
|---|---|
bestCategory - AnalyticsCategoryCompletion
|
The leading category this period, or null with no data. |
bestStreak - Int!
|
Peak streak length achieved this month-to-date. |
daysActive - Int!
|
Distinct days with activity this month-to-date. |
daysInMonth - Int!
|
Total days in the current month. |
goalsDone - Int!
|
Goals completed this month-to-date. |
xpEarned - Int!
|
XP earned this month-to-date (badge-unlock proxy). |
Example
{
"bestCategory": AnalyticsCategoryCompletion,
"bestStreak": 123,
"daysActive": 987,
"daysInMonth": 987,
"goalsDone": 987,
"xpEarned": 123
}
AnalyticsStreakHistory
Description
Personal Analytics: trailing 26-week streak history.
Fields
| Field Name | Description |
|---|---|
currentRun - Int!
|
The user's current active streak. |
points - [AnalyticsStreakPoint!]!
|
Example
{"currentRun": 987, "points": [AnalyticsStreakPoint]}
AnalyticsStreakPoint
AnalyticsXpOverTime
Description
Personal Analytics: trailing 26-week cumulative XP.
Fields
| Field Name | Description |
|---|---|
points - [AnalyticsXpPoint!]!
|
Example
{"points": [AnalyticsXpPoint]}
AnalyticsXpPoint
AnswerInput
ApprovalRateData
ApproveAiArtifactPayload
Description
Autogenerated return type of ApproveAiArtifact.
Fields
| Field Name | Description |
|---|---|
artifact - AiArtifact
|
|
errors - [String!]!
|
Example
{
"artifact": AiArtifact,
"errors": ["xyz789"]
}
ArchiveFeedbackTagPayload
Description
Autogenerated return type of ArchiveFeedbackTag.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackTag - FeedbackTag
|
Example
{
"errors": ["abc123"],
"feedbackTag": FeedbackTag
}
ArchiveSubCommunityPayload
Description
Autogenerated return type of ArchiveSubCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
Example
{
"community": Community,
"errors": ["abc123"]
}
BadgeStat
BeginImportPayload
Description
Autogenerated return type of BeginImport.
Fields
| Field Name | Description |
|---|---|
dataImport - DataImport
|
|
errors - [String!]!
|
Example
{
"dataImport": DataImport,
"errors": ["abc123"]
}
BlockAllyPayload
Description
Autogenerated return type of BlockAlly.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["xyz789"], "success": true}
Boolean
Description
The Boolean scalar type represents true or false.
Example
true
BulkReviewContentFlagsPayload
Description
Autogenerated return type of BulkReviewContentFlags.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
reviewedCount - Int!
|
Example
{"errors": ["xyz789"], "reviewedCount": 987}
CancelSupporterSubscriptionPayload
Description
Autogenerated return type of CancelSupporterSubscription.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["xyz789"], "success": true}
CancelTeamSubscriptionPayload
Description
Autogenerated return type of CancelTeamSubscription.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": false}
CascadeCounts
Example
{
"adminActions": 987,
"aiEmployeeMemories": 123,
"communityComments": 987,
"communityMemberships": 987,
"communityPosts": 123,
"goalEventEncouragements": 987,
"goalEvents": 987,
"goals": 987,
"milestones": 987,
"moodLogs": 123,
"user": 987,
"userActions": 987,
"userDevices": 123
}
CascadePreview
Fields
| Field Name | Description |
|---|---|
counts - CascadeCounts!
|
|
totalModels - Int!
|
|
totalRecords - Int!
|
Example
{
"counts": CascadeCounts,
"totalModels": 123,
"totalRecords": 123
}
CategoryStats
ChallengeParticipant
Description
A single user participation record within a community challenge, tracking progress toward completion.
Fields
| Field Name | Description |
|---|---|
communityChallenge - CommunityChallenge
|
The challenge this participation belongs to. |
completed - Boolean!
|
Whether the participant has met the completion threshold. |
completedAt - ISO8601DateTime
|
When the target was crossed. Nil if not yet complete. |
progressCount - Int!
|
Number of qualifying goal events logged so far. |
progressPercent - Float!
|
Progress toward completion as a percentage (0–100), clamped. |
publicId - ID!
|
URL-safe public identifier for this participation record. |
rank - Int
|
Leaderboard rank (1-indexed). Set by the leaderboard resolver; nil outside that context. |
user - User
|
The participating user. |
userPublicId - String
|
Public ID of the participating user (safe for membership checks). |
Example
{
"communityChallenge": CommunityChallenge,
"completed": true,
"completedAt": ISO8601DateTime,
"progressCount": 123,
"progressPercent": 987.65,
"publicId": "4",
"rank": 987,
"user": User,
"userPublicId": "abc123"
}
CheckInHabitPayload
Description
Autogenerated return type of CheckInHabit.
Fields
| Field Name | Description |
|---|---|
checkinToken - String
|
Rotated check-in token, present only when this request was authenticated by a check-in token. A rejected rotation (nil) is native's signal to fall back to the foreground drain. |
errors - [String!]!
|
|
goal - Goal
|
|
goalEvent - GoalEvent
|
Example
{
"checkinToken": "xyz789",
"errors": ["abc123"],
"goal": Goal,
"goalEvent": GoalEvent
}
CheckValidUsernamePayload
Description
Autogenerated return type of CheckValidUsername.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
ClaimAiArtifactPayload
Description
Autogenerated return type of ClaimAiArtifact.
Fields
| Field Name | Description |
|---|---|
artifact - AiArtifact
|
|
errors - [String!]!
|
Example
{
"artifact": AiArtifact,
"errors": ["abc123"]
}
ClaimStreakInsurancePayload
Description
Autogenerated return type of ClaimStreakInsurance.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["abc123"],
"goal": Goal
}
CoachAction
Description
A tappable action chip suggested by the Coach alongside its reply.
Fields
| Field Name | Description |
|---|---|
kind - String!
|
Action discriminator: log_event | log_mood | view_goal | create_milestone | open_meet_coach. |
label - String!
|
Human-readable button label (e.g. "Log progress on Run a 5K"). |
targetId - String
|
public_id of the target record (e.g. goal public_id for log_event). Null for actions with no specific target. |
Example
{
"kind": "xyz789",
"label": "xyz789",
"targetId": "xyz789"
}
CoachConversation
Description
A persisted conversation thread between a user and their Coach.
Fields
| Field Name | Description |
|---|---|
goalId - String
|
public_id of the goal this thread is scoped to, or null for the global thread. |
id - String!
|
public_id of this conversation. |
lastMessageAt - ISO8601DateTime
|
Timestamp of the last message. |
messages - [CoachMessage!]!
|
Messages in this thread, oldest first. |
Example
{
"goalId": "abc123",
"id": "abc123",
"lastMessageAt": ISO8601DateTime,
"messages": [CoachMessage]
}
CoachMessage
Description
A single message in a Coach conversation thread.
Fields
| Field Name | Description |
|---|---|
content - String!
|
Message text. |
createdAt - ISO8601DateTime!
|
When this message was sent. |
id - String!
|
public_id of this message. |
role - String!
|
Who sent the message: "user" or "assistant". |
Example
{
"content": "abc123",
"createdAt": ISO8601DateTime,
"id": "abc123",
"role": "abc123"
}
CoachModelChange
Description
One entry in the Coach model change history, sourced from admin_actions.
Fields
| Field Name | Description |
|---|---|
actorName - String
|
The admin's full name, or null if unavailable. |
changedAt - ISO8601DateTime!
|
When the change was made. |
fromModel - String
|
Prior model id — null for the very first change. |
toModel - String!
|
Model id the setting was changed to. |
Example
{
"actorName": "xyz789",
"changedAt": ISO8601DateTime,
"fromModel": "xyz789",
"toModel": "xyz789"
}
CoachModelOption
Description
An allowlisted Gemini model id Coach may run, with its current effective rate.
Fields
| Field Name | Description |
|---|---|
id - String!
|
Concrete model id (e.g. gemini/gemini-2.5-flash). |
inputCentsPerMillion - Int!
|
Current input rate, cents per million tokens. |
label - String!
|
Human-readable name derived from the model id. |
outputCentsPerMillion - Int!
|
Current output rate, cents per million tokens. |
Example
{
"id": "abc123",
"inputCentsPerMillion": 987,
"label": "xyz789",
"outputCentsPerMillion": 123
}
CoachModelSetting
Description
The runtime Coach Gemini model setting: current value, allowlisted options, and recent change history.
Fields
| Field Name | Description |
|---|---|
currentModel - String!
|
The model id Coach is currently running. |
options - [CoachModelOption!]!
|
Allowlisted model ids with their current effective rates. |
recentChanges - [CoachModelChange!]!
|
Last 5 changes to the setting, newest first. |
Example
{
"currentModel": "abc123",
"options": [CoachModelOption],
"recentChanges": [CoachModelChange]
}
CoachingPreferences
Description
AI Coach persona and communication preferences for the user.
Fields
| Field Name | Description |
|---|---|
configured - Boolean!
|
Whether the user has completed coach setup. |
depth - Int!
|
Response depth from 1 (brief) to 5 (detailed). |
focusPrimary - String!
|
Primary coaching focus area. |
focusSecondary - String
|
Optional secondary coaching focus area. |
persona - String!
|
Selected coaching persona identifier. |
rhythm - String!
|
How often Coach reaches out proactively. |
toneBrevity - Int!
|
Tone brevity from 0 to 4. |
toneWarmth - Int!
|
Tone warmth from 0 to 4. |
Example
{
"configured": false,
"depth": 987,
"focusPrimary": "abc123",
"focusSecondary": "abc123",
"persona": "abc123",
"rhythm": "abc123",
"toneBrevity": 123,
"toneWarmth": 123
}
CollectiveGoal
Description
A collective (team-wide or sub-community) goal (N15/N16).
Fields
| Field Name | Description |
|---|---|
contributors - [CollectiveGoalContributor!]!
|
|
createdBy - String!
|
|
current - Int!
|
|
daysLeft - Int
|
Null when no deadline is set (no CreateCollectiveGoal argument sets one this phase) — never a fabricated 0. |
publicId - ID!
|
|
scope - String!
|
|
target - Int!
|
|
targetMetric - String!
|
One of CollectiveGoal::TARGET_METRICS (check_ins, milestones_completed, members_active_days, custom). |
title - String!
|
|
yourContribution - CollectiveGoalYourContribution
|
Example
{
"contributors": [CollectiveGoalContributor],
"createdBy": "abc123",
"current": 987,
"daysLeft": 123,
"publicId": 4,
"scope": "xyz789",
"target": 123,
"targetMetric": "abc123",
"title": "xyz789",
"yourContribution": CollectiveGoalYourContribution
}
CollectiveGoalContributor
CollectiveGoalYourContribution
CommitImportPayload
Description
Autogenerated return type of CommitImport.
Fields
| Field Name | Description |
|---|---|
dataImport - DataImport
|
|
errors - [String!]!
|
Example
{
"dataImport": DataImport,
"errors": ["xyz789"]
}
Community
Description
An interest-based group where users share goals and support each other.
Fields
| Field Name | Description |
|---|---|
activeChallenge - CommunityChallenge
|
The currently active challenge for this community, or nil. |
activeMembers - Int!
|
Count of members who posted or commented in the past 7 days. |
archiveDaysLeft - Int
|
Days remaining in the 30-day archive read-only window, or nil when not archived. |
archivedAt - ISO8601DateTime
|
When this Team sub-community began its archive window, or nil. |
badges - CommunityBadges!
|
Threshold and status marks describing this community. |
category - String
|
General category label for the community (e.g. "fitness"). |
checkInsPerWeek - Int!
|
Check-ins logged by members in the trailing 7 days. Always 0 in Phase 3 — no check-in tracking model exists yet for sub-communities. |
coverImage - String
|
URL of the community banner/cover image. |
createdAt - ISO8601DateTime!
|
ISO 8601 datetime when the community was created. |
createdAtTime - String!
|
Unix timestamp (string) when the community was created. |
demo - Boolean!
|
Whether this community is a demo-tagged record (Phase 30). |
description - String
|
Human-readable description of the community purpose. |
editorialPosition - Int
|
Display order within editorial_slot, or nil when unassigned. |
editorialSlot - String
|
Editorial discovery slot this community is assigned to, or nil when unassigned. |
feedItems - [CommunityFeedItem!]
|
Recent activity feed items for this community. |
goalCategory - GoalCategory
|
The primary goal category this community is focused on. |
goals - [Goal!]
|
Goals that have been shared into this community. |
growthRate - Float!
|
Member growth rate as a percentage over the past 7 days. |
guidelines - String
|
Community rules and posting guidelines. |
healthScore - Int!
|
Computed health score (0–100) reflecting community engagement. |
icon - String!
|
Display icon key for a Team sub-community (sunrise/book/leaf/mountain/users). |
id - ID!
|
Alias of publicId (BaseObject#id) — the Teams frontend list types key on both. |
imageUrl - String
|
URL of the community avatar/icon image. |
isDefault - Boolean!
|
Alias of isDefaultForTeam — the Teams frontend (types.ts TeamRoom.isDefault, and every sub-community mutation/query response) is frozen on this shorter name. |
isDefaultForTeam - Boolean!
|
Whether this is the Team's default landing room. |
isFeatured - Boolean!
|
Whether the community is featured on the discovery page. |
isFounding - Boolean!
|
True when the community became discoverable within 30 days of its creation. |
isGated - Boolean!
|
True when join_policy is "request" — joining requires the lead to approve. |
isMember - Boolean!
|
Whether the current user is a member of this community. |
isVerified - Boolean!
|
Whether the community has been verified by Objectuve admins. |
joinPolicy - String!
|
Join policy for a Team sub-community: "open" or "request". |
leadMembershipId - ID
|
Public ID of the sub-community lead's TeamMembership on this team, or nil when the lead has since left the team. |
leadName - String
|
The sub-community's lead (its admin-role CommunityMember) first name, or nil. |
memberCount - Int!
|
Total number of members in this community. |
members - [CommunityMember!]
|
All current members of this community. |
membersToDiscoverable - Int!
|
Members still needed to appear in discovery (0 when discoverable). |
name - String!
|
Display name of the community. |
pastChallenges - [CommunityChallenge!]
|
Completed challenges for this community. |
privacy - String!
|
Privacy level string: "public" or "private". |
private - Boolean!
|
When true, membership requires an invite or approval. |
publicId - ID!
|
URL-safe public identifier for this community. |
reason - CommunityReason
|
Disclosable reason this community is ranked here, or null. |
teamId - ID
|
Public ID of the owning Team, when this community is a Team sub-community. |
teamName - String
|
Display name of the owning Team, when this community is a Team sub-community, or nil. |
totalGoals - Int!
|
Total number of goals shared in this community. |
upcomingChallenges - [CommunityChallenge!]
|
Upcoming challenges for this community. |
updatedAtTime - String!
|
Unix timestamp (string) when the community was last updated. |
userProgressPercent - Float
|
Per-user aggregate progress (0–100) across shared goals. Null when no shared goals. |
Example
{
"activeChallenge": CommunityChallenge,
"activeMembers": 987,
"archiveDaysLeft": 123,
"archivedAt": ISO8601DateTime,
"badges": CommunityBadges,
"category": "xyz789",
"checkInsPerWeek": 123,
"coverImage": "xyz789",
"createdAt": ISO8601DateTime,
"createdAtTime": "xyz789",
"demo": true,
"description": "xyz789",
"editorialPosition": 987,
"editorialSlot": "abc123",
"feedItems": [CommunityFeedItem],
"goalCategory": GoalCategory,
"goals": [Goal],
"growthRate": 987.65,
"guidelines": "abc123",
"healthScore": 123,
"icon": "abc123",
"id": 4,
"imageUrl": "xyz789",
"isDefault": true,
"isDefaultForTeam": false,
"isFeatured": true,
"isFounding": true,
"isGated": false,
"isMember": false,
"isVerified": true,
"joinPolicy": "xyz789",
"leadMembershipId": "4",
"leadName": "xyz789",
"memberCount": 987,
"members": [CommunityMember],
"membersToDiscoverable": 987,
"name": "abc123",
"pastChallenges": [CommunityChallenge],
"privacy": "abc123",
"private": false,
"publicId": 4,
"reason": CommunityReason,
"teamId": 4,
"teamName": "abc123",
"totalGoals": 987,
"upcomingChallenges": [CommunityChallenge],
"updatedAtTime": "xyz789",
"userProgressPercent": 987.65
}
CommunityBadges
Description
Threshold and status marks describing a community. Each field states its own threshold — see field descriptions.
Fields
| Field Name | Description |
|---|---|
club1k - Boolean!
|
1,000 or more people are currently members of this community. |
featured - Boolean!
|
An Objectuve admin has marked this community as featured. Does not affect discovery ranking. |
streak100 - Boolean!
|
10 or more current members have each reached a streak of 100 days or longer at some point. Derived from users.longest_streak, which is monotonic — never from current_streak, which goes stale. |
wins500 - Boolean!
|
Members of this community have completed 500 or more goals, all-time. |
Example
{"club1k": true, "featured": false, "streak100": false, "wins500": false}
CommunityChallenge
Description
A time-boxed challenge within a community where participants track progress toward a shared goal.
Fields
| Field Name | Description |
|---|---|
badgeIcon - String!
|
Emoji or icon string for the completion badge. |
badgeName - String!
|
Name of the badge awarded to challenge completers. |
community - Community!
|
The community this challenge belongs to. |
createdAtTime - String!
|
Unix timestamp (string) when the challenge was created. |
creator - User!
|
The user who created the challenge. |
currentUserParticipant - ChallengeParticipant
|
The current user's participation row, or nil. |
description - String
|
Optional description of the challenge. |
endDate - ISO8601Date!
|
Date when the challenge ends (inclusive). |
isParticipating - Boolean!
|
Whether the current user is an active participant. |
name - String!
|
Display name of the challenge. |
participantCount - Int!
|
Total number of active participants in the challenge. |
publicId - ID!
|
URL-safe public identifier for this challenge. |
startDate - ISO8601Date!
|
Date when the challenge begins. |
status - String!
|
Date-derived status: "upcoming", "active", or "completed". |
targetGoalCount - Int!
|
Number of qualifying goal events required to complete the challenge. |
targetGoalType - GoalType
|
Optional goal type filter. Nil means any goal event counts. |
updatedAtTime - String!
|
Unix timestamp (string) when the challenge was last updated. |
Example
{
"badgeIcon": "abc123",
"badgeName": "abc123",
"community": Community,
"createdAtTime": "xyz789",
"creator": User,
"currentUserParticipant": ChallengeParticipant,
"description": "xyz789",
"endDate": ISO8601Date,
"isParticipating": false,
"name": "abc123",
"participantCount": 987,
"publicId": "4",
"startDate": ISO8601Date,
"status": "xyz789",
"targetGoalCount": 123,
"targetGoalType": GoalType,
"updatedAtTime": "xyz789"
}
CommunityEvent
Description
A scheduled event or activity within a community.
Fields
| Field Name | Description |
|---|---|
attendeeCount - Int!
|
Number of community members who have indicated they will attend. |
communityId - ID!
|
public_id of the community hosting this event. |
communityName - String!
|
Name of the community hosting this event. |
date - String!
|
Unix timestamp (string) of when the event takes place. |
description - String
|
Optional longer description of what the event involves. |
id - ID!
|
Public identifier for this event. |
title - String!
|
Title of the community event. |
Example
{
"attendeeCount": 987,
"communityId": "4",
"communityName": "xyz789",
"date": "xyz789",
"description": "xyz789",
"id": "4",
"title": "abc123"
}
CommunityFeedItem
Description
A single item in a community activity feed (e.g. a goal update or milestone).
Fields
| Field Name | Description |
|---|---|
content - String!
|
Text content of the feed item. |
createdAtTime - String!
|
Unix timestamp (string) when this item was created. |
id - ID!
|
Public identifier for this feed item. |
media - CommunityMedia
|
Optional media attachment for this feed item. |
updatedAtTime - String!
|
Unix timestamp (string) when this item was last updated. |
Example
{
"content": "abc123",
"createdAtTime": "xyz789",
"id": 4,
"media": CommunityMedia,
"updatedAtTime": "xyz789"
}
CommunityGoal
Description
A goal that has been shared into a community, linking the goal to the community feed.
Fields
| Field Name | Description |
|---|---|
community - Community
|
The community the goal was shared into. |
createdAtTime - String!
|
Unix timestamp (string) when the goal was shared into the community. |
goal - Goal
|
The goal that was shared. |
id - ID!
|
Public identifier for this community-goal association. |
updatedAtTime - String!
|
Unix timestamp (string) when the association was last updated. |
Example
{
"community": Community,
"createdAtTime": "abc123",
"goal": Goal,
"id": "4",
"updatedAtTime": "xyz789"
}
CommunityInsights
Description
Community engagement insights and recommendations for a specific user.
Fields
| Field Name | Description |
|---|---|
achievementsUnlocked - Int!
|
Number of community-related achievements unlocked by the user. |
communitiesJoined - Int!
|
Total number of communities the user has joined. |
hasGoalSignal - Boolean!
|
True when the user has at least one goal with a goal category set — the signal the Explore subhead (UI-SPEC v4.63 Phase 4 §4) keys its S1/S2/S3 states on. |
partnersCount - Int!
|
Count of accepted accountability partners for the user. |
postsThisWeek - Int!
|
Number of posts the user has made in communities this week. |
suggestedCommunities - [SuggestedCommunity!]!
|
Communities recommended for the user to join based on their interests. |
suggestedCount - Int!
|
Number of communities suggested for the user to join. |
totalEngagement - Int!
|
Aggregate engagement score across all communities. |
trendingCommunities - [TrendingCommunity!]!
|
Currently trending communities across the platform. |
upcomingEvents - [CommunityEvent!]!
|
Upcoming events in communities the user belongs to. |
yourActivity - [UserActivity!]!
|
Recent activity items for the user across their communities. |
Example
{
"achievementsUnlocked": 987,
"communitiesJoined": 987,
"hasGoalSignal": false,
"partnersCount": 987,
"postsThisWeek": 987,
"suggestedCommunities": [SuggestedCommunity],
"suggestedCount": 123,
"totalEngagement": 987,
"trendingCommunities": [TrendingCommunity],
"upcomingEvents": [CommunityEvent],
"yourActivity": [UserActivity]
}
CommunityMedia
Description
A media attachment (image) associated with a community feed item or post.
Example
{
"id": 4,
"imageUrl": "abc123",
"name": "xyz789"
}
CommunityMember
Description
A user membership record within a community, with engagement statistics.
Fields
| Field Name | Description |
|---|---|
createdAtTime - String!
|
Unix timestamp (string) when the user joined the community. |
goalsCompleted - Int!
|
Number of goals completed by this user (proxy for community contribution). |
helpfulCount - Int!
|
Count of helpful reactions received by this user in the community. |
id - ID!
|
Public identifier for this membership record. |
joinedDate - String!
|
Unix timestamp (string) alias for created_at_time. |
points - Int!
|
Engagement points accumulated by this member in the community. |
postsCount - Int!
|
Number of posts this user has made in this community. |
rank - Int
|
Leaderboard rank of this member within the community. |
role - String!
|
Role within the community (e.g. "member", "moderator", "admin"). |
updatedAtTime - String!
|
Unix timestamp (string) when the membership record was last updated. |
user - User
|
The user who is a member of the community. |
userPublicId - String
|
Public ID of the member user (safe for membership checks). |
Example
{
"createdAtTime": "abc123",
"goalsCompleted": 987,
"helpfulCount": 987,
"id": 4,
"joinedDate": "xyz789",
"points": 123,
"postsCount": 987,
"rank": 987,
"role": "abc123",
"updatedAtTime": "xyz789",
"user": User,
"userPublicId": "abc123"
}
CommunityPost
Description
A discussion post or update made by a user within a community.
Fields
| Field Name | Description |
|---|---|
comments - [PostComment!]!
|
Comments left on this post. |
communityId - ID!
|
public_id of the community this post belongs to. |
content - String!
|
Body text of the post. |
goalId - ID
|
public_id of the goal linked to this post, if any. |
goalName - String
|
Name of the linked goal, if any. |
id - ID!
|
Public identifier for this post. |
likes - Int!
|
Number of like reactions on this post. |
timestamp - String!
|
Unix timestamp (string) when the post was created. |
type - String!
|
Post type (e.g. "update", "goal_share", "milestone"). |
userId - ID!
|
public_id of the user who created the post. |
userName - String!
|
Username of the post author. |
userPhoto - String
|
Profile photo URL of the post author. |
Example
{
"comments": [PostComment],
"communityId": 4,
"content": "abc123",
"goalId": "4",
"goalName": "abc123",
"id": "4",
"likes": 987,
"timestamp": "abc123",
"type": "xyz789",
"userId": 4,
"userName": "xyz789",
"userPhoto": "abc123"
}
CommunityReason
Description
The single reason a discovery surface is allowed to show this community, chosen by fixed precedence (goal_category -> seasonal_event -> community_health), never by score. The backend never returns kind: "ally_overlap" — ally overlap ranks but is never disclosed (v4.63 Phase 4 §1).
Fields
| Field Name | Description |
|---|---|
disclosable - Boolean!
|
false for ally_overlap, true for every other kind. Belt-and-braces: the resolver already withholds ally_overlap reasons, but the flag lives on the reason so the frontend is never the thing that remembers which signals are safe to show. |
kind - String!
|
One of: goal_category, seasonal_event, community_health, ally_overlap. (ally_overlap is never actually returned by any resolver.) |
label - String
|
The interpolation value only, verbatim and un-re-cased — the goal category name or the SeasonalEvent display name. null for community_health. The frontend composes the chip sentence (UI-SPEC v4.63 Phase 4 §2); this field never carries pre-composed copy. |
Example
{
"disclosable": true,
"kind": "xyz789",
"label": "abc123"
}
CommunitySuggestion
Description
A user-submitted suggestion for a new community topic or interest area.
Fields
| Field Name | Description |
|---|---|
content - String!
|
Text of the community suggestion. |
goalCategory - GoalCategory
|
Goal category the suggested community would belong to, if specified. |
goalKind - GoalType
|
Goal type the suggested community would focus on, if specified. |
id - ID!
|
Public identifier for this suggestion. |
Example
{
"content": "xyz789",
"goalCategory": GoalCategory,
"goalKind": GoalType,
"id": "4"
}
CompleteOnboardingAndCreateGoalPayload
Description
Autogenerated return type of CompleteOnboardingAndCreateGoal.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
|
user - User
|
Example
{
"errors": ["xyz789"],
"goal": Goal,
"user": User
}
ConnectChessComPayload
Description
Autogenerated return type of ConnectChessCom.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
integrationConnection - IntegrationConnection
|
Example
{
"errors": ["abc123"],
"integrationConnection": IntegrationConnection
}
ConnectStravaPayload
Description
Autogenerated return type of ConnectStrava.
Fields
| Field Name | Description |
|---|---|
authorizeUrl - String!
|
|
errors - [String!]!
|
Example
{
"authorizeUrl": "xyz789",
"errors": ["abc123"]
}
ConnectedApps
Description
The current user's Connected Apps state: the provider catalog plus their own connections and mappings.
Fields
| Field Name | Description |
|---|---|
connections - [IntegrationConnection!]!
|
The current user's connections. |
mappings - [HabitIntegrationMapping!]!
|
The current user's habit mappings. |
providers - [IntegrationProvider!]!
|
All available providers. |
Example
{
"connections": [IntegrationConnection],
"mappings": [HabitIntegrationMapping],
"providers": [IntegrationProvider]
}
ContentFlag
Fields
| Field Name | Description |
|---|---|
authorName - String
|
|
contentPreview - String
|
First 200 characters of flagged content |
createdAt - String!
|
|
flaggableId - Int!
|
|
flaggableType - String!
|
|
id - String!
|
Public ID |
reason - String
|
|
reviewedAt - String
|
|
reviewerName - String
|
|
severity - String!
|
|
source - String!
|
|
status - String!
|
Example
{
"authorName": "xyz789",
"contentPreview": "abc123",
"createdAt": "abc123",
"flaggableId": 987,
"flaggableType": "xyz789",
"id": "xyz789",
"reason": "xyz789",
"reviewedAt": "xyz789",
"reviewerName": "xyz789",
"severity": "xyz789",
"source": "abc123",
"status": "xyz789"
}
ContentFlagConnection
Description
The connection type for ContentFlag.
Fields
| Field Name | Description |
|---|---|
edges - [ContentFlagEdge]
|
A list of edges. |
nodes - [ContentFlag]
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
Example
{
"edges": [ContentFlagEdge],
"nodes": [ContentFlag],
"pageInfo": PageInfo
}
ContentFlagEdge
Description
An edge in a connection.
Fields
| Field Name | Description |
|---|---|
cursor - String!
|
A cursor for use in pagination. |
node - ContentFlag
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": ContentFlag
}
ContentReport
Example
{
"contentPreview": "abc123",
"createdAt": "xyz789",
"details": "xyz789",
"id": "abc123",
"reason": "abc123",
"reportableType": "abc123",
"reporterName": "abc123",
"status": "xyz789"
}
CreateAllyInvitePayload
Description
Autogenerated return type of CreateAllyInvite.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
invite - AllyInvite
|
Example
{
"errors": ["xyz789"],
"invite": AllyInvite
}
CreateCheckoutSessionPayload
Description
Autogenerated return type of CreateCheckoutSession.
Fields
| Field Name | Description |
|---|---|
checkoutUrl - String
|
|
errors - [String!]!
|
Example
{
"checkoutUrl": "xyz789",
"errors": ["xyz789"]
}
CreateCollectiveGoalPayload
Description
Autogenerated return type of CreateCollectiveGoal.
Fields
| Field Name | Description |
|---|---|
collectiveGoal - CollectiveGoal
|
|
errors - [String!]!
|
|
teamReadOnly - Boolean!
|
True only for the grace-period read-only failure — the frontend renders its own "team is read-only" copy for this. |
Example
{
"collectiveGoal": CollectiveGoal,
"errors": ["abc123"],
"teamReadOnly": false
}
CreateCommunityChallengePayload
Description
Autogenerated return type of CreateCommunityChallenge.
Fields
| Field Name | Description |
|---|---|
communityChallenge - CommunityChallenge
|
|
errors - [String!]!
|
Example
{
"communityChallenge": CommunityChallenge,
"errors": ["abc123"]
}
CreateCommunityPayload
Description
Autogenerated return type of CreateCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
Example
{
"community": Community,
"errors": ["xyz789"]
}
CreateCommunityPostPayload
Description
Autogenerated return type of CreateCommunityPost.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
post - CommunityPost
|
Example
{
"errors": ["xyz789"],
"post": CommunityPost
}
CreateFeedbackCommentPayload
Description
Autogenerated return type of CreateFeedbackComment.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackComment - FeedbackComment
|
Example
{
"errors": ["abc123"],
"feedbackComment": FeedbackComment
}
CreateFeedbackPostPayload
Description
Autogenerated return type of CreateFeedbackPost.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackPost - FeedbackPost
|
Example
{
"errors": ["xyz789"],
"feedbackPost": FeedbackPost
}
CreateFeedbackTagPayload
Description
Autogenerated return type of CreateFeedbackTag.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackTag - FeedbackTag
|
Example
{
"errors": ["xyz789"],
"feedbackTag": FeedbackTag
}
CreateSeasonalEventPayload
Description
Autogenerated return type of CreateSeasonalEvent.
Fields
| Field Name | Description |
|---|---|
errors - [String!]
|
|
seasonalEvent - SeasonalEvent
|
Example
{
"errors": ["xyz789"],
"seasonalEvent": SeasonalEvent
}
CreateSubCommunityPayload
Description
Autogenerated return type of CreateSubCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
|
teamReadOnly - Boolean!
|
True only for the grace-period read-only failure — the frontend renders its own "team is read-only" copy for this. |
Example
{
"community": Community,
"errors": ["abc123"],
"teamReadOnly": false
}
CreateTeamInvitePayload
Description
Autogenerated return type of CreateTeamInvite.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
joinUrl - String
|
|
teamInvite - TeamInvite
|
|
teamReadOnly - Boolean!
|
True only for the grace-period read-only failure — the frontend renders its own "team is read-only" copy for this. |
Example
{
"errors": ["xyz789"],
"joinUrl": "abc123",
"teamInvite": TeamInvite,
"teamReadOnly": true
}
CriticalPathPlayStatus
Description
Today's Critical Path puzzle status for the authenticated user.
Fields
| Field Name | Description |
|---|---|
completed - Boolean!
|
Whether the user has completed today's puzzle. |
elapsedSeconds - Int
|
Time taken in seconds; null if not yet completed. |
percentile - Int
|
Rank percentile (1-99) among all players today; null when fewer than 10 plays recorded. |
puzzleDate - ISO8601Date!
|
UTC calendar date of today's puzzle. |
puzzleSeed - Int!
|
YYYYMMDD integer seed identifying today's puzzle; matches frontend dailySeed(). |
typicalSeconds - Int
|
Median elapsed_seconds of the player's last 10 prior plays at the same grid size; null when fewer than 3 comparable plays exist. |
Example
{
"completed": true,
"elapsedSeconds": 123,
"percentile": 123,
"puzzleDate": ISO8601Date,
"puzzleSeed": 123,
"typicalSeconds": 123
}
CriticalPathReminderPreferences
Description
Daily reminder preferences for the Critical Path feature.
Fields
| Field Name | Description |
|---|---|
enabled - Boolean!
|
Whether the user has opted into daily reminders. |
timeOfDay - String!
|
Preferred local send time in HH:MM format. Defaults to '08:00'. |
timezone - String!
|
User's current IANA timezone string. |
timezoneNeedsConfirmation - Boolean!
|
True when reminders are on but the timezone is still the UTC default. |
Example
{
"enabled": true,
"timeOfDay": "abc123",
"timezone": "abc123",
"timezoneNeedsConfirmation": true
}
CriticalPathTheme
Description
A Critical Path visual theme and its unlock requirement.
Example
{
"key": "xyz789",
"name": "xyz789",
"unlockThreshold": 987
}
DailyUsagePoint
Description
Single day of AI usage data for the daily spend line chart.
Example
{
"callCount": 987,
"costCents": 987,
"date": "abc123",
"tokenCount": 123
}
DashboardPreferences
DataImport
Fields
| Field Name | Description |
|---|---|
collisions - [DataImportCollision!]!
|
|
committedAt - ISO8601DateTime
|
|
completionCount - Int!
|
Check-in rows that will import — excludes error rows. |
createdAt - ISO8601DateTime!
|
|
createdCount - Int!
|
|
currentStep - Int!
|
|
currentStreak - Int
|
Post-import User#current_streak. Only meaningful once status is committed. |
failedCount - Int!
|
|
goalCount - Int!
|
Goal rows that will import — excludes error rows and sub-goals. |
id - ID!
|
|
rowErrors - [DataImportRowIssue!]!
|
|
rowWarnings - [DataImportRowIssue!]!
|
|
skippedCount - Int!
|
|
source - String!
|
|
status - String!
|
|
totalSteps - Int!
|
Example
{
"collisions": [DataImportCollision],
"committedAt": ISO8601DateTime,
"completionCount": 123,
"createdAt": ISO8601DateTime,
"createdCount": 123,
"currentStep": 123,
"currentStreak": 123,
"failedCount": 987,
"goalCount": 987,
"id": 4,
"rowErrors": [DataImportRowIssue],
"rowWarnings": [DataImportRowIssue],
"skippedCount": 123,
"source": "xyz789",
"status": "xyz789",
"totalSteps": 123
}
DataImportCollision
DataImportRowIssue
DeclineAllyRequestPayload
Description
Autogenerated return type of DeclineAllyRequest.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": false}
DeclinePartnerRequestPayload
Description
Autogenerated return type of DeclinePartnerRequest.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userAlly - UserAlly
|
Example
{
"errors": ["xyz789"],
"userAlly": UserAlly
}
DeleteDemoEntityPayload
Description
Autogenerated return type of DeleteDemoEntity.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": false}
DeleteNotificationPayload
Description
Autogenerated return type of DeleteNotification.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
DeleteOwnAccountPayload
Description
Autogenerated return type of DeleteOwnAccount.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["xyz789"], "success": true}
DemoCommunityAttributesInput
DemoDataRunStatus
Description
Progress of an in-flight or recently completed demo-data Sidekiq job.
Fields
| Field Name | Description |
|---|---|
currentStep - Int!
|
|
error - String
|
|
finishedAt - ISO8601DateTime
|
|
scope - String
|
Scope name for ScopeResetJob; null otherwise. |
startedAt - ISO8601DateTime
|
|
status - String!
|
'idle' | 'queued' | 'running' | 'succeeded' | 'failed' |
totalSteps - Int!
|
Example
{
"currentStep": 123,
"error": "abc123",
"finishedAt": ISO8601DateTime,
"scope": "abc123",
"startedAt": ISO8601DateTime,
"status": "xyz789",
"totalSteps": 987
}
DemoGoalAttributesInput
Description
Permitted fields for inline edit of a demo goal.
Example
{
"completed": false,
"content": "xyz789",
"currentAmount": 123.45,
"name": "abc123",
"targetAmount": 123.45
}
DemoScopePreview
Description
Live counts of demo-tagged records across the 12 demo-bearing tables.
Example
{
"aiArtifacts": 123,
"aiEmployees": 987,
"aiRuns": 987,
"communities": 987,
"feedItems": 123,
"feedbackComments": 987,
"feedbackPosts": 987,
"feedbackVotes": 987,
"goalEvents": 987,
"goals": 123,
"totalRecords": 123,
"userAllies": 987,
"users": 987
}
DemoUserAttributesInput
DisconnectIntegrationConnectionPayload
Description
Autogenerated return type of DisconnectIntegrationConnection.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
integrationConnection - IntegrationConnection
|
Example
{
"errors": ["abc123"],
"integrationConnection": IntegrationConnection
}
DiscoveryMember
Description
A minimal, public-safe preview of a community member for discovery surfaces.
Example
{
"avatarUrl": "abc123",
"displayName": "abc123",
"publicId": 4
}
DismissDashboardHintPayload
Description
Autogenerated return type of DismissDashboardHint.
Fields
| Field Name | Description |
|---|---|
success - Boolean!
|
Example
{"success": false}
DismissEnneagramCardPayload
Description
Autogenerated return type of DismissEnneagramCard.
Fields
| Field Name | Description |
|---|---|
success - Boolean!
|
Example
{"success": false}
DismissHabitIntegrationMappingPayload
Description
Autogenerated return type of DismissHabitIntegrationMapping.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
mapping - HabitIntegrationMapping
|
Example
{
"errors": ["xyz789"],
"mapping": HabitIntegrationMapping
}
DocsAssistantAnswer
Description
Response payload for askDocsQuestion.
Fields
| Field Name | Description |
|---|---|
answer - String
|
Assistant answer text. Null when state is DISABLED. |
citations - [DocsAssistantCitation!]!
|
Sources the answer drew from. Always empty when state is REFUSED or DISABLED. |
state - DocsAssistantStateEnum!
|
Terminal state discriminator. |
Example
{
"answer": "abc123",
"citations": [DocsAssistantCitation],
"state": "ANSWERED"
}
DocsAssistantCitation
Description
A single source the docs assistant drew its answer from — a docs/ path from the committed engineering docs corpus.
Example
{
"path": "xyz789",
"title": "xyz789"
}
DocsAssistantStateEnum
Description
Terminal state of an askDocsQuestion response. Auth failures (no session, an invalid session, or a valid session outside @objectuve.com) and rate-limiting both surface as GraphQL errors instead (see askDocsQuestion field description), not a value here — a refusal and a disabled assistant are both successful responses to an authorized caller, never errors.
Values
| Enum Value | Description |
|---|---|
|
|
The assistant answered the question — see answer and citations. |
|
|
The docs assistant kill switch is off. answer is null; no LLM call was made. |
|
|
The question is honestly out of scope for the docs corpus — answer may carry the assistant's refusal text; citations is always empty. |
Example
"ANSWERED"
EditHabitIntegrationMappingPayload
Description
Autogenerated return type of EditHabitIntegrationMapping.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
mapping - HabitIntegrationMapping
|
Example
{
"errors": ["xyz789"],
"mapping": HabitIntegrationMapping
}
EndPartnershipPayload
Description
Autogenerated return type of EndPartnership.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userAlly - UserAlly
|
Example
{
"errors": ["xyz789"],
"userAlly": UserAlly
}
EnneagramAssessment
Description
A completed Enneagram personality assessment result.
Fields
| Field Name | Description |
|---|---|
completedAt - ISO8601DateTime!
|
When the assessment was completed. |
dominantType - Int!
|
Dominant Enneagram type (1–9). |
id - ID!
|
public_id of the assessment. |
scores - JSON!
|
Normalized type scores — hash keyed "1".."9", values 0–100. |
tritype - String!
|
3-character tritype string (e.g. "583"). |
wing - Int!
|
Wing type — adjacent type with the higher score. |
Example
{
"completedAt": ISO8601DateTime,
"dominantType": 123,
"id": "4",
"scores": {},
"tritype": "abc123",
"wing": 987
}
EnqueueClearPayload
Description
Autogenerated return type of EnqueueClear.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
jobId - String
|
Example
{
"errors": ["xyz789"],
"jobId": "abc123"
}
EnqueueReseedPayload
Description
Autogenerated return type of EnqueueReseed.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
jobId - String
|
Example
{
"errors": ["xyz789"],
"jobId": "xyz789"
}
EnqueueScopeResetPayload
Description
Autogenerated return type of EnqueueScopeReset.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
jobId - String
|
|
scope - String
|
Example
{
"errors": ["abc123"],
"jobId": "abc123",
"scope": "xyz789"
}
EnsureTodaysCoachMessagePayload
ExecuteDeletionPayload
Description
Autogenerated return type of ExecuteDeletion.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
gdprRequest - GdprRequest
|
Example
{
"errors": ["abc123"],
"gdprRequest": GdprRequest
}
ExecuteExportPayload
Description
Autogenerated return type of ExecuteExport.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
gdprRequest - GdprRequest
|
Example
{
"errors": ["abc123"],
"gdprRequest": GdprRequest
}
FeatureUsagePoint
Description
Per-feature AI usage aggregation point for the admin dashboard.
Fields
| Field Name | Description |
|---|---|
callCount - Int!
|
Number of AI calls made for this feature over the window. |
costCents - Int!
|
Sum of cost_cents over the window, rounded to the nearest cent. |
feature - String!
|
Feature name (e.g. coaching, milestones, insights). |
tokenCount - Int!
|
Sum of total_tokens over the window. |
Example
{
"callCount": 987,
"costCents": 123,
"feature": "xyz789",
"tokenCount": 123
}
FeedUpdatePayload
Description
Invalidation ping for the unified activity feed — not a rendered item. The client refetches page 1 through unifiedFeed on receipt.
Fields
| Field Name | Description |
|---|---|
occurredAt - String!
|
Unix timestamp (string) when this ping was triggered. |
source - String!
|
Which feed source changed — matches UnifiedFeedItemType#feed_type (ally_activity, community_post, notification, own_activity). A reconnect catch-up ping (unknown source) never reaches the client as a GraphQL payload — it is synthesized client-side by useLiveQuery on socket restore. |
Example
{
"occurredAt": "abc123",
"source": "xyz789"
}
FeedbackCategoryBreakdown
FeedbackComment
Description
A comment on a feedback post.
Fields
| Field Name | Description |
|---|---|
body - String!
|
The comment text. |
createdAt - ISO8601DateTime!
|
|
id - ID!
|
Public identifier for this comment. |
isOfficial - Boolean!
|
Whether this is an official team response. |
user - User!
|
The user who wrote this comment. |
Example
{
"body": "abc123",
"createdAt": ISO8601DateTime,
"id": 4,
"isOfficial": false,
"user": User
}
FeedbackPost
Description
A user-submitted feedback post (feature request, improvement, bug report).
Fields
| Field Name | Description |
|---|---|
category - String!
|
Category: feature, improvement, bug, or other. |
commentCount - Int!
|
Total number of comments. |
comments - [FeedbackComment!]!
|
Comments on this post. |
createdAt - ISO8601DateTime!
|
|
description - String
|
Detailed description of the feedback. |
id - ID!
|
Public identifier for this feedback post. |
shippedAt - ISO8601DateTime
|
When this post was marked as completed/shipped. |
status - String!
|
Status: open, planned, in_progress, completed, or declined. |
tags - [FeedbackTag!]!
|
Tags attached to this post. |
title - String!
|
Title of the feedback post. |
user - User!
|
The user who created this post. |
voteCount - Int!
|
Total number of votes. |
votedByCurrentUser - Boolean!
|
Whether the current user has voted on this post. |
Example
{
"category": "xyz789",
"commentCount": 123,
"comments": [FeedbackComment],
"createdAt": ISO8601DateTime,
"description": "abc123",
"id": 4,
"shippedAt": ISO8601DateTime,
"status": "xyz789",
"tags": [FeedbackTag],
"title": "abc123",
"user": User,
"voteCount": 987,
"votedByCurrentUser": true
}
FeedbackStats
Description
Aggregate statistics for the feedback board (admin only).
Example
{
"categoryBreakdown": [FeedbackCategoryBreakdown],
"completedPosts": 123,
"declinedPosts": 123,
"inProgressPosts": 987,
"openPosts": 123,
"plannedPosts": 987,
"postsThisWeek": 123,
"topPosts": [FeedbackPost],
"totalComments": 987,
"totalPosts": 123,
"totalVotes": 123
}
FeedbackTag
Description
An admin-managed tag that can be applied to feedback posts.
Fields
| Field Name | Description |
|---|---|
archived - Boolean!
|
Whether this tag has been archived. |
createdAt - ISO8601DateTime!
|
|
description - String
|
Optional description of the tag. |
id - ID!
|
Public identifier for this feedback tag. |
name - String!
|
Display name of the tag. |
position - Int!
|
Display order position. |
postsCount - Int!
|
Number of feedback posts carrying this tag. |
slug - String!
|
URL-safe slug for this tag. |
Example
{
"archived": true,
"createdAt": ISO8601DateTime,
"description": "xyz789",
"id": "4",
"name": "xyz789",
"position": 987,
"postsCount": 123,
"slug": "abc123"
}
FeedbackTheme
FeedbackWeeklySummary
Description
Coach-analyzed themed summary of the past week of feedback board posts (admin only).
Fields
| Field Name | Description |
|---|---|
emergingRequests - [String!]!
|
|
generatedAt - ISO8601DateTime!
|
|
themes - [FeedbackTheme!]!
|
Example
{
"emergingRequests": ["abc123"],
"generatedAt": ISO8601DateTime,
"themes": [FeedbackTheme]
}
Float
Description
The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.
Example
123.45
FollowCommunityPayload
Description
Autogenerated return type of FollowCommunity.
Fields
| Field Name | Description |
|---|---|
result - Result
|
Example
{"result": Result}
GdprRequest
Fields
| Field Name | Description |
|---|---|
cascadePreview - CascadePreview
|
|
dueBy - ISO8601DateTime!
|
|
exportExpiresAt - ISO8601DateTime
|
|
exportFileUrl - String
|
|
fulfilledAt - ISO8601DateTime
|
|
fulfilledBy - User
|
|
notes - String
|
|
publicId - String!
|
|
receivedAt - ISO8601DateTime!
|
|
requestType - String!
|
|
requestorEmail - String!
|
|
status - String!
|
Example
{
"cascadePreview": CascadePreview,
"dueBy": ISO8601DateTime,
"exportExpiresAt": ISO8601DateTime,
"exportFileUrl": "xyz789",
"fulfilledAt": ISO8601DateTime,
"fulfilledBy": User,
"notes": "xyz789",
"publicId": "xyz789",
"receivedAt": ISO8601DateTime,
"requestType": "xyz789",
"requestorEmail": "abc123",
"status": "abc123"
}
GdprRequestConnection
Description
The connection type for GdprRequest.
Fields
| Field Name | Description |
|---|---|
edges - [GdprRequestEdge]
|
A list of edges. |
nodes - [GdprRequest]
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
Example
{
"edges": [GdprRequestEdge],
"nodes": [GdprRequest],
"pageInfo": PageInfo
}
GdprRequestEdge
Description
An edge in a connection.
Fields
| Field Name | Description |
|---|---|
cursor - String!
|
A cursor for use in pagination. |
node - GdprRequest
|
The item at the end of the edge. |
Example
{
"cursor": "xyz789",
"node": GdprRequest
}
GenerateGoalDraftPayload
Description
Autogenerated return type of GenerateGoalDraft.
Example
{
"aiRequest": AiRequest,
"draft": GoalDraft
}
GenerateMilestonesPayload
Description
Autogenerated return type of GenerateMilestones.
Fields
| Field Name | Description |
|---|---|
aiRequest - AiRequest
|
Present when async_ai_delivery_enabled routes this request through Ai::DispatchAiRequestJob instead of resolving milestones inline (v4.60 Phase 4). Subscribe to aiRequestUpdate(requestId: id) or poll aiRequest(id:) for the result. |
milestones - [String!]
|
Example
{
"aiRequest": AiRequest,
"milestones": ["xyz789"]
}
GetAdvicePayload
Description
Autogenerated return type of GetAdvice.
Fields
| Field Name | Description |
|---|---|
advice - String
|
|
aiRequest - AiRequest
|
Present when async_ai_delivery_enabled routes this request through Ai::DispatchAiRequestJob instead of resolving advice inline (v4.60 Phase 3). Subscribe to aiRequestUpdate(requestId: id) or poll aiRequest(id:) for the result. |
suggestedActions - [CoachAction!]!
|
Deterministically derived action chips (0-2). No LLM call — derived from goal/mood signals. |
Example
{
"advice": "abc123",
"aiRequest": AiRequest,
"suggestedActions": [CoachAction]
}
GetBillingPortalUrlPayload
Description
Autogenerated return type of GetBillingPortalUrl.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
portalUrl - String
|
Example
{
"errors": ["xyz789"],
"portalUrl": "abc123"
}
GetInsightPayload
Description
Autogenerated return type of GetInsight.
Fields
| Field Name | Description |
|---|---|
aiRequest - AiRequest
|
Present when async_ai_delivery_enabled routes this request through Ai::DispatchAiRequestJob instead of resolving the insight inline (v4.60 Phase 5). Backend-only migration — no frontend surface consumes this yet (OBJ-3895); the currentInsights query feeds the insight card from a pre-generated cache read, not this mutation. |
ctaLabel - String
|
|
insightId - String
|
|
insightType - String
|
|
message - String
|
|
title - String
|
Example
{
"aiRequest": AiRequest,
"ctaLabel": "xyz789",
"insightId": "xyz789",
"insightType": "xyz789",
"message": "xyz789",
"title": "xyz789"
}
Goal
Description
A user goal with progress events, milestones, and optional community sharing.
Fields
| Field Name | Description |
|---|---|
allEvents - [GoalEvent!]!
|
All progress events including soft-deleted ones. |
appLink - String
|
External app URL (https:// or a custom app scheme, e.g. duolingo://) opened on check-in for one-click redirect to another app. |
averageCheckInTime - Float
|
Mean hour-of-day (0.0–24.0) in the user's timezone. Null if < 3 completions. |
category - GoalCategory
|
The goal category (e.g. fitness, learning, personal). |
checkedInToday - Boolean!
|
Whether the user has checked in today. |
collectiveGoalContribution - GoalCollectiveContribution
|
The collective goal this goal is actively contributing to, if any (GOALS-17). |
comments - [GoalEventComment!]!
|
Comments left by other users on this goal. |
completed - Boolean!
|
Whether the goal has been marked as completed. |
completedAtTime - String
|
Unix timestamp (string) when the goal was completed. |
completionRate - Float
|
Percentage of expected check-ins completed in the last 30 days. |
completionReflection - String
|
Optional free-text reflection captured when the goal was marked complete. Personalizes Coach messaging when present. |
content - String
|
Optional longer description or motivation note for the goal. |
createdAtTime - String
|
Unix timestamp (string) when the goal was created. |
currentAmount - Float
|
Current progress value for quantity-based goals (e.g. 3.2 km). |
dayOfWeekDistribution - [Int!]!
|
Check-in counts by day of week [Sun, Mon, Tue, Wed, Thu, Fri, Sat]. |
daysToUpdate - Int
|
How frequently (in days) the user intends to log progress events. |
demo - Boolean!
|
Whether this goal is a demo-tagged record (Phase 30). |
dueToday - Boolean!
|
Whether this habit is due for a check-in today. |
durationMinutes - Int
|
Optional time-per-session in minutes for habits. |
encouragements - [GoalEventEncouragement!]!
|
Encouragement reactions left by other users on this goal. |
events - [GoalEvent!]!
|
Active (non-deleted) progress events. For habits, routine "Checked in!" rows are filtered; only user-authored updates and milestones are returned. |
followersCount - Int!
|
Accepted follows on this goal. Drops to zero when the goal becomes private. Owner-only. |
fromTemplate - GoalTemplate
|
"From template" badge surface. Null for goals not created from a template. |
fromTemplateName - String
|
Name of the template this goal was created from. Null if not template-sourced. |
habitCompletions - [HabitCompletion!]!
|
Check-in records for this habit (last 30 days). |
habitStreak - Int!
|
Current consecutive check-in streak for this habit. |
identityPrompt - String
|
Optional free-text identity framing (e.g. "Who you're becoming"). Personalizes Coach messaging when present. |
imageUrl - String
|
URL of a cover image associated with the goal. |
kind - GoalType
|
The goal kind/type (e.g. habit, milestone, quantity). |
lastCheckedInDate - String
|
ISO date of the most recent check-in. |
lifeArea - String
|
The area of life this goal belongs to (e.g. career, health). |
longestHabitStreak - Int!
|
All-time longest streak for this habit. |
milestones - [Goal!]!
|
Sub-goals (milestones) nested under this goal. |
name - String!
|
Display name of the goal (e.g. "Run a 5K"). |
nonAllyFollowersCount - Int!
|
Follows held by users who are not accepted allies of the owner — the follows a public → allies change drops. Owner-only. |
parentGoalId - String
|
public_id of the parent goal if this is a milestone/sub-goal. |
pastAttemptContext - String
|
Optional free-text context on a prior attempt at this goal. Personalizes Coach messaging when present. |
position - Int
|
Ordinal position within parent goal's roadmap (nullable for top-level goals). |
preBreakHabitStreak - Int!
|
Streak snapshot captured before the last break. Used by Welcome Back and Streak Repair. |
private - Boolean!
|
When true, the goal is visible only to its owner. |
publicId - ID!
|
URL-safe public identifier for this goal. |
quickUpdatePrompts - [String!]!
|
Coach-generated quick-fill chip prompts (0-2), pre-generated at goal creation. Always [] (never null) until the async job lands, or when skipped (milestone, demo, coaching disabled). |
recurrenceDays - [String!]
|
Days of the week for weekly/custom_days recurrence (e.g. ["mon", "wed", "fri"]). |
recurrenceInterval - Int
|
Number of days between check-ins for interval recurrence. |
recurrenceType - String
|
Recurrence pattern: daily, weekly, custom_days, or interval. |
sharedWithPartner - Boolean!
|
When true and the goal is private, a confirmed accountability partner can still see it. Has no effect on non-private goals. |
status - GoalStatusEnum!
|
Computed status: on_track | needs_attention | paused | completed. |
streakFreezesAvailable - Int!
|
Number of streak freeze tokens earned and available. |
streakFreezesUsed - Int!
|
Number of streak freeze tokens consumed. |
streakRepairEligibleUntil - String
|
ISO 8601 timestamp when the repair window closes. Null when not in window. |
streakRepairedCount - Int!
|
Number of times this streak has been repaired or mercied (unified cap). |
targetAmount - Float
|
Target value for quantity-based goals (e.g. 5.0 km). |
targetDateTime - String
|
Unix timestamp (string) of the target completion date. |
totalCheckIns - Int!
|
Total number of actual check-ins ever recorded for this habit. |
unit - String
|
Unit label for quantity-based goals (e.g. "km", "pages", "reps"). |
updatedAtTime - String
|
Unix timestamp (string) when the goal was last updated. |
user - User
|
The user who owns this goal. |
visibility - GoalVisibilityEnum!
|
Who can see this goal: public, allies, or private. |
Example
{
"allEvents": [GoalEvent],
"appLink": "abc123",
"averageCheckInTime": 123.45,
"category": GoalCategory,
"checkedInToday": false,
"collectiveGoalContribution": GoalCollectiveContribution,
"comments": [GoalEventComment],
"completed": false,
"completedAtTime": "xyz789",
"completionRate": 123.45,
"completionReflection": "abc123",
"content": "abc123",
"createdAtTime": "xyz789",
"currentAmount": 123.45,
"dayOfWeekDistribution": [123],
"daysToUpdate": 123,
"demo": false,
"dueToday": true,
"durationMinutes": 987,
"encouragements": [GoalEventEncouragement],
"events": [GoalEvent],
"followersCount": 123,
"fromTemplate": GoalTemplate,
"fromTemplateName": "xyz789",
"habitCompletions": [HabitCompletion],
"habitStreak": 987,
"identityPrompt": "xyz789",
"imageUrl": "xyz789",
"kind": GoalType,
"lastCheckedInDate": "abc123",
"lifeArea": "abc123",
"longestHabitStreak": 987,
"milestones": [Goal],
"name": "abc123",
"nonAllyFollowersCount": 987,
"parentGoalId": "xyz789",
"pastAttemptContext": "xyz789",
"position": 123,
"preBreakHabitStreak": 123,
"private": false,
"publicId": "4",
"quickUpdatePrompts": ["xyz789"],
"recurrenceDays": ["abc123"],
"recurrenceInterval": 987,
"recurrenceType": "xyz789",
"sharedWithPartner": false,
"status": "completed",
"streakFreezesAvailable": 987,
"streakFreezesUsed": 987,
"streakRepairEligibleUntil": "xyz789",
"streakRepairedCount": 987,
"targetAmount": 987.65,
"targetDateTime": "xyz789",
"totalCheckIns": 987,
"unit": "xyz789",
"updatedAtTime": "abc123",
"user": User,
"visibility": "ALLIES"
}
GoalCategory
GoalCollectiveContribution
GoalDraft
Description
A Coach-drafted goal: title, category, kind, target date, why, and milestones.
Fields
| Field Name | Description |
|---|---|
categoryId - ID
|
Resolved GoalCategory id, or null if the suggested category was unknown. |
categoryName - String
|
|
kindId - ID
|
Resolved GoalType id, or null if the suggested kind was unknown. |
kindName - String
|
|
milestones - [String!]!
|
|
targetDate - String
|
Suggested ISO8601 target date, or null for habits/ongoing goals. |
title - String
|
|
why - String
|
Example
{
"categoryId": "4",
"categoryName": "xyz789",
"kindId": 4,
"kindName": "abc123",
"milestones": ["abc123"],
"targetDate": "xyz789",
"title": "abc123",
"why": "xyz789"
}
GoalEvent
Description
An immutable progress log entry for a goal. Records what the user did and when.
Fields
| Field Name | Description |
|---|---|
clientTimestampTime - String
|
Unix timestamp (string) when this event actually occurred on the client device. Null for events logged while online or by legacy clients. |
comments - [GoalEventComment!]!
|
Comments from other users on this event. |
content - String!
|
Text describing what the user did (e.g. "Ran 3 km in the park"). |
createdAtTime - String!
|
Unix timestamp (string) when this event was logged. |
encouragements - [GoalEventEncouragement!]!
|
Encouragement reactions from other users on this event. |
goal - Goal
|
The goal this event belongs to. |
id - ID!
|
Alias for public_id. Prefer public_id for new integrations. |
media - GoalMedia
|
Optional photo or media attachment for this event. |
milestoneName - String
|
Name of the milestone this event was logged against, if any. |
mood - String
|
Optional mood snapshot at the time of logging (amazing/happy/calm/meh/tired/low). |
publicId - ID!
|
URL-safe public identifier for this event. |
reactions - [GoalEventReaction!]!
|
Emoji reactions from other users on this event. |
source - String!
|
Where this event originated: "manual" (user-entered) or "integration" (auto-imported from a connected app). |
Example
{
"clientTimestampTime": "abc123",
"comments": [GoalEventComment],
"content": "xyz789",
"createdAtTime": "abc123",
"encouragements": [GoalEventEncouragement],
"goal": Goal,
"id": 4,
"media": GoalMedia,
"milestoneName": "xyz789",
"mood": "xyz789",
"publicId": 4,
"reactions": [GoalEventReaction],
"source": "xyz789"
}
GoalEventComment
Description
A comment left by a user on a goal progress event.
Fields
| Field Name | Description |
|---|---|
content - String
|
Text of the comment. |
createdAtTime - String
|
Unix timestamp (string) when the comment was posted. |
goal - Goal
|
The goal associated with the event being commented on. |
id - ID!
|
Public identifier for this comment. |
updatedAtTime - String
|
Unix timestamp (string) when the comment was last edited. |
user - User
|
The user who wrote the comment. |
Example
{
"content": "xyz789",
"createdAtTime": "xyz789",
"goal": Goal,
"id": 4,
"updatedAtTime": "abc123",
"user": User
}
GoalEventEncouragement
Description
An encouragement reaction (like/cheer) left on a goal progress event.
Fields
| Field Name | Description |
|---|---|
comment - String
|
Optional short message included with the encouragement. |
createdAtTime - String
|
Unix timestamp (string) when the encouragement was given. |
goal - Goal
|
The goal associated with the event being encouraged. |
id - ID!
|
Public identifier for this encouragement. |
updatedAtTime - String
|
Unix timestamp (string) when it was last updated. |
user - User
|
The user who left the encouragement. |
Example
{
"comment": "abc123",
"createdAtTime": "abc123",
"goal": Goal,
"id": "4",
"updatedAtTime": "abc123",
"user": User
}
GoalEventReaction
Description
An emoji reaction on a goal event from another user.
Example
{
"createdAtTime": "xyz789",
"emoji": "xyz789",
"id": 4,
"user": User
}
GoalMedia
Description
A media attachment (image) associated with a goal progress event.
Example
{
"id": 4,
"imageUrl": "abc123",
"name": "abc123"
}
GoalMotivationProfile
Description
Goal Motivation Snapshot answers captured during onboarding.
Fields
| Field Name | Description |
|---|---|
challenge - String
|
Biggest challenge: starting, staying_consistent, momentum_after_setbacks, knowing_progress. |
completedAt - String
|
ISO 8601 timestamp of last save. |
experience - String
|
Prior goal-tracking experience: never, a_few_times, many_still_going, many_struggled. |
socialContext - String
|
Preferred social context: solo, friend_or_partner, team_or_group. |
workTime - String
|
Preferred time to work on goals: morning, afternoon, evening, varies. |
Example
{
"challenge": "xyz789",
"completedAt": "xyz789",
"experience": "abc123",
"socialContext": "abc123",
"workTime": "xyz789"
}
GoalProgressData
Description
Progress visualization data for a goal.
Fields
| Field Name | Description |
|---|---|
averagePerWeek - Float!
|
Average events per week in the lookback period. |
dataPoints - [ProgressDataPoint!]!
|
Event frequency data grouped by period. |
pace - String!
|
Current pace status: ahead, on_track, or behind. |
streakData - [ProgressDataPoint!]!
|
Habit streak completion data (habits only). |
totalEvents - Int!
|
Total number of events in the lookback period. |
Example
{
"averagePerWeek": 123.45,
"dataPoints": [ProgressDataPoint],
"pace": "xyz789",
"streakData": [ProgressDataPoint],
"totalEvents": 987
}
GoalRefinementSuggestion
Description
A single field-level refinement suggestion for a not-yet-saved goal.
Example
{
"field": "abc123",
"issue": "abc123",
"suggestedValue": "xyz789",
"suggestion": "xyz789"
}
GoalStatusEnum
Description
Computed readiness status for a goal.
Values
| Enum Value | Description |
|---|---|
|
|
Goal has been marked as completed. |
|
|
Goal is overdue or falling behind on updates. |
|
|
Goal is progressing normally. |
|
|
Goal has had no activity for 30+ days. |
Example
"completed"
GoalSummary
Description
Aggregated statistics for the current user's goals.
Fields
| Field Name | Description |
|---|---|
avgProgress - Float
|
Average progress percentage across active, trackable goals (0–100). Null when no active goal has an observable progress signal (habit rate, roadmap, or target amount) — never a fabricated 0. |
completedCount - Int!
|
Number of completed goals. |
needAttentionCount - Int!
|
Number of active goals in needs_attention status. |
totalGoals - Int!
|
Total number of top-level goals. |
Example
{
"avgProgress": 987.65,
"completedCount": 987,
"needAttentionCount": 123,
"totalGoals": 123
}
GoalTemplate
Description
A curated goal template users can adopt. Content is placeholder until Phase 85 (Penny).
Fields
| Field Name | Description |
|---|---|
category - GoalCategory
|
Optional goal category associated with this template. |
description - String!
|
Longer description or motivation copy for this template. |
displayOrder - Int!
|
Display position within its theme group (ascending). |
estimatedDurationDays - Int!
|
Approximate number of days to complete this goal. |
imageUrl - String
|
Optional cover image URL. Null until Phase 85 canonical content pass. |
milestones - [GoalTemplateMilestone!]!
|
Ordered milestone steps stored as JSONB. |
name - String!
|
Display name of the template (e.g. "TODO(content): Run a 5K"). |
publicId - ID!
|
URL-safe public identifier for this template. |
theme - String!
|
Grouping theme: fitness | learning | financial | habit_wellness. |
Example
{
"category": GoalCategory,
"description": "xyz789",
"displayOrder": 987,
"estimatedDurationDays": 123,
"imageUrl": "xyz789",
"milestones": [GoalTemplateMilestone],
"name": "xyz789",
"publicId": 4,
"theme": "xyz789"
}
GoalTemplateMilestone
Description
A milestone entry stored in a GoalTemplate milestones JSONB column.
Example
{
"daysOffsetFromStart": 987,
"name": "abc123",
"order": 123
}
GoalType
Description
A goal kind/type that determines how progress is tracked (e.g. habit, milestone, quantity).
Fields
| Field Name | Description |
|---|---|
description - String!
|
Explanation of how goals of this type work. |
displayNumber - Int
|
Ordering hint for display in the UI. |
id - ID!
|
Integer database identifier for this goal type (reference table, not a public_id). |
name - String!
|
Display name of the goal type (e.g. "Habit", "Milestone", "Quantity"). |
Example
{
"description": "abc123",
"displayNumber": 987,
"id": "4",
"name": "abc123"
}
GoalVisibilityEnum
Description
Who can see a goal: everyone, accepted allies only, or just the owner.
Values
| Enum Value | Description |
|---|---|
|
|
Visible to the owner and their accepted allies. |
|
|
Visible only to the owner. |
|
|
Visible to everyone. |
Example
"ALLIES"
GrantAchievementDebugPayload
Description
Autogenerated return type of GrantAchievementDebug.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": false}
GrowthDataPoint
GuideAssistantAnswer
Description
Response payload for askGuideQuestion.
Fields
| Field Name | Description |
|---|---|
answer - String
|
Assistant answer text. Null when state is DISABLED. |
citations - [GuideAssistantCitation!]!
|
Sources the answer drew from. Always empty when state is REFUSED or DISABLED. |
state - GuideAssistantStateEnum!
|
Terminal state discriminator. |
Example
{
"answer": "xyz789",
"citations": [GuideAssistantCitation],
"state": "ANSWERED"
}
GuideAssistantCitation
Description
A single source the guide assistant drew its answer from — always a real help.objectuve.com page from the committed guide corpus.
Example
{
"path": "abc123",
"slug": "xyz789",
"title": "abc123"
}
GuideAssistantStateEnum
Description
Terminal state of an askGuideQuestion response. Rate-limiting surfaces as a RATE_LIMITED GraphQL error instead (see askGuideQuestion field description), not a value here — a refusal and a disabled assistant are both successful responses, never errors.
Values
| Enum Value | Description |
|---|---|
|
|
The assistant answered the question — see answer and citations. |
|
|
The docs assistant kill switch is off. answer is null; no LLM call was made. |
|
|
The question is honestly out of scope for the guide — answer may carry the assistant's refusal text; citations is always empty. |
Example
"ANSWERED"
HabitCompletion
Description
A single habit check-in record for a specific date.
Fields
| Field Name | Description |
|---|---|
completedDate - String!
|
ISO date string for the check-in date. |
createdAt - String!
|
ISO timestamp when the check-in was recorded. |
id - ID!
|
Internal identifier for the completion record. |
note - String
|
Optional one-sentence micro-journal note for this check-in (max 280 characters). Private — visible only to the completion's owner, never on community/ally/team surfaces. |
streakFreezeUsed - Boolean!
|
Whether a streak freeze was used for this date. |
Example
{
"completedDate": "xyz789",
"createdAt": "xyz789",
"id": 4,
"note": "abc123",
"streakFreezeUsed": true
}
HabitIntegrationMapping
Description
Links a connected provider activity type to a habit (Goal), with a confidence score.
Fields
| Field Name | Description |
|---|---|
autoCheckEnabled - Boolean!
|
Whether matching activities auto-check-in this habit. |
confidenceScore - Float
|
Mapping confidence, 0–1, from the auto-mapping engine. |
goal - Goal!
|
The habit this provider activity type maps to. |
integrationConnection - IntegrationConnection!
|
The connection this mapping belongs to. |
providerActivityType - String!
|
Provider-specific activity type (e.g. "Strava.run"). |
publicId - ID!
|
URL-safe public identifier for this mapping. |
Example
{
"autoCheckEnabled": false,
"confidenceScore": 123.45,
"goal": Goal,
"integrationConnection": IntegrationConnection,
"providerActivityType": "abc123",
"publicId": "4"
}
ID
Description
The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.
Example
4
ISO8601Date
Description
An ISO 8601-encoded date
Example
ISO8601Date
ISO8601DateTime
Description
An ISO 8601-encoded datetime
Example
ISO8601DateTime
InsightPack
Description
A daily AI coaching insight card for a specific app page.
Fields
| Field Name | Description |
|---|---|
ctaLabel - String
|
Button label, or null if no action is required. |
id - String!
|
Stable ID for client-side dismissal state tracking. |
message - String!
|
Actionable insight text (max 2 sentences). |
page - String!
|
Page key this insight targets (e.g. "dashboard", "goals"). |
title - String!
|
Short card title (max 8 words). |
type - String!
|
Card type: tip, action, insight, or celebration. |
Example
{
"ctaLabel": "xyz789",
"id": "abc123",
"message": "abc123",
"page": "abc123",
"title": "abc123",
"type": "xyz789"
}
Int
Description
The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
123
IntegrationActivity
Description
A single fetched activity from a connected provider (a Strava run, a Chess.com game, ...).
Fields
| Field Name | Description |
|---|---|
activityType - String!
|
Normalized activity type (e.g. "run", "chess_blitz"). |
checkedAt - ISO8601DateTime
|
When this activity was auto-checked-in, if ever. |
distanceKm - Float
|
Distance covered, in kilometers, if applicable. |
durationMinutes - Int
|
Duration of the activity, in minutes. |
publicId - ID!
|
URL-safe public identifier for this activity. |
timestamp - ISO8601DateTime!
|
When the activity occurred. |
Example
{
"activityType": "xyz789",
"checkedAt": ISO8601DateTime,
"distanceKm": 123.45,
"durationMinutes": 123,
"publicId": 4,
"timestamp": ISO8601DateTime
}
IntegrationConnection
Description
A user's link to a connected provider. Access/refresh tokens are never exposed here.
Fields
| Field Name | Description |
|---|---|
createdAt - ISO8601DateTime!
|
When this connection was created. |
externalUsername - String
|
Provider account handle (e.g. Chess.com username), if applicable. |
integrationProvider - IntegrationProvider!
|
The connected provider. |
publicId - ID!
|
URL-safe public identifier for this connection. |
status - String!
|
Connection status: active, paused, or error. |
syncedAt - ISO8601DateTime
|
When activity was last successfully fetched. |
tokenExpiresAt - ISO8601DateTime
|
When the current access token expires, if applicable. |
Example
{
"createdAt": ISO8601DateTime,
"externalUsername": "abc123",
"integrationProvider": IntegrationProvider,
"publicId": 4,
"status": "xyz789",
"syncedAt": ISO8601DateTime,
"tokenExpiresAt": ISO8601DateTime
}
IntegrationProvider
Description
A connectable third-party service (Strava, Chess.com, ...).
Fields
| Field Name | Description |
|---|---|
authType - String!
|
How connections authenticate: oauth, api_key, or none. |
description - String
|
Short description of what this provider syncs. |
logoUrl - String
|
URL of the provider logo, if any. |
name - String!
|
Display name (e.g. "Strava"). |
providerSlug - String!
|
Stable machine-readable slug (e.g. "strava"). |
publicId - ID!
|
URL-safe public identifier for this provider. |
Example
{
"authType": "xyz789",
"description": "abc123",
"logoUrl": "abc123",
"name": "xyz789",
"providerSlug": "xyz789",
"publicId": "4"
}
InviteAllyToCommunityPayload
Description
Autogenerated return type of InviteAllyToCommunity.
Fields
| Field Name | Description |
|---|---|
alreadyInvited - Boolean!
|
|
errors - [String!]!
|
|
success - Boolean!
|
Example
{
"alreadyInvited": true,
"errors": ["xyz789"],
"success": false
}
JSON
Description
Represents untyped JSON
Example
{}
JoinCommunityChallengePayload
Description
Autogenerated return type of JoinCommunityChallenge.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
JoinCommunityPayload
Description
Autogenerated return type of JoinCommunity.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["xyz789"],
"result": Result
}
JoinSeasonalEventPayload
Description
Autogenerated return type of JoinSeasonalEvent.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
JoinSubCommunityPayload
Description
Autogenerated return type of JoinSubCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
Example
{
"community": Community,
"errors": ["xyz789"]
}
LeaveCommunityChallengePayload
Description
Autogenerated return type of LeaveCommunityChallenge.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["xyz789"],
"result": Result
}
LeaveCommunityPayload
Description
Autogenerated return type of LeaveCommunity.
Fields
| Field Name | Description |
|---|---|
result - Result
|
Example
{"result": Result}
LeaveSeasonalEventPayload
Description
Autogenerated return type of LeaveSeasonalEvent.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
LeaveSubCommunityPayload
Description
Autogenerated return type of LeaveSubCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
Example
{
"community": Community,
"errors": ["xyz789"]
}
MappingProposal
Description
A freshly re-scored mapping suggestion from Integrations::MapIncomingActivity.
Fields
| Field Name | Description |
|---|---|
confidenceScore - Float!
|
Score from 0-1. |
decision - String!
|
"auto", "propose", or "ignore". |
goal - Goal
|
The best-matching habit, or null when the decision is "ignore". |
integrationActivity - IntegrationActivity!
|
The activity being scored. |
Example
{
"confidenceScore": 987.65,
"decision": "xyz789",
"goal": Goal,
"integrationActivity": IntegrationActivity
}
MilestoneInput
Description
Input shape for a single milestone entry when creating or updating a goal template. Phase 83 consumes this.
Example
{
"daysOffsetFromStart": 123,
"name": "abc123",
"order": 123
}
MintCheckInTokenPayload
Description
Autogenerated return type of MintCheckInToken.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
expiresAt - ISO8601DateTime
|
|
token - String
|
The raw check-in token — shown once, never persisted in plaintext. |
Example
{
"errors": ["xyz789"],
"expiresAt": ISO8601DateTime,
"token": "xyz789"
}
ModelUsagePoint
Description
Per-model AI usage aggregation point for the admin dashboard.
Fields
| Field Name | Description |
|---|---|
callCount - Int!
|
Number of AI calls made with this model over the window. |
costCents - Int!
|
Sum of cost_cents over the window, rounded to the nearest cent. |
model - String!
|
Model identifier (e.g. gemini/gemini-3.8-flash). |
tokenCount - Int!
|
Sum of total_tokens over the window. |
Example
{
"callCount": 987,
"costCents": 123,
"model": "abc123",
"tokenCount": 123
}
MoodLog
Description
A daily mood check-in recorded by a user, optionally linked to a goal.
Fields
| Field Name | Description |
|---|---|
createdAtTime - String!
|
Unix timestamp (string) when this mood log was recorded. |
goal - Goal
|
Goal the user linked this mood entry to, if any. |
mood - String!
|
Mood value at time of check-in. One of: amazing, happy, calm, meh, tired, low. |
note - String
|
Optional free-text note (max 300 characters) describing how the user is feeling. |
publicId - ID!
|
URL-safe public identifier for this mood log entry. |
Example
{
"createdAtTime": "xyz789",
"goal": Goal,
"mood": "xyz789",
"note": "abc123",
"publicId": 4
}
NextBadge
Description
The locked badge closest to being unlocked for a user.
Example
{
"key": "xyz789",
"progressLabel": "xyz789",
"progressPercentage": 123.45
}
NotificationHistory
Description
Paginated notification history for the current user (acknowledged and unacknowledged).
Fields
| Field Name | Description |
|---|---|
hasMore - Boolean!
|
Whether there are more notifications beyond this page. |
items - [UserNotification!]!
|
Notifications for the current page, newest first. |
totalCount - Int!
|
Total number of notifications across all pages. |
unreadCount - Int!
|
Total unacknowledged notifications across all pages, for the same scope. |
Example
{
"hasMore": false,
"items": [UserNotification],
"totalCount": 123,
"unreadCount": 123
}
OnboardingCompletedVia
Values
| Enum Value | Description |
|---|---|
|
|
User reached the final slide and finished the wizard. |
|
|
User exited the wizard before reaching the final slide. |
Example
"complete"
OnboardingFunnel
Description
Aggregated onboarding funnel counts and time-to-first-goal percentiles. Admin only. Returns aggregates only — no user identifiers.
Fields
| Field Name | Description |
|---|---|
firstGoal - Int!
|
Distinct in-window users who have at least one non-deleted goal. |
signedIn - Int!
|
Distinct users with a first_sign_in UserAction in the window. |
ttfgP50Seconds - Int
|
Median seconds from sign-up to first goal. Null when no in-window user has created a goal. |
ttfgP90Seconds - Int
|
90th-percentile time-to-first-goal in seconds. Nullable. |
variantId - String
|
Echoes the variant filter when one was applied; null for unfiltered queries. |
wizardCompleted - Int!
|
Distinct users with a wizard_completed UserAction in the window. |
wizardStarted - Int!
|
Distinct users with a wizard_started UserAction in the window. |
Example
{
"firstGoal": 987,
"signedIn": 123,
"ttfgP50Seconds": 123,
"ttfgP90Seconds": 987,
"variantId": "abc123",
"wizardCompleted": 123,
"wizardStarted": 123
}
OnboardingProgress
Description
In-flight progress through the onboarding wizard. Cleared (null) on exit.
Fields
| Field Name | Description |
|---|---|
answers - JSON
|
Free-form per-slide answers. Shape refined in Phase 34. |
currentSlide - String
|
Slide id the user is currently on. |
updatedAt - ISO8601DateTime
|
When progress was last written. |
Example
{
"answers": {},
"currentSlide": "xyz789",
"updatedAt": ISO8601DateTime
}
OnboardingProgressInput
OnboardingStatus
Description
v1.8 onboarding completion status, sourced from UserDetail.data["onboarding"].
Fields
| Field Name | Description |
|---|---|
completedAt - ISO8601DateTime
|
When the user finished or was backfilled. null if in-flight. |
completedVia - String
|
How completion happened: "complete" | "skip" | "backfilled". |
progress - OnboardingProgress
|
In-flight slide progress. null after completion. |
version - String
|
Onboarding schema version: "v1.8" (flow-completed) or "pre-v1.8" (lazy-backfilled). |
Example
{
"completedAt": ISO8601DateTime,
"completedVia": "xyz789",
"progress": OnboardingProgress,
"version": "abc123"
}
OptIntoCollectiveGoalPayload
Description
Autogenerated return type of OptIntoCollectiveGoal.
Fields
| Field Name | Description |
|---|---|
collectiveGoal - CollectiveGoal
|
|
errors - [String!]!
|
Example
{
"collectiveGoal": CollectiveGoal,
"errors": ["abc123"]
}
OptOutOfCollectiveGoalPayload
Description
Autogenerated return type of OptOutOfCollectiveGoal.
Fields
| Field Name | Description |
|---|---|
collectiveGoal - CollectiveGoal
|
|
errors - [String!]!
|
Example
{
"collectiveGoal": CollectiveGoal,
"errors": ["xyz789"]
}
PaceSuggestion
Description
A one-tap timeline-adjustment suggestion for a goal that is consistently ahead of or behind pace.
Fields
| Field Name | Description |
|---|---|
currentTargetDate - String!
|
ISO date string of the goal's current target date. |
direction - String!
|
"ahead" or "behind" — drives icon and copy branch. |
goalName - String!
|
Display name of the goal, for body + confirmation copy. |
goalPublicId - String!
|
public_id of the goal this suggestion targets. |
id - String!
|
Stable ID for client-side dismissal state tracking. |
paceSummary - String!
|
Human phrase, e.g. "about 3 weeks faster than planned". |
proposedTargetDate - String!
|
ISO date string of the computed new target date. |
Example
{
"currentTargetDate": "abc123",
"direction": "xyz789",
"goalName": "xyz789",
"goalPublicId": "xyz789",
"id": "xyz789",
"paceSummary": "xyz789",
"proposedTargetDate": "xyz789"
}
PageInfo
Description
Information about pagination in a connection.
Fields
| Field Name | Description |
|---|---|
endCursor - String
|
When paginating forwards, the cursor to continue. |
hasNextPage - Boolean!
|
When paginating forwards, are there more items? |
hasPreviousPage - Boolean!
|
When paginating backwards, are there more items? |
startCursor - String
|
When paginating backwards, the cursor to continue. |
Example
{
"endCursor": "abc123",
"hasNextPage": true,
"hasPreviousPage": false,
"startCursor": "abc123"
}
PauseAiEmployeePayload
Description
Autogenerated return type of PauseAiEmployee.
Fields
| Field Name | Description |
|---|---|
employee - AiEmployee
|
|
errors - [String!]!
|
Example
{
"employee": AiEmployee,
"errors": ["xyz789"]
}
PauseIntegrationConnectionPayload
Description
Autogenerated return type of PauseIntegrationConnection.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
integrationConnection - IntegrationConnection
|
Example
{
"errors": ["abc123"],
"integrationConnection": IntegrationConnection
}
PendingAllyUser
Description
The requesting user for a pending ally request.
Fields
| Field Name | Description |
|---|---|
firstName - String
|
The requesting user's given name. |
lastName - String
|
The requesting user's family name. |
photo - UserPhoto
|
The requesting user's profile photo. |
publicId - String
|
The requesting user's URL-safe public identifier. |
username - String
|
The requesting user's unique handle. |
Example
{
"firstName": "abc123",
"lastName": "xyz789",
"photo": UserPhoto,
"publicId": "xyz789",
"username": "xyz789"
}
PendingCounts
Description
Per-queue pending item counts for the admin sidebar. Fields return nil when the current user lacks the role to see that queue (UI hides the badge — never renders 0 for an inaccessible queue).
Fields
| Field Name | Description |
|---|---|
gdprRequests - Int
|
GDPR requests in received state. Nil if the current role cannot handle GDPR requests. Returns 0 until Phase 28 creates the table. |
moderationQueue - Int
|
Pending content flags awaiting moderator review. Nil if the current role cannot moderate. |
reviewQueue - Int
|
AI artifacts awaiting admin approval. Nil if the current role cannot approve artifacts. |
Example
{"gdprRequests": 123, "moderationQueue": 123, "reviewQueue": 123}
Plan
Description
A subscription plan (Supporter Monthly, Yearly, or Lifetime).
Fields
| Field Name | Description |
|---|---|
active - Boolean!
|
Whether the plan is available for purchase. |
currency - String!
|
ISO currency code (default: usd). |
interval - String
|
Billing interval (month, year, or null for one-time). |
name - String!
|
Display name (e.g. "Supporter Monthly"). |
priceCents - Int!
|
Price in cents (e.g. 300 = $3.00). |
priceDisplay - String!
|
Formatted price string (e.g. "$3.00/month"). |
publicId - ID!
|
URL-safe public identifier for the plan. |
slug - String!
|
URL-safe slug (monthly, yearly, lifetime). |
Example
{
"active": true,
"currency": "abc123",
"interval": "xyz789",
"name": "xyz789",
"priceCents": 123,
"priceDisplay": "xyz789",
"publicId": "4",
"slug": "xyz789"
}
PostComment
Description
A comment left on a community post.
Fields
| Field Name | Description |
|---|---|
content - String!
|
Text body of the comment. |
id - ID!
|
Public identifier for this comment. |
timestamp - String!
|
Unix timestamp (string) when the comment was posted. |
userId - ID!
|
public_id of the user who wrote the comment. |
userName - String!
|
Username of the comment author. |
Example
{
"content": "abc123",
"id": "4",
"timestamp": "xyz789",
"userId": "4",
"userName": "abc123"
}
ProgressDataPoint
Description
A single data point in a progress chart.
Example
{
"count": 987,
"date": "abc123",
"label": "abc123"
}
PromoteTeamMemberPayload
Description
Autogenerated return type of PromoteTeamMember.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
teamMembership - TeamMembership
|
Example
{
"errors": ["abc123"],
"teamMembership": TeamMembership
}
PromotionCriteria
Example
{
"approvalRatePct": 987,
"blockReason": "xyz789",
"canPromoteTo": "abc123",
"promotionConfirmedAt": ISO8601DateTime,
"recentRejections": 123,
"weeksActive": 987
}
PublicFeedbackAuthor
Description
Public-safe author identity for the anonymous feedback read path. Allow-listed by design — structurally cannot reach Types::UserType.
Fields
| Field Name | Description |
|---|---|
avatarUrl - String
|
Profile photo URL, or null for a private_mode author and for an author with no uploaded photo — the two are indistinguishable. |
displayName - String!
|
Resolves to "{FirstName} {LastInitial}." (e.g. "Priya S.") for a normal author, or the literal "a member" for a private_mode author and for an author with no renderable name — the two are byte-identical so this field never discloses who has private mode on. |
Example
{
"avatarUrl": "abc123",
"displayName": "abc123"
}
PublicFeedbackComment
Description
A comment on a feedback post, on the anonymous public read path.
Fields
| Field Name | Description |
|---|---|
author - PublicFeedbackAuthor!
|
The author of this comment. |
body - String!
|
The comment text. |
createdAt - ISO8601DateTime!
|
|
id - ID!
|
Public identifier for this comment. |
isOfficial - Boolean!
|
Whether this is an official team response. |
Example
{
"author": PublicFeedbackAuthor,
"body": "abc123",
"createdAt": ISO8601DateTime,
"id": 4,
"isOfficial": true
}
PublicFeedbackPost
Description
A user-submitted feedback post, on the anonymous public read path (v4.62 Phase 6). No votedByCurrentUser — it cannot be honestly answered for an anonymous caller, so it is not askable at all.
Fields
| Field Name | Description |
|---|---|
author - PublicFeedbackAuthor!
|
The author of this feedback post. |
category - String!
|
Category: feature, improvement, bug, or other. |
commentCount - Int!
|
Total number of comments. |
comments - [PublicFeedbackComment!]!
|
Comments on this post. |
createdAt - ISO8601DateTime!
|
|
description - String
|
Detailed description of the feedback. |
id - ID!
|
Public identifier for this feedback post. |
shippedAt - ISO8601DateTime
|
When this post was marked as completed/shipped. |
status - String!
|
Status: open, planned, in_progress, completed, or declined. |
tags - [FeedbackTag!]!
|
Tags attached to this post. |
title - String!
|
Title of the feedback post. |
voteCount - Int!
|
Total number of votes. |
Example
{
"author": PublicFeedbackAuthor,
"category": "xyz789",
"commentCount": 123,
"comments": [PublicFeedbackComment],
"createdAt": ISO8601DateTime,
"description": "xyz789",
"id": 4,
"shippedAt": ISO8601DateTime,
"status": "xyz789",
"tags": [FeedbackTag],
"title": "abc123",
"voteCount": 987
}
PublicGoal
Description
A goal visible on a public profile. Exposes only the fields safe for any authenticated viewer — no user back-reference.
Fields
| Field Name | Description |
|---|---|
category - GoalCategory
|
Goal category (e.g. fitness, learning). |
completed - Boolean!
|
Whether the goal has been marked as completed. |
currentAmount - Float
|
Current progress value for quantity-based goals. |
imageUrl - String
|
URL of a cover image associated with the goal. |
milestonesCount - Int!
|
Total number of milestones (sub-goals) under this goal. |
name - String!
|
Display name of the goal. |
publicId - ID!
|
URL-safe public identifier for this goal. |
targetAmount - Float
|
Target value for quantity-based goals. |
targetDateTime - String
|
Unix timestamp (string) of the target completion date. |
Example
{
"category": GoalCategory,
"completed": true,
"currentAmount": 987.65,
"imageUrl": "xyz789",
"milestonesCount": 987,
"name": "xyz789",
"publicId": 4,
"targetAmount": 987.65,
"targetDateTime": "abc123"
}
PublicProfile
Description
Publicly visible profile of a user. Only exposes fields safe for anyone to see.
Fields
| Field Name | Description |
|---|---|
achievementStats - AchievementStats
|
Computed rank, XP, and badge stats for the profile hero. |
alliesCount - Int!
|
Number of accepted allies (either direction). |
allyGoals - [PublicGoal!]!
|
Owner's active allies-only goals (visibility: allies), not already included in publicGoals. Only populated when the viewer is an accepted ally of the owner; empty otherwise (including for self). |
allyStatus - String
|
Viewer-relative ally relationship to this profile (NONE / PENDING_OUTGOING / PENDING_INCOMING / ACCEPTED / BLOCKED / SELF). Null for anonymous viewers. SELF when the viewer is the profile owner. |
firstName - String
|
The user's given name. |
lastName - String
|
The user's family name. |
level - Int!
|
Current gamification level derived from XP. |
longestStreak - Int!
|
All-time longest streak of consecutive active days. |
nextLevelThreshold - Int!
|
XP required to reach the next level. |
nextOnTheShelfBadge - NextBadge
|
The locked badge closest to being unlocked, or null if all earned. |
partnerGoals - [PublicGoal!]!
|
Owner's active partner-visible goals (public goals, plus private goals the owner opted to share via shared_with_partner). Only populated when the viewer is a confirmed active accountability partner of the owner; empty otherwise (including for self). |
photo - UserPhoto
|
Profile photo for the user. |
progressToNextLevel - Float!
|
Progress toward the next level. |
publicGoals - [PublicGoal!]!
|
Non-private active goals belonging to this user. |
publicId - ID!
|
Public-safe opaque identifier for this user (base64 token, never the integer PK). |
showcasedAchievements - [String!]!
|
Achievement identifiers the user has chosen to display on their profile. |
signInDates - [String!]
|
ISO date strings on which the user logged activity (heatmap source). |
signupAgeDays - Int!
|
Whole days since the user account was created (signup age). |
streak - Int!
|
Current number of consecutive days the user has logged activity. |
unlockedBadges - [RecentlyUnlockedBadge!]!
|
Earned badges, rarity DESC then unlocked_at DESC. |
username - String!
|
The user's unique handle (e.g. "jane.doe"). |
viewerIsAccountabilityPartner - Boolean!
|
Whether the viewer is a confirmed active accountability partner of this profile owner. False for anonymous viewers, non-partners, blocked relationships, and self. |
xp - Int!
|
Total experience points earned through goals, events, and engagement. |
Example
{
"achievementStats": AchievementStats,
"alliesCount": 987,
"allyGoals": [PublicGoal],
"allyStatus": "xyz789",
"firstName": "abc123",
"lastName": "xyz789",
"level": 987,
"longestStreak": 987,
"nextLevelThreshold": 123,
"nextOnTheShelfBadge": NextBadge,
"partnerGoals": [PublicGoal],
"photo": UserPhoto,
"progressToNextLevel": 987.65,
"publicGoals": [PublicGoal],
"publicId": 4,
"showcasedAchievements": ["xyz789"],
"signInDates": ["xyz789"],
"signupAgeDays": 987,
"streak": 123,
"unlockedBadges": [RecentlyUnlockedBadge],
"username": "xyz789",
"viewerIsAccountabilityPartner": true,
"xp": 123
}
RecentlyUnlockedBadge
Description
A badge recently unlocked by the user.
Fields
| Field Name | Description |
|---|---|
key - String!
|
Badge key matching the UserAction enum action name. |
unlockedAt - ISO8601DateTime!
|
When the badge was unlocked. |
Example
{
"key": "abc123",
"unlockedAt": ISO8601DateTime
}
RecordCriticalPathPlayPayload
Description
Autogenerated return type of RecordCriticalPathPlay.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
status - CriticalPathPlayStatus
|
|
stimXpEarned - Int
|
Stim XP delta awarded this play; null on duplicate or inactive feature. |
Example
{
"errors": ["abc123"],
"status": CriticalPathPlayStatus,
"stimXpEarned": 123
}
RecordUserActionPayload
Description
Autogenerated return type of RecordUserAction.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
RefineDescriptionPayload
Description
Autogenerated return type of RefineDescription.
Fields
| Field Name | Description |
|---|---|
aiRequest - AiRequest
|
Present when async_ai_delivery_enabled routes this request through Ai::DispatchAiRequestJob instead of resolving the description inline (v4.60 Phase 5). Subscribe to aiRequestUpdate(requestId: id) or poll aiRequest(id:) for the result. |
description - String
|
Example
{
"aiRequest": AiRequest,
"description": "abc123"
}
RefineGoalPayload
Description
Autogenerated return type of RefineGoal.
Fields
| Field Name | Description |
|---|---|
aiRequest - AiRequest
|
Present when async_ai_delivery_enabled routes this request through Ai::DispatchAiRequestJob instead of resolving suggestions inline (v4.60 Phase 4). Subscribe to aiRequestUpdate(requestId: id) or poll aiRequest(id:) for the result. |
suggestions - [GoalRefinementSuggestion!]
|
Example
{
"aiRequest": AiRequest,
"suggestions": [GoalRefinementSuggestion]
}
RejectAiArtifactPayload
Description
Autogenerated return type of RejectAiArtifact.
Fields
| Field Name | Description |
|---|---|
artifact - AiArtifact
|
|
errors - [String!]!
|
Example
{
"artifact": AiArtifact,
"errors": ["xyz789"]
}
RemoveAllyPayload
Description
Autogenerated return type of RemoveAlly.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": true}
RemoveTeamMemberPayload
Description
Autogenerated return type of RemoveTeamMember.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
teamMembership - TeamMembership
|
Example
{
"errors": ["xyz789"],
"teamMembership": TeamMembership
}
ReorderMilestonesPayload
Description
Autogenerated return type of ReorderMilestones.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["xyz789"],
"goal": Goal
}
RepairStreakPayload
Description
Autogenerated return type of RepairStreak.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
|
user - User
|
Example
{
"errors": ["abc123"],
"goal": Goal,
"user": User
}
ReportContentPayload
Description
Autogenerated return type of ReportContent.
Fields
| Field Name | Description |
|---|---|
contentReport - ContentReport
|
|
errors - [String!]
|
Example
{
"contentReport": ContentReport,
"errors": ["xyz789"]
}
RequestDataExportPayload
Description
Autogenerated return type of RequestDataExport.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
gdprRequest - GdprRequest
|
Example
{
"errors": ["xyz789"],
"gdprRequest": GdprRequest
}
RequestMagicCodePayload
Description
Autogenerated return type of RequestMagicCode.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": false}
RerunHabitIntegrationMappingPayload
Description
Autogenerated return type of RerunHabitIntegrationMapping.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
proposals - [MappingProposal!]
|
Example
{
"errors": ["abc123"],
"proposals": [MappingProposal]
}
ResetOnboardingPayload
Description
Autogenerated return type of ResetOnboarding.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
|
user - User
|
Example
{
"errors": ["abc123"],
"success": true,
"user": User
}
ResolvedModelUsagePoint
Description
Per-resolved-model AI usage aggregation point for the admin dashboard.
Fields
| Field Name | Description |
|---|---|
callCount - Int!
|
Number of AI calls made with this resolved model over the window. |
costCents - Int!
|
Sum of cost_cents over the window, rounded to the nearest cent. |
resolvedModel - String!
|
Concrete model id that served the request (e.g. gemini/gemini-2.5-flash). |
tokenCount - Int!
|
Sum of total_tokens over the window. |
Example
{
"callCount": 123,
"costCents": 123,
"resolvedModel": "abc123",
"tokenCount": 987
}
Result
Description
Generic boolean result returned by check queries (e.g. authn_check, is_following_goal).
Fields
| Field Name | Description |
|---|---|
success - Boolean!
|
True if the checked condition is satisfied. |
Example
{"success": true}
ResumeIntegrationConnectionPayload
Description
Autogenerated return type of ResumeIntegrationConnection.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
integrationConnection - IntegrationConnection
|
Example
{
"errors": ["xyz789"],
"integrationConnection": IntegrationConnection
}
RevertLastGoalEventPayload
Description
Autogenerated return type of RevertLastGoalEvent.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["xyz789"],
"goal": Goal
}
ReviewContentFlagPayload
Description
Autogenerated return type of ReviewContentFlag.
Fields
| Field Name | Description |
|---|---|
contentFlag - ContentFlag
|
|
errors - [String!]
|
Example
{
"contentFlag": ContentFlag,
"errors": ["xyz789"]
}
ReviewContentReportPayload
Description
Autogenerated return type of ReviewContentReport.
Fields
| Field Name | Description |
|---|---|
contentReport - ContentReport
|
|
errors - [String!]
|
Example
{
"contentReport": ContentReport,
"errors": ["abc123"]
}
RevokeAllyInvitePayload
Description
Autogenerated return type of RevokeAllyInvite.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
invite - AllyInvite
|
Example
{
"errors": ["xyz789"],
"invite": AllyInvite
}
RevokeCheckInTokenPayload
Description
Autogenerated return type of RevokeCheckInToken.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
RevokeTeamInvitePayload
Description
Autogenerated return type of RevokeTeamInvite.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
teamInvite - TeamInvite
|
Example
{
"errors": ["abc123"],
"teamInvite": TeamInvite
}
SeasonalEvent
Description
A platform-wide, admin-curated seasonal event.
Fields
| Field Name | Description |
|---|---|
badgeIcon - String!
|
Emoji or icon string for the completion badge. |
badgeName - String!
|
Name of the badge awarded to event completers. |
createdAtTime - String!
|
Unix timestamp (string) when the event was created. |
currentUserParticipant - SeasonalEventParticipant
|
The current user's participation row, or nil. |
description - String
|
Optional description of the event. |
endDate - ISO8601Date!
|
Date when the event ends (inclusive). |
isActive - Boolean!
|
Whether this event is currently enabled by an admin. |
isParticipating - Boolean!
|
Whether the current user is an active participant. |
name - String!
|
Display name of the event. |
participantCount - Int!
|
Total number of active participants in the event. |
publicId - ID!
|
URL-safe public identifier for this event. |
slug - String!
|
URL-safe, unique identifier for this event. |
startDate - ISO8601Date!
|
Date when the event begins. |
status - String!
|
Date-derived status: "upcoming", "active", or "completed". |
targetGoalCount - Int!
|
Number of qualifying goal events required to complete the event. |
updatedAtTime - String!
|
Unix timestamp (string) when the event was last updated. |
Example
{
"badgeIcon": "abc123",
"badgeName": "xyz789",
"createdAtTime": "xyz789",
"currentUserParticipant": SeasonalEventParticipant,
"description": "xyz789",
"endDate": ISO8601Date,
"isActive": false,
"isParticipating": true,
"name": "abc123",
"participantCount": 987,
"publicId": "4",
"slug": "abc123",
"startDate": ISO8601Date,
"status": "xyz789",
"targetGoalCount": 123,
"updatedAtTime": "abc123"
}
SeasonalEventParticipant
Description
A single user participation record within a seasonal event, tracking progress toward completion.
Fields
| Field Name | Description |
|---|---|
completed - Boolean!
|
Whether the participant has met the completion threshold. |
completedAt - ISO8601DateTime
|
When the target was crossed. Nil if not yet complete. |
progressCount - Int!
|
Number of qualifying goal events logged so far. |
progressPercent - Float!
|
Progress toward completion as a percentage (0–100), clamped. |
publicId - ID!
|
URL-safe public identifier for this participation record. |
seasonalEvent - SeasonalEvent
|
The event this participation belongs to. |
user - User
|
The participating user. |
userPublicId - String
|
Public ID of the participating user (safe for membership checks). |
Example
{
"completed": true,
"completedAt": ISO8601DateTime,
"progressCount": 123,
"progressPercent": 123.45,
"publicId": 4,
"seasonalEvent": SeasonalEvent,
"user": User,
"userPublicId": "abc123"
}
SeedIntegrationActivityDebugPayload
Description
Autogenerated return type of SeedIntegrationActivityDebug.
Fields
| Field Name | Description |
|---|---|
decision - String
|
|
errors - [String!]!
|
|
integrationActivity - IntegrationActivity
|
Example
{
"decision": "abc123",
"errors": ["abc123"],
"integrationActivity": IntegrationActivity
}
SendAllyRequestPayload
Description
Autogenerated return type of SendAllyRequest.
Fields
| Field Name | Description |
|---|---|
alreadyRequested - Boolean!
|
|
errors - [String!]!
|
|
userAlly - UserAlly
|
Example
{
"alreadyRequested": false,
"errors": ["xyz789"],
"userAlly": UserAlly
}
SendEncouragementPayload
Description
Autogenerated return type of SendEncouragement.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": true}
SendPartnerNudgePayload
Description
Autogenerated return type of SendPartnerNudge.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": true}
SendPartnerRequestPayload
Description
Autogenerated return type of SendPartnerRequest.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userAlly - UserAlly
|
Example
{
"errors": ["abc123"],
"userAlly": UserAlly
}
SetColorThemePayload
Description
Autogenerated return type of SetColorTheme.
Fields
| Field Name | Description |
|---|---|
colorTheme - String
|
|
errors - [String!]!
|
Example
{
"colorTheme": "xyz789",
"errors": ["xyz789"]
}
SetCommunityEditorialSlotPayload
SetCommunityFeaturedPayload
SetCriticalPathActiveThemePayload
Description
Autogenerated return type of SetCriticalPathActiveTheme.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
status - StimXpStatus
|
Example
{
"errors": ["xyz789"],
"status": StimXpStatus
}
SetCriticalPathReminderPreferencesPayload
Description
Autogenerated return type of SetCriticalPathReminderPreferences.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
preferences - CriticalPathReminderPreferences
|
Example
{
"errors": ["xyz789"],
"preferences": CriticalPathReminderPreferences
}
SetDefaultSubCommunityPayload
Description
Autogenerated return type of SetDefaultSubCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
Example
{
"community": Community,
"errors": ["abc123"]
}
SetGoalPartnerSharingPayload
Description
Autogenerated return type of SetGoalPartnerSharing.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["abc123"],
"goal": Goal
}
SetGoalVisibilityPayload
Description
Autogenerated return type of SetGoalVisibility.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["xyz789"],
"goal": Goal
}
SetLeaderboardVisibilityPayload
Description
Autogenerated return type of SetLeaderboardVisibility.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
optedOut - Boolean
|
Example
{"errors": ["xyz789"], "optedOut": true}
SetSeasonalEventActivePayload
Description
Autogenerated return type of SetSeasonalEventActive.
Fields
| Field Name | Description |
|---|---|
errors - [String!]
|
|
seasonalEvent - SeasonalEvent
|
Example
{
"errors": ["xyz789"],
"seasonalEvent": SeasonalEvent
}
SetTeamNotificationPreferencesPayload
Description
Autogenerated return type of SetTeamNotificationPreferences.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
preferences - TeamNotificationPreferences
|
Example
{
"errors": ["xyz789"],
"preferences": TeamNotificationPreferences
}
SetWeeklyDigestPreferencesPayload
Description
Autogenerated return type of SetWeeklyDigestPreferences.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
preferences - WeeklyDigestPreferences
|
Example
{
"errors": ["abc123"],
"preferences": WeeklyDigestPreferences
}
StartTeamBillingPortalPayload
Description
Autogenerated return type of StartTeamBillingPortal.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
portalUrl - String
|
Example
{
"errors": ["abc123"],
"portalUrl": "xyz789"
}
StartTeamCheckoutPayload
Description
Autogenerated return type of StartTeamCheckout.
Fields
| Field Name | Description |
|---|---|
checkoutUrl - String
|
|
errors - [String!]!
|
Example
{
"checkoutUrl": "xyz789",
"errors": ["abc123"]
}
StepInput
Description
Structured roadmap step input for UpdateGoal.steps. public_id distinguishes update (present) from create (absent). position is zero-based within the parent goal roadmap.
Example
{
"name": "abc123",
"position": 123,
"publicId": "4",
"targetDate": "xyz789"
}
StimXpStatus
Description
The authenticated user's Stim XP and theme status.
Fields
| Field Name | Description |
|---|---|
activeTheme - String!
|
Active theme key; defaults to 'default' when unset. |
currentStimStreak - Int!
|
Current consecutive-day streak; 0 if streak is stale. |
longestStimStreak - Int!
|
All-time longest streak (used for theme unlock thresholds). |
themesCatalog - [CriticalPathTheme!]!
|
Full catalog of available themes. |
totalStimXp - Int!
|
Lifetime total Stim XP earned. |
unlockedThemes - [String!]!
|
Keys of themes the user has unlocked. |
Example
{
"activeTheme": "abc123",
"currentStimStreak": 123,
"longestStimStreak": 123,
"themesCatalog": [CriticalPathTheme],
"totalStimXp": 987,
"unlockedThemes": ["xyz789"]
}
StoreDeviceTokenPayload
Description
Autogenerated return type of StoreDeviceToken.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["xyz789"],
"result": Result
}
StoreFeatureTourStatePayload
Description
Autogenerated return type of StoreFeatureTourState.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
featureTours - JSON
|
|
success - Boolean!
|
Example
{
"errors": ["abc123"],
"featureTours": {},
"success": false
}
StoreOnboardingStatePayload
Description
Autogenerated return type of StoreOnboardingState.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
user - User
|
The current user, with the refreshed onboardingStatus field. |
Example
{
"errors": ["abc123"],
"user": User
}
StoreUserDetailsPayload
Description
Autogenerated return type of StoreUserDetails.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["abc123"],
"result": Result
}
StreakRepairOffer
Description
Streak Repair offer shown to active users within 24–48h of a streak break.
Fields
| Field Name | Description |
|---|---|
eligible - Boolean!
|
Whether the user has an eligible streak repair right now. |
goalName - String
|
Name of the target habit goal. Null when ineligible. |
goalPublicId - ID
|
public_id of the habit goal eligible for repair. Null when ineligible. |
insuranceClaimsRemaining - Int
|
Streak insurance claims remaining in the current calendar month. |
insuranceEligible - Boolean!
|
Whether the user has an eligible Supporter streak insurance claim right now. |
insuranceEligibleUntil - String
|
ISO 8601 timestamp when the insurance window closes. |
insuranceGoalName - String
|
Name of the insurance target habit goal. Null when ineligible. |
insuranceGoalPublicId - ID
|
public_id of the habit goal eligible for insurance. Null when ineligible. |
insurancePeriodResetsAt - String
|
ISO 8601 timestamp when the monthly insurance allowance resets. |
insurancePreBreakHabitStreak - Int
|
Pre-break streak snapshot for the insurance target. |
preBreakHabitStreak - Int
|
Pre-break streak snapshot — the headline number to show users. |
repairEligibleUntil - String
|
ISO 8601 timestamp when the repair window closes. |
repairXpCost - Int
|
XP cost to repair this streak (100 + 5 × streak, capped at 500). |
userIsSupporter - Boolean!
|
Whether the user has an active Supporter subscription. |
Example
{
"eligible": false,
"goalName": "abc123",
"goalPublicId": "4",
"insuranceClaimsRemaining": 987,
"insuranceEligible": false,
"insuranceEligibleUntil": "xyz789",
"insuranceGoalName": "xyz789",
"insuranceGoalPublicId": "4",
"insurancePeriodResetsAt": "abc123",
"insurancePreBreakHabitStreak": 987,
"preBreakHabitStreak": 987,
"repairEligibleUntil": "xyz789",
"repairXpCost": 123,
"userIsSupporter": true
}
String
Description
The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Example
"abc123"
SubmitEnneagramAssessmentPayload
Description
Autogenerated return type of SubmitEnneagramAssessment.
Fields
| Field Name | Description |
|---|---|
assessment - EnneagramAssessment
|
|
errors - [String!]!
|
Example
{
"assessment": EnneagramAssessment,
"errors": ["xyz789"]
}
SubmitTeamPulsePayload
Description
Autogenerated return type of SubmitTeamPulse.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
record - TeamPulseConfirmation
|
Example
{
"errors": ["xyz789"],
"record": TeamPulseConfirmation
}
SuggestGoalsPayload
Description
Autogenerated return type of SuggestGoals.
Fields
| Field Name | Description |
|---|---|
aiRequest - AiRequest
|
Present when async_ai_delivery_enabled routes this request through Ai::DispatchAiRequestJob instead of resolving suggestions inline (v4.60 Phase 5). Subscribe to aiRequestUpdate(requestId: id) or poll aiRequest(id:) for the result. |
errors - [String!]!
|
|
suggestions - [SuggestedGoal!]
|
Example
{
"aiRequest": AiRequest,
"errors": ["xyz789"],
"suggestions": [SuggestedGoal]
}
SuggestedCommunity
Description
A community recommended to a user based on their goals, interests, and ally network.
Fields
| Field Name | Description |
|---|---|
activeMembers - Int!
|
Count of members who posted or commented in the past 7 days. |
category - String!
|
Category label for the community (e.g. "Fitness", "Learning"). |
coverImage - String
|
URL of the community banner/cover image. |
description - String
|
Human-readable description of the community purpose. |
isRecommended - Boolean!
|
Always true for suggested communities — indicates this is a curated recommendation. |
matchScore - Int!
|
Relevance score (0–100) indicating how well this community matches the user. |
members - [DiscoveryMember!]!
|
A sample of up to 5 members, useful for showing mutual connections. |
mutualAllies - Int!
|
Number of the current user allies who are also members of this community. |
name - String!
|
Display name of the community. |
publicId - ID!
|
URL-safe public identifier for this community. |
reason - CommunityReason
|
The single disclosable reason this community is recommended, or null if none applies. Always null when discovery_ranking_v2 is disabled. |
Example
{
"activeMembers": 987,
"category": "abc123",
"coverImage": "xyz789",
"description": "xyz789",
"isRecommended": false,
"matchScore": 987,
"members": [DiscoveryMember],
"mutualAllies": 123,
"name": "abc123",
"publicId": 4,
"reason": CommunityReason
}
SuggestedGoal
Description
A Coach-suggested goal from the goal-discovery quiz: title, category, kind, target date, rationale, and milestones.
Fields
| Field Name | Description |
|---|---|
categoryId - ID
|
Resolved GoalCategory id, or null if the suggested category was unknown. |
categoryName - String
|
|
kindId - ID
|
Resolved GoalType id, or null if the suggested kind was unknown. |
kindName - String
|
|
milestones - [String!]!
|
|
rationale - String
|
One sentence on why this goal fits the quiz answers. |
targetDate - String
|
Suggested ISO8601 target date, or null for habits/ongoing goals. |
title - String
|
Example
{
"categoryId": "4",
"categoryName": "abc123",
"kindId": 4,
"kindName": "xyz789",
"milestones": ["xyz789"],
"rationale": "xyz789",
"targetDate": "abc123",
"title": "xyz789"
}
SupporterStats
Description
Supporter revenue and tier-count aggregation for admin analytics
Example
{
"activeSupportersLifetime": 123,
"activeSupportersMonthly": 987,
"activeSupportersTotal": 123,
"activeSupportersYearly": 123,
"currency": "xyz789",
"mrrCents": 987
}
SyncUserPayload
Description
Autogenerated return type of SyncUser.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
firstSignIn - Boolean!
|
|
user - User
|
Example
{
"errors": ["abc123"],
"firstSignIn": true,
"user": User
}
SystemHealth
Description
Admin self-health probe data. Admin only.
Example
{
"agentRunnerReachable": true,
"currentAdminPublicId": "abc123",
"currentAdminRoleList": ["abc123"],
"databaseReachable": false,
"deployRevision": "xyz789",
"deployTimestamp": "xyz789",
"litellmReachable": false,
"redisReachable": false,
"sidekiqReachable": true
}
Team
Description
A paid, private, multi-community workspace (Teams V1).
Fields
| Field Name | Description |
|---|---|
billingOwner - User!
|
The user who owns billing for this team. |
coachName - String!
|
The team's billing owner first name, shown as "Coached by" (OBJ-1830). |
memberCount - Int!
|
Total number of memberships on this team (OBJ-1830). |
memberships - [TeamMembership!]!
|
All current members of this team. |
name - String!
|
Display name of the team. |
publicId - ID!
|
URL-safe public identifier for this team. |
slug - String!
|
URL-safe slug for the team. |
subscription - TeamSubscription
|
The team billing subscription, if provisioned. |
Example
{
"billingOwner": User,
"coachName": "xyz789",
"memberCount": 123,
"memberships": [TeamMembership],
"name": "xyz789",
"publicId": 4,
"slug": "xyz789",
"subscription": TeamSubscription
}
TeamFeedItem
Description
A row in TeamHomeView's Today feed. Always empty in Phase 3 (Orion A1 — no activity feed model yet).
Example
{
"actorName": "abc123",
"actorPhotoUrl": "xyz789",
"id": 4,
"kind": "abc123",
"message": "abc123",
"occurredAt": ISO8601DateTime,
"points": 987
}
TeamHome
Description
Aggregate read backing TeamHomeView (N13).
Fields
| Field Name | Description |
|---|---|
activeRoomId - ID
|
The public_id of the viewer's active sub-community. |
billingState - String
|
trial_ending, past_due, grace_readonly, or null when the subscription needs no banner (active/canceled). |
collectiveGoal - CollectiveGoal
|
The team-wide collective goal, if any. Null when teams_collective_goals is off or none exists yet. |
collectiveGoalPrivacyContractAcknowledged - Boolean!
|
Whether the viewer has acknowledged TeamPrivacyContractView (N18) server-side (UserAction), never localStorage. |
feed - [TeamFeedItem!]!
|
Always empty in Phase 3 — see TeamFeedItemType's description. |
isFreshMember - Boolean!
|
True when the viewer has no team activity yet (drives the empty state). |
role - String!
|
The viewer's TeamMembership role on this team. |
rooms - [Community!]!
|
The team's non-archived sub-communities (room strip / switcher). |
team - Team!
|
The team. |
trialDaysLeft - Int
|
Days left in trial, clamped to >= 0. Null outside trialing. |
Example
{
"activeRoomId": 4,
"billingState": "abc123",
"collectiveGoal": CollectiveGoal,
"collectiveGoalPrivacyContractAcknowledged": false,
"feed": [TeamFeedItem],
"isFreshMember": false,
"role": "abc123",
"rooms": [Community],
"team": Team,
"trialDaysLeft": 123
}
TeamInvite
Description
A link (and optionally email-targeted) invite to join a Team.
Fields
| Field Name | Description |
|---|---|
code - String!
|
URL-safe invite code — embed in the join link. |
email - String
|
Invitee email, or null for a link-only invite. |
expiresAt - ISO8601DateTime!
|
When this invite expires (14 days from creation). |
id - ID!
|
Public identifier for this invite record. |
maxUses - Int
|
Maximum number of times this invite may be accepted. |
status - String!
|
Current status: pending, accepted, revoked, or expired. |
teamRole - String!
|
Role the invitee will hold once accepted: admin or member. |
usedCount - Int!
|
Number of times this invite has been accepted. |
Example
{
"code": "abc123",
"email": "xyz789",
"expiresAt": ISO8601DateTime,
"id": "4",
"maxUses": 987,
"status": "xyz789",
"teamRole": "abc123",
"usedCount": 987
}
TeamInvitePreview
Description
Public preview of a team invite — safe for an unauthenticated visitor before they sign up or accept. Never reveals whether an unavailable invite was revoked, expired, or exhausted.
Fields
| Field Name | Description |
|---|---|
inviterName - String
|
The inviter's first name. Present only when status is valid. |
memberCount - Int
|
Current team member count. Present only when status is valid. |
status - String!
|
"valid", "unavailable" (expired, revoked, or exhausted — indistinguishable by design), or "not_found". |
teamName - String
|
The inviting team's name. Present only when status is valid. |
Example
{
"inviterName": "abc123",
"memberCount": 987,
"status": "abc123",
"teamName": "abc123"
}
TeamLeaderboard
Description
Aggregate read backing TeamLeaderboardView (N19).
Fields
| Field Name | Description |
|---|---|
entries - [TeamLeaderboardEntry!]!
|
Ranked, opted-in entries for the requested scope. |
period - String!
|
weekly, monthly, or all_time. |
rooms - [Community!]!
|
The team's non-archived sub-communities, for the scope picker (OBJ-1826). |
team - Team!
|
The team this leaderboard belongs to. |
yourMembershipOptedOut - Boolean!
|
Whether the requesting member has opted out of the leaderboard themselves. |
Example
{
"entries": [TeamLeaderboardEntry],
"period": "xyz789",
"rooms": [Community],
"team": Team,
"yourMembershipOptedOut": false
}
TeamLeaderboardEntry
Description
A single denormalized row on a team leaderboard bucket.
Fields
| Field Name | Description |
|---|---|
isYou - Boolean!
|
Whether this row belongs to the requesting user. |
points - Int!
|
Total points accrued in this bucket. |
rank - Int!
|
Position within the current bucket (1 = highest points). |
trend - String!
|
up, down, or flat vs. the immediately preceding bucket. |
user - User!
|
The team member this entry belongs to. |
Example
{
"isYou": false,
"points": 123,
"rank": 987,
"trend": "abc123",
"user": User
}
TeamLeaderboardOptOutStat
Description
Per-team leaderboard opt-out raw count (PRD anti-metric monitoring). Admin-only.
Example
{
"memberCount": 987,
"optedOutCount": 123,
"teamName": "xyz789"
}
TeamMemberActivity
Description
Read-only team-scoped activity summary for one member (N7b "View activity"). Owner/admin only — see Resolvers::TeamQueries#team_member_activity.
Fields
| Field Name | Description |
|---|---|
collectiveGoalContributions - Int!
|
Count of events contributed across the team's collective goals. |
lastActiveDays - Int
|
Days since the member was last active, day granularity. Null when no activity has been recorded yet. |
lastActiveLabel - String!
|
Humanized last-active label: "Active today" / "Active yesterday" / "Active Nd ago" / "Inactive Nd" / "Not recorded yet", day granularity only. |
optedOut - Boolean!
|
Whether the member has opted out of the team leaderboard — render the opt-out copy instead of points/check-ins. |
periodStats - [TeamMemberActivityPeriodStat!]!
|
Team points earned and check-ins, one row per period (weekly, monthly, all_time). |
subCommunityNames - [String!]!
|
Names of the sub-communities this member belongs to. |
Example
{
"collectiveGoalContributions": 987,
"lastActiveDays": 123,
"lastActiveLabel": "abc123",
"optedOut": false,
"periodStats": [TeamMemberActivityPeriodStat],
"subCommunityNames": ["abc123"]
}
TeamMemberActivityPeriodStat
Description
Points and check-ins for one leaderboard period bucket, within Team Member Activity (OBJ-1823).
Example
{
"checkins": 987,
"period": "xyz789",
"points": 987
}
TeamMemberSummary
Description
A member row in Team Settings → Members (N7b).
Fields
| Field Name | Description |
|---|---|
activityLabel - String!
|
Humanized last-active label: "Active today" / "Active yesterday" / "Active Nd ago" / "Inactive Nd" / "Not recorded yet". |
firstName - String!
|
The member's first name. |
isInactive - Boolean!
|
True when no activity in the trailing 14 days. |
joinedLabel - String!
|
Humanized "joined N ago" label. |
lastName - String
|
The member's last name. |
photoUrl - String
|
The member's avatar URL, or nil (falls back to initials). |
publicId - ID!
|
The member's public identifier (their User public_id). |
role - String!
|
Display role: owner, admin, member, external_coach, lead, or coach. "lead" and "coach" are display-only labels layered over the underlying TeamMembership role — see PromoteTeamMember for the persisted role values. |
roomIds - [ID!]!
|
Community public_ids this member belongs to. Empty array if none. |
teamMembershipId - ID!
|
This member's TeamMembership public_id — the id promote/remove mutations take. |
Example
{
"activityLabel": "xyz789",
"firstName": "abc123",
"isInactive": false,
"joinedLabel": "xyz789",
"lastName": "abc123",
"photoUrl": "abc123",
"publicId": 4,
"role": "abc123",
"roomIds": [4],
"teamMembershipId": 4
}
TeamMembership
Description
A user's seat on a Team.
Fields
| Field Name | Description |
|---|---|
joinedAt - ISO8601DateTime!
|
When this member joined the team. |
publicId - ID!
|
URL-safe public identifier for this membership. |
role - String!
|
owner, admin, member, or external_coach. |
user - User!
|
The member. |
Example
{
"joinedAt": ISO8601DateTime,
"publicId": "4",
"role": "xyz789",
"user": User
}
TeamNotificationPreferences
Description
Team notification preferences for the authenticated user.
Fields
| Field Name | Description |
|---|---|
enabled - Boolean!
|
Whether the user receives in-app and push notifications from their teams. |
Example
{"enabled": true}
TeamPendingInvite
Description
A pending invite row in the Members (N7b) or Invites (N7d) tab.
Fields
| Field Name | Description |
|---|---|
code - String!
|
The invite code (used to build the join link for Copy). |
email - String
|
Invitee email, or null for a link-only invite. |
expiresAt - ISO8601DateTime!
|
When this invite expires. |
id - ID!
|
Public identifier for this invite. |
sentLabel - String!
|
Humanized duration since sent (e.g. "2 days") — no trailing "ago"; TeamMembersTab.vue/TeamInvitesTab.vue append "ago" themselves ("Sent {sentLabel} ago"). |
status - String!
|
pending, accepted, revoked, or expired. |
Example
{
"code": "abc123",
"email": "abc123",
"expiresAt": ISO8601DateTime,
"id": 4,
"sentLabel": "xyz789",
"status": "abc123"
}
TeamPulseConfirmation
Description
Confirmation that a team pulse survey response was recorded.
Fields
| Field Name | Description |
|---|---|
period - String!
|
The quarter period this response was recorded for (e.g. "2026-Q3"). |
Example
{"period": "abc123"}
TeamSettings
Description
Aggregate read backing Team Settings (N7): Members, Sub-Communities, and Invites tabs.
Fields
| Field Name | Description |
|---|---|
maxSubCommunities - Int!
|
Sub-community cap for this team (N7c header count). |
members - [TeamMemberSummary!]!
|
Every current team member. |
pendingInvites - [TeamPendingInvite!]!
|
Invites still awaiting acceptance. |
role - String!
|
The viewer's TeamMembership role on this team. |
seatLimit - Int
|
The team's subscription seat count, or nil when unprovisioned. |
seatsUsed - Int!
|
Current member count. |
subCommunities - [Community!]!
|
Every sub-community for this team, including archived ones (N7c renders archived rooms in a read-only 30-day window). |
team - Team!
|
The team. |
Example
{
"maxSubCommunities": 123,
"members": [TeamMemberSummary],
"pendingInvites": [TeamPendingInvite],
"role": "abc123",
"seatLimit": 123,
"seatsUsed": 987,
"subCommunities": [Community],
"team": Team
}
TeamSubscription
Description
A Team billing subscription — plan, seats, and lifecycle status.
Fields
| Field Name | Description |
|---|---|
currentPeriodEnd - ISO8601DateTime
|
End of the current billing period. |
plan - Plan!
|
The Teams plan this subscription is on. |
publicId - ID!
|
URL-safe public identifier for this subscription. |
seatCount - Int!
|
Number of seats currently provisioned. |
status - String!
|
Lifecycle status: trialing, active, past_due, grace, or canceled. |
trialEndsAt - ISO8601DateTime
|
When the free trial ends, if trialing. |
Example
{
"currentPeriodEnd": ISO8601DateTime,
"plan": Plan,
"publicId": 4,
"seatCount": 987,
"status": "abc123",
"trialEndsAt": ISO8601DateTime
}
TeamSwitcherEntry
ToggleFeedbackVotePayload
Description
Autogenerated return type of ToggleFeedbackVote.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackPost - FeedbackPost
|
|
voted - Boolean
|
Example
{
"errors": ["abc123"],
"feedbackPost": FeedbackPost,
"voted": false
}
ToggleFollowGoalPayload
Description
Autogenerated return type of ToggleFollowGoal.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
result - Result
|
Example
{
"errors": ["xyz789"],
"result": Result
}
ToggleGoalEventEncouragementPayload
Description
Autogenerated return type of ToggleGoalEventEncouragement.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goalEventEncouragement - GoalEventEncouragement
|
Example
{
"errors": ["abc123"],
"goalEventEncouragement": GoalEventEncouragement
}
ToggleGoalEventReactionPayload
Description
Autogenerated return type of ToggleGoalEventReaction.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goalEventReaction - GoalEventReaction
|
Example
{
"errors": ["abc123"],
"goalEventReaction": GoalEventReaction
}
TourFunnel
Description
Aggregated tour-completion funnel counts for a single tour id. Admin only. Returns aggregates only — no user identifiers.
Fields
| Field Name | Description |
|---|---|
completed - Int!
|
Users who completed this tour (completed_at present). |
completionRate - Float
|
completed / started. Null when started is zero. |
dismissed - Int!
|
Users who skipped/dismissed this tour without completing. |
started - Int!
|
Lower-bound proxy: users with a persisted completed_at or dismissed=true entry for this tour. feature_tours never records a raw start event — true start volume lives in PostHog (tour_started). |
tourId - String!
|
Tour identifier, matching ionic_frontend TOUR_REGISTRY tourId (e.g. "dashboard-first-run"). |
Example
{
"completed": 123,
"completionRate": 123.45,
"dismissed": 987,
"started": 987,
"tourId": "xyz789"
}
TransferTeamBillingOwnershipPayload
Description
Autogenerated return type of TransferTeamBillingOwnership.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
team - Team
|
Example
{
"errors": ["xyz789"],
"team": Team
}
TrendingCommunity
Description
A community currently trending based on member growth and activity metrics.
Fields
| Field Name | Description |
|---|---|
activeMembers - Int!
|
Count of members who posted or commented in the past 7 days. |
category - String!
|
Category label for the community (e.g. "Fitness", "Learning"). |
coverImage - String
|
URL of the community banner/cover image. |
description - String
|
Human-readable description of the community purpose. |
growthRate - Float!
|
Percentage growth in membership over the past 7 days. |
isTrending - Boolean!
|
Always true for trending communities — indicates current trending status. |
name - String!
|
Display name of the community. |
publicId - ID!
|
URL-safe public identifier for this community. |
reason - CommunityReason
|
The single disclosable reason this community is trending, or null if none applies. Always null when discovery_ranking_v2 is disabled. |
totalGoals - Int!
|
Total number of goals shared in this community. |
totalMembers - Int!
|
Total member count. |
Example
{
"activeMembers": 987,
"category": "abc123",
"coverImage": "abc123",
"description": "xyz789",
"growthRate": 987.65,
"isTrending": false,
"name": "abc123",
"publicId": "4",
"reason": CommunityReason,
"totalGoals": 987,
"totalMembers": 987
}
TriggerAiRunPayload
Description
Autogenerated return type of TriggerAiRun.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
run - AiRun
|
Example
{
"errors": ["xyz789"],
"run": AiRun
}
UnarchiveSubCommunityPayload
Description
Autogenerated return type of UnarchiveSubCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
Example
{
"community": Community,
"errors": ["abc123"]
}
UnblockAllyPayload
Description
Autogenerated return type of UnblockAlly.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
success - Boolean!
|
Example
{"errors": ["abc123"], "success": false}
UnfollowCommunityPayload
Description
Autogenerated return type of UnfollowCommunity.
Fields
| Field Name | Description |
|---|---|
result - Result
|
Example
{"result": Result}
UnifiedFeed
Description
Paginated unified activity feed.
Fields
| Field Name | Description |
|---|---|
hasMore - Boolean!
|
Whether there are more items beyond this page. |
items - [UnifiedFeedItem!]!
|
Feed items for the current page. |
totalCount - Int!
|
Total number of feed items across all sources. |
Example
{
"hasMore": false,
"items": [UnifiedFeedItem],
"totalCount": 987
}
UnifiedFeedItem
Description
A single item in the unified activity feed.
Fields
| Field Name | Description |
|---|---|
action - String!
|
Action verb (e.g. "checked in on", "posted in"). |
actorId - String
|
public_id of the acting user. |
actorName - String
|
Display name of the user who performed the action. |
actorPhoto - String
|
Photo URL of the acting user. |
badgeKey - String
|
Badge action key (e.g. complete_first_goal) when feed_type=notification and action=badge. |
communityId - String
|
Community public_id if applicable. |
communityName - String
|
Community name if applicable. |
content - String
|
Body text or excerpt of the feed item. |
feedType - String!
|
Source type: ally_activity, community_post, notification, or own_activity. |
id - String!
|
Unique identifier for this feed item (prefixed by source type). |
targetId - String
|
public_id of the target entity. |
targetName - String
|
Name of the goal or community acted upon. |
targetType - String
|
Entity type: goal or community. |
timestamp - String!
|
Unix timestamp as a string. |
Example
{
"action": "abc123",
"actorId": "abc123",
"actorName": "xyz789",
"actorPhoto": "abc123",
"badgeKey": "abc123",
"communityId": "xyz789",
"communityName": "xyz789",
"content": "xyz789",
"feedType": "abc123",
"id": "abc123",
"targetId": "xyz789",
"targetName": "xyz789",
"targetType": "xyz789",
"timestamp": "xyz789"
}
UpdateAiEmployeePayload
Description
Autogenerated return type of UpdateAiEmployee.
Fields
| Field Name | Description |
|---|---|
employee - AiEmployee
|
|
errors - [String!]!
|
Example
{
"employee": AiEmployee,
"errors": ["xyz789"]
}
UpdateCoachModelPayload
Description
Autogenerated return type of UpdateCoachModel.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
setting - CoachModelSetting
|
Example
{
"errors": ["abc123"],
"setting": CoachModelSetting
}
UpdateCoachWarmupContextPayload
Description
Autogenerated return type of UpdateCoachWarmupContext.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userDetail - UserDetail
|
Example
{
"errors": ["xyz789"],
"userDetail": UserDetail
}
UpdateCoachingPreferencesPayload
Description
Autogenerated return type of UpdateCoachingPreferences.
Fields
| Field Name | Description |
|---|---|
coachingPreferences - CoachingPreferences
|
|
errors - [String!]!
|
Example
{
"coachingPreferences": CoachingPreferences,
"errors": ["xyz789"]
}
UpdateDashboardPreferencesPayload
Description
Autogenerated return type of UpdateDashboardPreferences.
Fields
| Field Name | Description |
|---|---|
dashboardPreferences - DashboardPreferences
|
|
errors - [String!]!
|
Example
{
"dashboardPreferences": DashboardPreferences,
"errors": ["xyz789"]
}
UpdateDemoCommunityPayload
Description
Autogenerated return type of UpdateDemoCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
Example
{
"community": Community,
"errors": ["xyz789"]
}
UpdateDemoGoalPayload
Description
Autogenerated return type of UpdateDemoGoal.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["xyz789"],
"goal": Goal
}
UpdateDemoUserPayload
Description
Autogenerated return type of UpdateDemoUser.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
user - User
|
Example
{
"errors": ["abc123"],
"user": User
}
UpdateFeedbackPostStatusPayload
Description
Autogenerated return type of UpdateFeedbackPostStatus.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackPost - FeedbackPost
|
Example
{
"errors": ["abc123"],
"feedbackPost": FeedbackPost
}
UpdateFeedbackPostTagsPayload
Description
Autogenerated return type of UpdateFeedbackPostTags.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackPost - FeedbackPost
|
Example
{
"errors": ["abc123"],
"feedbackPost": FeedbackPost
}
UpdateFeedbackTagPayload
Description
Autogenerated return type of UpdateFeedbackTag.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
feedbackTag - FeedbackTag
|
Example
{
"errors": ["xyz789"],
"feedbackTag": FeedbackTag
}
UpdateGoalEventPayload
Description
Autogenerated return type of UpdateGoalEvent.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goalEvent - GoalEvent
|
Example
{
"errors": ["xyz789"],
"goalEvent": GoalEvent
}
UpdateGoalMotivationSnapshotPayload
Description
Autogenerated return type of UpdateGoalMotivationSnapshot.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goalMotivationProfile - GoalMotivationProfile
|
Example
{
"errors": ["abc123"],
"goalMotivationProfile": GoalMotivationProfile
}
UpdateGoalPayload
Description
Autogenerated return type of UpdateGoal.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["abc123"],
"goal": Goal
}
UpdatePrivacySettingsPayload
Description
Autogenerated return type of UpdatePrivacySettings.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
user - User
|
Example
{
"errors": ["xyz789"],
"user": User
}
UpdateSeasonalEventPayload
Description
Autogenerated return type of UpdateSeasonalEvent.
Fields
| Field Name | Description |
|---|---|
errors - [String!]
|
|
seasonalEvent - SeasonalEvent
|
Example
{
"errors": ["xyz789"],
"seasonalEvent": SeasonalEvent
}
UpdateShowcasedAchievementsPayload
UpdateSubCommunityPayload
Description
Autogenerated return type of UpdateSubCommunity.
Fields
| Field Name | Description |
|---|---|
community - Community
|
|
errors - [String!]!
|
|
teamReadOnly - Boolean!
|
True only for the grace-period read-only failure — the frontend renders its own "team is read-only" copy for this. |
Example
{
"community": Community,
"errors": ["abc123"],
"teamReadOnly": true
}
UpdateUserPayload
Description
Autogenerated return type of UpdateUser.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
user - User
|
Example
{
"errors": ["abc123"],
"user": User
}
UpdateUserPhotoPayload
Description
Autogenerated return type of UpdateUserPhoto.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userPhoto - UserPhoto
|
Example
{
"errors": ["xyz789"],
"userPhoto": UserPhoto
}
UpdateUserRolesPayload
Upload
Example
Upload
UseStreakFreezePayload
Description
Autogenerated return type of UseStreakFreeze.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["abc123"],
"goal": Goal
}
User
Description
A registered Objectuve user with gamification progress, goals, and social connections.
Fields
| Field Name | Description |
|---|---|
achievementStats - AchievementStats
|
Computed rank, XP, and badge stats for the Achievements page hero. |
actions - [UserAction!]
|
Gamification action log used to compute badges and achievements, newest first. Bounded by limit — use unlockedAchievementKeys for a complete badge-unlock check independent of this limit. |
Arguments
|
|
admin - Boolean!
|
Whether the user has admin privileges. |
adminRoles - [String!]!
|
List of admin RBAC roles enabled for this user. |
coachingPreferences - CoachingPreferences!
|
AI Coach persona and communication preferences. |
colorTheme - String!
|
Supporter color theme slug synced across devices. Defaults to "default". |
completedCommunityChallenges - [ChallengeParticipant!]!
|
Challenge participations where the user has met the completion threshold. |
completedSeasonalEvents - [SeasonalEventParticipant!]!
|
Seasonal event participations where the user has met the completion threshold. |
createdAtTime - String
|
Unix timestamp (string) when the account was created. |
currentInsights - [InsightPack!]!
|
Daily AI coaching insight cards for the five core app pages. Returns cached packs or an empty array when the cache is cold. Never raises AI_DISABLED — callers should render fallback copy on empty array. |
dashboardPreferences - DashboardPreferences!
|
Dashboard hierarchy view preferences (v4.15). |
daysSinceLastActive - Int
|
Days since last recorded activity. Null for users who have never been active. |
demo - Boolean!
|
Whether this user is a demo-tagged record (Phase 30). |
details - UserDetail
|
Extended profile metadata stored as JSON (e.g. showcased achievements). |
email - String!
|
Primary email address for the account. |
emailVerified - Boolean!
|
Whether the user has confirmed their email address. |
featureTourStatus - JSON!
|
Feature-tour completion/dismissal state, keyed by tour id (e.g. "dashboard-first-run"). Empty hash if no tour has started. |
feedItems - [UserFeedItem!]
|
Personal activity feed items for the user's home timeline, newest first. |
Arguments
|
|
firstName - String
|
User's given name. |
goItAlone - Boolean!
|
Whether the user has opted out of ally/community/coach-social prompts. Defaults to false. |
goalMotivationProfile - GoalMotivationProfile
|
Goal Motivation Snapshot answers. Null until first answer is saved. |
goals - [Goal!]!
|
All goals owned by this user. |
graceDays - [String!]!
|
ISO date strings (within last 30 days) where soft-grace forgave a single-day streak gap. Forgiven days are skipped — not counted toward the streak number. |
hasAlly - Boolean!
|
True if the user has at least one accepted ally (either direction). |
hasCreatedFromTemplate - Boolean!
|
True if the user has at least one goal created from a template. |
hasDigestEnabled - Boolean!
|
Whether the user has weekly digest emails enabled (nil defaults to true). |
isSupporter - Boolean!
|
Whether the user has an active Supporter subscription. |
lastDigestSentAt - String
|
ISO 8601 timestamp of the last digest sent, or null if never sent. |
lastName - String
|
User's family name. |
latestEnneagramAssessment - EnneagramAssessment
|
Most recent completed Enneagram assessment for this user, or null if none. |
level - Int!
|
Current gamification level derived from XP. |
longestStreak - Int!
|
All-time longest streak of consecutive active days. |
moodGoalInsight - InsightPack
|
Reflective correlation between mood logs and goal check-ins. Null unless a correlation exists AND mood_goal_insights_enabled is on for this user (fail-closed). |
nextLevelThreshold - Int!
|
XP required to reach the next level. |
nextOnTheShelfBadge - NextBadge
|
The locked badge closest to being unlocked, or null if all badges are earned. |
notifications - [UserNotification!]
|
In-app notifications for this user, newest first. |
Arguments
|
|
onboardingStatus - OnboardingStatus
|
v1.8 onboarding completion + resume state. Null until completed or backfilled. |
paceSuggestion - PaceSuggestion
|
Timeline-adjustment suggestion when a goal is consistently ahead of or behind pace. Null unless a suggestion exists AND goal_auto_adjust_enabled is on (fail-closed). |
photo - UserPhoto
|
Profile photo for the user. |
privateMode - Boolean!
|
Whether the user is hidden from username search. Defaults to false. |
progressToNextLevel - Float!
|
Fraction (0.0–1.0) representing progress toward the next level. |
publicId - ID!
|
URL-safe public identifier. Use this for all lookups — internal integer IDs are never exposed. |
recentlyUnlockedBadges - [RecentlyUnlockedBadge!]!
|
Badges unlocked within the specified window, newest first. |
requiredCheckinsCompleteToday - Boolean!
|
True when the user has logged every habit check-in expected today (or has no habits expected today). |
showcasedAchievements - [String!]
|
Achievement identifiers the user has chosen to display on their profile. |
signInDates - [String!]
|
List of ISO date strings on which the user has signed in. |
signupAgeDays - Int!
|
Whole days since the user account was created (signup age). |
stats - UserStats
|
Aggregated goal and achievement statistics for the user. |
streak - Int!
|
Current number of consecutive days the user has logged activity. |
streakRepairOffer - StreakRepairOffer
|
Streak Repair eligibility and offer payload for the active-user repair window. |
supporterTier - String
|
Active supporter tier: monthly, yearly, lifetime, or null. |
supporterUntil - ISO8601DateTime
|
When the current supporter period ends (null for lifetime). |
timeToFirstGoalSeconds - Int
|
Seconds from account creation to first (non-deleted) goal. Admin-only — returns null for non-admin viewers. |
todaysMood - String
|
Most recent mood log from today, or null if not logged. |
unlockedAchievementKeys - [String!]!
|
Distinct set of gamification action keys this user has ever unlocked, independent of the actions field limit. Use this for badge-unlock checks instead of scanning actions. |
updatedAtTime - String
|
Unix timestamp (string) when the account was last updated. |
username - String
|
Unique handle chosen by the user (e.g. "jane.doe"). |
welcomeBackOffer - WelcomeBackOffer
|
Streak Mercy eligibility and offer payload. Null until user is synced. |
xp - Int!
|
Total experience points earned through goals, events, and engagement. |
Example
{
"achievementStats": AchievementStats,
"actions": [UserAction],
"admin": false,
"adminRoles": ["abc123"],
"coachingPreferences": CoachingPreferences,
"colorTheme": "xyz789",
"completedCommunityChallenges": [ChallengeParticipant],
"completedSeasonalEvents": [SeasonalEventParticipant],
"createdAtTime": "xyz789",
"currentInsights": [InsightPack],
"dashboardPreferences": DashboardPreferences,
"daysSinceLastActive": 987,
"demo": false,
"details": UserDetail,
"email": "abc123",
"emailVerified": true,
"featureTourStatus": {},
"feedItems": [UserFeedItem],
"firstName": "abc123",
"goItAlone": false,
"goalMotivationProfile": GoalMotivationProfile,
"goals": [Goal],
"graceDays": ["xyz789"],
"hasAlly": true,
"hasCreatedFromTemplate": false,
"hasDigestEnabled": false,
"isSupporter": false,
"lastDigestSentAt": "abc123",
"lastName": "xyz789",
"latestEnneagramAssessment": EnneagramAssessment,
"level": 987,
"longestStreak": 987,
"moodGoalInsight": InsightPack,
"nextLevelThreshold": 987,
"nextOnTheShelfBadge": NextBadge,
"notifications": [UserNotification],
"onboardingStatus": OnboardingStatus,
"paceSuggestion": PaceSuggestion,
"photo": UserPhoto,
"privateMode": false,
"progressToNextLevel": 987.65,
"publicId": "4",
"recentlyUnlockedBadges": [RecentlyUnlockedBadge],
"requiredCheckinsCompleteToday": true,
"showcasedAchievements": ["abc123"],
"signInDates": ["xyz789"],
"signupAgeDays": 987,
"stats": UserStats,
"streak": 123,
"streakRepairOffer": StreakRepairOffer,
"supporterTier": "xyz789",
"supporterUntil": ISO8601DateTime,
"timeToFirstGoalSeconds": 123,
"todaysMood": "xyz789",
"unlockedAchievementKeys": ["xyz789"],
"updatedAtTime": "abc123",
"username": "abc123",
"welcomeBackOffer": WelcomeBackOffer,
"xp": 987
}
UserAction
Description
A gamification action record tracking user behaviour for badges and achievements.
Fields
| Field Name | Description |
|---|---|
acknowledged - Boolean!
|
Whether the user has been shown/dismissed the reward for this action. |
action - String!
|
Action identifier (e.g. "goal_created", "streak_7", "encouragement_given"). |
communityName - String
|
For community-scoped badges, the name of the community the badge was earned in. |
createdAtTime - String
|
Unix timestamp (string) when this action was recorded. |
id - ID!
|
Public identifier for this action record. |
Example
{
"acknowledged": true,
"action": "abc123",
"communityName": "abc123",
"createdAtTime": "abc123",
"id": 4
}
UserActivity
Description
A single activity item in a user activity timeline within a community context.
Fields
| Field Name | Description |
|---|---|
communityId - ID
|
public_id of the community this activity is associated with, if any. |
communityName - String
|
Name of the community this activity is associated with, if any. |
content - String!
|
Human-readable description of the activity. |
id - ID!
|
Public identifier for this activity item. |
timestamp - String!
|
Unix timestamp (string) when this activity occurred. |
type - String!
|
Activity type (e.g. "goal_event", "community_post", "milestone_completed"). |
Example
{
"communityId": "4",
"communityName": "abc123",
"content": "xyz789",
"id": 4,
"timestamp": "abc123",
"type": "abc123"
}
UserAlly
Description
A friend/ally connection — another user in the current user allies network.
Fields
| Field Name | Description |
|---|---|
accountabilityPartner - Boolean!
|
Whether this ally is the current accountability partner. |
accountabilityPartnerSince - ISO8601DateTime
|
When the partnership was established. |
createdAtTime - String
|
Request creation time as unix epoch seconds (string). |
firstName - String
|
The ally user's given name. |
id - ID!
|
Public identifier for this ally relationship record. |
lastName - String
|
The ally user's family name. |
mutualCount - Int!
|
Number of mutual allies shared between the current user and this ally. |
mutualStreakCount - Int!
|
Current mutual check-in streak count. |
partnerStatus - String!
|
Partnership state: "none", "pending", or "active". |
photo - UserPhoto
|
The ally user's profile photo. |
publicId - String!
|
URL-safe public identifier of the ally user. |
status - String
|
Raw ally relationship status: "pending", "accepted", or "blocked". |
user - PendingAllyUser
|
The requesting user for a pending ally request. |
username - String
|
The ally user's unique handle. |
Example
{
"accountabilityPartner": true,
"accountabilityPartnerSince": ISO8601DateTime,
"createdAtTime": "abc123",
"firstName": "abc123",
"id": "4",
"lastName": "abc123",
"mutualCount": 987,
"mutualStreakCount": 987,
"partnerStatus": "abc123",
"photo": UserPhoto,
"publicId": "abc123",
"status": "abc123",
"user": PendingAllyUser,
"username": "xyz789"
}
UserConnection
Description
The connection type for User.
Fields
| Field Name | Description |
|---|---|
edges - [UserEdge]
|
A list of edges. |
nodes - [User]
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
Example
{
"edges": [UserEdge],
"nodes": [User],
"pageInfo": PageInfo
}
UserDetail
Description
Extended profile metadata for a user, stored as a JSON blob.
Fields
| Field Name | Description |
|---|---|
dashboardMigratedFromFull - Boolean!
|
Whether this user was backfilled from the legacy "full" dashboard mode to Detailed (v4.15). |
dashboardMigrationNoteDismissed - Boolean!
|
Whether the dashboard hierarchy migration note has been dismissed (v4.15). |
dashboardRelocationHintAchieveDismissed - Boolean!
|
Whether the ShowcasedAchievements → Achieve relocation hint has been dismissed (v4.15). |
dashboardRelocationHintCommunityDismissed - Boolean!
|
Whether the SocialSection → Community relocation hint has been dismissed (v4.15). |
data - String!
|
JSON string containing arbitrary profile metadata (e.g. showcasedAchievements, onboarding state). |
enneagramCardDismissed - Boolean!
|
Whether the user has permanently dismissed the Enneagram dashboard prompt card. |
id - ID!
|
Public identifier for this detail record. |
Example
{
"dashboardMigratedFromFull": false,
"dashboardMigrationNoteDismissed": false,
"dashboardRelocationHintAchieveDismissed": true,
"dashboardRelocationHintCommunityDismissed": false,
"data": "xyz789",
"enneagramCardDismissed": true,
"id": "4"
}
UserEdge
UserFeedItem
Description
A single item in the user personal activity feed (home timeline).
Fields
| Field Name | Description |
|---|---|
content - String!
|
Human-readable text describing the feed event. |
createdAtTime - String
|
Unix timestamp (string) when this feed item was created. |
detailsJson - String!
|
JSON string with additional event metadata (e.g. related goal ID, user ID). |
id - ID!
|
Public identifier for this feed item. |
kind - String!
|
Feed item type (e.g. "goal_event", "encouragement_received", "milestone_completed"). |
Example
{
"content": "abc123",
"createdAtTime": "xyz789",
"detailsJson": "abc123",
"id": 4,
"kind": "xyz789"
}
UserNotification
Description
An in-app notification delivered to a user.
Fields
| Field Name | Description |
|---|---|
acknowledged - Boolean!
|
Whether the user has dismissed/read this notification. |
content - String!
|
Human-readable notification message. |
createdAtTime - String
|
Unix timestamp (string) when this notification was created. |
detailsJson - String!
|
JSON string with additional metadata (e.g. source user ID, goal ID). |
id - ID!
|
Public identifier for this notification. |
kind - String!
|
Notification category (e.g. "encouragement", "milestone_completed", "community_post"). |
Example
{
"acknowledged": true,
"content": "abc123",
"createdAtTime": "xyz789",
"detailsJson": "xyz789",
"id": "4",
"kind": "abc123"
}
UserPhoto
UserSearchResult
Description
A user returned from the user-facing searchUsers query, with per-result ally relationship status.
Fields
| Field Name | Description |
|---|---|
achievementStats - AchievementStats
|
Computed rank, XP, and badge stats for the Achievements page hero. |
actions - [UserAction!]
|
Gamification action log used to compute badges and achievements, newest first. Bounded by limit — use unlockedAchievementKeys for a complete badge-unlock check independent of this limit. |
Arguments
|
|
admin - Boolean!
|
Whether the user has admin privileges. |
adminRoles - [String!]!
|
List of admin RBAC roles enabled for this user. |
allyStatus - AllyStatusEnum!
|
Relationship status between the authenticated user and this search result. |
coachingPreferences - CoachingPreferences!
|
AI Coach persona and communication preferences. |
colorTheme - String!
|
Supporter color theme slug synced across devices. Defaults to "default". |
completedCommunityChallenges - [ChallengeParticipant!]!
|
Challenge participations where the user has met the completion threshold. |
completedSeasonalEvents - [SeasonalEventParticipant!]!
|
Seasonal event participations where the user has met the completion threshold. |
createdAtTime - String
|
Unix timestamp (string) when the account was created. |
currentInsights - [InsightPack!]!
|
Daily AI coaching insight cards for the five core app pages. Returns cached packs or an empty array when the cache is cold. Never raises AI_DISABLED — callers should render fallback copy on empty array. |
dashboardPreferences - DashboardPreferences!
|
Dashboard hierarchy view preferences (v4.15). |
daysSinceLastActive - Int
|
Days since last recorded activity. Null for users who have never been active. |
demo - Boolean!
|
Whether this user is a demo-tagged record (Phase 30). |
details - UserDetail
|
Extended profile metadata stored as JSON (e.g. showcased achievements). |
email - String!
|
Primary email address for the account. |
emailVerified - Boolean!
|
Whether the user has confirmed their email address. |
featureTourStatus - JSON!
|
Feature-tour completion/dismissal state, keyed by tour id (e.g. "dashboard-first-run"). Empty hash if no tour has started. |
feedItems - [UserFeedItem!]
|
Personal activity feed items for the user's home timeline, newest first. |
Arguments
|
|
firstName - String
|
User's given name. |
goItAlone - Boolean!
|
Whether the user has opted out of ally/community/coach-social prompts. Defaults to false. |
goalMotivationProfile - GoalMotivationProfile
|
Goal Motivation Snapshot answers. Null until first answer is saved. |
goals - [Goal!]!
|
All goals owned by this user. |
graceDays - [String!]!
|
ISO date strings (within last 30 days) where soft-grace forgave a single-day streak gap. Forgiven days are skipped — not counted toward the streak number. |
hasAlly - Boolean!
|
True if the user has at least one accepted ally (either direction). |
hasCreatedFromTemplate - Boolean!
|
True if the user has at least one goal created from a template. |
hasDigestEnabled - Boolean!
|
Whether the user has weekly digest emails enabled (nil defaults to true). |
isSupporter - Boolean!
|
Whether the user has an active Supporter subscription. |
lastDigestSentAt - String
|
ISO 8601 timestamp of the last digest sent, or null if never sent. |
lastName - String
|
User's family name. |
latestEnneagramAssessment - EnneagramAssessment
|
Most recent completed Enneagram assessment for this user, or null if none. |
level - Int!
|
Current gamification level derived from XP. |
longestStreak - Int!
|
All-time longest streak of consecutive active days. |
moodGoalInsight - InsightPack
|
Reflective correlation between mood logs and goal check-ins. Null unless a correlation exists AND mood_goal_insights_enabled is on for this user (fail-closed). |
nextLevelThreshold - Int!
|
XP required to reach the next level. |
nextOnTheShelfBadge - NextBadge
|
The locked badge closest to being unlocked, or null if all badges are earned. |
notifications - [UserNotification!]
|
In-app notifications for this user, newest first. |
Arguments
|
|
onboardingStatus - OnboardingStatus
|
v1.8 onboarding completion + resume state. Null until completed or backfilled. |
paceSuggestion - PaceSuggestion
|
Timeline-adjustment suggestion when a goal is consistently ahead of or behind pace. Null unless a suggestion exists AND goal_auto_adjust_enabled is on (fail-closed). |
photo - UserPhoto
|
Profile photo for the user. |
privateMode - Boolean!
|
Whether the user is hidden from username search. Defaults to false. |
progressToNextLevel - Float!
|
Fraction (0.0–1.0) representing progress toward the next level. |
publicId - ID!
|
URL-safe public identifier. Use this for all lookups — internal integer IDs are never exposed. |
recentlyUnlockedBadges - [RecentlyUnlockedBadge!]!
|
Badges unlocked within the specified window, newest first. |
requiredCheckinsCompleteToday - Boolean!
|
True when the user has logged every habit check-in expected today (or has no habits expected today). |
showcasedAchievements - [String!]
|
Achievement identifiers the user has chosen to display on their profile. |
signInDates - [String!]
|
List of ISO date strings on which the user has signed in. |
signupAgeDays - Int!
|
Whole days since the user account was created (signup age). |
stats - UserStats
|
Aggregated goal and achievement statistics for the user. |
streak - Int!
|
Current number of consecutive days the user has logged activity. |
streakRepairOffer - StreakRepairOffer
|
Streak Repair eligibility and offer payload for the active-user repair window. |
supporterTier - String
|
Active supporter tier: monthly, yearly, lifetime, or null. |
supporterUntil - ISO8601DateTime
|
When the current supporter period ends (null for lifetime). |
timeToFirstGoalSeconds - Int
|
Seconds from account creation to first (non-deleted) goal. Admin-only — returns null for non-admin viewers. |
todaysMood - String
|
Most recent mood log from today, or null if not logged. |
unlockedAchievementKeys - [String!]!
|
Distinct set of gamification action keys this user has ever unlocked, independent of the actions field limit. Use this for badge-unlock checks instead of scanning actions. |
updatedAtTime - String
|
Unix timestamp (string) when the account was last updated. |
username - String
|
Unique handle chosen by the user (e.g. "jane.doe"). |
welcomeBackOffer - WelcomeBackOffer
|
Streak Mercy eligibility and offer payload. Null until user is synced. |
xp - Int!
|
Total experience points earned through goals, events, and engagement. |
Example
{
"achievementStats": AchievementStats,
"actions": [UserAction],
"admin": false,
"adminRoles": ["abc123"],
"allyStatus": "ACCEPTED",
"coachingPreferences": CoachingPreferences,
"colorTheme": "xyz789",
"completedCommunityChallenges": [ChallengeParticipant],
"completedSeasonalEvents": [SeasonalEventParticipant],
"createdAtTime": "xyz789",
"currentInsights": [InsightPack],
"dashboardPreferences": DashboardPreferences,
"daysSinceLastActive": 987,
"demo": false,
"details": UserDetail,
"email": "xyz789",
"emailVerified": true,
"featureTourStatus": {},
"feedItems": [UserFeedItem],
"firstName": "xyz789",
"goItAlone": true,
"goalMotivationProfile": GoalMotivationProfile,
"goals": [Goal],
"graceDays": ["xyz789"],
"hasAlly": false,
"hasCreatedFromTemplate": true,
"hasDigestEnabled": true,
"isSupporter": false,
"lastDigestSentAt": "abc123",
"lastName": "abc123",
"latestEnneagramAssessment": EnneagramAssessment,
"level": 123,
"longestStreak": 123,
"moodGoalInsight": InsightPack,
"nextLevelThreshold": 987,
"nextOnTheShelfBadge": NextBadge,
"notifications": [UserNotification],
"onboardingStatus": OnboardingStatus,
"paceSuggestion": PaceSuggestion,
"photo": UserPhoto,
"privateMode": false,
"progressToNextLevel": 987.65,
"publicId": 4,
"recentlyUnlockedBadges": [RecentlyUnlockedBadge],
"requiredCheckinsCompleteToday": false,
"showcasedAchievements": ["xyz789"],
"signInDates": ["xyz789"],
"signupAgeDays": 123,
"stats": UserStats,
"streak": 987,
"streakRepairOffer": StreakRepairOffer,
"supporterTier": "abc123",
"supporterUntil": ISO8601DateTime,
"timeToFirstGoalSeconds": 987,
"todaysMood": "abc123",
"unlockedAchievementKeys": ["abc123"],
"updatedAtTime": "abc123",
"username": "xyz789",
"welcomeBackOffer": WelcomeBackOffer,
"xp": 123
}
UserSearchResultConnection
Description
The connection type for UserSearchResult.
Fields
| Field Name | Description |
|---|---|
edges - [UserSearchResultEdge]
|
A list of edges. |
nodes - [UserSearchResult]
|
A list of nodes. |
pageInfo - PageInfo!
|
Information to aid in pagination. |
Example
{
"edges": [UserSearchResultEdge],
"nodes": [UserSearchResult],
"pageInfo": PageInfo
}
UserSearchResultEdge
Description
An edge in a connection.
Fields
| Field Name | Description |
|---|---|
cursor - String!
|
A cursor for use in pagination. |
node - UserSearchResult
|
The item at the end of the edge. |
Example
{
"cursor": "abc123",
"node": UserSearchResult
}
UserStats
Description
Aggregated goal and achievement statistics for a user.
Fields
| Field Name | Description |
|---|---|
categoriesUsed - [String!]!
|
List of goal category names the user has set goals in. |
completedGoals - Int!
|
Number of goals the user has marked as completed. |
encouragementsGiven - Int!
|
Number of encouragements the user has sent to other users. |
goalsCreatedCount - Int!
|
Count of goals created (may differ from total_goals based on scope). |
milestonesCompleted - Int!
|
Number of milestones the user has completed. |
milestonesCreated - Int!
|
Number of milestone sub-goals the user has created. |
totalGoals - Int!
|
Total number of goals created by the user (including completed and deleted). |
typesUsed - [String!]!
|
List of goal type names the user has used. |
Example
{
"categoriesUsed": ["abc123"],
"completedGoals": 123,
"encouragementsGiven": 123,
"goalsCreatedCount": 123,
"milestonesCompleted": 987,
"milestonesCreated": 987,
"totalGoals": 123,
"typesUsed": ["xyz789"]
}
VerifyMagicCodePayload
Description
Autogenerated return type of VerifyMagicCode.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
token - String
|
|
user - User
|
Example
{
"errors": ["abc123"],
"token": "abc123",
"user": User
}
WeeklyDigestPreferences
Description
Weekly digest email preferences for the authenticated user.
Example
{"deliveryDay": "abc123", "enabled": false}
WelcomeBackOffer
Description
Streak Mercy offer shown to users returning after 5+ days away.
Fields
| Field Name | Description |
|---|---|
coachCopy - String
|
AI Coach message for the interstitial. Null when ineligible. |
daysSinceLastActive - Int
|
Days since the user last recorded activity. |
eligible - Boolean!
|
Whether the user qualifies for a Streak Mercy offer right now. |
targetGoalName - String
|
Name of the target habit goal. Null when ineligible. |
targetGoalPublicId - ID
|
public_id of the habit goal eligible for Streak Mercy. Null when ineligible. |
targetHabitStreak - Int
|
Pre-break habit streak snapshot (captured before zeroing). Headline number in the Welcome Back interstitial. Null when ineligible. |
Example
{
"coachCopy": "xyz789",
"daysSinceLastActive": 123,
"eligible": false,
"targetGoalName": "abc123",
"targetGoalPublicId": 4,
"targetHabitStreak": 987
}