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 (Novice Explorer → Legendary Hero), 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": 987,
      "mutualStreakLastDate": ISO8601Date,
      "nudgeSentToday": false,
      "partnerCheckedInToday": true,
      "photo": UserPhoto,
      "publicId": 4,
      "userCheckedInToday": true,
      "username": "abc123"
    }
  }
}

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": "xyz789",
  "actorId": 4,
  "after": "abc123",
  "before": "abc123",
  "first": 123,
  "last": 123,
  "scopedTo": "xyz789",
  "targetType": "xyz789"
}
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
    }
    totalCalls
    totalSpendCents
    totalTokens
  }
}
Variables
{"daysBack": 30}
Response
{
  "data": {
    "adminAiUsage": {
      "budgetCents": 987,
      "budgetUtilizationPercent": 987.65,
      "dailySeries": [DailyUsagePoint],
      "perFeature": [FeatureUsagePoint],
      "perModel": [ModelUsagePoint],
      "totalCalls": 987,
      "totalSpendCents": 987,
      "totalTokens": 123
    }
  }
}

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": "xyz789",
  "before": "abc123",
  "first": 123,
  "last": 987,
  "query": "xyz789"
}
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": 987,
      "criticalFlags": 123,
      "goalCategories": [CategoryStats],
      "goalsLast7Days": 987,
      "growthData": [GrowthDataPoint],
      "pendingFlags": 123,
      "pendingReports": 987,
      "publicGoals": 123,
      "recentActivity": [ActivityItem],
      "supporterStats": SupporterStats,
      "totalEncouragements": 123,
      "totalEvents": 987,
      "totalGoals": 123,
      "totalMilestones": 987,
      "totalUpdates": 987,
      "totalUsers": 987,
      "usersLast30Days": 123,
      "usersLast7Days": 987
    }
  }
}

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
    currentMonthCost
    description
    id
    lastRun {
      ...AiRunFragment
    }
    mcpServers
    modelPreference
    monthlyBudgetCents
    name
    nextRunAt
    postFilterSkill
    promotionCriteria {
      ...PromotionCriteriaFragment
    }
    roleKey
    scheduleCron
    skillRefs
    taskPrompt
  }
}
Variables
{"id": "abc123"}
Response
{
  "data": {
    "aiEmployee": {
      "active": false,
      "aiEmployeeMemories": [AiEmployeeMemory],
      "aiRuns": [AiRun],
      "approvalRateData": [ApprovalRateData],
      "autonomyLevel": "abc123",
      "currentMonthCost": 123,
      "description": "xyz789",
      "id": "abc123",
      "lastRun": AiRun,
      "mcpServers": ["abc123"],
      "modelPreference": "xyz789",
      "monthlyBudgetCents": 987,
      "name": "abc123",
      "nextRunAt": ISO8601DateTime,
      "postFilterSkill": "xyz789",
      "promotionCriteria": PromotionCriteria,
      "roleKey": "abc123",
      "scheduleCron": "xyz789",
      "skillRefs": ["abc123"],
      "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": "abc123"
}
Response
{
  "data": {
    "aiEmployees": {
      "edges": [AiEmployeeEdge],
      "nodes": [AiEmployee],
      "pageInfo": PageInfo
    }
  }
}

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": "abc123"}
Response
{
  "data": {
    "aiRun": {
      "aiArtifacts": [AiArtifact],
      "aiEmployee": AiEmployee,
      "completionTokens": 987,
      "costCents": 123,
      "createdAt": ISO8601DateTime,
      "durationSeconds": 987,
      "errorMessage": "xyz789",
      "finishedAt": ISO8601DateTime,
      "id": "abc123",
      "numTurns": 987,
      "promptTokens": 987,
      "runLog": {},
      "startedAt": ISO8601DateTime,
      "status": "abc123",
      "triggeredBy": "abc123"
    }
  }
}

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": 987, "offset": 987, "userId": 4}
Response
{
  "data": {
    "allyActivityFeed": [
      {
        "action": "xyz789",
        "allyId": "4",
        "allyName": "abc123",
        "allyPhoto": "abc123",
        "communityId": "4",
        "communityName": "abc123",
        "details": {},
        "id": "4",
        "kind": "ACHIEVEMENT",
        "target": "abc123",
        "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": "abc123",
      "inviterName": "abc123",
      "valid": false
    }
  }
}

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": "abc123",
  "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": "abc123"}
Response
{"data": {"badgeHolderCount": 987}}

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": "abc123",
        "percentage": 123.45
      }
    ]
  }
}

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": "xyz789",
      "id": "abc123",
      "lastMessageAt": ISO8601DateTime,
      "messages": [CoachMessage]
    }
  }
}

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
    badges {
      ...CommunityBadgesFragment
    }
    category
    coverImage
    createdAt
    createdAtTime
    demo
    description
    feedItems {
      ...CommunityFeedItemFragment
    }
    goalCategory {
      ...GoalCategoryFragment
    }
    goals {
      ...GoalFragment
    }
    growthRate
    guidelines
    healthScore
    imageUrl
    isFeatured
    isFounding
    isMember
    isVerified
    memberCount
    members {
      ...CommunityMemberFragment
    }
    membersToDiscoverable
    name
    pastChallenges {
      ...CommunityChallengeFragment
    }
    privacy
    private
    publicId
    totalGoals
    upcomingChallenges {
      ...CommunityChallengeFragment
    }
    updatedAtTime
    userProgressPercent
  }
}
Variables
{"goalCategoryIds": ["4"], "userId": 4}
Response
{
  "data": {
    "communities": [
      {
        "activeChallenge": CommunityChallenge,
        "activeMembers": 987,
        "badges": CommunityBadges,
        "category": "xyz789",
        "coverImage": "abc123",
        "createdAt": ISO8601DateTime,
        "createdAtTime": "xyz789",
        "demo": false,
        "description": "abc123",
        "feedItems": [CommunityFeedItem],
        "goalCategory": GoalCategory,
        "goals": [Goal],
        "growthRate": 987.65,
        "guidelines": "xyz789",
        "healthScore": 123,
        "imageUrl": "xyz789",
        "isFeatured": true,
        "isFounding": false,
        "isMember": true,
        "isVerified": true,
        "memberCount": 987,
        "members": [CommunityMember],
        "membersToDiscoverable": 123,
        "name": "abc123",
        "pastChallenges": [CommunityChallenge],
        "privacy": "xyz789",
        "private": false,
        "publicId": 4,
        "totalGoals": 987,
        "upcomingChallenges": [CommunityChallenge],
        "updatedAtTime": "abc123",
        "userProgressPercent": 987.65
      }
    ]
  }
}

community

Description

Fetches a community by its public_id.

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
    badges {
      ...CommunityBadgesFragment
    }
    category
    coverImage
    createdAt
    createdAtTime
    demo
    description
    feedItems {
      ...CommunityFeedItemFragment
    }
    goalCategory {
      ...GoalCategoryFragment
    }
    goals {
      ...GoalFragment
    }
    growthRate
    guidelines
    healthScore
    imageUrl
    isFeatured
    isFounding
    isMember
    isVerified
    memberCount
    members {
      ...CommunityMemberFragment
    }
    membersToDiscoverable
    name
    pastChallenges {
      ...CommunityChallengeFragment
    }
    privacy
    private
    publicId
    totalGoals
    upcomingChallenges {
      ...CommunityChallengeFragment
    }
    updatedAtTime
    userProgressPercent
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "community": {
      "activeChallenge": CommunityChallenge,
      "activeMembers": 123,
      "badges": CommunityBadges,
      "category": "abc123",
      "coverImage": "abc123",
      "createdAt": ISO8601DateTime,
      "createdAtTime": "abc123",
      "demo": true,
      "description": "abc123",
      "feedItems": [CommunityFeedItem],
      "goalCategory": GoalCategory,
      "goals": [Goal],
      "growthRate": 123.45,
      "guidelines": "xyz789",
      "healthScore": 123,
      "imageUrl": "xyz789",
      "isFeatured": false,
      "isFounding": false,
      "isMember": true,
      "isVerified": true,
      "memberCount": 987,
      "members": [CommunityMember],
      "membersToDiscoverable": 123,
      "name": "xyz789",
      "pastChallenges": [CommunityChallenge],
      "privacy": "xyz789",
      "private": false,
      "publicId": "4",
      "totalGoals": 123,
      "upcomingChallenges": [CommunityChallenge],
      "updatedAtTime": "abc123",
      "userProgressPercent": 987.65
    }
  }
}

communityBadges

Description

Returns the achievement badges earned by a community.

Response

Returns a CommunityBadges

Arguments
Name Description
communityId - ID! public_id of the community.

Example

Query
query communityBadges($communityId: ID!) {
  communityBadges(communityId: $communityId) {
    allyMagnet
    club1k
    earlySupporter
    featured
    perfectMonth
    streak100
    topActive
    topContributor
    verified
    wins500
  }
}
Variables
{"communityId": 4}
Response
{
  "data": {
    "communityBadges": {
      "allyMagnet": true,
      "club1k": false,
      "earlySupporter": false,
      "featured": true,
      "perfectMonth": true,
      "streak100": false,
      "topActive": false,
      "topContributor": false,
      "verified": false,
      "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": "xyz789",
      "community": Community,
      "createdAtTime": "abc123",
      "creator": User,
      "currentUserParticipant": ChallengeParticipant,
      "description": "xyz789",
      "endDate": ISO8601Date,
      "isParticipating": false,
      "name": "abc123",
      "participantCount": 987,
      "publicId": 4,
      "startDate": ISO8601Date,
      "status": "xyz789",
      "targetGoalCount": 987,
      "targetGoalType": GoalType,
      "updatedAtTime": "abc123"
    }
  }
}

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": false, "limit": 123, "offset": 123}
Response
{
  "data": {
    "communityChallengeLeaderboard": [
      {
        "communityChallenge": CommunityChallenge,
        "completed": false,
        "completedAt": ISO8601DateTime,
        "progressCount": 123,
        "progressPercent": 123.45,
        "publicId": 4,
        "rank": 123,
        "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": "abc123",
        "badgeName": "xyz789",
        "community": Community,
        "createdAtTime": "abc123",
        "creator": User,
        "currentUserParticipant": ChallengeParticipant,
        "description": "abc123",
        "endDate": ISO8601Date,
        "isParticipating": false,
        "name": "abc123",
        "participantCount": 123,
        "publicId": "4",
        "startDate": ISO8601Date,
        "status": "abc123",
        "targetGoalCount": 123,
        "targetGoalType": GoalType,
        "updatedAtTime": "xyz789"
      }
    ]
  }
}

communityFeed

Description

Returns the paginated post feed for a community, ordered by most recent.

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": 987,
  "offset": 123
}
Response
{
  "data": {
    "communityFeed": [
      {
        "comments": [PostComment],
        "communityId": 4,
        "content": "xyz789",
        "goalId": 4,
        "goalName": "xyz789",
        "id": "4",
        "likes": 987,
        "timestamp": "abc123",
        "type": "abc123",
        "userId": 4,
        "userName": "xyz789",
        "userPhoto": "abc123"
      }
    ]
  }
}

communityGoals

Description

Returns paginated goals shared into a community.

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
    }
    averageCheckInTime
    category {
      ...GoalCategoryFragment
    }
    checkedInToday
    comments {
      ...GoalEventCommentFragment
    }
    completed
    completedAtTime
    completionRate
    content
    createdAtTime
    currentAmount
    dayOfWeekDistribution
    daysToUpdate
    demo
    dueToday
    durationMinutes
    encouragements {
      ...GoalEventEncouragementFragment
    }
    events {
      ...GoalEventFragment
    }
    fromTemplate {
      ...GoalTemplateFragment
    }
    fromTemplateName
    habitCompletions {
      ...HabitCompletionFragment
    }
    habitStreak
    imageUrl
    kind {
      ...GoalTypeFragment
    }
    lastCheckedInDate
    lifeArea
    longestHabitStreak
    milestones {
      ...GoalFragment
    }
    name
    parentGoalId
    position
    preBreakHabitStreak
    private
    publicId
    recurrenceDays
    recurrenceInterval
    recurrenceType
    status
    streakFreezesAvailable
    streakFreezesUsed
    streakRepairEligibleUntil
    streakRepairedCount
    targetAmount
    targetDateTime
    totalCheckIns
    unit
    updatedAtTime
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "communityId": "4",
  "limit": 987,
  "offset": 123
}
Response
{
  "data": {
    "communityGoals": [
      {
        "allEvents": [GoalEvent],
        "averageCheckInTime": 123.45,
        "category": GoalCategory,
        "checkedInToday": false,
        "comments": [GoalEventComment],
        "completed": false,
        "completedAtTime": "abc123",
        "completionRate": 123.45,
        "content": "xyz789",
        "createdAtTime": "abc123",
        "currentAmount": 987.65,
        "dayOfWeekDistribution": [987],
        "daysToUpdate": 123,
        "demo": true,
        "dueToday": true,
        "durationMinutes": 123,
        "encouragements": [GoalEventEncouragement],
        "events": [GoalEvent],
        "fromTemplate": GoalTemplate,
        "fromTemplateName": "abc123",
        "habitCompletions": [HabitCompletion],
        "habitStreak": 123,
        "imageUrl": "abc123",
        "kind": GoalType,
        "lastCheckedInDate": "xyz789",
        "lifeArea": "abc123",
        "longestHabitStreak": 987,
        "milestones": [Goal],
        "name": "xyz789",
        "parentGoalId": "xyz789",
        "position": 123,
        "preBreakHabitStreak": 987,
        "private": false,
        "publicId": "4",
        "recurrenceDays": ["abc123"],
        "recurrenceInterval": 123,
        "recurrenceType": "abc123",
        "status": "completed",
        "streakFreezesAvailable": 123,
        "streakFreezesUsed": 987,
        "streakRepairEligibleUntil": "xyz789",
        "streakRepairedCount": 123,
        "targetAmount": 987.65,
        "targetDateTime": "xyz789",
        "totalCheckIns": 987,
        "unit": "xyz789",
        "updatedAtTime": "abc123",
        "user": User
      }
    ]
  }
}

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
    partnersCount
    postsThisWeek
    suggestedCommunities {
      ...SuggestedCommunityFragment
    }
    suggestedCount
    totalEngagement
    trendingCommunities {
      ...TrendingCommunityFragment
    }
    upcomingEvents {
      ...CommunityEventFragment
    }
    yourActivity {
      ...UserActivityFragment
    }
  }
}
Variables
{"userId": "4"}
Response
{
  "data": {
    "communityInsights": {
      "achievementsUnlocked": 987,
      "communitiesJoined": 987,
      "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.

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": 987,
        "id": 4,
        "joinedDate": "xyz789",
        "points": 987,
        "postsCount": 123,
        "rank": 987,
        "role": "xyz789",
        "updatedAtTime": "abc123",
        "user": User,
        "userPublicId": "abc123"
      }
    ]
  }
}

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": "abc123",
        "goalCategory": GoalCategory,
        "goalKind": GoalType,
        "id": "4"
      }
    ]
  }
}

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": "abc123",
        "reportableType": "abc123",
        "reporterName": "xyz789",
        "status": "abc123"
      }
    ]
  }
}

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": "abc123",
      "timezone": "xyz789",
      "timezoneNeedsConfirmation": false
    }
  }
}

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": "abc123",
      "currentStimStreak": 987,
      "longestStimStreak": 987,
      "themesCatalog": [CriticalPathTheme],
      "totalStimXp": 123,
      "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
  }
}
Response
{
  "data": {
    "criticalPathToday": {
      "completed": true,
      "elapsedSeconds": 123,
      "percentile": 123,
      "puzzleDate": ISO8601Date,
      "puzzleSeed": 123
    }
  }
}

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": "abc123",
      "finishedAt": ISO8601DateTime,
      "scope": "abc123",
      "startedAt": ISO8601DateTime,
      "status": "abc123",
      "totalSteps": 123
    }
  }
}

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": 123,
      "aiEmployees": 123,
      "aiRuns": 987,
      "communities": 123,
      "feedItems": 987,
      "feedbackComments": 987,
      "feedbackPosts": 987,
      "feedbackVotes": 987,
      "goalEvents": 123,
      "goals": 987,
      "totalRecords": 123,
      "userAllies": 123,
      "users": 987
    }
  }
}

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": 123,
      "id": "4",
      "scores": {},
      "tritype": "abc123",
      "wing": 123
    }
  }
}

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": 123,
        "id": 4,
        "scores": {},
        "tritype": "abc123",
        "wing": 123
      }
    ]
  }
}

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
    title
    user {
      ...UserFragment
    }
    voteCount
    votedByCurrentUser
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "feedbackPost": {
      "category": "xyz789",
      "commentCount": 987,
      "comments": [FeedbackComment],
      "createdAt": ISO8601DateTime,
      "description": "xyz789",
      "id": 4,
      "shippedAt": ISO8601DateTime,
      "status": "xyz789",
      "title": "abc123",
      "user": User,
      "voteCount": 987,
      "votedByCurrentUser": false
    }
  }
}

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

Example

Query
query feedbackPosts(
  $category: String,
  $filter: String,
  $search: String,
  $sort: String,
  $status: String
) {
  feedbackPosts(
    category: $category,
    filter: $filter,
    search: $search,
    sort: $sort,
    status: $status
  ) {
    category
    commentCount
    comments {
      ...FeedbackCommentFragment
    }
    createdAt
    description
    id
    shippedAt
    status
    title
    user {
      ...UserFragment
    }
    voteCount
    votedByCurrentUser
  }
}
Variables
{
  "category": "abc123",
  "filter": "xyz789",
  "search": "abc123",
  "sort": "xyz789",
  "status": "xyz789"
}
Response
{
  "data": {
    "feedbackPosts": [
      {
        "category": "xyz789",
        "commentCount": 987,
        "comments": [FeedbackComment],
        "createdAt": ISO8601DateTime,
        "description": "abc123",
        "id": "4",
        "shippedAt": ISO8601DateTime,
        "status": "abc123",
        "title": "xyz789",
        "user": User,
        "voteCount": 123,
        "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": 987,
      "declinedPosts": 123,
      "inProgressPosts": 987,
      "openPosts": 123,
      "plannedPosts": 123,
      "postsThisWeek": 987,
      "topPosts": [FeedbackPost],
      "totalComments": 987,
      "totalPosts": 987,
      "totalVotes": 123
    }
  }
}

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
    }
    completedCommunityChallenges {
      ...ChallengeParticipantFragment
    }
    createdAtTime
    currentInsights {
      ...InsightPackFragment
    }
    daysSinceLastActive
    demo
    details {
      ...UserDetailFragment
    }
    email
    emailVerified
    feedItems {
      ...UserFeedItemFragment
    }
    firstName
    goalMotivationProfile {
      ...GoalMotivationProfileFragment
    }
    goals {
      ...GoalFragment
    }
    graceDays
    hasAlly
    hasCreatedFromTemplate
    hasDigestEnabled
    isSupporter
    lastDigestSentAt
    lastName
    latestEnneagramAssessment {
      ...EnneagramAssessmentFragment
    }
    level
    longestStreak
    nextLevelThreshold
    nextOnTheShelfBadge {
      ...NextBadgeFragment
    }
    notifications {
      ...UserNotificationFragment
    }
    onboardingStatus {
      ...OnboardingStatusFragment
    }
    photo {
      ...UserPhotoFragment
    }
    progressToNextLevel
    publicId
    recentlyUnlockedBadges {
      ...RecentlyUnlockedBadgeFragment
    }
    requiredCheckinsCompleteToday
    showcasedAchievements
    signInDates
    signupAgeDays
    stats {
      ...UserStatsFragment
    }
    streak
    streakRepairOffer {
      ...StreakRepairOfferFragment
    }
    supporterTier
    supporterUntil
    timeToFirstGoalSeconds
    todaysMood
    updatedAtTime
    username
    welcomeBackOffer {
      ...WelcomeBackOfferFragment
    }
    xp
  }
}
Variables
{
  "email": "abc123",
  "username": "xyz789"
}
Response
{
  "data": {
    "findUserForInvite": {
      "achievementStats": AchievementStats,
      "actions": [UserAction],
      "admin": false,
      "adminRoles": ["abc123"],
      "coachingPreferences": CoachingPreferences,
      "completedCommunityChallenges": [
        ChallengeParticipant
      ],
      "createdAtTime": "abc123",
      "currentInsights": [InsightPack],
      "daysSinceLastActive": 987,
      "demo": false,
      "details": UserDetail,
      "email": "xyz789",
      "emailVerified": true,
      "feedItems": [UserFeedItem],
      "firstName": "abc123",
      "goalMotivationProfile": GoalMotivationProfile,
      "goals": [Goal],
      "graceDays": ["abc123"],
      "hasAlly": false,
      "hasCreatedFromTemplate": false,
      "hasDigestEnabled": false,
      "isSupporter": false,
      "lastDigestSentAt": "xyz789",
      "lastName": "abc123",
      "latestEnneagramAssessment": EnneagramAssessment,
      "level": 987,
      "longestStreak": 987,
      "nextLevelThreshold": 123,
      "nextOnTheShelfBadge": NextBadge,
      "notifications": [UserNotification],
      "onboardingStatus": OnboardingStatus,
      "photo": UserPhoto,
      "progressToNextLevel": 123.45,
      "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",
      "updatedAtTime": "abc123",
      "username": "abc123",
      "welcomeBackOffer": WelcomeBackOffer,
      "xp": 987
    }
  }
}

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": 987,
  "variantId": "xyz789"
}
Response
{
  "data": {
    "funnelStats": {
      "firstGoal": 123,
      "signedIn": 987,
      "ttfgP50Seconds": 987,
      "ttfgP90Seconds": 987,
      "variantId": "xyz789",
      "wizardCompleted": 123,
      "wizardStarted": 987
    }
  }
}

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": "abc123"}
Response
{
  "data": {
    "gdprRequest": {
      "cascadePreview": CascadePreview,
      "dueBy": ISO8601DateTime,
      "exportExpiresAt": ISO8601DateTime,
      "exportFileUrl": "xyz789",
      "fulfilledAt": ISO8601DateTime,
      "fulfilledBy": User,
      "notes": "xyz789",
      "publicId": "xyz789",
      "receivedAt": ISO8601DateTime,
      "requestType": "abc123",
      "requestorEmail": "abc123",
      "status": "abc123"
    }
  }
}

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": "abc123",
  "before": "abc123",
  "first": 987,
  "last": 123,
  "requestType": "xyz789",
  "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
    }
    averageCheckInTime
    category {
      ...GoalCategoryFragment
    }
    checkedInToday
    comments {
      ...GoalEventCommentFragment
    }
    completed
    completedAtTime
    completionRate
    content
    createdAtTime
    currentAmount
    dayOfWeekDistribution
    daysToUpdate
    demo
    dueToday
    durationMinutes
    encouragements {
      ...GoalEventEncouragementFragment
    }
    events {
      ...GoalEventFragment
    }
    fromTemplate {
      ...GoalTemplateFragment
    }
    fromTemplateName
    habitCompletions {
      ...HabitCompletionFragment
    }
    habitStreak
    imageUrl
    kind {
      ...GoalTypeFragment
    }
    lastCheckedInDate
    lifeArea
    longestHabitStreak
    milestones {
      ...GoalFragment
    }
    name
    parentGoalId
    position
    preBreakHabitStreak
    private
    publicId
    recurrenceDays
    recurrenceInterval
    recurrenceType
    status
    streakFreezesAvailable
    streakFreezesUsed
    streakRepairEligibleUntil
    streakRepairedCount
    targetAmount
    targetDateTime
    totalCheckIns
    unit
    updatedAtTime
    user {
      ...UserFragment
    }
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "goal": {
      "allEvents": [GoalEvent],
      "averageCheckInTime": 987.65,
      "category": GoalCategory,
      "checkedInToday": true,
      "comments": [GoalEventComment],
      "completed": false,
      "completedAtTime": "abc123",
      "completionRate": 987.65,
      "content": "abc123",
      "createdAtTime": "abc123",
      "currentAmount": 987.65,
      "dayOfWeekDistribution": [987],
      "daysToUpdate": 123,
      "demo": false,
      "dueToday": false,
      "durationMinutes": 987,
      "encouragements": [GoalEventEncouragement],
      "events": [GoalEvent],
      "fromTemplate": GoalTemplate,
      "fromTemplateName": "xyz789",
      "habitCompletions": [HabitCompletion],
      "habitStreak": 987,
      "imageUrl": "abc123",
      "kind": GoalType,
      "lastCheckedInDate": "abc123",
      "lifeArea": "xyz789",
      "longestHabitStreak": 987,
      "milestones": [Goal],
      "name": "xyz789",
      "parentGoalId": "xyz789",
      "position": 123,
      "preBreakHabitStreak": 987,
      "private": true,
      "publicId": 4,
      "recurrenceDays": ["xyz789"],
      "recurrenceInterval": 123,
      "recurrenceType": "xyz789",
      "status": "completed",
      "streakFreezesAvailable": 123,
      "streakFreezesUsed": 987,
      "streakRepairEligibleUntil": "abc123",
      "streakRepairedCount": 123,
      "targetAmount": 123.45,
      "targetDateTime": "abc123",
      "totalCheckIns": 987,
      "unit": "xyz789",
      "updatedAtTime": "abc123",
      "user": User
    }
  }
}

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
    }
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "goalEvent": {
      "clientTimestampTime": "xyz789",
      "comments": [GoalEventComment],
      "content": "xyz789",
      "createdAtTime": "abc123",
      "encouragements": [GoalEventEncouragement],
      "goal": Goal,
      "id": 4,
      "media": GoalMedia,
      "milestoneName": "abc123",
      "mood": "abc123",
      "publicId": "4",
      "reactions": [GoalEventReaction]
    }
  }
}

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": "abc123",
        "displayNumber": 123,
        "id": "4",
        "name": "abc123"
      }
    ]
  }
}

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": 987,
  "period": "abc123"
}
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": 123.45,
      "completedCount": 987,
      "needAttentionCount": 123,
      "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": 987,
        "imageUrl": "xyz789",
        "milestones": [GoalTemplateMilestone],
        "name": "xyz789",
        "publicId": 4,
        "theme": "abc123"
      }
    ]
  }
}

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
    }
    averageCheckInTime
    category {
      ...GoalCategoryFragment
    }
    checkedInToday
    comments {
      ...GoalEventCommentFragment
    }
    completed
    completedAtTime
    completionRate
    content
    createdAtTime
    currentAmount
    dayOfWeekDistribution
    daysToUpdate
    demo
    dueToday
    durationMinutes
    encouragements {
      ...GoalEventEncouragementFragment
    }
    events {
      ...GoalEventFragment
    }
    fromTemplate {
      ...GoalTemplateFragment
    }
    fromTemplateName
    habitCompletions {
      ...HabitCompletionFragment
    }
    habitStreak
    imageUrl
    kind {
      ...GoalTypeFragment
    }
    lastCheckedInDate
    lifeArea
    longestHabitStreak
    milestones {
      ...GoalFragment
    }
    name
    parentGoalId
    position
    preBreakHabitStreak
    private
    publicId
    recurrenceDays
    recurrenceInterval
    recurrenceType
    status
    streakFreezesAvailable
    streakFreezesUsed
    streakRepairEligibleUntil
    streakRepairedCount
    targetAmount
    targetDateTime
    totalCheckIns
    unit
    updatedAtTime
    user {
      ...UserFragment
    }
  }
}
Variables
{"userId": 4}
Response
{
  "data": {
    "goals": [
      {
        "allEvents": [GoalEvent],
        "averageCheckInTime": 123.45,
        "category": GoalCategory,
        "checkedInToday": false,
        "comments": [GoalEventComment],
        "completed": false,
        "completedAtTime": "xyz789",
        "completionRate": 987.65,
        "content": "abc123",
        "createdAtTime": "abc123",
        "currentAmount": 987.65,
        "dayOfWeekDistribution": [987],
        "daysToUpdate": 987,
        "demo": false,
        "dueToday": false,
        "durationMinutes": 123,
        "encouragements": [GoalEventEncouragement],
        "events": [GoalEvent],
        "fromTemplate": GoalTemplate,
        "fromTemplateName": "xyz789",
        "habitCompletions": [HabitCompletion],
        "habitStreak": 987,
        "imageUrl": "abc123",
        "kind": GoalType,
        "lastCheckedInDate": "abc123",
        "lifeArea": "xyz789",
        "longestHabitStreak": 123,
        "milestones": [Goal],
        "name": "xyz789",
        "parentGoalId": "xyz789",
        "position": 123,
        "preBreakHabitStreak": 987,
        "private": false,
        "publicId": 4,
        "recurrenceDays": ["abc123"],
        "recurrenceInterval": 987,
        "recurrenceType": "abc123",
        "status": "completed",
        "streakFreezesAvailable": 123,
        "streakFreezesUsed": 123,
        "streakRepairEligibleUntil": "abc123",
        "streakRepairedCount": 987,
        "targetAmount": 987.65,
        "targetDateTime": "xyz789",
        "totalCheckIns": 123,
        "unit": "xyz789",
        "updatedAtTime": "abc123",
        "user": User
      }
    ]
  }
}

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
    }
    completedCommunityChallenges {
      ...ChallengeParticipantFragment
    }
    createdAtTime
    currentInsights {
      ...InsightPackFragment
    }
    daysSinceLastActive
    demo
    details {
      ...UserDetailFragment
    }
    email
    emailVerified
    feedItems {
      ...UserFeedItemFragment
    }
    firstName
    goalMotivationProfile {
      ...GoalMotivationProfileFragment
    }
    goals {
      ...GoalFragment
    }
    graceDays
    hasAlly
    hasCreatedFromTemplate
    hasDigestEnabled
    isSupporter
    lastDigestSentAt
    lastName
    latestEnneagramAssessment {
      ...EnneagramAssessmentFragment
    }
    level
    longestStreak
    nextLevelThreshold
    nextOnTheShelfBadge {
      ...NextBadgeFragment
    }
    notifications {
      ...UserNotificationFragment
    }
    onboardingStatus {
      ...OnboardingStatusFragment
    }
    photo {
      ...UserPhotoFragment
    }
    progressToNextLevel
    publicId
    recentlyUnlockedBadges {
      ...RecentlyUnlockedBadgeFragment
    }
    requiredCheckinsCompleteToday
    showcasedAchievements
    signInDates
    signupAgeDays
    stats {
      ...UserStatsFragment
    }
    streak
    streakRepairOffer {
      ...StreakRepairOfferFragment
    }
    supporterTier
    supporterUntil
    timeToFirstGoalSeconds
    todaysMood
    updatedAtTime
    username
    welcomeBackOffer {
      ...WelcomeBackOfferFragment
    }
    xp
  }
}
Response
{
  "data": {
    "me": {
      "achievementStats": AchievementStats,
      "actions": [UserAction],
      "admin": true,
      "adminRoles": ["abc123"],
      "coachingPreferences": CoachingPreferences,
      "completedCommunityChallenges": [
        ChallengeParticipant
      ],
      "createdAtTime": "xyz789",
      "currentInsights": [InsightPack],
      "daysSinceLastActive": 123,
      "demo": false,
      "details": UserDetail,
      "email": "abc123",
      "emailVerified": false,
      "feedItems": [UserFeedItem],
      "firstName": "xyz789",
      "goalMotivationProfile": GoalMotivationProfile,
      "goals": [Goal],
      "graceDays": ["xyz789"],
      "hasAlly": true,
      "hasCreatedFromTemplate": false,
      "hasDigestEnabled": true,
      "isSupporter": false,
      "lastDigestSentAt": "abc123",
      "lastName": "abc123",
      "latestEnneagramAssessment": EnneagramAssessment,
      "level": 123,
      "longestStreak": 123,
      "nextLevelThreshold": 123,
      "nextOnTheShelfBadge": NextBadge,
      "notifications": [UserNotification],
      "onboardingStatus": OnboardingStatus,
      "photo": UserPhoto,
      "progressToNextLevel": 987.65,
      "publicId": 4,
      "recentlyUnlockedBadges": [RecentlyUnlockedBadge],
      "requiredCheckinsCompleteToday": false,
      "showcasedAchievements": ["xyz789"],
      "signInDates": ["xyz789"],
      "signupAgeDays": 987,
      "stats": UserStats,
      "streak": 987,
      "streakRepairOffer": StreakRepairOffer,
      "supporterTier": "abc123",
      "supporterUntil": ISO8601DateTime,
      "timeToFirstGoalSeconds": 123,
      "todaysMood": "xyz789",
      "updatedAtTime": "xyz789",
      "username": "xyz789",
      "welcomeBackOffer": WelcomeBackOffer,
      "xp": 123
    }
  }
}

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": "xyz789",
  "ageBucket": "xyz789",
  "before": "xyz789",
  "first": 123,
  "flaggableType": ["abc123"],
  "flaggedUserId": "xyz789",
  "last": 123,
  "severity": ["abc123"],
  "source": ["xyz789"]
}
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": "xyz789",
        "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": "abc123",
      "fulfilledAt": ISO8601DateTime,
      "fulfilledBy": User,
      "notes": "abc123",
      "publicId": "xyz789",
      "receivedAt": ISO8601DateTime,
      "requestType": "abc123",
      "requestorEmail": "abc123",
      "status": "xyz789"
    }
  }
}

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
    }
    completedCommunityChallenges {
      ...ChallengeParticipantFragment
    }
    createdAtTime
    currentInsights {
      ...InsightPackFragment
    }
    daysSinceLastActive
    demo
    details {
      ...UserDetailFragment
    }
    email
    emailVerified
    feedItems {
      ...UserFeedItemFragment
    }
    firstName
    goalMotivationProfile {
      ...GoalMotivationProfileFragment
    }
    goals {
      ...GoalFragment
    }
    graceDays
    hasAlly
    hasCreatedFromTemplate
    hasDigestEnabled
    isSupporter
    lastDigestSentAt
    lastName
    latestEnneagramAssessment {
      ...EnneagramAssessmentFragment
    }
    level
    longestStreak
    nextLevelThreshold
    nextOnTheShelfBadge {
      ...NextBadgeFragment
    }
    notifications {
      ...UserNotificationFragment
    }
    onboardingStatus {
      ...OnboardingStatusFragment
    }
    photo {
      ...UserPhotoFragment
    }
    progressToNextLevel
    publicId
    recentlyUnlockedBadges {
      ...RecentlyUnlockedBadgeFragment
    }
    requiredCheckinsCompleteToday
    showcasedAchievements
    signInDates
    signupAgeDays
    stats {
      ...UserStatsFragment
    }
    streak
    streakRepairOffer {
      ...StreakRepairOfferFragment
    }
    supporterTier
    supporterUntil
    timeToFirstGoalSeconds
    todaysMood
    updatedAtTime
    username
    welcomeBackOffer {
      ...WelcomeBackOfferFragment
    }
    xp
  }
}
Response
{
  "data": {
    "outgoingAllyRequests": [
      {
        "achievementStats": AchievementStats,
        "actions": [UserAction],
        "admin": false,
        "adminRoles": ["xyz789"],
        "allyStatus": "ACCEPTED",
        "coachingPreferences": CoachingPreferences,
        "completedCommunityChallenges": [
          ChallengeParticipant
        ],
        "createdAtTime": "abc123",
        "currentInsights": [InsightPack],
        "daysSinceLastActive": 987,
        "demo": false,
        "details": UserDetail,
        "email": "abc123",
        "emailVerified": true,
        "feedItems": [UserFeedItem],
        "firstName": "abc123",
        "goalMotivationProfile": GoalMotivationProfile,
        "goals": [Goal],
        "graceDays": ["abc123"],
        "hasAlly": true,
        "hasCreatedFromTemplate": false,
        "hasDigestEnabled": false,
        "isSupporter": false,
        "lastDigestSentAt": "abc123",
        "lastName": "abc123",
        "latestEnneagramAssessment": EnneagramAssessment,
        "level": 123,
        "longestStreak": 123,
        "nextLevelThreshold": 987,
        "nextOnTheShelfBadge": NextBadge,
        "notifications": [UserNotification],
        "onboardingStatus": OnboardingStatus,
        "photo": UserPhoto,
        "progressToNextLevel": 123.45,
        "publicId": "4",
        "recentlyUnlockedBadges": [RecentlyUnlockedBadge],
        "requiredCheckinsCompleteToday": false,
        "showcasedAchievements": ["abc123"],
        "signInDates": ["abc123"],
        "signupAgeDays": 987,
        "stats": UserStats,
        "streak": 987,
        "streakRepairOffer": StreakRepairOffer,
        "supporterTier": "abc123",
        "supporterUntil": ISO8601DateTime,
        "timeToFirstGoalSeconds": 987,
        "todaysMood": "abc123",
        "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": "abc123",
        "firstName": "abc123",
        "id": 4,
        "lastName": "xyz789",
        "mutualCount": 987,
        "mutualStreakCount": 123,
        "partnerStatus": "xyz789",
        "photo": UserPhoto,
        "publicId": "xyz789",
        "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": "xyz789",
  "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": 987,
      "moderationQueue": 123,
      "reviewQueue": 123
    }
  }
}

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": true,
        "currency": "abc123",
        "interval": "abc123",
        "name": "abc123",
        "priceCents": 987,
        "priceDisplay": "xyz789",
        "publicId": "4",
        "slug": "xyz789"
      }
    ]
  }
}

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
    }
    averageCheckInTime
    category {
      ...GoalCategoryFragment
    }
    checkedInToday
    comments {
      ...GoalEventCommentFragment
    }
    completed
    completedAtTime
    completionRate
    content
    createdAtTime
    currentAmount
    dayOfWeekDistribution
    daysToUpdate
    demo
    dueToday
    durationMinutes
    encouragements {
      ...GoalEventEncouragementFragment
    }
    events {
      ...GoalEventFragment
    }
    fromTemplate {
      ...GoalTemplateFragment
    }
    fromTemplateName
    habitCompletions {
      ...HabitCompletionFragment
    }
    habitStreak
    imageUrl
    kind {
      ...GoalTypeFragment
    }
    lastCheckedInDate
    lifeArea
    longestHabitStreak
    milestones {
      ...GoalFragment
    }
    name
    parentGoalId
    position
    preBreakHabitStreak
    private
    publicId
    recurrenceDays
    recurrenceInterval
    recurrenceType
    status
    streakFreezesAvailable
    streakFreezesUsed
    streakRepairEligibleUntil
    streakRepairedCount
    targetAmount
    targetDateTime
    totalCheckIns
    unit
    updatedAtTime
    user {
      ...UserFragment
    }
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "publicGoal": {
      "allEvents": [GoalEvent],
      "averageCheckInTime": 987.65,
      "category": GoalCategory,
      "checkedInToday": true,
      "comments": [GoalEventComment],
      "completed": true,
      "completedAtTime": "xyz789",
      "completionRate": 987.65,
      "content": "abc123",
      "createdAtTime": "xyz789",
      "currentAmount": 987.65,
      "dayOfWeekDistribution": [987],
      "daysToUpdate": 123,
      "demo": false,
      "dueToday": false,
      "durationMinutes": 123,
      "encouragements": [GoalEventEncouragement],
      "events": [GoalEvent],
      "fromTemplate": GoalTemplate,
      "fromTemplateName": "xyz789",
      "habitCompletions": [HabitCompletion],
      "habitStreak": 123,
      "imageUrl": "xyz789",
      "kind": GoalType,
      "lastCheckedInDate": "abc123",
      "lifeArea": "abc123",
      "longestHabitStreak": 123,
      "milestones": [Goal],
      "name": "xyz789",
      "parentGoalId": "xyz789",
      "position": 987,
      "preBreakHabitStreak": 123,
      "private": false,
      "publicId": 4,
      "recurrenceDays": ["abc123"],
      "recurrenceInterval": 123,
      "recurrenceType": "xyz789",
      "status": "completed",
      "streakFreezesAvailable": 987,
      "streakFreezesUsed": 123,
      "streakRepairEligibleUntil": "abc123",
      "streakRepairedCount": 987,
      "targetAmount": 123.45,
      "targetDateTime": "abc123",
      "totalCheckIns": 987,
      "unit": "xyz789",
      "updatedAtTime": "xyz789",
      "user": User
    }
  }
}

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": "abc123",
  "before": "abc123",
  "employeeId": "4",
  "first": 123,
  "kind": "xyz789",
  "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 {
      ...UserFragment
    }
    mutualAllies
    name
    publicId
  }
}
Variables
{"limit": 123, "userId": 4}
Response
{
  "data": {
    "recommendedCommunities": [
      {
        "activeMembers": 987,
        "category": "xyz789",
        "coverImage": "xyz789",
        "description": "abc123",
        "isRecommended": false,
        "matchScore": 123,
        "members": [User],
        "mutualAllies": 987,
        "name": "abc123",
        "publicId": "4"
      }
    ]
  }
}

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": 987,
  "query": "abc123"
}
Response
{
  "data": {
    "searchUsers": {
      "edges": [UserSearchResultEdge],
      "nodes": [UserSearchResult],
      "pageInfo": PageInfo
    }
  }
}

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": 987}
Response
{
  "data": {
    "suggestedAllies": [
      {
        "allyStatus": "ACCEPTED",
        "firstName": "xyz789",
        "lastName": "abc123",
        "mutualCount": 123,
        "photo": UserPhoto,
        "publicId": "xyz789",
        "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": false,
      "currentAdminPublicId": "xyz789",
      "currentAdminRoleList": ["abc123"],
      "databaseReachable": false,
      "deployRevision": "xyz789",
      "deployTimestamp": "abc123",
      "litellmReachable": true,
      "redisReachable": false,
      "sidekiqReachable": false
    }
  }
}

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
    totalGoals
    totalMembers
  }
}
Variables
{"limit": 987}
Response
{
  "data": {
    "trendingCommunities": [
      {
        "activeMembers": 987,
        "category": "abc123",
        "coverImage": "abc123",
        "description": "abc123",
        "growthRate": 987.65,
        "isTrending": true,
        "name": "xyz789",
        "publicId": 4,
        "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": 987}
Response
{
  "data": {
    "unifiedFeed": {
      "hasMore": true,
      "items": [UnifiedFeedItem],
      "totalCount": 987
    }
  }
}

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
    }
    completedCommunityChallenges {
      ...ChallengeParticipantFragment
    }
    createdAtTime
    currentInsights {
      ...InsightPackFragment
    }
    daysSinceLastActive
    demo
    details {
      ...UserDetailFragment
    }
    email
    emailVerified
    feedItems {
      ...UserFeedItemFragment
    }
    firstName
    goalMotivationProfile {
      ...GoalMotivationProfileFragment
    }
    goals {
      ...GoalFragment
    }
    graceDays
    hasAlly
    hasCreatedFromTemplate
    hasDigestEnabled
    isSupporter
    lastDigestSentAt
    lastName
    latestEnneagramAssessment {
      ...EnneagramAssessmentFragment
    }
    level
    longestStreak
    nextLevelThreshold
    nextOnTheShelfBadge {
      ...NextBadgeFragment
    }
    notifications {
      ...UserNotificationFragment
    }
    onboardingStatus {
      ...OnboardingStatusFragment
    }
    photo {
      ...UserPhotoFragment
    }
    progressToNextLevel
    publicId
    recentlyUnlockedBadges {
      ...RecentlyUnlockedBadgeFragment
    }
    requiredCheckinsCompleteToday
    showcasedAchievements
    signInDates
    signupAgeDays
    stats {
      ...UserStatsFragment
    }
    streak
    streakRepairOffer {
      ...StreakRepairOfferFragment
    }
    supporterTier
    supporterUntil
    timeToFirstGoalSeconds
    todaysMood
    updatedAtTime
    username
    welcomeBackOffer {
      ...WelcomeBackOfferFragment
    }
    xp
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "user": {
      "achievementStats": AchievementStats,
      "actions": [UserAction],
      "admin": true,
      "adminRoles": ["xyz789"],
      "coachingPreferences": CoachingPreferences,
      "completedCommunityChallenges": [
        ChallengeParticipant
      ],
      "createdAtTime": "abc123",
      "currentInsights": [InsightPack],
      "daysSinceLastActive": 123,
      "demo": true,
      "details": UserDetail,
      "email": "abc123",
      "emailVerified": false,
      "feedItems": [UserFeedItem],
      "firstName": "xyz789",
      "goalMotivationProfile": GoalMotivationProfile,
      "goals": [Goal],
      "graceDays": ["abc123"],
      "hasAlly": false,
      "hasCreatedFromTemplate": true,
      "hasDigestEnabled": true,
      "isSupporter": true,
      "lastDigestSentAt": "abc123",
      "lastName": "abc123",
      "latestEnneagramAssessment": EnneagramAssessment,
      "level": 123,
      "longestStreak": 123,
      "nextLevelThreshold": 987,
      "nextOnTheShelfBadge": NextBadge,
      "notifications": [UserNotification],
      "onboardingStatus": OnboardingStatus,
      "photo": UserPhoto,
      "progressToNextLevel": 123.45,
      "publicId": 4,
      "recentlyUnlockedBadges": [RecentlyUnlockedBadge],
      "requiredCheckinsCompleteToday": false,
      "showcasedAchievements": ["abc123"],
      "signInDates": ["xyz789"],
      "signupAgeDays": 123,
      "stats": UserStats,
      "streak": 123,
      "streakRepairOffer": StreakRepairOffer,
      "supporterTier": "xyz789",
      "supporterUntil": ISO8601DateTime,
      "timeToFirstGoalSeconds": 123,
      "todaysMood": "abc123",
      "updatedAtTime": "abc123",
      "username": "xyz789",
      "welcomeBackOffer": WelcomeBackOffer,
      "xp": 123
    }
  }
}

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": "abc123",
        "firstName": "abc123",
        "id": "4",
        "lastName": "xyz789",
        "mutualCount": 123,
        "mutualStreakCount": 123,
        "partnerStatus": "xyz789",
        "photo": UserPhoto,
        "publicId": "xyz789",
        "status": "abc123",
        "user": PendingAllyUser,
        "username": "abc123"
      }
    ]
  }
}

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
    allyStatus
    firstName
    lastName
    level
    longestStreak
    nextLevelThreshold
    nextOnTheShelfBadge {
      ...NextBadgeFragment
    }
    photo {
      ...UserPhotoFragment
    }
    progressToNextLevel
    publicGoals {
      ...PublicGoalFragment
    }
    publicId
    showcasedAchievements
    signInDates
    signupAgeDays
    streak
    unlockedBadges {
      ...RecentlyUnlockedBadgeFragment
    }
    username
    xp
  }
}
Variables
{"username": "xyz789"}
Response
{
  "data": {
    "userByUsername": {
      "achievementStats": AchievementStats,
      "alliesCount": 123,
      "allyStatus": "xyz789",
      "firstName": "abc123",
      "lastName": "xyz789",
      "level": 123,
      "longestStreak": 987,
      "nextLevelThreshold": 123,
      "nextOnTheShelfBadge": NextBadge,
      "photo": UserPhoto,
      "progressToNextLevel": 123.45,
      "publicGoals": [PublicGoal],
      "publicId": 4,
      "showcasedAchievements": ["xyz789"],
      "signInDates": ["abc123"],
      "signupAgeDays": 987,
      "streak": 123,
      "unlockedBadges": [RecentlyUnlockedBadge],
      "username": "abc123",
      "xp": 987
    }
  }
}

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": 123
}
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": ["abc123"],
      "userAlly": UserAlly
    }
  }
}

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": ["xyz789"],
      "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": ["xyz789"],
      "goal": Goal
    }
  }
}

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

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": ["xyz789"],
      "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": ["xyz789"]
    }
  }
}

addGoal

Description

Creates a new goal for the authenticated user.

Response

Returns an AddGoalPayload!

Arguments
Name Description
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.
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.
private - Boolean 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").

Example

Query
mutation addGoal(
  $content: String,
  $daysToUpdate: Int,
  $durationMinutes: Int,
  $file: Upload,
  $fromTemplateId: ID,
  $goalCategoryId: ID,
  $goalTypeId: ID,
  $imageUrl: String,
  $lifeArea: String,
  $milestones: [MilestoneInput!],
  $name: String!,
  $parentGoalId: ID,
  $private: Boolean,
  $recurrenceDays: [String!],
  $recurrenceInterval: Int,
  $recurrenceType: String,
  $targetDate: String
) {
  addGoal(
    content: $content,
    daysToUpdate: $daysToUpdate,
    durationMinutes: $durationMinutes,
    file: $file,
    fromTemplateId: $fromTemplateId,
    goalCategoryId: $goalCategoryId,
    goalTypeId: $goalTypeId,
    imageUrl: $imageUrl,
    lifeArea: $lifeArea,
    milestones: $milestones,
    name: $name,
    parentGoalId: $parentGoalId,
    private: $private,
    recurrenceDays: $recurrenceDays,
    recurrenceInterval: $recurrenceInterval,
    recurrenceType: $recurrenceType,
    targetDate: $targetDate
  ) {
    errors
    goal {
      ...GoalFragment
    }
  }
}
Variables
{
  "content": "xyz789",
  "daysToUpdate": 123,
  "durationMinutes": 987,
  "file": Upload,
  "fromTemplateId": 4,
  "goalCategoryId": "4",
  "goalTypeId": "4",
  "imageUrl": "xyz789",
  "lifeArea": "abc123",
  "milestones": [MilestoneInput],
  "name": "abc123",
  "parentGoalId": 4,
  "private": false,
  "recurrenceDays": ["xyz789"],
  "recurrenceInterval": 123,
  "recurrenceType": "abc123",
  "targetDate": "abc123"
}
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": "xyz789",
  "clientTimestamp": "abc123",
  "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": "abc123",
  "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": ["abc123"]
    }
  }
}

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": ["abc123"],
      "postComment": PostComment
    }
  }
}

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": "xyz789",
  "editedPayload": "xyz789"
}
Response
{
  "data": {
    "approveAiArtifact": {
      "artifact": AiArtifact,
      "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": "xyz789",
  "flagIds": ["xyz789"],
  "reason": "abc123"
}
Response
{
  "data": {
    "bulkReviewContentFlags": {
      "errors": ["abc123"],
      "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": true
    }
  }
}

checkInHabit

Description

Records a one-tap check-in for a habit goal.

Response

Returns a CheckInHabitPayload!

Arguments
Name Description
goalId - ID! public_id of the habit goal to check in.

Example

Query
mutation checkInHabit($goalId: ID!) {
  checkInHabit(goalId: $goalId) {
    errors
    goal {
      ...GoalFragment
    }
    goalEvent {
      ...GoalEventFragment
    }
  }
}
Variables
{"goalId": "4"}
Response
{
  "data": {
    "checkInHabit": {
      "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": "abc123"}
Response
{
  "data": {
    "checkValidUsername": {
      "errors": ["xyz789"],
      "result": Result
    }
  }
}

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": ["abc123"],
      "goal": Goal,
      "user": User
    }
  }
}

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": ["abc123"],
      "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": ["xyz789"]
    }
  }
}

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": "abc123",
  "description": "xyz789",
  "guidelines": "xyz789",
  "name": "xyz789",
  "privacy": "abc123"
}
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": "abc123",
  "endDate": ISO8601Date,
  "name": "xyz789",
  "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": "xyz789",
  "type": "xyz789"
}
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": "xyz789",
  "isOfficial": false,
  "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).
title - String! Title of the feedback post (max 200 chars).

Example

Query
mutation createFeedbackPost(
  $category: String!,
  $description: String,
  $title: String!
) {
  createFeedbackPost(
    category: $category,
    description: $description,
    title: $title
  ) {
    errors
    feedbackPost {
      ...FeedbackPostFragment
    }
  }
}
Variables
{
  "category": "xyz789",
  "description": "abc123",
  "title": "abc123"
}
Response
{
  "data": {
    "createFeedbackPost": {
      "errors": ["xyz789"],
      "feedbackPost": FeedbackPost
    }
  }
}

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": ["abc123"],
      "success": true
    }
  }
}

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": ["abc123"],
      "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": "abc123"
}
Response
{
  "data": {
    "deleteDemoEntity": {
      "errors": ["abc123"],
      "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": ["xyz789"],
      "result": Result
    }
  }
}

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": false}}}

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": ["xyz789"],
      "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": ["xyz789"],
      "jobId": "xyz789"
    }
  }
}

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": ["abc123"],
      "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": "xyz789"}
Response
{
  "data": {
    "enqueueScopeReset": {
      "errors": ["xyz789"],
      "jobId": "abc123",
      "scope": "abc123"
    }
  }
}

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": "abc123"}
Response
{
  "data": {
    "executeGdprDeletion": {
      "errors": ["abc123"],
      "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) {
    draft {
      ...GoalDraftFragment
    }
  }
}
Variables
{"idea": "xyz789"}
Response
{"data": {"generateGoalDraft": {"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
  ) {
    milestones
  }
}
Variables
{
  "goalContext": "abc123",
  "goalName": "abc123"
}
Response
{
  "data": {
    "generateMilestones": {
      "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
    suggestedActions {
      ...CoachActionFragment
    }
  }
}
Variables
{
  "goalId": "abc123",
  "page": "xyz789",
  "userMessage": "abc123"
}
Response
{
  "data": {
    "getAdvice": {
      "advice": "xyz789",
      "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": "abc123"}
Response
{
  "data": {
    "getBillingPortalUrl": {
      "errors": ["abc123"],
      "portalUrl": "xyz789"
    }
  }
}

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) {
    ctaLabel
    insightId
    insightType
    message
    title
  }
}
Variables
{"pageContext": "abc123"}
Response
{
  "data": {
    "getInsight": {
      "ctaLabel": "xyz789",
      "insightId": "abc123",
      "insightType": "xyz789",
      "message": "abc123",
      "title": "abc123"
    }
  }
}

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": ["xyz789"],
      "success": false
    }
  }
}

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": ["abc123"],
      "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": ["xyz789"],
      "result": Result
    }
  }
}

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

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": ["xyz789"]
    }
  }
}

recordCriticalPathPlay

Description

Records a completed Critical Path play for today. Idempotent — re-submitting returns the original play.

Response

Returns a RecordCriticalPathPlayPayload!

Arguments
Name Description
elapsedSeconds - Int! Time taken to solve the puzzle in seconds (1–86400).

Example

Query
mutation recordCriticalPathPlay($elapsedSeconds: Int!) {
  recordCriticalPathPlay(elapsedSeconds: $elapsedSeconds) {
    errors
    status {
      ...CriticalPathPlayStatusFragment
    }
    stimXpEarned
  }
}
Variables
{"elapsedSeconds": 123}
Response
{
  "data": {
    "recordCriticalPathPlay": {
      "errors": ["abc123"],
      "status": CriticalPathPlayStatus,
      "stimXpEarned": 987
    }
  }
}

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": "xyz789", "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
  ) {
    description
  }
}
Variables
{
  "currentDescription": "xyz789",
  "goalName": "abc123"
}
Response
{
  "data": {
    "refineDescription": {
      "description": "abc123"
    }
  }
}

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": "xyz789"
}
Response
{
  "data": {
    "rejectAiArtifact": {
      "artifact": AiArtifact,
      "errors": ["xyz789"]
    }
  }
}

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": ["xyz789"],
      "success": false
    }
  }
}

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": ["abc123"],
      "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": "xyz789",
  "reason": "abc123",
  "reportableId": 4,
  "reportableType": "abc123"
}
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": ["abc123"],
      "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": true
    }
  }
}

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": ["abc123"],
      "success": true,
      "user": User
    }
  }
}

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": ["abc123"],
      "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": ["abc123"]
    }
  }
}

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": ["abc123"]
    }
  }
}

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

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": false,
      "errors": ["xyz789"],
      "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": ["abc123"],
      "success": true
    }
  }
}

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": ["abc123"],
      "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": ["xyz789"],
      "userAlly": UserAlly
    }
  }
}

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": "xyz789"}
Response
{
  "data": {
    "setCriticalPathActiveTheme": {
      "errors": ["xyz789"],
      "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": ["xyz789"],
      "preferences": CriticalPathReminderPreferences
    }
  }
}

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": true}
Response
{
  "data": {
    "setWeeklyDigestPreferences": {
      "errors": ["xyz789"],
      "preferences": WeeklyDigestPreferences
    }
  }
}

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

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": ["abc123"],
      "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": "xyz789"
}
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": ["xyz789"]
    }
  }
}

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
timezone - String IANA timezone string from the client (e.g. "America/Chicago"). Used to evaluate day boundaries for streak calculations.

Example

Query
mutation syncUser($timezone: String) {
  syncUser(timezone: $timezone) {
    errors
    firstSignIn
    user {
      ...UserFragment
    }
  }
}
Variables
{"timezone": "xyz789"}
Response
{
  "data": {
    "syncUser": {
      "errors": ["xyz789"],
      "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": ["xyz789"],
      "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": ["abc123"],
      "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": "xyz789", "goalEventId": 4}
Response
{
  "data": {
    "toggleGoalEventReaction": {
      "errors": ["abc123"],
      "goalEventReaction": GoalEventReaction
    }
  }
}

triggerAiRun

Response

Returns a TriggerAiRunPayload!

Arguments
Name Description
employeeId - String!

Example

Query
mutation triggerAiRun($employeeId: String!) {
  triggerAiRun(employeeId: $employeeId) {
    errors
    run {
      ...AiRunFragment
    }
  }
}
Variables
{"employeeId": "abc123"}
Response
{
  "data": {
    "triggerAiRun": {
      "errors": ["xyz789"],
      "run": AiRun
    }
  }
}

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
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,
  $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,
    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,
  "description": "abc123",
  "employeeId": "xyz789",
  "mcpServers": ["xyz789"],
  "modelPreference": "xyz789",
  "monthlyBudgetCents": 123,
  "name": "abc123",
  "postFilterSkill": "xyz789",
  "scheduleCron": "abc123",
  "skillRefs": ["xyz789"],
  "taskPrompt": "xyz789"
}
Response
{
  "data": {
    "updateAiEmployee": {
      "employee": AiEmployee,
      "errors": ["xyz789"]
    }
  }
}

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": "xyz789",
  "persona": "abc123",
  "rhythm": "abc123",
  "toneBrevity": 123,
  "toneWarmth": 987
}
Response
{
  "data": {
    "updateCoachingPreferences": {
      "coachingPreferences": CoachingPreferences,
      "errors": ["abc123"]
    }
  }
}

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": ["abc123"]
    }
  }
}

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": "abc123"
}
Response
{
  "data": {
    "updateFeedbackPostStatus": {
      "errors": ["xyz789"],
      "feedbackPost": FeedbackPost
    }
  }
}

updateGoal

Description

Updates an existing goal owned by the authenticated user.

Response

Returns an UpdateGoalPayload!

Arguments
Name Description
completed - Boolean When true, marks the goal as completed.
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.
imageUrl - String Updated URL of a cover image for the goal.
name - String Updated display name for the goal.
private - Boolean 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").

Example

Query
mutation updateGoal(
  $completed: Boolean,
  $content: String,
  $daysToUpdate: Int,
  $deleted: Boolean,
  $durationMinutes: Int,
  $file: Upload,
  $goalCategoryId: ID,
  $goalId: ID!,
  $goalTypeId: ID,
  $imageUrl: String,
  $name: String,
  $private: Boolean,
  $recurrenceDays: [String!],
  $recurrenceInterval: Int,
  $recurrenceType: String,
  $steps: [StepInput!],
  $targetDate: String
) {
  updateGoal(
    completed: $completed,
    content: $content,
    daysToUpdate: $daysToUpdate,
    deleted: $deleted,
    durationMinutes: $durationMinutes,
    file: $file,
    goalCategoryId: $goalCategoryId,
    goalId: $goalId,
    goalTypeId: $goalTypeId,
    imageUrl: $imageUrl,
    name: $name,
    private: $private,
    recurrenceDays: $recurrenceDays,
    recurrenceInterval: $recurrenceInterval,
    recurrenceType: $recurrenceType,
    steps: $steps,
    targetDate: $targetDate
  ) {
    errors
    goal {
      ...GoalFragment
    }
  }
}
Variables
{
  "completed": true,
  "content": "abc123",
  "daysToUpdate": 123,
  "deleted": false,
  "durationMinutes": 123,
  "file": Upload,
  "goalCategoryId": 4,
  "goalId": 4,
  "goalTypeId": 4,
  "imageUrl": "abc123",
  "name": "abc123",
  "private": false,
  "recurrenceDays": ["abc123"],
  "recurrenceInterval": 987,
  "recurrenceType": "abc123",
  "steps": [StepInput],
  "targetDate": "abc123"
}
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": "abc123",
  "experience": "abc123",
  "socialContext": "abc123",
  "workTime": "xyz789"
}
Response
{
  "data": {
    "updateGoalMotivationSnapshot": {
      "errors": ["xyz789"],
      "goalMotivationProfile": GoalMotivationProfile
    }
  }
}

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": ["xyz789"],
      "success": false
    }
  }
}

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.
password - String A new password for the user account.
passwordConfirmation - String Confirmation of the new password. Must match the password argument.
username - String A new unique username for the user.

Example

Query
mutation updateUser(
  $deleteUser: Boolean,
  $email: String,
  $firstName: String,
  $lastName: String,
  $password: String,
  $passwordConfirmation: String,
  $username: String
) {
  updateUser(
    deleteUser: $deleteUser,
    email: $email,
    firstName: $firstName,
    lastName: $lastName,
    password: $password,
    passwordConfirmation: $passwordConfirmation,
    username: $username
  ) {
    errors
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "deleteUser": true,
  "email": "abc123",
  "firstName": "xyz789",
  "lastName": "xyz789",
  "password": "xyz789",
  "passwordConfirmation": "abc123",
  "username": "abc123"
}
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": "abc123"
}
Response
{
  "data": {
    "updateUserPhoto": {
      "errors": ["xyz789"],
      "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": ["xyz789"], "userId": 4}
Response
{
  "data": {
    "updateUserRoles": {
      "errors": ["abc123"],
      "user": User
    }
  }
}

useStreakFreeze

Description

Uses a streak freeze token to preserve a habit streak on a missed day.

Response

Returns a UseStreakFreezePayload!

Arguments
Name Description
goalId - ID! public_id of the habit goal.
missedDate - String! ISO date string of the missed day to freeze.

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": ["abc123"],
      "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": ["abc123"],
      "token": "xyz789",
      "user": User
    }
  }
}

Subscriptions

actionUpdate

Description

Streams gamification action updates for a user in real time.

Response

Returns a UserAction!

Arguments
Name Description
userId - ID! public_id of the user to subscribe to actions for.

Example

Query
subscription actionUpdate($userId: ID!) {
  actionUpdate(userId: $userId) {
    acknowledged
    action
    communityName
    createdAtTime
    id
  }
}
Variables
{"userId": "4"}
Response
{
  "data": {
    "actionUpdate": {
      "acknowledged": true,
      "action": "xyz789",
      "communityName": "xyz789",
      "createdAtTime": "abc123",
      "id": 4
    }
  }
}

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": false,
      "content": "xyz789",
      "createdAtTime": "abc123",
      "detailsJson": "abc123",
      "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
}

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": ["xyz789"],
  "goal": Goal
}

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": "xyz789",
  "lastName": "abc123",
  "longestMutualStreak": 123,
  "mutualStreakCount": 123,
  "mutualStreakLastDate": ISO8601Date,
  "nudgeSentToday": true,
  "partnerCheckedInToday": true,
  "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.
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": 123,
  "currentRankName": "xyz789",
  "currentVolume": 123,
  "currentXp": 987,
  "last7DaysXp": [123],
  "nextRankName": "xyz789",
  "rarePlusCount": 123,
  "totalCount": 123,
  "unlockedCount": 987,
  "xpToNextRank": 123
}

AcknowledgeActionPayload

Description

Autogenerated return type of AcknowledgeAction.

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

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": "abc123",
  "type": "abc123",
  "userName": "abc123"
}

AddCommunitySuggestionPayload

Description

Autogenerated return type of AddCommunitySuggestion.

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

AddGoalEventCommentPayload

Description

Autogenerated return type of AddGoalEventComment.

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

AddGoalEventPayload

Description

Autogenerated return type of AddGoalEvent.

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

AddGoalPayload

Description

Autogenerated return type of AddGoal.

Fields
Field Name Description
errors - [String!]!
goal - Goal
Example
{
  "errors": ["xyz789"],
  "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": ["abc123"],
  "moodLog": MoodLog
}

AddPostCommentPayload

Description

Autogenerated return type of AddPostComment.

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

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": 987,
  "targetPublicId": "4",
  "targetType": "xyz789"
}

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.
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": 987,
  "budgetUtilizationPercent": 987.65,
  "dailySeries": [DailyUsagePoint],
  "perFeature": [FeatureUsagePoint],
  "perModel": [ModelUsagePoint],
  "totalCalls": 123,
  "totalSpendCents": 987,
  "totalTokens": 987
}

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": 987,
  "growthData": [GrowthDataPoint],
  "pendingFlags": 987,
  "pendingReports": 123,
  "publicGoals": 987,
  "recentActivity": [ActivityItem],
  "supporterStats": SupporterStats,
  "totalEncouragements": 123,
  "totalEvents": 987,
  "totalGoals": 123,
  "totalMilestones": 123,
  "totalUpdates": 123,
  "totalUsers": 987,
  "usersLast30Days": 987,
  "usersLast7Days": 987
}

AiArtifact

Fields
Field Name Description
aiRun - AiRun!
approvalStatus - String!
createdAt - ISO8601DateTime!
deliveredAt - ISO8601DateTime
deliveryMetadata - JSON
editDistance - Float
id - String!
kind - String!
payload - JSON!
rejectionReason - String
title - String
Example
{
  "aiRun": AiRun,
  "approvalStatus": "xyz789",
  "createdAt": ISO8601DateTime,
  "deliveredAt": ISO8601DateTime,
  "deliveryMetadata": {},
  "editDistance": 123.45,
  "id": "abc123",
  "kind": "abc123",
  "payload": {},
  "rejectionReason": "abc123",
  "title": "xyz789"
}

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!
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",
  "currentMonthCost": 987,
  "description": "xyz789",
  "id": "abc123",
  "lastRun": AiRun,
  "mcpServers": ["xyz789"],
  "modelPreference": "abc123",
  "monthlyBudgetCents": 987,
  "name": "abc123",
  "nextRunAt": ISO8601DateTime,
  "postFilterSkill": "xyz789",
  "promotionCriteria": PromotionCriteria,
  "roleKey": "abc123",
  "scheduleCron": "abc123",
  "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
}

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": 987,
  "costCents": 987,
  "createdAt": ISO8601DateTime,
  "durationSeconds": 123,
  "errorMessage": "abc123",
  "finishedAt": ISO8601DateTime,
  "id": "abc123",
  "numTurns": 987,
  "promptTokens": 123,
  "runLog": {},
  "startedAt": ISO8601DateTime,
  "status": "abc123",
  "triggeredBy": "xyz789"
}

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": "xyz789",
  "allyId": 4,
  "allyName": "xyz789",
  "allyPhoto": "xyz789",
  "communityId": "4",
  "communityName": "abc123",
  "details": {},
  "id": "4",
  "kind": "ACHIEVEMENT",
  "target": "abc123",
  "timestamp": "abc123"
}

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": "xyz789",
  "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": "abc123",
  "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": "xyz789",
  "username": "xyz789"
}

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": 987,
  "autoRejectedCount": 123,
  "rejectedCount": 123,
  "weekStart": "xyz789"
}

ApproveAiArtifactPayload

Description

Autogenerated return type of ApproveAiArtifact.

Fields
Field Name Description
artifact - AiArtifact
errors - [String!]!
Example
{
  "artifact": AiArtifact,
  "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": "xyz789", "percentage": 987.65}

BlockAllyPayload

Description

Autogenerated return type of BlockAlly.

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

Boolean

Description

The Boolean scalar type represents true or false.

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": ["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": 123,
  "aiEmployeeMemories": 123,
  "communityComments": 987,
  "communityMemberships": 987,
  "communityPosts": 987,
  "goalEventEncouragements": 987,
  "goalEvents": 123,
  "goals": 123,
  "milestones": 123,
  "moodLogs": 987,
  "user": 123,
  "userActions": 987,
  "userDevices": 987
}

CascadePreview

Fields
Field Name Description
counts - CascadeCounts!
totalModels - Int!
totalRecords - Int!
Example
{
  "counts": CascadeCounts,
  "totalModels": 123,
  "totalRecords": 987
}

CategoryStats

Description

Statistics for goal categories

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

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": 123.45,
  "publicId": "4",
  "rank": 987,
  "user": User,
  "userPublicId": "abc123"
}

CheckInHabitPayload

Description

Autogenerated return type of CheckInHabit.

Fields
Field Name Description
errors - [String!]!
goal - Goal
goalEvent - GoalEvent
Example
{
  "errors": ["abc123"],
  "goal": Goal,
  "goalEvent": GoalEvent
}

CheckValidUsernamePayload

Description

Autogenerated return type of CheckValidUsername.

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

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": "abc123"
}

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": "xyz789",
  "id": "xyz789",
  "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": "xyz789",
  "role": "abc123"
}

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": 123,
  "focusPrimary": "abc123",
  "focusSecondary": "abc123",
  "persona": "abc123",
  "rhythm": "abc123",
  "toneBrevity": 987,
  "toneWarmth": 123
}

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 have been active in the past 30 days.
badges - CommunityBadges! Achievement badges earned by this community.
category - String General category label for the community (e.g. "fitness").
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.
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 30 days.
guidelines - String Community rules and posting guidelines.
healthScore - Int! Computed health score (0–100) reflecting community engagement.
imageUrl - String URL of the community avatar/icon image.
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.
isMember - Boolean! Whether the current user is a member of this community.
isVerified - Boolean! Whether the community has been verified by Objectuve admins.
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.
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,
  "badges": CommunityBadges,
  "category": "abc123",
  "coverImage": "xyz789",
  "createdAt": ISO8601DateTime,
  "createdAtTime": "xyz789",
  "demo": false,
  "description": "abc123",
  "feedItems": [CommunityFeedItem],
  "goalCategory": GoalCategory,
  "goals": [Goal],
  "growthRate": 987.65,
  "guidelines": "xyz789",
  "healthScore": 987,
  "imageUrl": "xyz789",
  "isFeatured": true,
  "isFounding": true,
  "isMember": false,
  "isVerified": true,
  "memberCount": 123,
  "members": [CommunityMember],
  "membersToDiscoverable": 123,
  "name": "abc123",
  "pastChallenges": [CommunityChallenge],
  "privacy": "xyz789",
  "private": false,
  "publicId": 4,
  "totalGoals": 123,
  "upcomingChallenges": [CommunityChallenge],
  "updatedAtTime": "abc123",
  "userProgressPercent": 987.65
}

CommunityBadges

Description

Achievement badges earned by a community, reflecting its milestones and reputation.

Fields
Field Name Description
allyMagnet - Boolean! Community has attracted a high number of ally connections between members.
club1k - Boolean! Community has reached 1,000 members.
earlySupporter - Boolean! Community was created during the early access period.
featured - Boolean! Community is currently featured on the discovery page.
perfectMonth - Boolean! All active members logged activity every day for a full month.
streak100 - Boolean! Community has collectively maintained a 100-day streak.
topActive - Boolean! Community ranks in the top tier for member activity.
topContributor - Boolean! Community has a high ratio of active contributors.
verified - Boolean! Community has been verified by Objectuve admins.
wins500 - Boolean! Members have collectively completed 500 goals.
Example
{
  "allyMagnet": false,
  "club1k": true,
  "earlySupporter": true,
  "featured": false,
  "perfectMonth": true,
  "streak100": false,
  "topActive": false,
  "topContributor": false,
  "verified": false,
  "wins500": true
}

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": "xyz789",
  "badgeName": "abc123",
  "community": Community,
  "createdAtTime": "abc123",
  "creator": User,
  "currentUserParticipant": ChallengeParticipant,
  "description": "xyz789",
  "endDate": ISO8601Date,
  "isParticipating": true,
  "name": "xyz789",
  "participantCount": 987,
  "publicId": "4",
  "startDate": ISO8601Date,
  "status": "abc123",
  "targetGoalCount": 123,
  "targetGoalType": GoalType,
  "updatedAtTime": "abc123"
}

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": "abc123",
  "date": "abc123",
  "description": "xyz789",
  "id": 4,
  "title": "xyz789"
}

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": "xyz789",
  "goal": Goal,
  "id": "4",
  "updatedAtTime": "abc123"
}

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.
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,
  "partnersCount": 987,
  "postsThisWeek": 123,
  "suggestedCommunities": [SuggestedCommunity],
  "suggestedCount": 123,
  "totalEngagement": 123,
  "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": "xyz789",
  "goalsCompleted": 987,
  "helpfulCount": 987,
  "id": "4",
  "joinedDate": "xyz789",
  "points": 123,
  "postsCount": 123,
  "rank": 987,
  "role": "abc123",
  "updatedAtTime": "xyz789",
  "user": User,
  "userPublicId": "xyz789"
}

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": "xyz789",
  "goalId": "4",
  "goalName": "abc123",
  "id": 4,
  "likes": 987,
  "timestamp": "abc123",
  "type": "abc123",
  "userId": 4,
  "userName": "abc123",
  "userPhoto": "xyz789"
}

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": "abc123",
  "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": ["abc123"],
  "goal": Goal,
  "user": User
}

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": "abc123",
  "contentPreview": "abc123",
  "createdAt": "xyz789",
  "flaggableId": 123,
  "flaggableType": "abc123",
  "id": "abc123",
  "reason": "abc123",
  "reviewedAt": "xyz789",
  "reviewerName": "abc123",
  "severity": "abc123",
  "source": "abc123",
  "status": "abc123"
}

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": "abc123",
  "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": "xyz789",
  "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": "abc123",
  "errors": ["abc123"]
}

CreateCommunityChallengePayload

Description

Autogenerated return type of CreateCommunityChallenge.

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

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": ["abc123"],
  "feedbackPost": FeedbackPost
}

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-100) 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().
Example
{
  "completed": false,
  "elapsedSeconds": 987,
  "percentile": 987,
  "puzzleDate": ISO8601Date,
  "puzzleSeed": 987
}

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": false,
  "timeOfDay": "abc123",
  "timezone": "xyz789",
  "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": "abc123",
  "unlockThreshold": 123
}

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
}

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": ["xyz789"], "success": false}

DeleteNotificationPayload

Description

Autogenerated return type of DeleteNotification.

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

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": "xyz789",
  "private": true
}

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": "xyz789",
  "finishedAt": ISO8601DateTime,
  "scope": "xyz789",
  "startedAt": ISO8601DateTime,
  "status": "abc123",
  "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": "abc123",
  "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": 987,
  "aiEmployees": 123,
  "aiRuns": 987,
  "communities": 987,
  "feedItems": 987,
  "feedbackComments": 123,
  "feedbackPosts": 123,
  "feedbackVotes": 123,
  "goalEvents": 987,
  "goals": 123,
  "totalRecords": 123,
  "userAllies": 987,
  "users": 123
}

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": "abc123",
  "lastName": "xyz789"
}

DismissEnneagramCardPayload

Description

Autogenerated return type of DismissEnneagramCard.

Fields
Field Name Description
success - Boolean!
Example
{"success": true}

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": 987,
  "id": 4,
  "scores": {},
  "tritype": "xyz789",
  "wing": 123
}

EnqueueClearPayload

Description

Autogenerated return type of EnqueueClear.

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

EnqueueReseedPayload

Description

Autogenerated return type of EnqueueReseed.

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

EnqueueScopeResetPayload

Description

Autogenerated return type of EnqueueScopeReset.

Fields
Field Name Description
errors - [String!]!
jobId - String
scope - String
Example
{
  "errors": ["xyz789"],
  "jobId": "xyz789",
  "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": ["xyz789"],
  "gdprRequest": GdprRequest
}

ExecuteExportPayload

Description

Autogenerated return type of ExecuteExport.

Fields
Field Name Description
errors - [String!]!
gdprRequest - GdprRequest
Example
{
  "errors": ["xyz789"],
  "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": "abc123",
  "tokenCount": 123
}

FeedbackCategoryBreakdown

Fields
Field Name Description
count - Int!
name - String!
Example
{"count": 123, "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.
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",
  "title": "abc123",
  "user": User,
  "voteCount": 123,
  "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": 987,
  "declinedPosts": 987,
  "inProgressPosts": 987,
  "openPosts": 123,
  "plannedPosts": 987,
  "postsThisWeek": 987,
  "topPosts": [FeedbackPost],
  "totalComments": 123,
  "totalPosts": 123,
  "totalVotes": 123
}

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": "xyz789",
  "status": "xyz789"
}

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
draft - GoalDraft
Example
{"draft": GoalDraft}

GenerateMilestonesPayload

Description

Autogenerated return type of GenerateMilestones.

Fields
Field Name Description
milestones - [String!]
Example
{"milestones": ["abc123"]}

GetAdvicePayload

Description

Autogenerated return type of GetAdvice.

Fields
Field Name Description
advice - String
suggestedActions - [CoachAction!]! Deterministically derived action chips (0-2). No LLM call — derived from goal/mood signals.
Example
{
  "advice": "xyz789",
  "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
ctaLabel - String
insightId - String
insightType - String
message - String
title - String
Example
{
  "ctaLabel": "abc123",
  "insightId": "abc123",
  "insightType": "xyz789",
  "message": "abc123",
  "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.
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.
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.
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.
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.
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").
parentGoalId - String public_id of the parent goal if this is a milestone/sub-goal.
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.
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.
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.
Example
{
  "allEvents": [GoalEvent],
  "averageCheckInTime": 987.65,
  "category": GoalCategory,
  "checkedInToday": false,
  "comments": [GoalEventComment],
  "completed": true,
  "completedAtTime": "xyz789",
  "completionRate": 987.65,
  "content": "abc123",
  "createdAtTime": "abc123",
  "currentAmount": 123.45,
  "dayOfWeekDistribution": [123],
  "daysToUpdate": 987,
  "demo": false,
  "dueToday": true,
  "durationMinutes": 123,
  "encouragements": [GoalEventEncouragement],
  "events": [GoalEvent],
  "fromTemplate": GoalTemplate,
  "fromTemplateName": "abc123",
  "habitCompletions": [HabitCompletion],
  "habitStreak": 123,
  "imageUrl": "xyz789",
  "kind": GoalType,
  "lastCheckedInDate": "xyz789",
  "lifeArea": "abc123",
  "longestHabitStreak": 123,
  "milestones": [Goal],
  "name": "xyz789",
  "parentGoalId": "xyz789",
  "position": 123,
  "preBreakHabitStreak": 123,
  "private": false,
  "publicId": "4",
  "recurrenceDays": ["abc123"],
  "recurrenceInterval": 123,
  "recurrenceType": "xyz789",
  "status": "completed",
  "streakFreezesAvailable": 123,
  "streakFreezesUsed": 987,
  "streakRepairEligibleUntil": "abc123",
  "streakRepairedCount": 987,
  "targetAmount": 123.45,
  "targetDateTime": "xyz789",
  "totalCheckIns": 987,
  "unit": "abc123",
  "updatedAtTime": "abc123",
  "user": User
}

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

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": "abc123",
  "kindId": "4",
  "kindName": "abc123",
  "milestones": ["abc123"],
  "targetDate": "abc123",
  "title": "abc123",
  "why": "abc123"
}

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.
Example
{
  "clientTimestampTime": "abc123",
  "comments": [GoalEventComment],
  "content": "abc123",
  "createdAtTime": "xyz789",
  "encouragements": [GoalEventEncouragement],
  "goal": Goal,
  "id": 4,
  "media": GoalMedia,
  "milestoneName": "abc123",
  "mood": "xyz789",
  "publicId": "4",
  "reactions": [GoalEventReaction]
}

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": "abc123",
  "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": "xyz789",
  "createdAtTime": "xyz789",
  "goal": Goal,
  "id": 4,
  "updatedAtTime": "xyz789",
  "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": "abc123",
  "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": "xyz789",
  "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": "abc123",
  "completedAt": "xyz789",
  "experience": "xyz789",
  "socialContext": "xyz789",
  "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": 987.65,
  "dataPoints": [ProgressDataPoint],
  "pace": "xyz789",
  "streakData": [ProgressDataPoint],
  "totalEvents": 123
}

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 goals (0–100).
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": 123,
  "needAttentionCount": 987,
  "totalGoals": 987
}

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": "abc123",
  "milestones": [GoalTemplateMilestone],
  "name": "xyz789",
  "publicId": "4",
  "theme": "abc123"
}

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": "xyz789",
  "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": "xyz789",
  "displayNumber": 123,
  "id": "4",
  "name": "abc123"
}

GrowthDataPoint

Description

Daily growth metrics for users and goals

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

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.
streakFreezeUsed - Boolean! Whether a streak freeze was used for this date.
Example
{
  "completedDate": "xyz789",
  "createdAt": "xyz789",
  "id": "4",
  "streakFreezeUsed": false
}

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": "abc123",
  "id": "xyz789",
  "message": "xyz789",
  "page": "xyz789",
  "title": "abc123",
  "type": "abc123"
}

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

InviteAllyToCommunityPayload

Description

Autogenerated return type of InviteAllyToCommunity.

Fields
Field Name Description
alreadyInvited - Boolean!
errors - [String!]!
success - Boolean!
Example
{
  "alreadyInvited": false,
  "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
}

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}

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": 987,
  "name": "abc123",
  "order": 987
}

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-2.5-flash).
tokenCount - Int! Sum of total_tokens over the window.
Example
{
  "callCount": 987,
  "costCents": 987,
  "model": "abc123",
  "tokenCount": 987
}

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": "abc123",
  "goal": Goal,
  "mood": "abc123",
  "note": "xyz789",
  "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": 987.65
}

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": 123,
  "signedIn": 987,
  "ttfgP50Seconds": 123,
  "ttfgP90Seconds": 123,
  "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": "abc123",
  "progress": OnboardingProgress,
  "version": "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": "xyz789",
  "hasNextPage": true,
  "hasPreviousPage": true,
  "startCursor": "xyz789"
}

PauseAiEmployeePayload

Description

Autogenerated return type of PauseAiEmployee.

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

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": "abc123",
  "username": "abc123"
}

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": 987, "moderationQueue": 123, "reviewQueue": 987}

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": "xyz789",
  "interval": "xyz789",
  "name": "xyz789",
  "priceCents": 987,
  "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": 123,
  "date": "xyz789",
  "label": "xyz789"
}

PromotionCriteria

Fields
Field Name Description
approvalRatePct - Int!
blockReason - String
canPromoteTo - String
promotionConfirmedAt - ISO8601DateTime
recentRejections - Int!
weeksActive - Int!
Example
{
  "approvalRatePct": 987,
  "blockReason": "abc123",
  "canPromoteTo": "xyz789",
  "promotionConfirmedAt": ISO8601DateTime,
  "recentRejections": 987,
  "weeksActive": 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": "abc123",
  "milestonesCount": 987,
  "name": "xyz789",
  "publicId": 4,
  "targetAmount": 123.45,
  "targetDateTime": "xyz789"
}

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).
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.
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").
xp - Int! Total experience points earned through goals, events, and engagement.
Example
{
  "achievementStats": AchievementStats,
  "alliesCount": 123,
  "allyStatus": "xyz789",
  "firstName": "abc123",
  "lastName": "abc123",
  "level": 987,
  "longestStreak": 987,
  "nextLevelThreshold": 987,
  "nextOnTheShelfBadge": NextBadge,
  "photo": UserPhoto,
  "progressToNextLevel": 987.65,
  "publicGoals": [PublicGoal],
  "publicId": 4,
  "showcasedAchievements": ["xyz789"],
  "signInDates": ["abc123"],
  "signupAgeDays": 123,
  "streak": 123,
  "unlockedBadges": [RecentlyUnlockedBadge],
  "username": "xyz789",
  "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": "xyz789",
  "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": ["xyz789"],
  "status": CriticalPathPlayStatus,
  "stimXpEarned": 987
}

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
description - String
Example
{"description": "xyz789"}

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}

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": ["xyz789"],
  "goal": Goal,
  "user": User
}

ReportContentPayload

Description

Autogenerated return type of ReportContent.

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

RequestDataExportPayload

Description

Autogenerated return type of RequestDataExport.

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

RequestMagicCodePayload

Description

Autogenerated return type of RequestMagicCode.

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

ResetOnboardingPayload

Description

Autogenerated return type of ResetOnboarding.

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

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": false}

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
}

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": ["xyz789"], "success": false}

SendPartnerNudgePayload

Description

Autogenerated return type of SendPartnerNudge.

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

SendPartnerRequestPayload

Description

Autogenerated return type of SendPartnerRequest.

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

SetCriticalPathActiveThemePayload

Description

Autogenerated return type of SetCriticalPathActiveTheme.

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

SetCriticalPathReminderPreferencesPayload

Description

Autogenerated return type of SetCriticalPathReminderPreferences.

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

SetWeeklyDigestPreferencesPayload

Description

Autogenerated return type of SetWeeklyDigestPreferences.

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

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": "xyz789",
  "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": "xyz789",
  "currentStimStreak": 987,
  "longestStimStreak": 987,
  "themesCatalog": [CriticalPathTheme],
  "totalStimXp": 123,
  "unlockedThemes": ["xyz789"]
}

StoreDeviceTokenPayload

Description

Autogenerated return type of StoreDeviceToken.

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

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.
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).
Example
{
  "eligible": true,
  "goalName": "xyz789",
  "goalPublicId": 4,
  "preBreakHabitStreak": 123,
  "repairEligibleUntil": "abc123",
  "repairXpCost": 123
}

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": ["abc123"]
}

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 active in the past 30 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 - [User!]! 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.
Example
{
  "activeMembers": 987,
  "category": "xyz789",
  "coverImage": "abc123",
  "description": "xyz789",
  "isRecommended": false,
  "matchScore": 987,
  "members": [User],
  "mutualAllies": 987,
  "name": "xyz789",
  "publicId": "4"
}

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": 123,
  "activeSupportersTotal": 987,
  "activeSupportersYearly": 123,
  "currency": "abc123",
  "mrrCents": 987
}

SyncUserPayload

Description

Autogenerated return type of SyncUser.

Fields
Field Name Description
errors - [String!]!
firstSignIn - Boolean!
user - User
Example
{
  "errors": ["abc123"],
  "firstSignIn": false,
  "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": false,
  "currentAdminPublicId": "abc123",
  "currentAdminRoleList": ["xyz789"],
  "databaseReachable": true,
  "deployRevision": "abc123",
  "deployTimestamp": "abc123",
  "litellmReachable": true,
  "redisReachable": true,
  "sidekiqReachable": false
}

ToggleFeedbackVotePayload

Description

Autogenerated return type of ToggleFeedbackVote.

Fields
Field Name Description
errors - [String!]!
feedbackPost - FeedbackPost
voted - Boolean
Example
{
  "errors": ["xyz789"],
  "feedbackPost": FeedbackPost,
  "voted": false
}

ToggleFollowGoalPayload

Description

Autogenerated return type of ToggleFollowGoal.

Fields
Field Name Description
errors - [String!]!
result - Result
Example
{
  "errors": ["abc123"],
  "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
}

TrendingCommunity

Description

A community currently trending based on member growth and activity metrics.

Fields
Field Name Description
activeMembers - Int! Count of members active in the past 30 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 30 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.
totalGoals - Int! Total number of goals shared in this community.
totalMembers - Int! Total member count.
Example
{
  "activeMembers": 123,
  "category": "xyz789",
  "coverImage": "abc123",
  "description": "abc123",
  "growthRate": 987.65,
  "isTrending": false,
  "name": "xyz789",
  "publicId": "4",
  "totalGoals": 987,
  "totalMembers": 123
}

TriggerAiRunPayload

Description

Autogenerated return type of TriggerAiRun.

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

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": "xyz789",
  "actorName": "xyz789",
  "actorPhoto": "abc123",
  "badgeKey": "xyz789",
  "communityId": "abc123",
  "communityName": "abc123",
  "content": "abc123",
  "feedType": "abc123",
  "id": "abc123",
  "targetId": "abc123",
  "targetName": "xyz789",
  "targetType": "abc123",
  "timestamp": "abc123"
}

UpdateAiEmployeePayload

Description

Autogenerated return type of UpdateAiEmployee.

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

UpdateCoachingPreferencesPayload

Description

Autogenerated return type of UpdateCoachingPreferences.

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

UpdateDemoCommunityPayload

Description

Autogenerated return type of UpdateDemoCommunity.

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

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": ["xyz789"],
  "user": User
}

UpdateFeedbackPostStatusPayload

Description

Autogenerated return type of UpdateFeedbackPostStatus.

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

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
}

UpdateShowcasedAchievementsPayload

Description

Autogenerated return type of UpdateShowcasedAchievements.

Fields
Field Name Description
errors - [String!]
success - Boolean!
Example
{"errors": ["xyz789"], "success": 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.
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.
completedCommunityChallenges - [ChallengeParticipant!]! Challenge 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.
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.
feedItems - [UserFeedItem!] Personal activity feed items for the user's home timeline.
firstName - String User's given name.
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.
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.
onboardingStatus - OnboardingStatus v1.8 onboarding completion + resume state. Null until completed or backfilled.
photo - UserPhoto Profile photo for the user.
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.
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": true,
  "adminRoles": ["xyz789"],
  "coachingPreferences": CoachingPreferences,
  "completedCommunityChallenges": [ChallengeParticipant],
  "createdAtTime": "abc123",
  "currentInsights": [InsightPack],
  "daysSinceLastActive": 123,
  "demo": true,
  "details": UserDetail,
  "email": "abc123",
  "emailVerified": true,
  "feedItems": [UserFeedItem],
  "firstName": "abc123",
  "goalMotivationProfile": GoalMotivationProfile,
  "goals": [Goal],
  "graceDays": ["abc123"],
  "hasAlly": true,
  "hasCreatedFromTemplate": false,
  "hasDigestEnabled": false,
  "isSupporter": false,
  "lastDigestSentAt": "xyz789",
  "lastName": "xyz789",
  "latestEnneagramAssessment": EnneagramAssessment,
  "level": 123,
  "longestStreak": 987,
  "nextLevelThreshold": 123,
  "nextOnTheShelfBadge": NextBadge,
  "notifications": [UserNotification],
  "onboardingStatus": OnboardingStatus,
  "photo": UserPhoto,
  "progressToNextLevel": 987.65,
  "publicId": "4",
  "recentlyUnlockedBadges": [RecentlyUnlockedBadge],
  "requiredCheckinsCompleteToday": false,
  "showcasedAchievements": ["abc123"],
  "signInDates": ["xyz789"],
  "signupAgeDays": 123,
  "stats": UserStats,
  "streak": 123,
  "streakRepairOffer": StreakRepairOffer,
  "supporterTier": "xyz789",
  "supporterUntil": ISO8601DateTime,
  "timeToFirstGoalSeconds": 123,
  "todaysMood": "xyz789",
  "updatedAtTime": "xyz789",
  "username": "xyz789",
  "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": false,
  "action": "xyz789",
  "communityName": "abc123",
  "createdAtTime": "xyz789",
  "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": "xyz789",
  "content": "abc123",
  "id": 4,
  "timestamp": "xyz789",
  "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": false,
  "accountabilityPartnerSince": ISO8601DateTime,
  "createdAtTime": "abc123",
  "firstName": "xyz789",
  "id": 4,
  "lastName": "abc123",
  "mutualCount": 123,
  "mutualStreakCount": 987,
  "partnerStatus": "xyz789",
  "photo": UserPhoto,
  "publicId": "abc123",
  "status": "xyz789",
  "user": PendingAllyUser,
  "username": "abc123"
}

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
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
{
  "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": "abc123"
}

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": false,
  "content": "xyz789",
  "createdAtTime": "xyz789",
  "detailsJson": "abc123",
  "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": "xyz789"
}

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.
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.
completedCommunityChallenges - [ChallengeParticipant!]! Challenge 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.
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.
feedItems - [UserFeedItem!] Personal activity feed items for the user's home timeline.
firstName - String User's given name.
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.
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.
onboardingStatus - OnboardingStatus v1.8 onboarding completion + resume state. Null until completed or backfilled.
photo - UserPhoto Profile photo for the user.
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.
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,
  "completedCommunityChallenges": [ChallengeParticipant],
  "createdAtTime": "abc123",
  "currentInsights": [InsightPack],
  "daysSinceLastActive": 987,
  "demo": false,
  "details": UserDetail,
  "email": "abc123",
  "emailVerified": true,
  "feedItems": [UserFeedItem],
  "firstName": "abc123",
  "goalMotivationProfile": GoalMotivationProfile,
  "goals": [Goal],
  "graceDays": ["xyz789"],
  "hasAlly": true,
  "hasCreatedFromTemplate": true,
  "hasDigestEnabled": false,
  "isSupporter": true,
  "lastDigestSentAt": "abc123",
  "lastName": "xyz789",
  "latestEnneagramAssessment": EnneagramAssessment,
  "level": 123,
  "longestStreak": 987,
  "nextLevelThreshold": 987,
  "nextOnTheShelfBadge": NextBadge,
  "notifications": [UserNotification],
  "onboardingStatus": OnboardingStatus,
  "photo": UserPhoto,
  "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": 123,
  "todaysMood": "xyz789",
  "updatedAtTime": "xyz789",
  "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": "xyz789",
  "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": 987,
  "milestonesCompleted": 987,
  "milestonesCreated": 123,
  "totalGoals": 123,
  "typesUsed": ["abc123"]
}

VerifyMagicCodePayload

Description

Autogenerated return type of VerifyMagicCode.

Fields
Field Name Description
errors - [String!]!
token - String
user - User
Example
{
  "errors": ["xyz789"],
  "token": "xyz789",
  "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": true}

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": "abc123",
  "daysSinceLastActive": 123,
  "eligible": true,
  "targetGoalName": "xyz789",
  "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": 987}