Objectuve API Reference

Internal API documentation — access restricted

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 not Authorization or Bearer.

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.


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.

Response

Returns an AiRun

Arguments
Name Description
id - String!

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!]

Arguments
Name Description
limit - Int Maximum number of events to return. Defaults to 20, capped at 50.
offset - Int Number of items to skip for pagination. Defaults to 0.
userId - ID! public_id of the user whose ally feed to retrieve.

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

Arguments
Name Description
concern - String! Permission name to check (e.g. "admin").
id - ID! public_id of the user to check authorization for.

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!]

Arguments
Name Description
goalCategoryIds - [ID!] Array of goal category IDs to filter communities by.
userId - ID public_id of a user to return only communities they are a member of.

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!]

Arguments
Name Description
challengeId - ID! public_id of the challenge.
completedOnly - Boolean When true, returns only participants who have completed the challenge.
limit - Int Number of participants to return. Defaults to 50.
offset - Int Number of participants to skip. Defaults to 0.

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!]

Arguments
Name Description
communityId - ID! public_id of the community.
status - String Filter by status: "active", "upcoming", or "completed". Omit for all.

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!]

Arguments
Name Description
communityId - ID! public_id of the community whose feed to retrieve.
limit - Int Number of posts to return per page. Defaults to 20.
offset - Int Number of posts to skip for pagination. Defaults to 0.

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!]

Arguments
Name Description
communityId - ID! public_id of the community.
limit - Int Number of goals to return. Defaults to 20.
offset - Int Number of goals to skip. Defaults to 0.

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

Arguments
Name Description
cid - ID! public_id of the community to check membership for.
id - ID public_id of the user to check. Defaults to the authenticated user.

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!]

Arguments
Name Description
communityId - ID! public_id of the community.
limit - Int Number of members to return. Defaults to 50.
offset - Int Number of members to skip. Defaults to 0.

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.

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

Arguments
Name Description
email - String Email address to search for. Mutually exclusive with username.
username - String Username to search for. Mutually exclusive with email.

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

Arguments
Name Description
periodSeconds - Int Window in seconds (default 30 days = 2,592,000).
variantId - String Filter to a specific onboarding variant cohort (e.g. control, variant_a).

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.

Response

Returns a Goal

Arguments
Name Description
id - ID! public_id of the goal to retrieve.

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

Arguments
Name Description
id - ID! public_id of the goal to get progress data for.
lookbackDays - Int Number of days to look back. Defaults to 90.
period - String Grouping period: day, week, or month. Defaults to week.

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.

Response

Returns a Result

Arguments
Name Description
id - ID! public_id of the goal to check.

Example

Query
query isFollowingGoal($id: ID!) {
  isFollowingGoal(id: $id) {
    success
  }
}
Variables
{"id": "4"}
Response
{"data": {"isFollowingGoal": {"success": false}}}

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

Arguments
Name Description
limit - Int Number of notifications per page. Defaults to 20.
offset - Int Number of items to skip for pagination. Defaults to 0.
teamId - ID When present, scopes results to notifications for this team. A non-member gets an empty result.

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!]

Arguments
Name Description
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 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.

Response

Returns a Goal

Arguments
Name Description
id - ID! public_id of the goal to retrieve.

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!]

Arguments
Name Description
limit - Int Maximum number of recommendations to return. Defaults to 5.
userId - ID! public_id of the user to generate recommendations for.

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"
      }
    ]
  }
}

shareableMoment

Description

Server-authored share-card facts for a celebration the caller owns and has earned. Auth required. Returns null for a not-found, unowned, or not-yet-earned subject.

Response

Returns a ShareableMoment

Arguments
Name Description
kind - String! One of: badge, goal_completion, milestone, streak.
subjectPublicId - ID! public_id of the subject (badge key for kind: badge; the caller's own public_id for kind: streak).

Example

Query
query shareableMoment(
  $kind: String!,
  $subjectPublicId: ID!
) {
  shareableMoment(
    kind: $kind,
    subjectPublicId: $subjectPublicId
  ) {
    badgeIconUrl
    badgeName
    earnedOn
    goalTitle
    kind
    milestoneIndex
    milestoneTitle
    milestoneTotal
    shareCode
    streakDays
    username
  }
}
Variables
{"kind": "abc123", "subjectPublicId": 4}
Response
{
  "data": {
    "shareableMoment": {
      "badgeIconUrl": "xyz789",
      "badgeName": "xyz789",
      "earnedOn": ISO8601DateTime,
      "goalTitle": "xyz789",
      "kind": "xyz789",
      "milestoneIndex": 123,
      "milestoneTitle": "abc123",
      "milestoneTotal": 987,
      "shareCode": "xyz789",
      "streakDays": 123,
      "username": "xyz789"
    }
  }
}

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).

Response

Returns a TeamHome

Arguments
Name Description
teamId - String!

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

Arguments
Name Description
communityId - String Scopes to a sub-community leaderboard. Omit for the team-wide leaderboard.
period - String! weekly, monthly, or all_time.
teamId - String!

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

Arguments
Name Description
memberId - String! The target member's User public_id.
teamId - String!

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).

Response

Returns a Boolean

Arguments
Name Description
teamId - String!

Example

Query
query teamPulseEligibility($teamId: String!) {
  teamPulseEligibility(teamId: $teamId)
}
Variables
{"teamId": "xyz789"}
Response
{"data": {"teamPulseEligibility": true}}

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

Arguments
Name Description
limit - Int Number of feed items per page. Defaults to 20.
offset - Int Number of items to skip for pagination. Defaults to 0.

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.

Response

Returns a User

Arguments
Name Description
id - ID! public_id of the user to retrieve.

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!]

Arguments
Name Description
column - String! Column name to analyze for word frequency (e.g. "name").
model - String! ActiveRecord model name to query (e.g. "Goal").

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.

Arguments
Name Description
confidenceScore - Float Score from the auto-mapping engine, if any.
goalId - ID! public_id of the habit to map the activity type to.
integrationConnectionId - ID! public_id of the connection being mapped.
providerActivityType - String! e.g. "Strava.run", "Chess.com.game".

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).

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.

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!

Arguments
Name Description
content - String! A description of the suggested community topic or interest area.
goalCategoryId - ID Optional public ID of a goal category to associate with the suggestion.
goalTypeId - ID Optional public ID of a goal type that best represents the suggested community.

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!

Arguments
Name Description
content - String The text body of the comment.
goalEventId - ID! public_id of the goal event to comment on.

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!

Arguments
Name Description
communityId - ID! public_id of the community to share the goal into.
goalId - ID! public_id of the goal to share into the community.

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!

Arguments
Name Description
content - String! Text content of the comment.
postId - ID! ID of the community post to comment on.

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!

Arguments
Name Description
seatCount - Int!
teamId - String!

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!

Arguments
Name Description
artifactId - String!
editedPayload - String

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!

Arguments
Name Description
communityId - String!
teamId - String!

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!

Arguments
Name Description
goalsFile - Upload goals.csv upload.
habitCompletionsFile - Upload habit_completions.csv upload.

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.

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!

Arguments
Name Description
id - ID! public_id of the staged DataImport to commit.
skipGoalExternalIds - [String!] external_ids of collision-flagged goal rows to skip. Default = []

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.

Arguments
Name Description
goalCategoryId - ID
goalName - String!
onboardingAnswers - JSON

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!

Arguments
Name Description
communityId - String
description - String
name - String!
targetMetric - String!
targetValue - Int!
teamId - String!

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.

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!

Arguments
Name Description
communityId - ID! The public ID of the community in which to create the post.
content - String! The text body of the post.
type - String! The post type. Accepted values: update (text post) or goal_share (sharing a goal with the community).

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!

Arguments
Name Description
body - String! Comment text (max 1000 chars).
isOfficial - Boolean Mark as official team response (admin only).
postId - ID! Public ID of the feedback post.

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!

Arguments
Name Description
category - String! Category: feature, improvement, bug, or other.
description - String Detailed description (max 2000 chars).
tagIds - [ID!] Public IDs of feedback tags to attach (max 3).
title - String! Title of the feedback post (max 200 chars).

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!

Arguments
Name Description
description - String Optional description of the tag.
name - String! Display name of the tag.

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!

Arguments
Name Description
description - String
icon - String
joinPolicy - String
leadMembershipId - String
makeDefault - Boolean
name - String!
teamId - String!

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!

Arguments
Name Description
email - String
preselectedCommunityIds - [String!]
teamId - String!
teamRole - String

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!

Arguments
Name Description
entityId - ID!
entityType - String!

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.

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.

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.

Arguments
Name Description
goalId - ID! public_id of the new habit to map to.
mappingId - ID! public_id of the mapping to edit.

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!

Arguments
Name Description
communityId - ID! The public ID of the community to follow.
userId - ID! The public ID of the user following the community.

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!

Arguments
Name Description
goalContext - String Optional additional context about the goal (e.g. timeframe, current progress, constraints) to improve milestone relevance.
goalName - String! The name or title of the goal for which milestones should be generated.

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!

Arguments
Name Description
goalId - String public_id of the goal the user is currently viewing, if any.
page - String! The page/context from which the user is asking for advice.
userMessage - String! The user's question or message to the coach.

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!

Arguments
Name Description
allyPublicId - ID! public_id of the ally to invite.
communityPublicId - ID! public_id of the community to invite the ally to.

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!

Arguments
Name Description
communityId - String!
teamId - String!

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!

Arguments
Name Description
communityId - ID! The public ID of the community to leave.
userId - ID! The public ID of the user leaving the community.

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!

Arguments
Name Description
communityId - String!
teamId - String!

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!

Arguments
Name Description
collectiveGoalId - String!
personalGoalId - String!

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!

Arguments
Name Description
active - Boolean! true to resume, false to pause
employeeId - String!

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.

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!

Arguments
Name Description
role - String!
teamId - String!
teamMembershipId - String!

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!

Arguments
Name Description
cols - Int Puzzle grid column count (5–7); used for grid-size-scoped pace comparisons.
elapsedSeconds - Int! Time taken to solve the puzzle in seconds (1–86400).
rows - Int Puzzle grid row count (5–7); used for grid-size-scoped pace comparisons.

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
    }
  }
}

recordShare

Response

Returns a RecordSharePayload!

Arguments
Name Description
channel - String Share destination, e.g. "native", "link".
code - String v4.56 Phase 5 (REF-01) — the shareCode reserved by shareableMoment and already handed to the OS share sheet. Persisted verbatim when valid; omit to keep the legacy server-minted behavior.
kind - String! One of: badge, goal_completion, milestone, streak.
subjectPublicId - ID! public_id of the subject (or badge key for kind: badge).

Example

Query
mutation recordShare(
  $channel: String,
  $code: String,
  $kind: String!,
  $subjectPublicId: ID!
) {
  recordShare(
    channel: $channel,
    code: $code,
    kind: $kind,
    subjectPublicId: $subjectPublicId
  ) {
    errors
    shareEvent {
      ...ShareEventFragment
    }
  }
}
Variables
{
  "channel": "xyz789",
  "code": "abc123",
  "kind": "xyz789",
  "subjectPublicId": "4"
}
Response
{
  "data": {
    "recordShare": {
      "errors": ["xyz789"],
      "shareEvent": ShareEvent
    }
  }
}

recordUserAction

Description

Records an onboarding-funnel UserAction event from the client (METRIC-01). Allow-listed onboarding action names only.

Response

Returns a RecordUserActionPayload!

Arguments
Name Description
action - String! One of the wizard_* onboarding action names. Other UserAction enum values are rejected.
metadata - JSON Optional payload (e.g. { slideId, variantId }). Unknown top-level keys are dropped.

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!

Arguments
Name Description
currentDescription - String Optional existing description to improve upon.
goalName - String! The name or title of the goal.

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!

Arguments
Name Description
categoryName - String
description - String
kindName - String
milestones - [String!] Default = []
name - String! The goal title as currently typed.
targetDate - String ISO8601 target date, if set.

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!

Arguments
Name Description
artifactId - String!
rejectionReason - String!

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!

Arguments
Name Description
teamId - String!
teamMembershipId - String!

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!

Arguments
Name Description
goalId - ID! public_id of the parent goal.
orderedMilestoneIds - [ID!]! Milestone public_ids in the desired order.

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!

Arguments
Name Description
details - String
reason - String!
reportableId - ID!
reportableType - String!

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.

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.

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!

Arguments
Name Description
action - String! "approve" or "reject"
flagId - String! Public ID of the content flag

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!

Arguments
Name Description
action - String! "review" or "dismiss"
reportId - String! Public ID of the content report

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!

Arguments
Name Description
teamId - String!
teamInviteId - String!

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.

Arguments
Name Description
providerSlug - String! 'strava' or 'chess_com'.
tier - String! 'auto' (auto-check-in tier) or 'propose' (review-band tier).

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.

Arguments
Name Description
communityId - ID!
position - Int
slot - String

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!

Arguments
Name Description
communityId - ID!
featured - Boolean!

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.

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.

Arguments
Name Description
enabled - Boolean! Whether to enable daily Critical Path reminders.
timeOfDay - String Preferred local send time in HH:MM format (e.g. '08:00').
timezone - String IANA timezone string. Only applied when enabling reminders and user is on UTC default.

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!

Arguments
Name Description
communityId - String!
teamId - String!

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!

Arguments
Name Description
goalId - ID! public_id of the goal to update.
sharedWithPartner - Boolean! When true, a confirmed accountability partner can see this goal.

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.

Arguments
Name Description
optedOut - Boolean!
teamId - String!

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!

Arguments
Name Description
eventId - ID!
isActive - Boolean!

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.

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.

Arguments
Name Description
deliveryDay - String Day to deliver the digest: 'sun', 'sat', or 'mon'.
enabled - Boolean! Whether to enable the weekly digest email.

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!

Arguments
Name Description
returnUrl - String! URL to redirect back to after the user leaves the portal.
teamId - String!

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!

Arguments
Name Description
cancelUrl - String!
planSlug - String! teams_monthly or teams_annual.
seatCount - Int Number of seats (1-200, default 5).
successUrl - String!
teamId - String Existing team public_id when re-subscribing.
teamName - String Required for a brand-new team.

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!

Arguments
Name Description
deviceToken - ID! The push notification token issued by APNs (iOS) or FCM (Android).
platform - String The device platform. Accepted values: ios or android.

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!

Arguments
Name Description
completed - Boolean Mark the tour completed (sets completed_at).
dismissed - Boolean Mark the tour dismissed/skipped.
tourId - String! Tour identifier, e.g. "dashboard-first-run".

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!

Arguments
Name Description
appFeedback - String Free-text feedback submitted by the user from within the app.
appVersion - String The current version string of the client app (e.g. "1.4.2").

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.

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!

Arguments
Name Description
comment - String
score - Int!
teamId - String!

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.

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!

Arguments
Name Description
emoji - String! Unicode emoji character for the reaction.
goalEventId - ID! public_id of the goal event to react to.

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.

Arguments
Name Description
newOwnerId - String! The new owner's user public_id.
teamId - String!

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!

Arguments
Name Description
communityId - String!
teamId - String!

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!

Arguments
Name Description
communityId - ID! The public ID of the community to unfollow.
userId - ID! The public ID of the user unfollowing the community.

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!

Arguments
Name Description
feedbackStyle - String! The style of feedback the user prefers from Coach.
missedDayResponse - String! How the user wants Coach to respond when they miss a day.
timeOfDay - String! When the user typically works on goals (e.g. "morning", "after work").

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).

Arguments
Name Description
density - String Dashboard density: standard or detailed.
migratedFromFull - Boolean Set when this call performs the one-time legacy full→Detailed backfill.
mode - String Dashboard mode: focus, standard, detailed, or auto.

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!

Arguments
Name Description
postId - ID! Public ID of the feedback post.
status - String! New status: open, planned, in_progress, completed, or declined.

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!

Arguments
Name Description
postId - ID! Public ID of the feedback post.
tagIds - [ID!]! Public IDs of the tags to set on the post (up to 3).

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!

Arguments
Name Description
description - String New description.
name - String New display name.
tagId - ID! Public ID of the feedback tag.

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.

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!

Arguments
Name Description
goItAlone - Boolean Opt out of ally/community/coach-social prompts.
privateMode - Boolean Hide the user from username search.

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.

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!

Arguments
Name Description
communityId - String!
description - String
icon - String
joinPolicy - String
leadMembershipId - String
name - String
teamId - String!

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!

Arguments
Name Description
deleteUser - Boolean When true, soft-deletes the user account.
email - String A new email address for the user account.
firstName - String The user first name.
lastName - String The user last name.
username - String A new unique username for the user.

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!

Arguments
Name Description
file - Upload Image file upload. Takes precedence over image_url when provided.
imageUrl - String Publicly accessible URL of the new profile photo image.

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!

Arguments
Name Description
goalId - ID! public_id of the habit goal.
missedDate - String! ISO date string to freeze — today through 14 days out; earlier dates are rejected.

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!

Arguments
Name Description
code - String!
email - String!

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

Description

Recent platform activity item

Fields
Field Name Description
action - String!
id - ID!
timestamp - String!
type - String!
userName - String!
Example
{
  "action": "xyz789",
  "id": "4",
  "timestamp": "xyz789",
  "type": "xyz789",
  "userName": "xyz789"
}

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!]!
Arguments
limit - Int
offset - Int
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

ACHIEVEMENT

Ally completed a milestone on a goal.

FOLLOW

Ally added a new ally.

GOAL

Ally checked in on a goal or habit.

JOIN

Ally joined a community.

POST

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

ACCEPTED

An active ally relationship exists in either direction.

BLOCKED

Current user has blocked this user.

NONE

No ally relationship exists.

PENDING_INCOMING

This user sent a pending ally request to the current user.

PENDING_OUTGOING

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.

Fields
Field Name Description
category - String! Goal category name ("Other" for folded overflow).
pct - Float! Percent of that category's goals done this period (0–100).
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

Description

Personal Analytics: one day of the activity heatmap.

Fields
Field Name Description
count - Int! Number of activity actions on this date.
date - String! ISO8601 date.
Example
{"count": 123, "date": "abc123"}

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

Description

Personal Analytics: streak length as of one week-start.

Fields
Field Name Description
date - String! ISO8601 date (week start).
length - Int! Streak length as of this date.
Example
{"date": "abc123", "length": 123}

AnalyticsXpOverTime

Description

Personal Analytics: trailing 26-week cumulative XP.

Fields
Field Name Description
points - [AnalyticsXpPoint!]!
Example
{"points": [AnalyticsXpPoint]}

AnalyticsXpPoint

Description

Personal Analytics: cumulative XP as of one week-start.

Fields
Field Name Description
date - String! ISO8601 date (week start).
xp - Int! Cumulative XP as of this date.
Example
{"date": "abc123", "xp": 987}

AnswerInput

Description

A single forced-choice answer in an Enneagram assessment.

Fields
Input Field Description
choice - String! Selected option: "a" (first statement) or "b" (second statement).
pairIndex - Int! Zero-based index of the question pair (0..39).
Example
{"choice": "xyz789", "pairIndex": 123}

ApprovalRateData

Fields
Field Name Description
approvedCount - Int!
autoRejectedCount - Int!
rejectedCount - Int!
weekStart - String!
Example
{
  "approvedCount": 123,
  "autoRejectedCount": 123,
  "rejectedCount": 123,
  "weekStart": "abc123"
}

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

Description

Unlock statistics for a single badge

Fields
Field Name Description
badgeKey - String! The badge key (action name)
percentage - Float! Percentage of users who have unlocked this badge (0-100)
Example
{"badgeKey": "abc123", "percentage": 987.65}

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

Fields
Field Name Description
adminActions - Int!
aiEmployeeMemories - Int!
communityComments - Int!
communityMemberships - Int!
communityPosts - Int!
goalEventEncouragements - Int!
goalEvents - Int!
goals - Int!
milestones - Int!
moodLogs - Int!
user - Int!
userActions - Int!
userDevices - Int!
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

Description

Statistics for goal categories

Fields
Field Name Description
count - Int!
name - String!
Example
{"count": 123, "name": "abc123"}

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

Description

A contributor slice on a collective goal (N16).

Fields
Field Name Description
anonymous - Boolean
color - String
count - Int!
id - ID!
name - String!
Example
{
  "anonymous": true,
  "color": "xyz789",
  "count": 123,
  "id": "4",
  "name": "xyz789"
}

CollectiveGoalYourContribution

Description

The viewer's own contribution to a collective goal (N16).

Fields
Field Name Description
count - Int!
sourceGoal - String!
Example
{"count": 123, "sourceGoal": "xyz789"}

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.

Fields
Field Name Description
id - ID! Public identifier for this media record.
imageUrl - String URL of the image.
name - String Optional descriptive name or caption for the image.
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

Fields
Field Name Description
contentPreview - String
createdAt - String!
details - String
id - String! Public ID
reason - String!
reportableType - String!
reporterName - String
status - String!
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.

Fields
Field Name Description
key - String! Theme identifier key (e.g. 'forest').
name - String! Display name shown to the user.
unlockThreshold - Int! Minimum stim_streak_longest required to unlock this theme.
Example
{
  "key": "xyz789",
  "name": "xyz789",
  "unlockThreshold": 987
}

DailyUsagePoint

Description

Single day of AI usage data for the daily spend line chart.

Fields
Field Name Description
callCount - Int! Number of AI calls made on this UTC day.
costCents - Int! Total AI spend in cents for this UTC day.
date - String! ISO date (YYYY-MM-DD) in UTC.
tokenCount - Int! Total tokens consumed on this UTC day.
Example
{
  "callCount": 987,
  "costCents": 987,
  "date": "abc123",
  "tokenCount": 123
}

DashboardPreferences

Description

Dashboard hierarchy view preferences for the user (v4.15).

Fields
Field Name Description
density - String! Dashboard density: standard or detailed.
mode - String! Dashboard mode: focus, standard, detailed, or auto.
Example
{
  "density": "xyz789",
  "mode": "abc123"
}

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

Fields
Field Name Description
externalId - String
name - String!
Example
{
  "externalId": "abc123",
  "name": "xyz789"
}

DataImportRowIssue

Fields
Field Name Description
file - String!
line - Int!
reason - String!
Example
{
  "file": "abc123",
  "line": 987,
  "reason": "xyz789"
}

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

Description

Permitted fields for inline edit of a demo community.

Fields
Input Field Description
description - String
name - String
private - Boolean
Example
{
  "description": "xyz789",
  "name": "abc123",
  "private": false
}

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.

Fields
Input Field Description
completed - Boolean
content - String
currentAmount - Float
name - String
targetAmount - Float
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.

Fields
Field Name Description
aiArtifacts - Int!
aiEmployees - Int!
aiRuns - Int!
communities - Int!
feedItems - Int!
feedbackComments - Int!
feedbackPosts - Int!
feedbackVotes - Int!
goalEvents - Int!
goals - Int!
totalRecords - Int!
userAllies - Int!
users - Int!
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

Description

Permitted fields for inline edit of a demo user.

Fields
Input Field Description
email - String
firstName - String
lastName - String
Example
{
  "email": "abc123",
  "firstName": "xyz789",
  "lastName": "abc123"
}

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.

Fields
Field Name Description
avatarUrl - String URL for the member's profile photo, or null if none.
displayName - String! The member's display name.
publicId - ID! The member's public identifier.
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.

Fields
Field Name Description
path - String! Source path within docs/ (e.g. "architecture/authentication.md").
title - String The page title, for display in a source chip.
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

ANSWERED

The assistant answered the question — see answer and citations.

DISABLED

The docs assistant kill switch is off. answer is null; no LLM call was made.

REFUSED

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

Description

Autogenerated return type of EnsureTodaysCoachMessage.

Fields
Field Name Description
generated - Boolean!
insight - String!
Example
{"generated": false, "insight": "abc123"}

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

Fields
Field Name Description
count - Int!
name - String!
Example
{"count": 987, "name": "abc123"}

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).

Fields
Field Name Description
categoryBreakdown - [FeedbackCategoryBreakdown!]!
completedPosts - Int!
declinedPosts - Int!
inProgressPosts - Int!
openPosts - Int!
plannedPosts - Int!
postsThisWeek - Int!
topPosts - [FeedbackPost!]!
totalComments - Int!
totalPosts - Int!
totalVotes - Int!
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

Fields
Field Name Description
postCount - Int!
summary - String
title - String
voteTotal - Int!
Example
{
  "postCount": 987,
  "summary": "abc123",
  "title": "xyz789",
  "voteTotal": 123
}

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.

Fields
Field Name Description
aiRequest - AiRequest Present when async_ai_delivery_enabled routes this request through Ai::DispatchAiRequestJob instead of resolving the draft inline (v4.60 Phase 4). Subscribe to aiRequestUpdate(requestId: id) or poll aiRequest(id:) for the result.
draft - GoalDraft
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

Description

A predefined category for organizing goals (e.g. fitness, learning, personal growth).

Fields
Field Name Description
id - ID! Public identifier for this category.
name - String! Display name of the category.
Example
{"id": 4, "name": "abc123"}

GoalCollectiveContribution

Description

The collective goal this personal goal is actively contributing to, if any (GOALS-17).

Fields
Field Name Description
collectiveGoalTitle - String!
teamName - String!
Example
{
  "collectiveGoalTitle": "xyz789",
  "teamName": "xyz789"
}

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.

Fields
Field Name Description
createdAtTime - String Unix timestamp (string) when this reaction was created.
emoji - String! Unicode emoji character for this reaction.
id - ID! Public identifier for this reaction.
user - User The user who reacted.
Example
{
  "createdAtTime": "xyz789",
  "emoji": "xyz789",
  "id": 4,
  "user": User
}

GoalMedia

Description

A media attachment (image) associated with a goal progress event.

Fields
Field Name Description
id - ID! Public identifier for this media record.
imageUrl - String URL of the attached image.
name - String Optional descriptive name or caption for the image.
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.

Fields
Field Name Description
field - String! One of: title, description, target_date, milestone.
issue - String!
suggestedValue - String!
suggestion - String!
Example
{
  "field": "abc123",
  "issue": "abc123",
  "suggestedValue": "xyz789",
  "suggestion": "xyz789"
}

GoalStatusEnum

Description

Computed readiness status for a goal.

Values
Enum Value Description

completed

Goal has been marked as completed.

needs_attention

Goal is overdue or falling behind on updates.

on_track

Goal is progressing normally.

paused

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.

Fields
Field Name Description
daysOffsetFromStart - Int! Number of days after the goal start date when this milestone is expected.
name - String! Display name of this milestone step.
order - Int! Zero-based position within the milestone sequence.
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

ALLIES

Visible to the owner and their accepted allies.

PRIVATE

Visible only to the owner.

PUBLIC

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

Description

Daily growth metrics for users and goals

Fields
Field Name Description
date - String!
goals - Int!
users - Int!
Example
{
  "date": "xyz789",
  "goals": 987,
  "users": 987
}

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.

Fields
Field Name Description
path - String! Resolvable help.objectuve.com URL for this source.
slug - String! Guide page slug (e.g. "goals").
title - String! The page title, for display in a source chip.
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

ANSWERED

The assistant answered the question — see answer and citations.

DISABLED

The docs assistant kill switch is off. answer is null; no LLM call was made.

REFUSED

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.

Fields
Input Field Description
daysOffsetFromStart - Int! Number of days after goal start when this milestone is expected.
name - String! Display name of this milestone step.
order - Int! Zero-based position within the milestone sequence.
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.

Fields
Field Name Description
key - String! Badge key matching the UserAction enum action name.
progressLabel - String! Human-readable progress label (e.g. "3/5 goals completed").
progressPercentage - Float! Completion percentage toward unlocking this badge (0–100).
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

complete

User reached the final slide and finished the wizard.

skip

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

Fields
Input Field Description
answers - JSON Per-slide answers collected so far.
currentSlide - String! Slide id the user is currently on.
Example
{"answers": {}, "currentSlide": "xyz789"}

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.

Fields
Field Name Description
count - Int! Number of events logged in this period.
date - String! ISO date string for the start of this period.
label - String! Display label for this period (e.g. "Mar 15" or "Mar 15 - Mar 21").
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

Fields
Field Name Description
approvalRatePct - Int!
blockReason - String
canPromoteTo - String
promotionConfirmedAt - ISO8601DateTime
recentRejections - Int!
weeksActive - Int!
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
}

RecordSharePayload

Description

Autogenerated return type of RecordShare.

Fields
Field Name Description
errors - [String!]!
shareEvent - ShareEvent
Example
{
  "errors": ["xyz789"],
  "shareEvent": ShareEvent
}

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

Description

Autogenerated return type of SetCommunityEditorialSlot.

Fields
Field Name Description
community - Community
errors - [String!]
Example
{
  "community": Community,
  "errors": ["abc123"]
}

SetCommunityFeaturedPayload

Description

Autogenerated return type of SetCommunityFeatured.

Fields
Field Name Description
community - Community
errors - [String!]
Example
{
  "community": Community,
  "errors": ["abc123"]
}

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
}

ShareEvent

Fields
Field Name Description
channel - String
code - String!
id - ID!
kind - String!
sharedAt - ISO8601DateTime!
subjectPublicId - String!
Example
{
  "channel": "abc123",
  "code": "xyz789",
  "id": 4,
  "kind": "xyz789",
  "sharedAt": ISO8601DateTime,
  "subjectPublicId": "xyz789"
}

ShareableMoment

Fields
Field Name Description
badgeIconUrl - String
badgeName - String
earnedOn - ISO8601DateTime The date the moment happened — earned date for a badge, completion date for a goal, today for a streak. Null for milestone.
goalTitle - String
kind - String! One of: badge, goal_completion, milestone, streak.
milestoneIndex - Int
milestoneTitle - String
milestoneTotal - Int
shareCode - String! v4.56 Phase 5 (REF-01) — a code reserved for this preview, minted fresh per query. Unpersisted until recordShare is called with it; an abandoned preview simply never persists its code, so no ShareEvent row exists for it (SHARE-09).
streakDays - Int
username - String The caller's own username, for building the shareable /u/:username link (REF-09). Null when the caller has no username — the client falls back to the app root.
Example
{
  "badgeIconUrl": "xyz789",
  "badgeName": "xyz789",
  "earnedOn": ISO8601DateTime,
  "goalTitle": "abc123",
  "kind": "xyz789",
  "milestoneIndex": 123,
  "milestoneTitle": "abc123",
  "milestoneTotal": 987,
  "shareCode": "abc123",
  "streakDays": 123,
  "username": "abc123"
}

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.

Fields
Input Field Description
name - String! Step label (server truncates to 50 chars).
position - Int! Zero-based ordinal within the parent goal roadmap.
publicId - ID Existing milestone public_id. Absent to create a new step.
targetDate - String Optional ISO target date (e.g. "2026-12-31").
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

Fields
Field Name Description
activeSupportersLifetime - Int!
activeSupportersMonthly - Int!
activeSupportersTotal - Int!
activeSupportersYearly - Int!
currency - String!
mrrCents - Int! Monthly Recurring Revenue in cents (monthly + yearly/12)
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.

Fields
Field Name Description
agentRunnerReachable - Boolean!
currentAdminPublicId - String!
currentAdminRoleList - [String!]!
databaseReachable - Boolean!
deployRevision - String
deployTimestamp - String
litellmReachable - Boolean!
redisReachable - Boolean!
sidekiqReachable - Boolean!
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).

Fields
Field Name Description
actorName - String!
actorPhotoUrl - String
id - ID!
kind - String!
message - String
occurredAt - ISO8601DateTime!
points - Int
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.

Fields
Field Name Description
memberCount - Int! Total memberships on this team.
optedOutCount - Int! Raw count of members opted out of the leaderboard.
teamName - String! The team name.
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).

Fields
Field Name Description
checkins - Int Check-ins counted toward the team in this bucket. Null when the member has opted out.
period - String! weekly, monthly, or all_time.
points - Int Team points earned in this bucket. Null when the member has opted out.
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

Description

One row of the viewer's myTeams list (OBJ-1821) — the team switcher never fetches a membership's user.

Fields
Field Name Description
role - String! owner, admin, member, or external_coach.
team - Team! The team this membership belongs to.
Example
{
  "role": "xyz789",
  "team": Team
}

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

Description

Autogenerated return type of UpdateShowcasedAchievements.

Fields
Field Name Description
errors - [String!]
success - Boolean!
Example
{"errors": ["abc123"], "success": false}

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

Description

Autogenerated return type of UpdateUserRoles.

Fields
Field Name Description
errors - [String!]
user - User
Example
{
  "errors": ["xyz789"],
  "user": User
}

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
limit - Int

Maximum number of actions to return (default 50, clamped to 200).

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
limit - Int

Maximum number of feed items to return (default 50, clamped to 200).

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
limit - Int

Maximum number of notifications to return (default 50, clamped to 200).

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.
Arguments
limit - Int

Maximum number of badges to return.

sinceDays - Int

How many days back to look for recently unlocked badges.

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

Description

An edge in a connection.

Fields
Field Name Description
cursor - String! A cursor for use in pagination.
node - User The item at the end of the edge.
Example
{
  "cursor": "xyz789",
  "node": User
}

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

Description

A profile photo associated with a user.

Fields
Field Name Description
id - ID! Public identifier for this photo record.
imageUrl - String URL of the profile photo image.
Example
{
  "id": "4",
  "imageUrl": "abc123"
}

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
limit - Int

Maximum number of actions to return (default 50, clamped to 200).

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
limit - Int

Maximum number of feed items to return (default 50, clamped to 200).

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
limit - Int

Maximum number of notifications to return (default 50, clamped to 200).

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.
Arguments
limit - Int

Maximum number of badges to return.

sinceDays - Int

How many days back to look for recently unlocked badges.

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.

Fields
Field Name Description
deliveryDay - String! Day to deliver the digest: 'sun', 'sat', or 'mon'. Defaults to 'sun'.
enabled - Boolean! Whether the user has opted into the weekly digest.
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
}

WordCloud

Description

A word and its frequency count, used for admin word cloud analytics.

Fields
Field Name Description
name - String! The word or token extracted from the data.
value - Int! Frequency count — how many times this word appears in the dataset.
Example
{"name": "xyz789", "value": 123}