Objectuve API Reference
Objectuve API
The Objectuve API is a single GraphQL endpoint with real-time WebSocket subscriptions.
GraphQL endpoint: POST /graphql
WebSocket: WS /cable
Authentication
Objectuve uses Clerk for authentication. Clerk issues RS256 JWTs verified via JWKS on the backend.
Include the Clerk session token in every authenticated request using the SessionToken header:
SessionToken: <clerk-jwt-token>
Obtain a token via Clerk.session.getToken() on the client.
Important: The header name is
SessionToken(PascalCase). It is notAuthorizationorBearer.
On first sign-in, call the syncUser mutation to create or sync the local user record. This returns firstSignIn: true for new users who need onboarding.
Key Features
- User Management — Sync Clerk profiles, manage usernames, photos, and showcased achievements
- Goal Tracking — Create goals with milestones, log progress events, track streaks and XP
- Habit Check-ins — One-tap daily check-ins with streak tracking and freeze tokens
- Communities — Create and join interest groups, share goals, post updates, view feeds
- Mood Logging — Daily check-ins (amazing / happy / calm / meh / tired / low) with optional goal linkage
- Coach Features — Generate milestones, refine descriptions, request advice, and receive personalized insights
- Gamification — XP, levels, ranks (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.
Related Resources
- Design System — Brand, tokens, and component patterns
- Documentation — Architecture, feature guides, and operations
- Storybook — Interactive component playground
API Endpoints
# Production:
https://api.objectuve.com/graphql
# Staging:
https://staging.api.objectuve.com/graphql
# Local Development:
http://localhost:3000/graphql
Version
1.0.0
Queries
accountabilityPartner
Description
Returns the active accountability partner for a user, or null if none.
Response
Returns an AccountabilityPartner
Arguments
| Name | Description |
|---|---|
userId - ID
|
public_id of the user whose accountability partner to retrieve. Defaults to the current user. |
Example
Query
query accountabilityPartner($userId: ID) {
accountabilityPartner(userId: $userId) {
accountabilityPartnerSince
firstName
lastName
longestMutualStreak
mutualStreakCount
mutualStreakLastDate
nudgeSentToday
partnerCheckedInToday
photo {
...UserPhotoFragment
}
publicId
userCheckedInToday
username
}
}
Variables
{"userId": 4}
Response
{
"data": {
"accountabilityPartner": {
"accountabilityPartnerSince": ISO8601DateTime,
"firstName": "xyz789",
"lastName": "abc123",
"longestMutualStreak": 123,
"mutualStreakCount": 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.
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!]
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
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!]
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!]
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!]
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!]
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!]
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
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!]
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.
Response
Returns a CriticalPathReminderPreferences!
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
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
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.
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
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.
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.
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!]
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
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.
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!]
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!
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!
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!
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!
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!
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.
Response
Returns a CancelSupporterSubscriptionPayload!
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.
Response
Returns a CompleteOnboardingAndCreateGoalPayload!
Example
Query
mutation completeOnboardingAndCreateGoal(
$goalCategoryId: ID,
$goalName: String!,
$onboardingAnswers: JSON
) {
completeOnboardingAndCreateGoal(
goalCategoryId: $goalCategoryId,
goalName: $goalName,
onboardingAnswers: $onboardingAnswers
) {
errors
goal {
...GoalFragment
}
user {
...UserFragment
}
}
}
Variables
{
"goalCategoryId": "4",
"goalName": "xyz789",
"onboardingAnswers": {}
}
Response
{
"data": {
"completeOnboardingAndCreateGoal": {
"errors": ["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.
Response
Returns a CreateCommunityChallengePayload!
Arguments
| Name | Description |
|---|---|
badgeIcon - String!
|
Emoji or icon for the completion badge. |
badgeName - String!
|
Name of the completion badge. |
communityId - ID!
|
public_id of the community to create the challenge in. |
description - String
|
Optional description of the challenge. |
endDate - ISO8601Date!
|
Date when the challenge ends. |
name - String!
|
Display name of the challenge. |
startDate - ISO8601Date!
|
Date when the challenge begins. |
targetGoalCount - Int
|
Number of qualifying goal events needed to complete. Defaults to 1. |
targetGoalTypeId - ID
|
Optional GoalType ID to restrict which events count. Nil means any goal event counts. |
Example
Query
mutation createCommunityChallenge(
$badgeIcon: String!,
$badgeName: String!,
$communityId: ID!,
$description: String,
$endDate: ISO8601Date!,
$name: String!,
$startDate: ISO8601Date!,
$targetGoalCount: Int,
$targetGoalTypeId: ID
) {
createCommunityChallenge(
badgeIcon: $badgeIcon,
badgeName: $badgeName,
communityId: $communityId,
description: $description,
endDate: $endDate,
name: $name,
startDate: $startDate,
targetGoalCount: $targetGoalCount,
targetGoalTypeId: $targetGoalTypeId
) {
communityChallenge {
...CommunityChallengeFragment
}
errors
}
}
Variables
{
"badgeIcon": "xyz789",
"badgeName": "abc123",
"communityId": 4,
"description": "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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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!
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.
Response
Returns a SetCriticalPathActiveThemePayload!
Arguments
| Name | Description |
|---|---|
theme - String!
|
Theme key to activate. |
Example
Query
mutation setCriticalPathActiveTheme($theme: String!) {
setCriticalPathActiveTheme(theme: $theme) {
errors
status {
...StimXpStatusFragment
}
}
}
Variables
{"theme": "xyz789"}
Response
{
"data": {
"setCriticalPathActiveTheme": {
"errors": ["xyz789"],
"status": StimXpStatus
}
}
}
setCriticalPathReminderPreferences
Description
Sets the daily reminder preferences for the authenticated user.
Response
Example
Query
mutation setCriticalPathReminderPreferences(
$enabled: Boolean!,
$timeOfDay: String,
$timezone: String
) {
setCriticalPathReminderPreferences(
enabled: $enabled,
timeOfDay: $timeOfDay,
timezone: $timezone
) {
errors
preferences {
...CriticalPathReminderPreferencesFragment
}
}
}
Variables
{
"enabled": false,
"timeOfDay": "xyz789",
"timezone": "xyz789"
}
Response
{
"data": {
"setCriticalPathReminderPreferences": {
"errors": ["xyz789"],
"preferences": CriticalPathReminderPreferences
}
}
}
setWeeklyDigestPreferences
Description
Sets the weekly digest email preferences for the authenticated user.
Response
Returns a SetWeeklyDigestPreferencesPayload!
Example
Query
mutation setWeeklyDigestPreferences(
$deliveryDay: String,
$enabled: Boolean!
) {
setWeeklyDigestPreferences(
deliveryDay: $deliveryDay,
enabled: $enabled
) {
errors
preferences {
...WeeklyDigestPreferencesFragment
}
}
}
Variables
{"deliveryDay": "abc123", "enabled": 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!
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!
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.
Response
Returns a SubmitEnneagramAssessmentPayload!
Arguments
| Name | Description |
|---|---|
answers - [AnswerInput!]!
|
Array of exactly 40 forced-choice answers. |
Example
Query
mutation submitEnneagramAssessment($answers: [AnswerInput!]!) {
submitEnneagramAssessment(answers: $answers) {
assessment {
...EnneagramAssessmentFragment
}
errors
}
}
Variables
{"answers": [AnswerInput]}
Response
{
"data": {
"submitEnneagramAssessment": {
"assessment": EnneagramAssessment,
"errors": ["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.
Response
Returns a ToggleGoalEventEncouragementPayload!
Arguments
| Name | Description |
|---|---|
goalEventId - ID!
|
public_id of the goal event to encourage or un-encourage. |
Example
Query
mutation toggleGoalEventEncouragement($goalEventId: ID!) {
toggleGoalEventEncouragement(goalEventId: $goalEventId) {
errors
goalEventEncouragement {
...GoalEventEncouragementFragment
}
}
}
Variables
{"goalEventId": "4"}
Response
{
"data": {
"toggleGoalEventEncouragement": {
"errors": ["xyz789"],
"goalEventEncouragement": GoalEventEncouragement
}
}
}
toggleGoalEventReaction
Description
Toggles an emoji reaction on a goal event. Creates if absent, removes if same emoji, replaces if different emoji.
Response
Returns a ToggleGoalEventReactionPayload!
Example
Query
mutation toggleGoalEventReaction(
$emoji: String!,
$goalEventId: ID!
) {
toggleGoalEventReaction(
emoji: $emoji,
goalEventId: $goalEventId
) {
errors
goalEventReaction {
...GoalEventReactionFragment
}
}
}
Variables
{"emoji": "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!
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!
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!
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.
Response
Returns an UpdateGoalMotivationSnapshotPayload!
Arguments
| Name | Description |
|---|---|
challenge - String
|
Biggest challenge: starting, staying_consistent, momentum_after_setbacks, knowing_progress. |
experience - String
|
Prior goal-tracking experience: never, a_few_times, many_still_going, many_struggled. |
socialContext - String
|
Preferred social context: solo, friend_or_partner, team_or_group. |
workTime - String
|
Preferred work time: morning, afternoon, evening, varies. |
Example
Query
mutation updateGoalMotivationSnapshot(
$challenge: String,
$experience: String,
$socialContext: String,
$workTime: String
) {
updateGoalMotivationSnapshot(
challenge: $challenge,
experience: $experience,
socialContext: $socialContext,
workTime: $workTime
) {
errors
goalMotivationProfile {
...GoalMotivationProfileFragment
}
}
}
Variables
{
"challenge": "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.
Response
Returns an UpdateShowcasedAchievementsPayload!
Arguments
| Name | Description |
|---|---|
achievementKeys - [String!]!
|
Ordered list of achievement identifier keys to display on the public profile. |
userId - ID!
|
The public ID of the user whose showcased achievements are being updated. |
Example
Query
mutation updateShowcasedAchievements(
$achievementKeys: [String!]!,
$userId: ID!
) {
updateShowcasedAchievements(
achievementKeys: $achievementKeys,
userId: $userId
) {
errors
success
}
}
Variables
{
"achievementKeys": ["xyz789"],
"userId": "4"
}
Response
{
"data": {
"updateShowcasedAchievements": {
"errors": ["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!
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!
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!
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
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
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!]!
|
|
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 |
|---|---|
|
|
Ally completed a milestone on a goal. |
|
|
Ally added a new ally. |
|
|
Ally checked in on a goal or habit. |
|
|
Ally joined a community. |
|
|
Ally posted in a community. |
Example
"ACHIEVEMENT"
AllyInvite
Description
An accountability-partner invite token generated by a user.
Fields
| Field Name | Description |
|---|---|
createdAt - ISO8601DateTime!
|
When the invite was created. |
expiresAt - ISO8601DateTime!
|
When this invite expires (7 days from creation). |
id - ID!
|
Public identifier for this invite record. |
status - String!
|
Current status: pending, accepted, expired, or revoked. |
token - String!
|
URL-safe invite token — embed in the deep link. |
Example
{
"createdAt": ISO8601DateTime,
"expiresAt": ISO8601DateTime,
"id": "4",
"status": "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 |
|---|---|
|
|
An active ally relationship exists in either direction. |
|
|
Current user has blocked this user. |
|
|
No ally relationship exists. |
|
|
This user sent a pending ally request to the current user. |
|
|
Current user sent a pending ally request to this user. |
Example
"ACCEPTED"
AllySuggestion
Description
A user suggested as a potential ally, with a human-readable rationale.
Fields
| Field Name | Description |
|---|---|
allyStatus - AllyStatusEnum!
|
Relationship status — always NONE for suggestions. |
firstName - String
|
The user's given name. |
lastName - String
|
The user's family name. |
mutualCount - Int!
|
Number of communities shared with the current user. |
photo - UserPhoto
|
The user's profile photo. |
publicId - String!
|
URL-safe public identifier of the suggested user. |
reason - String
|
Short rationale, e.g. "Both in Marathon in 16 weeks". |
username - String
|
The user's unique handle. |
Example
{
"allyStatus": "ACCEPTED",
"firstName": "xyz789",
"lastName": "abc123",
"mutualCount": 123,
"photo": UserPhoto,
"publicId": "abc123",
"reason": "xyz789",
"username": "xyz789"
}
AnswerInput
ApprovalRateData
ApproveAiArtifactPayload
Description
Autogenerated return type of ApproveAiArtifact.
Fields
| Field Name | Description |
|---|---|
artifact - AiArtifact
|
|
errors - [String!]!
|
Example
{
"artifact": AiArtifact,
"errors": ["abc123"]
}
BadgeStat
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
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
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.
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
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.
Example
{
"key": "xyz789",
"name": "abc123",
"unlockThreshold": 123
}
DailyUsagePoint
Description
Single day of AI usage data for the daily spend line chart.
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
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.
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.
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
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
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
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).
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
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
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.
Example
{
"createdAtTime": "xyz789",
"emoji": "abc123",
"id": 4,
"user": User
}
GoalMedia
Description
A media attachment (image) associated with a goal progress event.
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 |
|---|---|
|
|
Goal has been marked as completed. |
|
|
Goal is overdue or falling behind on updates. |
|
|
Goal is progressing normally. |
|
|
Goal has had no activity for 30+ days. |
Example
"completed"
GoalSummary
Description
Aggregated statistics for the current user's goals.
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.
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
HabitCompletion
Description
A single habit check-in record for a specific 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.
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.
Example
{
"key": "xyz789",
"progressLabel": "xyz789",
"progressPercentage": 987.65
}
OnboardingCompletedVia
Values
| Enum Value | Description |
|---|---|
|
|
User reached the final slide and finished the wizard. |
|
|
User exited the wizard before reaching the final slide. |
Example
"complete"
OnboardingFunnel
Description
Aggregated onboarding funnel counts and time-to-first-goal percentiles. Admin only. Returns aggregates only — no user identifiers.
Fields
| Field Name | Description |
|---|---|
firstGoal - Int!
|
Distinct in-window users who have at least one non-deleted goal. |
signedIn - Int!
|
Distinct users with a first_sign_in UserAction in the window. |
ttfgP50Seconds - Int
|
Median seconds from sign-up to first goal. Null when no in-window user has created a goal. |
ttfgP90Seconds - Int
|
90th-percentile time-to-first-goal in seconds. Nullable. |
variantId - String
|
Echoes the variant filter when one was applied; null for unfiltered queries. |
wizardCompleted - Int!
|
Distinct users with a wizard_completed UserAction in the window. |
wizardStarted - Int!
|
Distinct users with a wizard_started UserAction in the window. |
Example
{
"firstGoal": 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
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.
Example
{
"count": 123,
"date": "xyz789",
"label": "xyz789"
}
PromotionCriteria
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.
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
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.
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
UpdateUserPayload
Description
Autogenerated return type of UpdateUser.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
user - User
|
Example
{
"errors": ["abc123"],
"user": User
}
UpdateUserPhotoPayload
Description
Autogenerated return type of UpdateUserPhoto.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
userPhoto - UserPhoto
|
Example
{
"errors": ["xyz789"],
"userPhoto": UserPhoto
}
UpdateUserRolesPayload
Upload
Example
Upload
UseStreakFreezePayload
Description
Autogenerated return type of UseStreakFreeze.
Fields
| Field Name | Description |
|---|---|
errors - [String!]!
|
|
goal - Goal
|
Example
{
"errors": ["abc123"],
"goal": Goal
}
User
Description
A registered Objectuve user with gamification progress, goals, and social connections.
Fields
| Field Name | Description |
|---|---|
achievementStats - AchievementStats
|
Computed rank, XP, and badge stats for the Achievements page hero. |
actions - [UserAction!]
|
Gamification action log used to compute badges and achievements. |
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. |
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
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
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. |
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.
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
}