Skip to content

Mutations

All mutations are sent as POST /graphql with the operation in the request body. Mutations return a { success, errors } shape or a payload type containing the affected resource. Include the Clerk JWT in the SessionToken header.

← Back to GraphQL API Reference


acceptAllyInvite

Accepts an accountability-partner invite by token. Creates or upgrades the relationship to an accepted partnership.

Returns: AcceptAllyInvitePayload! ()

Arguments:

NameTypeRequiredDescription
inviteTokenString!YesToken from the invite deep link.

acceptAllyRequest

Accepts a pending ally request.

Returns: AcceptAllyRequestPayload! ()

Arguments:

NameTypeRequiredDescription
requestIdID!Yespublic_id of the UserAlly record (the pending request) to accept.

acceptHabitIntegrationMapping

Accepts a proposed (or manual) mapping from a connected provider activity type to a habit.

Returns: AcceptHabitIntegrationMappingPayload! ()

Arguments:

NameTypeRequiredDescription
confidenceScoreFloatNoScore from the auto-mapping engine, if any.
goalIdID!Yespublic_id of the habit to map the activity type to.
integrationConnectionIdID!Yespublic_id of the connection being mapped.
providerActivityTypeString!Yese.g. "Strava.run", "Chess.com.game".

acceptPaceSuggestion

Applies a pace suggestion's computed target date to the goal (one-tap accept).

Returns: AcceptPaceSuggestionPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the goal the suggestion targets.

acceptPartnerRequest

Accepts a pending accountability partner request from an ally.

Returns: AcceptPartnerRequestPayload! ()

Arguments:

NameTypeRequiredDescription
allyPublicIdID!Yespublic_id of the ally whose partner request to accept.

acceptStreakMercy

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.

Returns: AcceptStreakMercyPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the habit goal to restore.

acceptTeamInvite

Called by the invitee once they are signed up and authenticated. No team-scoped authorization — the accepting user has no membership yet.

Returns: AcceptTeamInvitePayload! ()

Arguments:

NameTypeRequiredDescription
codeString!Yes

acknowledgeAction

Marks a gamification action as acknowledged, clearing it from the user action queue.

Returns: AcknowledgeActionPayload! ()

Arguments:

NameTypeRequiredDescription
idID!YesThe public ID of the user action to acknowledge.

acknowledgeAllNotifications

Marks every unread notification as acknowledged for the authenticated user, optionally scoped to a single team (mirrors notificationHistory's teamId).

Returns: AcknowledgeAllNotificationsPayload! ()

Arguments:

NameTypeRequiredDescription
teamIdIDNoScope to one team's notifications instead of the whole inbox.

acknowledgeCollectiveGoalPrivacyContract

First-time-only server-side acknowledgment of TeamPrivacyContractView (N18/GOALS-16). Persists in UserAction, never localStorage. Gated by the teams_collective_goals kill switch.

Returns: AcknowledgeCollectiveGoalPrivacyContractPayload! ()


acknowledgeNotification

Marks a notification as acknowledged (read/dismissed) for the authenticated user.

Returns: AcknowledgeNotificationPayload! ()

Arguments:

NameTypeRequiredDescription
idID!YesThe public ID of the notification to acknowledge.

addCommunitySuggestion

Submits a suggestion for a new community topic or interest area.

Returns: AddCommunitySuggestionPayload! ()

Arguments:

NameTypeRequiredDescription
contentString!YesA description of the suggested community topic or interest area.
goalCategoryIdIDNoOptional public ID of a goal category to associate with the suggestion.
goalTypeIdIDNoOptional public ID of a goal type that best represents the suggested community.

addGoal

Creates a new goal for the authenticated user.

Returns: AddGoalPayload! ()

Arguments:

NameTypeRequiredDescription
appLinkStringNoExternal app URL (https:// or a custom app scheme, e.g. duolingo://) opened on check-in for one-click redirect to another app.
contentStringNoOptional longer description or motivation note.
daysToUpdateIntNoHow frequently in days the user plans to log progress.
durationMinutesIntNoOptional time-per-session in minutes for habits.
fileUpload ()NoCover image file upload. Takes precedence over image_url when provided.
fromTemplateIdIDNopublic_id of the GoalTemplate this goal is created from. Triggers milestone creation and goal_created_from_template telemetry.
goalCategoryIdIDNoID of the goal category (fitness, learning, etc.). Fetch options via goalCategories query.
goalTypeIdIDNoID of the goal type (habit, milestone, quantity). Fetch options via goalKinds query.
identityPromptStringNoOptional free-text identity framing (e.g. "Who you're becoming"). Personalizes Coach messaging when present. Max 240 chars.
imageUrlStringNoURL of a cover image for the goal.
lifeAreaStringNoThe area of life this goal belongs to (e.g. career, health).
milestones[MilestoneInput!] ()NoOrdered milestone steps to create atomically with the goal. Consumed when fromTemplateId is present.
nameString!YesDisplay name of the goal (e.g. "Run a 5K").
parentGoalIdIDNopublic_id of a parent goal to nest this under as a milestone.
pastAttemptContextStringNoOptional free-text context on a prior attempt at this goal. Personalizes Coach messaging when present. Max 200 chars.
privateBooleanNoDeprecated; use visibility. When true, the goal is visible only to the owner. Defaults to false.
recurrenceDays[String!]NoDays for weekly/custom_days recurrence (e.g. ["mon", "wed", "fri"]).
recurrenceIntervalIntNoNumber of days between check-ins for interval recurrence.
recurrenceTypeStringNoRecurrence pattern for habits: daily, weekly, custom_days, or interval.
targetDateStringNoISO date string for the target completion date (e.g. "2026-12-31").
visibilityGoalVisibilityEnum ()NoWho can see the goal. Wins over private when both are sent.

addGoalEvent

Logs a progress event for a goal. Each event is immutable once created.

Returns: AddGoalEventPayload! ()

Arguments:

NameTypeRequiredDescription
clientEventIdStringNoClient-generated UUID for idempotent retry of offline-queued events. Repeat calls with the same client_event_id return the original event.
clientTimestampStringNoISO-8601 local timestamp when the event actually occurred. Used as effective time for streak calculation.
contentString!YesThe progress update text describing what was accomplished.
fileUpload ()NoImage file upload. Takes precedence over image_url when provided.
goalIdID!Yespublic_id of the goal this progress event belongs to.
imageUrlStringNoOptional URL of an image to attach to the progress event.
moodStringNoOptional mood at the time of logging (e.g. amazing, happy, calm, meh, tired, low).

addGoalEventComment

Adds a comment to a goal progress event.

Returns: AddGoalEventCommentPayload! ()

Arguments:

NameTypeRequiredDescription
contentStringNoThe text body of the comment.
goalEventIdID!Yespublic_id of the goal event to comment on.

addGoalToCommunity

Shares an existing goal into a community feed.

Returns: AddGoalToCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!Yespublic_id of the community to share the goal into.
goalIdID!Yespublic_id of the goal to share into the community.

addMoodLog

Records a mood check-in for the authenticated user. Mood options: amazing, happy, calm, meh, tired, low.

Returns: AddMoodLogPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdIDNoOptional public ID of a goal to associate with this mood check-in.
moodString!YesThe mood value for this check-in. Accepted values: amazing, happy, calm, meh, tired, low.
noteStringNoAn optional free-text note accompanying the mood entry (max 300 characters).

addPostComment

Adds a comment to a community post.

Returns: AddPostCommentPayload! ()

Arguments:

NameTypeRequiredDescription
contentString!YesText content of the comment.
postIdID!YesID of the community post to comment on.

adjustTeamSeats

Owner-only. Updates a team's seat count.

Returns: AdjustTeamSeatsPayload! ()

Arguments:

NameTypeRequiredDescription
seatCountInt!Yes
teamIdString!Yes

approveAiArtifact

Approves a pending AI artifact, optionally applying an edited payload.

Returns: ApproveAiArtifactPayload! ()

Arguments:

NameTypeRequiredDescription
artifactIdString!Yes
editedPayloadStringNo

archiveFeedbackTag

Archives a feedback tag, hiding it from the pickable list without detaching it from posts (admin only).

Returns: ArchiveFeedbackTagPayload! ()

Arguments:

NameTypeRequiredDescription
tagIdID!YesPublic ID of the feedback tag.

archiveSubCommunity

Owner/Admin-only. Starts the 30-day read-only archive window for a sub-community.

Returns: ArchiveSubCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdString!Yes
teamIdString!Yes

beginDataImport

Parses an uploaded goals/habit_completions CSV pair into a staged DataImport preview.

Returns: BeginImportPayload! ()

Arguments:

NameTypeRequiredDescription
goalsFileUpload ()Nogoals.csv upload.
habitCompletionsFileUpload ()Nohabit_completions.csv upload.

blockAlly

Blocks a user, preventing ally requests in either direction.

Returns: BlockAllyPayload! ()

Arguments:

NameTypeRequiredDescription
targetUserIdID!Yespublic_id of the user to block.

bulkReviewContentFlags

Reviews up to 50 content flags atomically. Requires moderator+ role.

Returns: BulkReviewContentFlagsPayload! ()

Arguments:

NameTypeRequiredDescription
actionString!Yes"approve" or "reject".
flagIds[String!]!YesArray of flag public_ids (max 50).
reasonString!YesBulk reason (min 3 chars, recorded per flag).

cancelSupporterSubscription

Cancels the current Supporter subscription at the end of the billing period.

Returns: CancelSupporterSubscriptionPayload! ()


cancelTeamSubscription

Owner-only. Cancels a team's subscription.

Returns: CancelTeamSubscriptionPayload! ()

Arguments:

NameTypeRequiredDescription
teamIdString!Yes

checkInHabit

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

Returns: CheckInHabitPayload! ()

Arguments:

NameTypeRequiredDescription
clientEventIdStringNoClient-generated UUID for idempotent retry of offline-queued check-ins. Repeat calls with the same client_event_id return the original completion.
completedDateStringNoISO date string (YYYY-MM-DD) to credit this check-in to, for offline/widget syncs made before the current day. Must be within the last 7 days in the user's timezone; omit to default to today.
goalIdID!Yespublic_id of the habit goal to check in.
noteStringNoOptional one-sentence journal note for this check-in (max 280 characters). Ignored when the micro_journal_enabled flag is off for the user.

checkValidUsername

Checks whether a username is available and meets formatting requirements.

Returns: CheckValidUsernamePayload! ()

Arguments:

NameTypeRequiredDescription
usernameString!YesThe username to check for availability and format validity.

claimAiArtifact

Claims a pending AI artifact for the reviewing operator without resolving it.

Returns: ClaimAiArtifactPayload! ()

Arguments:

NameTypeRequiredDescription
artifactIdString!Yes

claimStreakInsurance

Claims the Supporter monthly streak insurance benefit, restoring a broken streak with no XP cost.

Returns: ClaimStreakInsurancePayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the habit goal to restore via insurance.

commitDataImport

Commits a staged DataImport, creating the imported goals and check-ins asynchronously.

Returns: CommitImportPayload! ()

Arguments:

NameTypeRequiredDescription
idID!Yespublic_id of the staged DataImport to commit.
skipGoalExternalIds[String!]Noexternal_ids of collision-flagged goal rows to skip.

completeOnboardingAndCreateGoal

Atomically completes onboarding and creates the first goal.

Returns: CompleteOnboardingAndCreateGoalPayload! ()

Arguments:

NameTypeRequiredDescription
goalCategoryIdIDNo
goalNameString!Yes
onboardingAnswersJSON ()No

connectChessCom

Connects the current user's Chess.com account by username.

Returns: ConnectChessComPayload! ()

Arguments:

NameTypeRequiredDescription
externalUsernameString!YesChess.com username to connect.

connectStrava

Starts the Strava OAuth connect flow. Open the returned URL in an in-app browser.

Returns: ConnectStravaPayload! ()


createAllyInvite

Creates a new accountability-partner invite token for the authenticated user.

Returns: CreateAllyInvitePayload! ()


createCheckoutSession

Creates a Stripe Checkout session for a Supporter plan. Returns a redirect URL.

Returns: CreateCheckoutSessionPayload! ()

Arguments:

NameTypeRequiredDescription
amountCentsIntNoCustom amount in cents for lifetime plan (min 10000 = $100). Ignored for other plans.
cancelUrlString!YesURL to redirect to if the user cancels checkout.
planSlugString!YesPlan to purchase: monthly, yearly, or lifetime.
successUrlString!YesURL to redirect to after successful checkout.

createCollectiveGoal

Owner/Admin-only. Creates a team- or sub-community-scoped collective goal (GOALS-10). Gated by the teams_collective_goals kill switch.

Returns: CreateCollectiveGoalPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdStringNo
descriptionStringNo
nameString!Yes
targetMetricString!Yes
targetValueInt!Yes
teamIdString!Yes

createCommunity

Creates a new community that users can join to share goals and support each other.

Returns: CreateCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
categoryString!YesThe interest category that best represents this community (e.g. fitness, learning, wellness).
coverImageFileUpload ()NoCover image file upload. Takes precedence over cover_image_url.
coverImageUrlStringNoOptional URL for the community cover or banner image.
descriptionString!YesA short description of the community purpose and focus.
guidelinesStringNoOptional community rules or participation guidelines shown to members.
nameString!YesThe display name of the community.
privacyString!YesVisibility setting for the community. Accepted values: public or private.

createCommunityChallenge

Creates a time-boxed challenge inside a community. Community admin only.

Returns: CreateCommunityChallengePayload! ()

Arguments:

NameTypeRequiredDescription
badgeIconString!YesEmoji or icon for the completion badge.
badgeNameString!YesName of the completion badge.
communityIdID!Yespublic_id of the community to create the challenge in.
descriptionStringNoOptional description of the challenge.
endDateISO8601Date! ()YesDate when the challenge ends.
nameString!YesDisplay name of the challenge.
startDateISO8601Date! ()YesDate when the challenge begins.
targetGoalCountIntNoNumber of qualifying goal events needed to complete. Defaults to 1.
targetGoalTypeIdIDNoOptional GoalType ID to restrict which events count. Nil means any goal event counts.

createCommunityPost

Creates a post in a community. Supports text updates and goal shares.

Returns: CreateCommunityPostPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!YesThe public ID of the community in which to create the post.
contentString!YesThe text body of the post.
typeString!YesThe post type. Accepted values: update (text post) or goal_share (sharing a goal with the community).

createFeedbackComment

Adds a comment to a feedback post.

Returns: CreateFeedbackCommentPayload! ()

Arguments:

NameTypeRequiredDescription
bodyString!YesComment text (max 1000 chars).
isOfficialBooleanNoMark as official team response (admin only).
postIdID!YesPublic ID of the feedback post.

createFeedbackPost

Creates a new feedback post (feature request, improvement, bug report).

Returns: CreateFeedbackPostPayload! ()

Arguments:

NameTypeRequiredDescription
categoryString!YesCategory: feature, improvement, bug, or other.
descriptionStringNoDetailed description (max 2000 chars).
tagIds[ID!]NoPublic IDs of feedback tags to attach (max 3).
titleString!YesTitle of the feedback post (max 200 chars).

createFeedbackTag

Creates a new feedback tag (admin only).

Returns: CreateFeedbackTagPayload! ()

Arguments:

NameTypeRequiredDescription
descriptionStringNoOptional description of the tag.
nameString!YesDisplay name of the tag.

createSeasonalEvent

Admin only. Creates a platform-wide seasonal event.

Returns: CreateSeasonalEventPayload! ()

Arguments:

NameTypeRequiredDescription
badgeIconString!Yes
badgeNameString!Yes
descriptionStringNo
endDateISO8601Date! ()Yes
nameString!Yes
slugString!Yes
startDateISO8601Date! ()Yes
targetGoalCountIntNo

createSubCommunity

Owner/Admin-only. Creates a new sub-community (room) scoped to the team.

Returns: CreateSubCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
descriptionStringNo
iconStringNo
joinPolicyStringNo
leadMembershipIdStringNo
makeDefaultBooleanNo
nameString!Yes
teamIdString!Yes

createTeamInvite

Owner/Admin-only. Creates a link (and optionally email-targeted) invite for a team. Email delivery additionally requires the teams_bulk_invite kill switch — the invite/link is always created regardless.

Returns: CreateTeamInvitePayload! ()

Arguments:

NameTypeRequiredDescription
emailStringNo
preselectedCommunityIds[String!]No
teamIdString!Yes
teamRoleStringNo

declineAllyRequest

Declines a pending ally request.

Returns: DeclineAllyRequestPayload! ()

Arguments:

NameTypeRequiredDescription
requestIdID!Yespublic_id of the UserAlly record (the pending request) to decline.

declinePartnerRequest

Declines a pending accountability partner request from an ally.

Returns: DeclinePartnerRequestPayload! ()

Arguments:

NameTypeRequiredDescription
allyPublicIdID!Yespublic_id of the ally whose partner request to decline.

deleteDemoEntity

Delete a demo user/goal/community. super_admin only.

Returns: DeleteDemoEntityPayload! ()

Arguments:

NameTypeRequiredDescription
entityIdID!Yes
entityTypeString!Yes

deleteNotification

Permanently deletes a notification record for the authenticated user.

Returns: DeleteNotificationPayload! ()

Arguments:

NameTypeRequiredDescription
idID!YesThe public ID of the notification to delete.

deleteOwnAccount

Permanently deletes the authenticated user account and all personal data.

Returns: DeleteOwnAccountPayload! ()


disconnectIntegrationConnection

Disconnects a connected provider. Past check-ins stay; future activity stops syncing.

Returns: DisconnectIntegrationConnectionPayload! ()

Arguments:

NameTypeRequiredDescription
integrationConnectionIdID!Yespublic_id of the connection to disconnect.

dismissDashboardHint

Permanently dismisses a v4.15 dashboard hierarchy one-time surface (migration note or a relocation hint) for the authenticated user.

Returns: DismissDashboardHintPayload! ()

Arguments:

NameTypeRequiredDescription
hintString!Yesmigration_note | relocation_community | relocation_achieve

dismissEnneagramCard

Permanently dismisses the Enneagram dashboard prompt card for the authenticated user.

Returns: DismissEnneagramCardPayload! ()


dismissHabitIntegrationMapping

Removes a habit mapping.

Returns: DismissHabitIntegrationMappingPayload! ()

Arguments:

NameTypeRequiredDescription
mappingIdID!Yespublic_id of the mapping to dismiss.

editHabitIntegrationMapping

Re-points an existing habit mapping at a different habit.

Returns: EditHabitIntegrationMappingPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the new habit to map to.
mappingIdID!Yespublic_id of the mapping to edit.

endPartnership

Ends the current accountability partnership with an ally.

Returns: EndPartnershipPayload! ()

Arguments:

NameTypeRequiredDescription
allyPublicIdID!Yespublic_id of the accountability partner to end partnership with.

enqueueClear

Enqueues a full demo-data clear. super_admin only.

Returns: EnqueueClearPayload! ()


enqueueReseed

Enqueues a full demo-data reseed. super_admin only.

Returns: EnqueueReseedPayload! ()


enqueueScopeReset

Enqueues a scope reset for a single demo domain. super_admin only.

Returns: EnqueueScopeResetPayload! ()

Arguments:

NameTypeRequiredDescription
scopeString!Yes

ensureTodaysCoachMessage

Ensures a coach message exists for the user today, generating one via AI on the first daily call.

Returns: EnsureTodaysCoachMessagePayload! ()


executeGdprDeletion

Runs the GDPR deletion cascade for a request. super_admin + step-up required.

Returns: ExecuteDeletionPayload! ()

Arguments:

NameTypeRequiredDescription
publicIdString!Yes

executeGdprExport

Enqueues the export build job for a GDPR request. super_admin or support only.

Returns: ExecuteExportPayload! ()

Arguments:

NameTypeRequiredDescription
publicIdString!Yes

followCommunity

Follows a community to receive updates without becoming a full member.

Returns: FollowCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!YesThe public ID of the community to follow.
userIdID!YesThe public ID of the user following the community.

generateGoalDraft

Uses AI to draft a complete goal (title, category, kind, target date, why, milestones) from a freeform idea.

Returns: GenerateGoalDraftPayload! ()

Arguments:

NameTypeRequiredDescription
ideaString!YesThe user's freeform sentence describing what they want to achieve.

generateMilestones

Uses AI to generate a suggested list of milestone sub-goals for a given goal.

Returns: GenerateMilestonesPayload! ()

Arguments:

NameTypeRequiredDescription
goalContextStringNoOptional additional context about the goal (e.g. timeframe, current progress, constraints) to improve milestone relevance.
goalNameString!YesThe name or title of the goal for which milestones should be generated.

getAdvice

Uses AI to provide personalized advice and tips for making progress on a goal.

Returns: GetAdvicePayload! ()

Arguments:

NameTypeRequiredDescription
goalIdStringNopublic_id of the goal the user is currently viewing, if any.
pageString!YesThe page/context from which the user is asking for advice.
userMessageString!YesThe user's question or message to the coach.

getBillingPortalUrl

Returns a Stripe Billing Portal URL for managing the Supporter subscription.

Returns: GetBillingPortalUrlPayload! ()

Arguments:

NameTypeRequiredDescription
returnUrlString!YesURL to redirect back to after the user leaves the portal.

getInsight

Uses AI to generate insights about the user progress, patterns, and trends across their goals.

Returns: GetInsightPayload! ()

Arguments:

NameTypeRequiredDescription
pageContextString!YesA 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").

grantAchievementDebug

Debug/seed-only: grants a badge to the current user. Not available in production.

Returns: GrantAchievementDebugPayload! ()

Arguments:

NameTypeRequiredDescription
achievementKeyString!YesBadge key from the achievement catalog to grant to the current user.

inviteAllyToCommunity

Invites an accepted ally to join a community the current user is a member of.

Returns: InviteAllyToCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
allyPublicIdID!Yespublic_id of the ally to invite.
communityPublicIdID!Yespublic_id of the community to invite the ally to.

joinCommunity

Joins the authenticated user to an existing community.

Returns: JoinCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!YesThe public ID of the community to join.

joinCommunityChallenge

Joins the authenticated user to an active community challenge.

Returns: JoinCommunityChallengePayload! ()

Arguments:

NameTypeRequiredDescription
communityChallengeIdID!Yespublic_id of the challenge to join.

joinSeasonalEvent

Joins the authenticated user to an active seasonal event. Gated by the seasonal_events_enabled kill switch.

Returns: JoinSeasonalEventPayload! ()

Arguments:

NameTypeRequiredDescription
seasonalEventIdID!Yespublic_id of the event to join.

joinSubCommunity

Any team member may join an open sub-community.

Returns: JoinSubCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdString!Yes
teamIdString!Yes

leaveCommunity

Removes the authenticated user from a community they are a member of.

Returns: LeaveCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!YesThe public ID of the community to leave.
userIdID!YesThe public ID of the user leaving the community.

leaveCommunityChallenge

Removes the authenticated user from a community challenge.

Returns: LeaveCommunityChallengePayload! ()

Arguments:

NameTypeRequiredDescription
communityChallengeIdID!Yespublic_id of the challenge to leave.

leaveSeasonalEvent

Removes the authenticated user from a seasonal event. Gated by the seasonal_events_enabled kill switch.

Returns: LeaveSeasonalEventPayload! ()

Arguments:

NameTypeRequiredDescription
seasonalEventIdID!Yespublic_id of the event to leave.

leaveSubCommunity

Self-service leave for a sub-community. Idempotent; the default room cannot be left.

Returns: LeaveSubCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdString!Yes
teamIdString!Yes

mintCheckInToken

Mints a durable, device-scoped check-in token for background widget check-ins. Returns no token when widget_background_sync_enabled is off for the user.

Returns: MintCheckInTokenPayload! ()

Arguments:

NameTypeRequiredDescription
deviceIdString!YesClient-generated, stable identifier for this device.

optIntoCollectiveGoal

Links a personal goal to a collective goal as a contribution (GOALS-11). Gated by the teams_collective_goals kill switch.

Returns: OptIntoCollectiveGoalPayload! ()

Arguments:

NameTypeRequiredDescription
collectiveGoalIdString!Yes
personalGoalIdString!Yes

optOutOfCollectiveGoal

Self-service opt-out from a collective goal (GOALS-12). Preserves contribution history — never destroys the row. Gated by the teams_collective_goals kill switch.

Returns: OptOutOfCollectiveGoalPayload! ()

Arguments:

NameTypeRequiredDescription
collectiveGoalIdString!Yes

pauseAiEmployee

Returns: PauseAiEmployeePayload! ()

Arguments:

NameTypeRequiredDescription
activeBoolean!Yestrue to resume, false to pause
employeeIdString!Yes

pauseIntegrationConnection

Pauses a connected provider — stops syncing new activity until resumed.

Returns: PauseIntegrationConnectionPayload! ()

Arguments:

NameTypeRequiredDescription
integrationConnectionIdID!Yespublic_id of the connection to pause.

promoteTeamMember

Owner/Admin-only. Changes a team member's role. Cannot set role to owner — use transferTeamBillingOwnership for ownership transfer.

Returns: PromoteTeamMemberPayload! ()

Arguments:

NameTypeRequiredDescription
roleString!Yes
teamIdString!Yes
teamMembershipIdString!Yes

recordCriticalPathPlay

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

Returns: RecordCriticalPathPlayPayload! ()

Arguments:

NameTypeRequiredDescription
colsIntNoPuzzle grid column count (5–7); used for grid-size-scoped pace comparisons.
elapsedSecondsInt!YesTime taken to solve the puzzle in seconds (1–86400).
rowsIntNoPuzzle grid row count (5–7); used for grid-size-scoped pace comparisons.

recordShare

Returns: RecordSharePayload! ()

Arguments:

NameTypeRequiredDescription
channelStringNoShare destination, e.g. "native", "link".
codeStringNov4.56 Phase 5 (REF-01) — the shareCode reserved by shareableMoment and already handed to the OS share sheet. Persisted verbatim when valid; omit to keep the legacy server-minted behavior.
kindString!YesOne of: badge, goal_completion, milestone, streak.
subjectPublicIdID!Yespublic_id of the subject (or badge key for kind: badge).

recordUserAction

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

Returns: RecordUserActionPayload! ()

Arguments:

NameTypeRequiredDescription
actionString!YesOne of the wizard_* onboarding action names. Other UserAction enum values are rejected.
metadataJSON ()NoOptional payload (e.g. { slideId, variantId }). Unknown top-level keys are dropped.

refineDescription

Uses AI to refine or generate a compelling goal description.

Returns: RefineDescriptionPayload! ()

Arguments:

NameTypeRequiredDescription
currentDescriptionStringNoOptional existing description to improve upon.
goalNameString!YesThe name or title of the goal.

refineGoal

Uses AI to critique a not-yet-saved goal for specificity, a realistic target date, and right-sizing, returning up to 3 one-tap-acceptable suggestions.

Returns: RefineGoalPayload! ()

Arguments:

NameTypeRequiredDescription
categoryNameStringNo
descriptionStringNo
kindNameStringNo
milestones[String!]No
nameString!YesThe goal title as currently typed.
targetDateStringNoISO8601 target date, if set.

rejectAiArtifact

Rejects a pending AI artifact with a mandatory reason (minimum 10 characters).

Returns: RejectAiArtifactPayload! ()

Arguments:

NameTypeRequiredDescription
artifactIdString!Yes
rejectionReasonString!Yes

removeAlly

Removes an accepted ally relationship.

Returns: RemoveAllyPayload! ()

Arguments:

NameTypeRequiredDescription
targetUserIdID!Yespublic_id of the ally to remove.

removeTeamMember

Owner/Admin-only. Removes a member: clears their sub-community memberships, anonymizes their leaderboard entries, and soft-deletes their seat. The member's personal account is untouched.

Returns: RemoveTeamMemberPayload! ()

Arguments:

NameTypeRequiredDescription
teamIdString!Yes
teamMembershipIdString!Yes

reorderMilestones

Atomically reorders a goal's milestone/roadmap steps by public_id.

Returns: ReorderMilestonesPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the parent goal.
orderedMilestoneIds[ID!]!YesMilestone public_ids in the desired order.

repairStreak

Repairs a broken streak by charging XP and backfilling system-granted freeze completions for all missed days within the 24–48h repair window.

Returns: RepairStreakPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the habit goal to repair.

reportContent

Returns: ReportContentPayload! ()

Arguments:

NameTypeRequiredDescription
detailsStringNo
reasonString!Yes
reportableIdID!Yes
reportableTypeString!Yes

requestDataExport

Requests a GDPR data export for the authenticated user. Subject to a 24h cooldown.

Returns: RequestDataExportPayload! ()


requestMagicCode

Sends a 6-character sign-in code to the given email. Always returns success to avoid leaking account existence.

Returns: RequestMagicCodePayload! ()

Arguments:

NameTypeRequiredDescription
emailString!Yes

rerunHabitIntegrationMapping

Re-scores a connection's not-yet-checked-in activities against the user's current habits.

Returns: RerunHabitIntegrationMappingPayload! ()

Arguments:

NameTypeRequiredDescription
integrationConnectionIdID!Yespublic_id of the connection to re-run.

resetOnboarding

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.

Returns: ResetOnboardingPayload! ()

Arguments:

NameTypeRequiredDescription
userPublicIdIDNoTarget user public ID. Admin-only. Omit to reset self.

resumeIntegrationConnection

Resumes a paused connection.

Returns: ResumeIntegrationConnectionPayload! ()

Arguments:

NameTypeRequiredDescription
integrationConnectionIdID!Yespublic_id of the connection to resume.

revertLastGoalEvent

Soft-deletes the most recent progress event for a goal (Undo action).

Returns: RevertLastGoalEventPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the goal whose last event should be reverted.

reviewContentFlag

Returns: ReviewContentFlagPayload! ()

Arguments:

NameTypeRequiredDescription
actionString!Yes"approve" or "reject"
flagIdString!YesPublic ID of the content flag

reviewContentReport

Returns: ReviewContentReportPayload! ()

Arguments:

NameTypeRequiredDescription
actionString!Yes"review" or "dismiss"
reportIdString!YesPublic ID of the content report

revokeAllyInvite

Revokes an active accountability-partner invite. Only the inviter may revoke.

Returns: RevokeAllyInvitePayload! ()

Arguments:

NameTypeRequiredDescription
inviteTokenString!YesToken of the invite to revoke.

revokeCheckInToken

Revokes the check-in token(s) for a device — call on sign-out or device removal.

Returns: RevokeCheckInTokenPayload! ()

Arguments:

NameTypeRequiredDescription
deviceIdString!YesIdentifier of the device being signed out or removed.

revokeTeamInvite

Owner/Admin-only. Revokes a pending team invite.

Returns: RevokeTeamInvitePayload! ()

Arguments:

NameTypeRequiredDescription
teamIdString!Yes
teamInviteIdString!Yes

seedIntegrationActivityDebug

Debug/seed-only: seeds a fresh IntegrationActivity for the current user and surfaces it through the real auto-map pipeline (NewHabitToast). Not available in production.

Returns: SeedIntegrationActivityDebugPayload! ()

Arguments:

NameTypeRequiredDescription
providerSlugString!Yes'strava' or 'chess_com'.
tierString!Yes'auto' (auto-check-in tier) or 'propose' (review-band tier).

sendAllyRequest

Sends an ally request to another user.

Returns: SendAllyRequestPayload! ()

Arguments:

NameTypeRequiredDescription
targetUserIdID!Yespublic_id of the user to send an ally request to.

sendEncouragement

Sends a peer encouragement notification to another user. Idempotent: one per sender→receiver per day.

Returns: SendEncouragementPayload! ()

Arguments:

NameTypeRequiredDescription
toUserPublicIdID!Yespublic_id of the user to encourage.

sendPartnerNudge

Sends a nudge notification to an accountability partner. Idempotent: one nudge per partnership per direction per day.

Returns: SendPartnerNudgePayload! ()

Arguments:

NameTypeRequiredDescription
allyPublicIdID!Yespublic_id of the accountability partner to nudge.

sendPartnerRequest

Sends an accountability partner request to an accepted ally.

Returns: SendPartnerRequestPayload! ()

Arguments:

NameTypeRequiredDescription
allyPublicIdID!Yespublic_id of the ally to request as accountability partner.

setColorTheme

Sets the Supporter color theme for the authenticated user, synced across devices.

Returns: SetColorThemePayload! ()

Arguments:

NameTypeRequiredDescription
slugString!YesTheme slug to activate.

setCommunityEditorialSlot

Admin only. Sets or clears the editorial slot for a community. Slot null unsets.

Returns: SetCommunityEditorialSlotPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!Yes
positionIntNo
slotStringNo

setCommunityFeatured

Admin only. Toggles whether a community is featured on the discovery page.

Returns: SetCommunityFeaturedPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!Yes
featuredBoolean!Yes

setCriticalPathActiveTheme

Sets the active visual theme for the authenticated user. Theme must be unlocked.

Returns: SetCriticalPathActiveThemePayload! ()

Arguments:

NameTypeRequiredDescription
themeString!YesTheme key to activate.

setCriticalPathReminderPreferences

Sets the daily reminder preferences for the authenticated user.

Returns: SetCriticalPathReminderPreferencesPayload! ()

Arguments:

NameTypeRequiredDescription
enabledBoolean!YesWhether to enable daily Critical Path reminders.
timeOfDayStringNoPreferred local send time in HH:MM format (e.g. '08:00').
timezoneStringNoIANA timezone string. Only applied when enabling reminders and user is on UTC default.

setDefaultSubCommunity

Owner/Admin-only. Reassigns the team's default landing room.

Returns: SetDefaultSubCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdString!Yes
teamIdString!Yes

setGoalPartnerSharing

Toggles whether a confirmed accountability partner can see a private goal. Owner-only.

Returns: SetGoalPartnerSharingPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the goal to update.
sharedWithPartnerBoolean!YesWhen true, a confirmed accountability partner can see this goal.

setGoalVisibility

Sets who can see a goal: everyone, accepted allies only, or just the owner. Owner-only.

Returns: SetGoalVisibilityPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the goal to update.
visibilityGoalVisibilityEnum! ()YesThe new visibility tier for the goal.

setLeaderboardVisibility

Member-level opt-out from the team leaderboard (LEADERBOARD-3). Gated by the teams_leaderboards kill switch.

Returns: SetLeaderboardVisibilityPayload! ()

Arguments:

NameTypeRequiredDescription
optedOutBoolean!Yes
teamIdString!Yes

setSeasonalEventActive

Admin only. Activates or deactivates a seasonal event. Events are historical once run, so this flips a flag rather than deleting the row.

Returns: SetSeasonalEventActivePayload! ()

Arguments:

NameTypeRequiredDescription
eventIdID!Yes
isActiveBoolean!Yes

setTeamNotificationPreferences

Sets the team notification preferences for the authenticated user.

Returns: SetTeamNotificationPreferencesPayload! ()

Arguments:

NameTypeRequiredDescription
enabledBoolean!YesWhether to enable team notifications (in-app and push).

setWeeklyDigestPreferences

Sets the weekly digest email preferences for the authenticated user.

Returns: SetWeeklyDigestPreferencesPayload! ()

Arguments:

NameTypeRequiredDescription
deliveryDayStringNoDay to deliver the digest: 'sun', 'sat', or 'mon'.
enabledBoolean!YesWhether to enable the weekly digest email.

startTeamBillingPortal

Owner-only. Returns a Stripe Billing Portal URL for managing the team's subscription.

Returns: StartTeamBillingPortalPayload! ()

Arguments:

NameTypeRequiredDescription
returnUrlString!YesURL to redirect back to after the user leaves the portal.
teamIdString!Yes

startTeamCheckout

Opens a Stripe Checkout session for a new or re-subscribing Team.

Returns: StartTeamCheckoutPayload! ()

Arguments:

NameTypeRequiredDescription
cancelUrlString!Yes
planSlugString!Yesteams_monthly or teams_annual.
seatCountIntNoNumber of seats (1-200, default 5).
successUrlString!Yes
teamIdStringNoExisting team public_id when re-subscribing.
teamNameStringNoRequired for a brand-new team.

storeDeviceToken

Registers a device push notification token for the authenticated user (iOS/Android).

Returns: StoreDeviceTokenPayload! ()

Arguments:

NameTypeRequiredDescription
deviceTokenID!YesThe push notification token issued by APNs (iOS) or FCM (Android).
platformStringNoThe device platform. Accepted values: ios or android.

storeFeatureTourState

Writes feature-tour completion/dismissal state into UserDetail.data["feature_tours"], keyed by tour id.

Returns: StoreFeatureTourStatePayload! ()

Arguments:

NameTypeRequiredDescription
completedBooleanNoMark the tour completed (sets completed_at).
dismissedBooleanNoMark the tour dismissed/skipped.
tourIdString!YesTour identifier, e.g. "dashboard-first-run".

storeOnboardingState

Writes v1.8 onboarding completion or progress into UserDetail.data["onboarding"]. Accepts completed_via: "complete" | "skip" only — "backfilled" is server-only.

Returns: StoreOnboardingStatePayload! ()

Arguments:

NameTypeRequiredDescription
completedViaOnboardingCompletedVia ()NoSet to "complete" or "skip" on wizard exit. Omit when writing progress only.
progressOnboardingProgressInput ()NoIn-flight slide progress. Cleared on wizard exit when completed_via is set.

storeUserDetails

Stores or updates arbitrary metadata on the user details JSON blob (e.g. onboarding state, preferences).

Returns: StoreUserDetailsPayload! ()

Arguments:

NameTypeRequiredDescription
appFeedbackStringNoFree-text feedback submitted by the user from within the app.
appVersionStringNoThe current version string of the client app (e.g. "1.4.2").

submitEnneagramAssessment

Submits a completed 40-question Enneagram assessment and persists the result.

Returns: SubmitEnneagramAssessmentPayload! ()

Arguments:

NameTypeRequiredDescription
answers[AnswerInput!]! ()YesArray of exactly 40 forced-choice answers.

submitTeamPulse

Submits the current member's quarterly team pulse survey response (score 0-10, optional comment). Objectuve-internal telemetry — no team-admin read path exists for this data.

Returns: SubmitTeamPulsePayload! ()

Arguments:

NameTypeRequiredDescription
commentStringNo
scoreInt!Yes
teamIdString!Yes

suggestGoals

Uses AI to turn goal-discovery quiz answers into 3-5 suggested goals, each with a rationale.

Returns: SuggestGoalsPayload! ()

Arguments:

NameTypeRequiredDescription
lifeAreas[String!]!YesUp to 3 life-area labels the user picked (Q1).
pullString!YesWhat would move the needle most right now (Q2).
rhythmString!YesHow much time the user can realistically give (Q3).
whyStringNoWhat's driving this — optional/skippable (Q4).

syncUser

Syncs the authenticated Clerk user with the local database. Returns first_sign_in for onboarding detection.

Returns: SyncUserPayload! ()

Arguments:

NameTypeRequiredDescription
referralCodeStringNov4.56 Phase 5 (REF-02/REF-03) — a share-link code captured from ?ref= on first landing. Only attributed when this call is a genuine first sign-in.
timezoneStringNoIANA timezone string from the client (e.g. "America/Chicago"). Used to evaluate day boundaries for streak calculations.

toggleFeedbackVote

Toggles a vote on a feedback post. Adds a vote if not voted, removes if already voted.

Returns: ToggleFeedbackVotePayload! ()

Arguments:

NameTypeRequiredDescription
postIdID!YesPublic ID of the feedback post to vote on.

toggleFollowGoal

Follows or unfollows a goal. Toggles the follow state for the authenticated user.

Returns: ToggleFollowGoalPayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the goal to follow or unfollow.

toggleGoalEventEncouragement

Toggles an encouragement (like/cheer) reaction on a goal event. Creates one if absent, removes it if present.

Returns: ToggleGoalEventEncouragementPayload! ()

Arguments:

NameTypeRequiredDescription
goalEventIdID!Yespublic_id of the goal event to encourage or un-encourage.

toggleGoalEventReaction

Toggles an emoji reaction on a goal event. Creates if absent, removes if same emoji, replaces if different emoji.

Returns: ToggleGoalEventReactionPayload! ()

Arguments:

NameTypeRequiredDescription
emojiString!YesUnicode emoji character for the reaction.
goalEventIdID!Yespublic_id of the goal event to react to.

transferTeamBillingOwnership

Owner-only. Transfers billing ownership to another existing team member.

Returns: TransferTeamBillingOwnershipPayload! ()

Arguments:

NameTypeRequiredDescription
newOwnerIdString!YesThe new owner's user public_id.
teamIdString!Yes

triggerAiRun

Returns: TriggerAiRunPayload! ()

Arguments:

NameTypeRequiredDescription
employeeIdString!Yes

unarchiveSubCommunity

Owner/Admin-only. Reverses an in-progress sub-community archive within the 30-day window.

Returns: UnarchiveSubCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdString!Yes
teamIdString!Yes

unblockUser

Unblocks a user, restoring visibility of their content in both directions.

Returns: UnblockAllyPayload! ()

Arguments:

NameTypeRequiredDescription
targetUserIdID!Yespublic_id of the user to unblock.

unfollowCommunity

Unfollows a community the authenticated user is currently following.

Returns: UnfollowCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdID!YesThe public ID of the community to unfollow.
userIdID!YesThe public ID of the user unfollowing the community.

updateAiEmployee

Returns: UpdateAiEmployeePayload! ()

Arguments:

NameTypeRequiredDescription
autonomyLevelStringNo
confirmPromotionBooleanNo
crewStringNo
descriptionStringNo
employeeIdString!Yes
mcpServers[String!]No
modelPreferenceStringNo
monthlyBudgetCentsIntNo
nameStringNo
postFilterSkillStringNo
scheduleCronStringNo
skillRefs[String!]No
taskPromptStringNo

updateCoachingPreferences

Updates the current user's AI Coach persona, tone, depth, focus areas, and communication frequency.

Returns: UpdateCoachingPreferencesPayload! ()

Arguments:

NameTypeRequiredDescription
depthIntNoResponse depth from 1 (brief) to 5 (detailed).
focusPrimaryStringNoPrimary coaching focus area.
focusSecondaryStringNoOptional secondary coaching focus area (null to clear).
personaStringNoCoaching persona: captain, spark, mirror, rival, sage, or analyst.
rhythmStringNoCommunication rhythm: morning, evening, bookends, or when_needed.
toneBrevityIntNoTone brevity from 0 to 4.
toneWarmthIntNoTone warmth from 0 to 4.

updateCoachModel

Switches the runtime Coach Gemini model. Admin only.

Returns: UpdateCoachModelPayload! ()

Arguments:

NameTypeRequiredDescription
modelString!Yes

updateCoachWarmupContext

Stores the user's post-wizard warmup answers for Coach personalization.

Returns: UpdateCoachWarmupContextPayload! ()

Arguments:

NameTypeRequiredDescription
feedbackStyleString!YesThe style of feedback the user prefers from Coach.
missedDayResponseString!YesHow the user wants Coach to respond when they miss a day.
timeOfDayString!YesWhen the user typically works on goals (e.g. "morning", "after work").

updateDashboardPreferences

Updates the current user's dashboard mode and density preferences (v4.15).

Returns: UpdateDashboardPreferencesPayload! ()

Arguments:

NameTypeRequiredDescription
densityStringNoDashboard density: standard or detailed.
migratedFromFullBooleanNoSet when this call performs the one-time legacy full→Detailed backfill.
modeStringNoDashboard mode: focus, standard, detailed, or auto.

updateDemoCommunity

Inline-edit a demo community. super_admin only.

Returns: UpdateDemoCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
attributesDemoCommunityAttributesInput! ()Yes
communityIdID!Yes

updateDemoGoal

Inline-edit a demo goal. super_admin only.

Returns: UpdateDemoGoalPayload! ()

Arguments:

NameTypeRequiredDescription
attributesDemoGoalAttributesInput! ()Yes
goalIdID!Yes

updateDemoUser

Inline-edit a demo user. super_admin only.

Returns: UpdateDemoUserPayload! ()

Arguments:

NameTypeRequiredDescription
attributesDemoUserAttributesInput! ()Yes
userIdID!Yes

updateFeedbackPostStatus

Updates the status of a feedback post (admin only).

Returns: UpdateFeedbackPostStatusPayload! ()

Arguments:

NameTypeRequiredDescription
postIdID!YesPublic ID of the feedback post.
statusString!YesNew status: open, planned, in_progress, completed, or declined.

updateFeedbackPostTags

Updates the tags on a feedback post (admin only).

Returns: UpdateFeedbackPostTagsPayload! ()

Arguments:

NameTypeRequiredDescription
postIdID!YesPublic ID of the feedback post.
tagIds[ID!]!YesPublic IDs of the tags to set on the post (up to 3).

updateFeedbackTag

Updates an existing feedback tag (admin only).

Returns: UpdateFeedbackTagPayload! ()

Arguments:

NameTypeRequiredDescription
descriptionStringNoNew description.
nameStringNoNew display name.
tagIdID!YesPublic ID of the feedback tag.

updateGoal

Updates an existing goal owned by the authenticated user.

Returns: UpdateGoalPayload! ()

Arguments:

NameTypeRequiredDescription
appLinkStringNoUpdated external app URL (https:// or a custom app scheme, e.g. duolingo://) opened on check-in for one-click redirect to another app.
completedBooleanNoWhen true, marks the goal as completed.
completionReflectionStringNoOptional free-text reflection captured when the goal is marked complete. Personalizes Coach messaging when present. Max 200 chars.
contentStringNoUpdated description or motivation note.
daysToUpdateIntNoUpdated frequency in days that the user plans to log progress.
deletedBooleanNoWhen true, soft-deletes the goal.
durationMinutesIntNoOptional time-per-session in minutes for habits.
fileUpload ()NoCover image file upload. Takes precedence over image_url when provided.
goalCategoryIdIDNoUpdated goal category ID. Fetch options via goalCategories query.
goalIdID!Yespublic_id of the goal to update.
goalTypeIdIDNoUpdated goal type ID. Fetch options via goalKinds query.
identityPromptStringNoOptional free-text identity framing (e.g. "Who you're becoming"). Personalizes Coach messaging when present. Max 240 chars.
imageUrlStringNoUpdated URL of a cover image for the goal.
nameStringNoUpdated display name for the goal.
newMilestones[String!]NoDeprecated: Use steps: input. Will be removed in v2.0. List of milestone names to create as child goals. Deprecated; use steps.
pastAttemptContextStringNoOptional free-text context on a prior attempt at this goal. Personalizes Coach messaging when present. Max 200 chars.
privateBooleanNoDeprecated; use visibility. When true, the goal is visible only to the owner.
recurrenceDays[String!]NoUpdated days for weekly/custom_days recurrence.
recurrenceIntervalIntNoUpdated number of days between check-ins for interval recurrence.
recurrenceTypeStringNoUpdated recurrence pattern for habits: daily, weekly, custom_days, or interval.
steps[StepInput!] ()NoStructured roadmap step diff. Upserts by public_id; omitted existing steps soft-delete.
targetDateStringNoUpdated ISO date string for the target completion date (e.g. "2026-12-31").
visibilityGoalVisibilityEnum ()NoWho can see the goal. Wins over private when both are sent.

updateGoalEvent

Updates the content or media of an existing goal progress event.

Returns: UpdateGoalEventPayload! ()

Arguments:

NameTypeRequiredDescription
contentStringNoUpdated progress update text.
deletedBooleanNoWhen true, soft-deletes the goal event.
fileUpload ()NoImage file upload. Takes precedence over image_url when provided.
goalEventIdID!Yespublic_id of the goal event to update.
goalIdIDNopublic_id of the goal this event belongs to.
imageUrlStringNoUpdated URL of an image attached to the progress event.

updateGoalMotivationSnapshot

Saves any subset of the four Goal Motivation Snapshot answers for the current user. Merge semantics — partial saves do not wipe existing keys.

Returns: UpdateGoalMotivationSnapshotPayload! ()

Arguments:

NameTypeRequiredDescription
challengeStringNoBiggest challenge: starting, staying_consistent, momentum_after_setbacks, knowing_progress.
experienceStringNoPrior goal-tracking experience: never, a_few_times, many_still_going, many_struggled.
socialContextStringNoPreferred social context: solo, friend_or_partner, team_or_group.
workTimeStringNoPreferred work time: morning, afternoon, evening, varies.

updatePrivacySettings

Updates the authenticated user's privacy toggles (go_it_alone, private_mode). Self-only.

Returns: UpdatePrivacySettingsPayload! ()

Arguments:

NameTypeRequiredDescription
goItAloneBooleanNoOpt out of ally/community/coach-social prompts.
privateModeBooleanNoHide the user from username search.

updateSeasonalEvent

Admin only. Updates a platform-wide seasonal event.

Returns: UpdateSeasonalEventPayload! ()

Arguments:

NameTypeRequiredDescription
badgeIconString!Yes
badgeNameString!Yes
descriptionStringNo
endDateISO8601Date! ()Yes
eventIdID!Yes
nameString!Yes
slugString!Yes
startDateISO8601Date! ()Yes
targetGoalCountIntNo

updateShowcasedAchievements

Updates the list of achievement identifiers the user displays on their public profile.

Returns: UpdateShowcasedAchievementsPayload! ()

Arguments:

NameTypeRequiredDescription
achievementKeys[String!]!YesOrdered list of achievement identifier keys to display on the public profile.
userIdID!YesThe public ID of the user whose showcased achievements are being updated.

updateSubCommunity

Owner/Admin-only. Edits an existing sub-community (room) — name, description, icon, join policy, and lead.

Returns: UpdateSubCommunityPayload! ()

Arguments:

NameTypeRequiredDescription
communityIdString!Yes
descriptionStringNo
iconStringNo
joinPolicyStringNo
leadMembershipIdStringNo
nameStringNo
teamIdString!Yes

updateUser

Updates profile information for the authenticated user.

Returns: UpdateUserPayload! ()

Arguments:

NameTypeRequiredDescription
deleteUserBooleanNoWhen true, soft-deletes the user account.
emailStringNoA new email address for the user account.
firstNameStringNoThe user first name.
lastNameStringNoThe user last name.
usernameStringNoA new unique username for the user.

updateUserPhoto

Updates the profile photo for the authenticated user.

Returns: UpdateUserPhotoPayload! ()

Arguments:

NameTypeRequiredDescription
fileUpload ()NoImage file upload. Takes precedence over image_url when provided.
imageUrlStringNoPublicly accessible URL of the new profile photo image.

updateUserRoles

Updates an admin user's RBAC roles securely logging the execution.

Returns: UpdateUserRolesPayload! ()

Arguments:

NameTypeRequiredDescription
roles[String!]!Yes
userIdID!Yes

useStreakFreeze

Uses a streak freeze token to proactively cover a habit day before it lapses.

Returns: UseStreakFreezePayload! ()

Arguments:

NameTypeRequiredDescription
goalIdID!Yespublic_id of the habit goal.
missedDateString!YesISO date string to freeze — today through 14 days out; earlier dates are rejected.

verifyMagicCode

Verifies a magic sign-in code and returns a session token.

Returns: VerifyMagicCodePayload! ()

Arguments:

NameTypeRequiredDescription
codeString!Yes
emailString!Yes

Last updated: 2026-09-19 (auto-generated from schema.graphql)

Loading…