Skip to content
MutationObject

Fields

authorizeOAuthApplicationAuthorizeOAuthApplicationResult!

Approve (or deny) a pending OAuth authorization request for the chosen business. On approval, re-validates the request, re-authorizes the viewer's access to businessId, and mints a one-time authorization code; on denial, builds an error=access_denied redirect. Either way redirectUrl is the absolute URL the browser should be sent to (the client's redirect_uri with a code or error). Requires an authenticated viewer.

Arguments (1)
registerPushDeviceRegisterPushDeviceResult!

Register (or refresh) the calling device's push-notification token for a business's white-label app. Idempotent on the device token: re-registering updates the row and re-enables it. The token is scoped to the business identified by businessHandle. Requires an authenticated viewer.

Arguments (1)
unregisterPushDeviceBoolean!

Disable the calling device's push token (e.g. on sign-out or when the user turns off notifications). Returns true if a matching active token was disabled.

Arguments (1)
tokenString!
claimBusinessClaimBusinessResult!

Take ownership of a concierge-built business via a claim token. Requires an authenticated viewer (sign-in/account creation happens first on the claim landing page). Transfers businesses.ownerId to the viewer, adds them as a staff member, and marks the claim claimed. Rejects unknown, expired, already-claimed, or revoked tokens.

Arguments (1)
tokenString!
createFamilyFamilyResult!

Create a family (household) owned by the viewer, who becomes its first manager. A viewer can create more than one family.

Arguments (1)
nameString

Add a managed child to a family the viewer manages. Creates a login-less users row (no email) and a child membership. Requires a date of birth (YYYY-MM-DD) for age-eligibility.

Arguments (2)
familyEntityRef!
updateFamilyMemberFamilyMemberResult!

Update a member's name and/or date of birth.

Arguments (2)
removeFamilyMemberDeleteFamilyMemberResult!

Remove a member from the family (soft-deletes the membership).

Arguments (1)
memberEntityRef!
setHealthProfileFamilyMemberResult!

Create or replace a member's medical profile.

Arguments (2)

Record or update a single consent for a member.

Arguments (3)
memberEntityRef!
grantedBoolean!
addEmergencyContactFamilyMemberResult!

Add an emergency contact for a member.

Arguments (2)
removeEmergencyContactDeleteFamilyMemberResult!

Remove an emergency contact (soft-delete).

Arguments (1)
contactEntityRef!
graduateTeenFamilyMemberResult!

Graduate a managed child to their own login by giving them an email. Only allowed for a child aged 13 or older (COPPA). Sends them a sign-in code so they can take over the account.

Arguments (2)
memberEntityRef!
emailString!
inviteGuardianFamilyInviteResult!

Invite another adult by email to join a family as a manager or guardian. The viewer must be a manager/guardian of the family. Emails the invitee a link that signs them in (creating an account if needed) and lands on the accept page. role must be manager or guardian — never child.

Arguments (3)
familyEntityRef!
emailString!
acceptFamilyInviteAcceptFamilyInviteResult!

Accept a co-guardian invitation by its secret token. The viewer must be signed in with the email the invite was sent to; on success they join the family with the invited role.

Arguments (1)
tokenString!
revokeFamilyInviteDeleteFamilyInviteResult!

Revoke a pending co-guardian invitation. Only a manager/guardian of the family may revoke it.

Arguments (1)
inviteEntityRef!
createAccountRequestAuthCodeResult!

Request an email containing a 6-digit code to confirm a new account. Always returns success regardless of whether the email is already in use (anti-enumeration). If an account already exists for the email, a sign-in code is sent instead.

When businessHandle is set, the issued code is pinned to that business and the resulting token is scoped to it (does not set a cross-account cookie). Used by the business-pinned embed sign-in flow.

When name is set and the email resolves to a brand-new account at redemption time, that name is applied to the inserted user row. Ignored for emails that already have an account.

Arguments (4)
emailString!
nameString
redirectString
businessHandleString

Request a sign-in email containing a 6-digit code. Always returns success regardless of whether the email matches an existing account (anti-enumeration).

When businessHandle is set, the issued code is pinned to that business and the resulting token is scoped to it (does not set a cross-account cookie). Used by the business-pinned embed sign-in flow.

Arguments (3)
emailString!
redirectString
businessHandleString
redeemAuthCodeSignInResult!

Redeem a 6-digit auth code and sign the user in. Returns the created or signed-in user, the JWT token, and the redirect URL stored on the code. Sets the auth cookie on success — except for codes that were issued with a business pin, which return a business-scoped token without touching the cookie session.

Arguments (2)
emailString!
codeString!

Clear the auth cookie and sign out the current user.

startPasskeyCreateStartPasskeyResult!

Begin passkey registration for the currently authenticated user.

finishPasskeyCreateFinishPasskeyResult!

Complete passkey registration and save the credential.

Arguments (2)
credentialString!
nameString
startPasskeySignInStartPasskeyResult!

Begin passkey authentication. Pass email to hint at known credentials.

Arguments (1)
emailString
finishPasskeySignInSignInResult!

Complete passkey authentication and issue an auth token. Sets the auth cookie unless businessHandle is set, in which case a business-scoped token is returned without touching the cookie session (embed sign-in flow).

Arguments (2)
credentialString!
businessHandleString
deletePasskeyDeletePasskeyResult!

Delete a saved passkey by ID.

Arguments (1)
idID!
deleteAccountDeleteAccountResult!

Soft-delete the currently authenticated account, revoke its sessions, and immediately cancel any active recurring membership billing linked to it.

revokeSessionRevokeSessionResult!

Revoke (sign out) one of the viewer's own sessions.

Arguments (1)
sessionID!
revokeOtherSessionsRevokeOtherSessionsResult!

Revoke (sign out) all of the viewer's sessions except the current one.

updatePasskeyUpdatePasskeyResult!

Rename a saved passkey. The trimmed name must not be empty.

Arguments (2)
idID!
nameString!
createMatchCreateMatchResult!
Arguments (6)
startedAtDateTime!
endedAtDateTime
winnerMatchTeam
reportMatchScoreReportMatchScoreResult!

Report the result of a league match — the single match of a session. Allowed for an active captain of either competing team. Applies the activity's scoreEntryMode (immediate vs. admin-approval).

Arguments (3)
sessionEntityRef!
winnerMatchTeam
disputeMatchDisputeMatchResult!

Dispute a completed league result (only under immediate scoring). Flags the match for staff adjudication; allowed for a captain of either team.

Arguments (2)
sessionEntityRef!
reasonString
createTeamCreateTeamResult!
Arguments (3)
nameString!
initialMembers[EntityRef!]
signUpTeamSignUpTeamResult!
Arguments (2)
divisionEntityRef!
createTeamInviteCreateTeamInviteResult!
Arguments (2)
emailString
acceptTeamInviteAcceptTeamInviteResult!
Arguments (1)
tokenString!
registerForActivityRegisterForActivityResult!

Register for an individual activity session. Use productPurchase to pay with an existing pass/membership, or omit it for direct purchase. Pass guest to register on behalf of someone else; the caller is recorded as the booker and pays. The activity's participant policy must allow guest registrations.

Pass buyer when the caller is not signed in to perform guest checkout. Requires the business's guestCheckoutEnabled setting.

Arguments (14)
activitySessionEntityRef!
productPurchaseEntityRef
bookableSpotEntityRef
familyMemberEntityRef

Register one of the signed-in viewer's managed children (a FamilyMember with role child). The viewer must be a manager or guardian sharing a family with the member; the booking is recorded with the viewer as the booker and the child as the participant. Mutually exclusive with guest.

discountCodeString

Optional discount code typed by the customer. Validated server-side against the activity's business; an invalid or unmet code returns a per-field error rather than registering at full price.

giftCardCodeString

Optional gift-card code to apply against the registration price. The card's remaining balance covers up to the post-discount line; any remainder is charged via Stripe.

paymentMethodString

Stripe PaymentMethod ID captured via SetupIntent for paid card waitlists. Required when the registration falls onto the waitlist for a card-paid activity (no productPurchase); used to charge the customer off-session if their spot is later promoted.

savePaymentMethodBoolean

When true for a signed-in card checkout, attach the newly-entered card to the buyer's Stripe Customer for future purchases. Ignored for guest checkout and saved-card waitlist reservations.

taxCalculationIdString

Stripe Tax calculation ID returned by a recent quoteTax query. When provided, the server reuses that calculation. Ignored when the seller has tax disabled.

emailMarketingConsentBoolean

Email-marketing opt-in captured on the registration form. true records an affirmative consent for this participant against the activity's business; only honored when the business has consent collection enabled. Sessions never sends marketing email itself — consent lets the business email the participant through its own provider.

emailMarketingConsentDisclosureVersionID

Version of the consent disclosure the buyer was shown. Frozen with the consent record so the proof reflects exactly what they agreed to.

bookActivityTimeAppointmentBookingResult!

Books an open time range on a structure: booking activity. Validates [startAt, endAt) is a contiguous run of the activity's open increments whose increment count is within [minIncrements, maxIncrements], then creates the booking — an activityId-tied appointment session + registration. Free bookings confirm immediately; activities set to request mode create a pending request the business approves or declines. Paid bookings charge bookingPricePerIncrement × increments and create the booking only once payment succeeds (via completeCheckout). buyer supplies guest details when the caller is not signed in.

productPurchase redeems one of the caller's passes/memberships (as surfaced by Activity.bookingPaymentResolution) against the booking: a pass spends the activity's creditCost (default 1) per booked increment, so a covering purchase settles the whole booking for creditCost × increments, confirming immediately via the free path — no charge, no checkout. It's all-or-nothing — the purchase must belong to the buyer, be active, cover the activity, and (for a finite session count) have enough sessions for the whole booking; otherwise it's rejected and the caller pays by card.

formData carries answers to the activity's registration blocks — intake questionnaires and consent/waiver signatures collected before the appointment — persisted as block metadata + an agreement PDF on the resulting registration, exactly like registerForActivity.

tipAmount adds an optional gratuity (cents) on top of a paid booking's service price; it is added after tax, ignored for free / package-covered bookings, and excluded from both the tax base and the platform-fee base.

emailMarketingConsent records the participant's optional opt-in to the business's marketing email, exactly like registerForActivity — honoured only when the booked activity carries an emailMarketing registration block and the business has consent collection enabled.

Arguments (8)
activityID!
startAtDateTime!
endAtDateTime!
productPurchaseID
tipAmountInt
emailMarketingConsentBoolean
cancelActivityRegistrationCancelActivityRegistrationResult!

Cancel an existing activity registration.

Arguments (1)
idID!
acceptWaitlistOfferAcceptWaitlistOfferResult!

Accept a waitlist offer. Completes registration; for card-paid offers with no reserved card on file, returns a CheckoutSession so the caller can drive Stripe.js. Optional discount and gift-card codes can be applied at accept time.

Arguments (3)
registrationEntityRef!
discountCodeString
giftCardCodeString
createWaitlistSetupIntentCreateWaitlistSetupIntentResult!

Create a SetupIntent for capturing a card to reserve a paid waitlist spot. The returned client secret is consumed by Stripe.js; the resulting PaymentMethod is then passed to registerForActivity as paymentMethod.

Arguments (1)
activitySessionEntityRef!
registerForChallengeRegisterForChallengeResult!

Register the current user for a challenge. Creates or reuses the participant record for the challenge's business.

Arguments (1)
challengeEntityRef!
completeCheckoutCompleteCheckoutResult!

Complete a checkout after Stripe payment confirmation. Verifies the payment status with Stripe, then fulfills the underlying entity (pass purchase or registration). Idempotent — safe to call multiple times.

Arguments (1)
paymentIdID!
purchaseProductPurchaseProductResult!

Purchase a product (pass, membership, gift card, or physical product). Returns a checkout session if payment is required, or the purchase directly for free products.

Pass buyer when the caller is not signed in to perform guest checkout. Requires the business's guestCheckoutEnabled setting. Passes and memberships always require a signed-in user.

Arguments (12)
productEntityRef!
discountCodeString

Optional discount code typed by the customer. Validated server-side against the product's business; an invalid or unmet code returns a per-field error rather than purchasing at full price.

giftCardCodeString

Optional gift-card code to apply against the product price. The card's remaining balance covers up to the post-discount line; any remainder is charged via Stripe.

paymentMethodID

Existing saved Stripe PaymentMethod to charge. Currently used for membership subscriptions so a signed-in buyer can subscribe without re-entering card details.

savePaymentMethodBoolean

When true for a signed-in one-shot card checkout, attach the newly-entered card to the buyer's Stripe Customer for future purchases. Ignored for guest checkout and memberships.

taxCalculationIdString

Stripe Tax calculation ID returned by a recent quoteTax query. When provided, the server reuses that calculation rather than computing a fresh one — guaranteeing the buyer is charged the amount they saw. Ignored when the seller has tax disabled.

forRegistrationBoolean

Set when this purchase exists only to fund a registration that's being booked in the same flow (the buyer picked "buy a pass" as the payment method on a session). For a single-use pass the seat consumes the only session immediately, so the standalone purchase-confirmation email is suppressed — the registration confirmation already covers it. Multi-use passes still send the purchase email since sessions remain.

recurringConsentAcceptedBoolean

Separate affirmative consent for recurring membership charges. Required when purchasing a membership; ignored for one-time products.

emailMarketingConsentBoolean

Email-marketing opt-in captured at checkout. true records an affirmative consent for this buyer against the product's business; only honored when the business has consent collection enabled. Sessions never sends marketing email itself — consent lets the business email the participant through its own provider.

emailMarketingConsentDisclosureVersionID

Version of the consent disclosure the buyer was shown. Frozen with the consent record so the proof reflects exactly what they agreed to.

recordPurchaseBlockResponsesRecordPurchaseBlockResponsesResult!

Persist the buyer's responses to a product's purchase-page blocks (contract acceptance, signature, acknowledgements, form fields) as an immutable snapshot, keyed by purchase. Sent as part of the checkout flow. Replaces any previously-recorded responses for the purchase.

Arguments (1)
createBillingPortalSessionCreateBillingPortalSessionResult!

Create a Stripe Customer Portal session for a membership purchase so the buyer can update payment details or cancel the recurring subscription.

Arguments (1)
purchaseID!
createPaymentMethodSetupIntentCreatePaymentMethodSetupIntentResult!

Create a SetupIntent for adding a saved card to the viewer's account. The client mounts Stripe Elements in setup mode against the returned clientSecret; on success the card is attached to the viewer's Stripe Customer and listed by Me.paymentMethods.

recordPaymentMethodAttachedRecordPaymentMethodAttachedResult!

Persist a freshly-attached PaymentMethod into the local cache so subsequent reads of Me.paymentMethods don't need a Stripe call. Called by the client right after confirmSetup resolves; idempotent with the payment_method.attached webhook backstop.

Arguments (1)
paymentMethodID!
setDefaultPaymentMethodSetDefaultPaymentMethodResult!

Mark one of the viewer's saved cards as the default. Updates the Stripe Customer's invoice_settings.default_payment_method, which is the auto-charge fallback for paid waitlist promotion (and any future off-session charge surface).

Arguments (1)
paymentMethodID!
removePaymentMethodRemovePaymentMethodResult!

Detach one of the viewer's saved cards. Returns a friendly error when the card backs an active membership subscription — the caller should swap the subscription's payment method via the billing portal first.

Arguments (1)
paymentMethodID!
prepareSubscriptionBillingUpdatePrepareSubscriptionBillingUpdateResult!

Prepare an in-app billing recovery attempt for a membership subscription. Returns the latest invoice confirmation secret for Stripe Elements when the invoice still needs payment or authentication.

Arguments (1)
purchaseID!
completeSubscriptionBillingUpdateCompleteSubscriptionBillingUpdateResult!

Finish an in-app billing recovery attempt after Stripe Elements confirms the latest invoice payment. Webhooks remain the source of truth for clearing the local billing issue.

Arguments (1)
purchaseID!
cancelMembershipSubscriptionCancelMembershipSubscriptionResult!

Schedule a membership subscription to cancel at the end of the current billing period.

Arguments (2)
purchaseID!
reasonString

Optional freeform reason the buyer gave for cancelling, captured for product feedback. Not surfaced back to the buyer.

resumeMembershipSubscriptionResumeMembershipSubscriptionResult!

Undo a pending end-of-period cancellation for a membership subscription.

Arguments (1)
purchaseID!
redeemGiftCardRedeemGiftCardResult!

Redeem a gift card code for the given business. Creates or transfers the balance to the authenticated user's participant record.

Arguments (2)
codeString!
businessEntityRef!

Update the authenticated user's profile. All arguments are optional; only fields that are provided are applied. Pass avatar: null to remove the avatar, or socialLinks: [] to clear all social links.

Arguments (5)
nameString
pronounsString
genderString
avatarEntityRef
socialLinks[SocialLinkInput!]
requestEmailChangeRequestEmailChangeResult!

Send a verification code and link to the requested email address. Confirming either swaps the user's email to the new address. Always returns success regardless of whether the target email is already in use (anti-enumeration).

Arguments (1)
emailString!
confirmEmailChangeConfirmEmailChangeResult!

Confirm a pending email change with the 6-digit code sent to the new address. The user must still be signed in to the account requesting the change.

Arguments (2)
emailString!
codeString!
createBusinessCreateBusinessResult!

Create a new business owned by the given user. Surfaced on the public (account-subdomain) schema so the post-signup Create a business flow can run before the operator has a business subdomain to call the business-scoped variant against.

Arguments (8)
nameString!
ownerEntityRef!
organizationEntityRef
structures[ActivityStructure!]

Activity structures the business plans to run (classes, leagues, etc.). Captured at creation as a tailoring hint; defaults to [].

activityTypes[ActivityType!]

Activity types (sports, disciplines) the business plans to offer. Captured at creation as a tailoring hint; defaults to [].

countryString

Optional ISO 3166-1 alpha-2 country (e.g. CA, US) the owner declares for the business. Prefilled from the request's inferred location. Used as the regional fallback for discovery and to seed the Stripe Connect account country. Null when not provided; an unsupported code is rejected.

Plan to start the business's trial on. Every new business gets a row in platform_subscriptions at creation with a no-card trial; this picks the tier. Defaults to start when omitted.

requestCountrySupportRequestCountrySupportResult!

Register interest in Sessions supporting a country it can't yet onboard. Surfaced on the create-business country picker ("Request another country…"). country is free-form (the whole point is unsupported countries); region and note are optional. The request is logged as an internal country-request signal (and the caller's detected location is attached server-side). Always succeeds for any non-empty country.

Arguments (3)
countryString!
regionString
noteString
addFavoriteAddFavoriteResult!

Add a business, staff member (instructor), or activity to the authenticated user's favorites. Idempotent — adding an existing favorite is a no-op.

Arguments (1)
removeFavoriteRemoveFavoriteResult!

Remove a business, staff member, or activity from the authenticated user's favorites. Idempotent — removing a favorite that isn't set is a no-op.

Arguments (1)
addReviewAddReviewResult!

Leave a star rating (1–5) and an optional written review for a business or one of its staff members. The viewer must be a verified attendee: a confirmed registration for one of the business's sessions is required, and for a staff review, a session that staff member was assigned to. At most one live review per target — submitting again when one already exists returns a $.target error (edit the existing review instead).

Arguments (1)
updateReviewUpdateReviewResult!

Update the rating and/or written body of a review the viewer authored.

Arguments (1)
deleteReviewDeleteReviewResult!

Delete a review the viewer authored. Soft-deletes the row, freeing the viewer to review the same target again later.

Arguments (1)
reviewID!
setMyEmailMarketingConsentSetMyEmailMarketingConsentResult!

Set the signed-in viewer's own email-marketing consent for a business they participate in. grant records an affirmative opt-in and freezes the compliant disclosure the viewer was shown (only allowed while the business is collecting consent); withdraw unsubscribes. Recorded as an immutable ledger event with source = participant.

Arguments (2)
setDebugPreviewBranchSetDebugPreviewBranchResult!

Set the preview branch to route requests to. Pass null (or omit) to clear the pinned preview and route to the main worker. Writes (or augments) the debug claim on the auth cookie; clients reload to pick up the new routing.

Arguments (1)
branchString
stopObservingStopObservingResult!

End the current observer session and restore the admin's own session. Available wherever an observer session is honored (e.g. the user's own go / account view) so the admin can stop observing from any of them.

generatePurchasesExportGenerateUserExportResult!

Generate a CSV of the viewer's product purchases (across every participant linked to their account) and persist it as a downloadable {@link UserExport}. The optional filters mirror the account purchases list — substring search, product types, and businesses.

Arguments (1)
generateReviewsExportGenerateUserExportResult!

Generate a CSV of every review the viewer has written and persist it as a downloadable {@link UserExport}. Reviews carry no list filters.

generateSessionsExportGenerateUserExportResult!

Generate a CSV of the viewer's session registrations and persist it as a downloadable {@link UserExport}. The optional filters mirror the account schedule list — time window, businesses, activity types, and substring search; business scopes the export to a single business.

Arguments (1)
Mutation