Эта страница из справочника для разработчиков и существует только на английском.

GraphQL API

GraphQL is the contract between the TeamUp server and its own clients — the web app and the iOS app. The schema is published here as a stable, reviewable artifact.

Endpoint

https://teamup-live.com/graphql

Subscriptions use the graphql-ws protocol at https://teamup-live.com/graphql/subscription.

Introspection is disabled in production. The full SDL is published instead: download graphql-schema.gql. It is regenerated from the server code and guarded by CI, so it always matches the deployed schema.

Authentication

First-party only for now: requests carry a JWT obtained through TeamUp sign-in (Telegram, VK or Apple). There is no self-service client registration for GraphQL — if you are building an external integration, use the MCP server, which has a full OAuth 2.1 flow.

Queries (56)

  • budget(chatId: Int!): BudgetType
  • chatAssistantDays(chatId: Int!, tzOffsetMin: Int!): [AssistantDayType!]!
  • chatAssistantTurns(chatId: Int!, cursor: String, date: String!, includeSilent: Boolean!, tzOffsetMin: Int!): AssistantTurnsPageType!
  • chatCreditBalance(chatId: Int!): Float!
  • chatCreditDay(chatId: Int!, date: String!, tzOffsetMin: Int!): [CreditTransactionType!]!
  • chatCredits(chatId: Int!, from: DateTime, to: DateTime, tzOffsetMin: Int!): ChatCreditsType!
  • chatDebts(chatId: Int!): [ChatDebtType!]!
  • chatEvents(archivedOnly: Boolean, chatId: Int!, limit: Int, offset: Int): [EventType!]!
  • chatEventsCount(archivedOnly: Boolean, chatId: Int!): Int!
  • chatMembers(chatId: Int!): [ChatMemberType!]!
  • chatMemories(chatId: Int!, userId: Int): [PlayerMemoriesType!]!
  • contacts(eventId: Int): [ContactType!]!
  • creditPacks: [CreditPackType!]!
  • dues(eventId: Int!): [DuesEntryType!]!
  • duesSummary(eventId: Int!): DuesSummaryType
  • event(id: Int!): EventType!
  • eventLog(eventId: Int!): [LogEntryType!]!
  • eventLoggerConfig(eventId: Int!): EventLoggerConfigType!
  • eventNamingTemplate(chatId: Int!): EventNamingType!
  • eventScoringConfig(eventId: Int!): EventScoringConfigType
  • eventTypes(eventId: Int!): [EventTypeConfigType!]!
  • exportLink(chatId: Int!): ExportLinkType
  • gameScore(gameId: Int!): [GameTeamScoreType!]!
  • games(eventId: Int!): [GameScheduleType!]!
  • goalTimerStats(eventId: Int!): GoalTimerStatsType
  • groupConnectCode(chatId: Int!): GroupConnectCodeType
  • groupInvite(slug: String!): GroupInvitePreviewType!
  • mergeCandidates(chatId: Int!, userId: Int!): [MergeCandidateType!]!
  • myAccounts: [LinkedAccountType!]!
  • myAiSubscription: AiSubscription!
  • myCapabilities(chatId: Int!, eventId: Int): CapabilitiesType!
  • myChats: [ChatType!]!
  • myEvents(archivedOnly: Boolean, limit: Int, offset: Int, upcoming: Boolean): [EventType!]!
  • myOrganizerJourney(language: String!): OrganizerJourney!

    The caller’s shared organizer journey, including the stage before a group exists. Reading does not start the route.

  • myPromotionSettings: PromotionSettings!

    Global promotional settings across all linked interfaces. Main onboarding is independent.

  • onboardingArticle(interface: String, key: String!, language: String!): OnboardingArticle
  • organizerOnboarding(chatId: Int!, language: String!): OrganizerOnboarding

    Stored organizer progress in this group. Does not start onboarding or scan event history.

  • payDetails(paymentId: String!): PayDetailsType
  • payment(id: String!): PaymentType
  • playerStats(typeId: String, userId: Int!): [PlayerStatRowType!]!
  • preset(id: String!): PresetType
  • presets: [PresetType!]!
  • raceToStats(eventId: Int!): RaceToStatsType
  • registrations(eventId: Int!, includePending: Boolean): [RegistrationType!]!
  • roundJudgeStats(eventId: Int!): RoundJudgeStatsType
  • setPointStats(eventId: Int!): SetPointStatsType
  • signupCard(slug: String!): SignupCardType!
  • signupInviteCandidates(slug: String!): [SignupCandidateType!]!
  • signupLinks(eventId: Int!): [SignupLinkType!]!
  • spectatorCommentary(slug: String!): [SpectatorCommentaryType!]!
  • spectatorLog(slug: String!): [LogEntryType!]!
  • spectatorView(slug: String!): SpectatorViewType!
  • subscriptionOffers: [SubscriptionOffer!]!
  • subscriptionsEnabled: Boolean!
  • teams(eventId: Int!): [TeamType!]!
  • tonConnectTx(paymentId: String!, senderAddress: String): TonConnectTxType!

Mutations (87)

  • addEventHost(eventId: Int!, userId: Int!): Boolean!
  • addMemory(chatId: Int!, text: String!, userId: Int!): MemoryWriteResultType!
  • addPlayerToTeam(teamId: Int!, userId: Int!): TeamMemberType!
  • approveRegistration(registrationId: Int!): RegistrationType!
  • archiveEvent(id: Int!): EventType!
  • cancelAiSubscription: Boolean!
  • claimDues(eventId: Int!): DuesEntryType!
  • confirmOrganizerStep(chatId: Int!, stepKey: String!): Boolean!

    Explicitly verify an existing step in this organizer group, including demo data. True means completed; false means the condition is not met. Records evidence once; never accepts client completion claims.

  • confirmPromotionShown(deliveryId: String!): Boolean!

    Acknowledge visible display or successful delivery, not a prefetch. Idempotent for this user and receipt.

  • createAccountLinkUrl: AccountLinkUrlType!
  • createChat(name: String!): ChatType!
  • createEvent(input: CreateEventInput!): EventType!
  • createExportLink(chatId: Int!, includeMoney: Boolean): ExportLinkType!
  • createGameSchedule(eventId: Int!, teamIds: [Int!]!): GameScheduleType!
  • createGroupConnectCode(chatId: Int!): GroupConnectCodeType!
  • createInvoice(chatId: Int!, currency: String, offerCode: String!): CreateInvoiceResultType!
  • createSignupLink(eventId: Int!, label: String, settings: SignupSettingsInput): SignupLinkType!
  • createTeam(color: String, emoji: String, eventId: Int!, name: String!): TeamType!
  • deleteBankEntry(chatId: Int!, entryId: Int!): Boolean!
  • deleteEventType(eventId: Int!, typeId: String!): Boolean!
  • deleteGroup(chatId: Int!): Boolean!
  • deleteMemory(id: Int!): Boolean!
  • deleteTeam(teamId: Int!): Boolean!
  • disableGroupInvite(chatId: Int!): Boolean!
  • disableSpectatorLink(eventId: Int!): Boolean!
  • enableGroupInvite(chatId: Int!): GroupInviteType!
  • enableSpectatorLink(eventId: Int!): SpectatorLinkType!
  • finishEvent(id: Int!): EventType!
  • finishGame(gameId: Int!): GameScheduleType!
  • generateRoundRobin(eventId: Int!): [GameScheduleType!]!
  • grantCapability(capability: String!, chatId: Int!, userId: Int!): Boolean!
  • inviteViaLink(guestName: String, slug: String!, userId: Int): RegistrationType!
  • joinGroup(slug: String!): JoinGroupResultType!
  • mergeChatMember(chatId: Int!, sourceUserId: Int!, targetUserId: Int!): Boolean!
  • migrateChatEvents(sourceChatId: Int!, targetChatId: Int!): ChatType!
  • movePlayer(memberId: Int!, toTeamId: Int!): TeamMemberType!
  • quickCreateEvent(chatId: Int, demo: Boolean!, presetId: String!): QuickCreateResultType!
  • reapplyPreset(eventId: Int!, presetId: String!): Boolean!
  • recordBankEntry(amount: Int!, chatId: Int!, eventId: Int, kind: String!, label: String!): BankEntryType!
  • recordOrganizerInteractions(events: [OrganizerInteractionInput!]!): Boolean!

    Record up to 20 consented interaction diagnostics. Never grants rights or completes progress. Retrying IDs is idempotent.

  • refreshChatMembers(chatId: Int!): Boolean!
  • register(eventId: Int!): RegistrationType!
  • registerDeviceToken(environment: String, platform: String, token: String!): Boolean!
  • registerExisting(eventId: Int!, userIds: [Int!]!): [RegistrationType!]!
  • registerGuestReusable(eventId: Int!, guestName: String!): RegistrationType!
  • registerViaLink(slug: String!): RegistrationType!
  • rejectRegistration(note: String, registrationId: Int!): RegistrationType!
  • removeEventHost(eventId: Int!, userId: Int!): Boolean!
  • removePlayerFromTeam(memberId: Int!): Boolean!
  • renameChat(chatId: Int!, name: String!): ChatType!
  • renameGuest(chatId: Int!, name: String!, userId: Int!): UserType!
  • reopenEvent(id: Int!): EventType!
  • reservePromotion(language: String!, requestId: String!, surface: PromotionSurface!): PromotionOffer

    Reserve one promotional display across all surfaces. Null means no eligible offer or budget. Reuse requestId only to retry the same delivery; render at most once before displayBefore, then confirm.

  • revokeCapability(capability: String!, chatId: Int!, userId: Int!): Boolean!
  • revokeExportLink(chatId: Int!): Boolean!
  • revokeGroupConnectCode(chatId: Int!): Boolean!
  • revokeSignupLink(linkId: Int!): Boolean!
  • sendAssistantMessage(chatId: Int!, eventId: Int, text: String!): SendAssistantMessageResultType!
  • setAiRoleModels(memberModel: String!, organizerModel: String!): Boolean!
  • setBankHolder(chatId: Int!, userId: Int): String
  • setChatCurrency(chatId: Int!, currency: String!): ChatType!
  • setChatRequisites(chatId: Int!, details: String, remove: Boolean): DuesRequisitesType
  • setDuesStatus(eventId: Int!, paidAmount: Int, status: String!, userIds: [Int!]!): [DuesEntryType!]!
  • setEventFee(amount: Int, eventId: Int!, remove: Boolean): Int
  • setEventNamingTemplate(chatId: Int!, label: String, scheme: String!): EventNamingType!
  • setMemberRole(chatId: Int!, role: String!, userId: Int!): Boolean!
  • setOrganizerStepPreference(chatId: Int!, language: String!, preference: OnboardingPreference!, stepKey: String!): OrganizerOnboarding

    Skip an optional step, defer a recommendation, or resume it. Does not mark a task completed.

  • setPromotionPreference(preference: OnboardingPreference!, promotionKey: String!): Boolean!

    Decline, defer or resume a promotion across all groups and interfaces.

  • setPromotionsEnabled(enabled: Boolean!): PromotionSettings!
  • setScoringConfig(eventId: Int!, input: ScoringConfigInput!): Boolean!
  • splitTeams(count: Int!, eventId: Int!): [TeamType!]!
  • splitTeamsManual(input: SplitTeamsManualInput!): [TeamType!]!
  • sponsorGroupAi(chatId: Int!): Boolean!
  • startGame(gameId: Int!): GameScheduleType!
  • startOrganizerJourney(chatId: Int, language: String!): OrganizerJourney!

    Explicitly start organizing or select an accessible organizer group. Does not create a group or complete client-reported steps.

  • startOrganizerOnboarding(chatId: Int!, language: String!): OrganizerOnboarding

    Start the main route in an accessible organizer context. No promotional cooldown applies.

  • submitVoiceNote(durationSec: Int!, eventId: Int!, gameId: Int, localId: String!, recordedAt: String!): VoiceNoteResultType!
  • syncEntries(entries: [SyncEntryInput!]!, eventId: Int!, gameId: Int): SyncResponseType!
  • transferOwnership(chatId: Int!, newOwnerUserId: Int!): Boolean!
  • unarchiveEvent(id: Int!): EventType!
  • unregister(eventId: Int!, userId: Int): RegistrationType
  • updateEvent(description: String, id: Int!): EventType!
  • updateMemory(id: Int!, text: String!): MemoryWriteResultType!
  • updateProfile(firstName: String, lastName: String): UserType!
  • updateSignupLink(label: String, linkId: Int!, settings: SignupSettingsInput): SignupLinkType!
  • updateTeam(color: String, emoji: String, name: String, teamId: Int!): TeamType!
  • upsertEventType(eventId: Int!, input: UpsertEventTypeInput!): Boolean!

Subscriptions (3)

  • assistantTurnFinished(chatId: Int!): AssistantTurnFinishedType!
  • gameUpdated(eventId: Int!): SyncResponseType!
  • paymentUpdated(paymentId: String!): PaymentType!