A person known to a business — the primary entity for all business interactions. The optional user field links the participant to a real user account.
Fields
idID!businessBusiness!urlResourceUrl!Canonical pages for this participant — the public go URL and the staff-admin URL. Consume instead of building paths from the id.
nameString!emailStringuserUserLinked user account, or null for business-local participants.
teamsTeamConnection!Teams this participant belongs to. Cursor-paginated; default page size 50, clamped to [1, 100]. Sort order is name ASC, id ASC. Most participants belong to a handful of teams; pagination is here for shape consistency with the rest of the schema rather than for any realistic team count.
registrationsActivityRegistrationConnection!Activity registrations for this participant. Cursor-paginated; default page size 50, clamped to [1, 100].
Sort defaults to activitySessions.startAt ASC when the requested status / time filter is future-leaning (or sort: startAsc is passed explicitly), and to startAt DESC otherwise. Without any cross-table filter the page falls back to registration.createdAt DESC, id ASC so registrations not yet attached to a session still surface.
filter.query matches against the registration's activity name or session name (case-insensitive). filter.includeGuests defaults to true; pass false to exclude guest registrations the participant didn't book themselves.
Arguments (4)
registrationCountInt!Number of confirmed activity registrations for this participant.
challengeRegistrationsChallengeRegistrationConnection!Challenge registrations for this participant, newest first. Includes progress computed from confirmed, checked-in sessions inside each challenge's date window.
reviews[Review!]!Reviews this participant has written (about the business or its staff), newest first. Excludes reviews removed by platform moderation and ones the participant deleted.
activeMemberships[Membership!]!Memberships with an active purchase for this participant.
activePasses[Pass!]!Passes with an active purchase for this participant.
activeGiftCards[GiftCard!]!Gift cards with an active purchase for this participant.
activeProductPurchases[ProductPurchase!]!All active product purchases for this participant, across memberships, passes, and gift cards. Use this when you need the purchase metadata (purchasedAt, sessionsRemaining, currentPeriodEnd) alongside the product itself.
productPurchasesProductPurchaseConnection!Every product purchase for this participant regardless of status or fulfillment state, newest first. Use this for admin views that want to surface expired passes, exhausted memberships, redeemed gift cards, and picked-up physical products alongside active entitlements. Cursor-paginated; default page size 50, clamped to [1, 100]. Sort order is purchasedAt DESC, id ASC.
Pass filter.scope = active to restrict to currently-usable entitlements: any status in active | pastDue | paymentActionRequired | unpaid | incomplete, plus memberships in their billing grace period (exhausted / cancelled status with currentPeriodEnd in the future).
Arguments (3)
unfulfilledProductPurchases[ProductPurchase!]!Physical product purchases that have not yet been fulfilled (handed over to the participant). Use this to surface outstanding work in admin UI.
emailDispatchesEmailDispatchConnection!Transactional emails Sessions has dispatched on this participant's behalf. One row per successful Resend POST — emails that the test-domain check or an idempotency guard skipped never appear here. Cursor-paginated; default page size 50, clamped to [1, 100]. Sort order is sentAt DESC, id ASC.
Arguments (3)
emailMarketingConsentParticipantEmailMarketingConsent!Current email-marketing consent state for this participant within this business. Business-internal — never exposed on public surfaces or to any other business. Sessions never sends marketing email itself; this records whether the business may email the participant through its own provider.
emailConsentEventsParticipantEmailConsentEventConnection!Immutable history of every email-marketing consent change for this participant (grants and withdrawals), newest first — the legal record of consent. Cursor-paginated; default page size 50, clamped to [1, 100].
metadataStringReturns the first value of the named metadata key, or null if not set. Names use reverse-DNS format, e.g. acme.crm.external-id; the $. shorthand ($.tier) is accepted as an alias for the sessions. namespace. For list-valued fields, prefer metadataValues.
Arguments (1)
nameString!metadataValues[String!]!Returns every value stored for the named metadata key, in order. A scalar field yields a one-element list; an unset key yields an empty list. Accepts the same key forms as metadata.
Arguments (1)
nameString!metadataEntries[MetadataEntry!]!All metadata stored on this participant, one entry per key (each carrying its ordered list of values). Powers the participant metadata editor and is the same store segment filters read via metadata.<key> conditions.
blockMetadata[BlockMetadataEntry!]!Structured block metadata persisted onto this participant by saveToParticipant registration blocks — e.g. a reusable signed waiver or other captured agreement. Only entries whose stored value decodes as a block-metadata envelope are returned; plain scalar answers surface through metadataEntries instead. Powers the read-only structured viewer on the participant page.
clientNotesClientNoteConnection!Practitioner-authored client notes / visit history for this participant (health & wellness vertical). Cursor-paginated, newest first. Gated on staff auth + the clientRecords feature flag — resolves to an empty connection for non-staff callers or when the feature is off.
createdAtDateTime!