Ta strona należy do dokumentacji dla programistów i istnieje tylko po angielsku.
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!): BudgetTypechatAssistantDays(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!): DuesSummaryTypeevent(id: Int!): EventType!eventLog(eventId: Int!): [LogEntryType!]!eventLoggerConfig(eventId: Int!): EventLoggerConfigType!eventNamingTemplate(chatId: Int!): EventNamingType!eventScoringConfig(eventId: Int!): EventScoringConfigTypeeventTypes(eventId: Int!): [EventTypeConfigType!]!exportLink(chatId: Int!): ExportLinkTypegameScore(gameId: Int!): [GameTeamScoreType!]!games(eventId: Int!): [GameScheduleType!]!goalTimerStats(eventId: Int!): GoalTimerStatsTypegroupConnectCode(chatId: Int!): GroupConnectCodeTypegroupInvite(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!): OnboardingArticleorganizerOnboarding(chatId: Int!, language: String!): OrganizerOnboardingStored organizer progress in this group. Does not start onboarding or scan event history.
payDetails(paymentId: String!): PayDetailsTypepayment(id: String!): PaymentTypeplayerStats(typeId: String, userId: Int!): [PlayerStatRowType!]!preset(id: String!): PresetTypepresets: [PresetType!]!raceToStats(eventId: Int!): RaceToStatsTyperegistrations(eventId: Int!, includePending: Boolean): [RegistrationType!]!roundJudgeStats(eventId: Int!): RoundJudgeStatsTypesetPointStats(eventId: Int!): SetPointStatsTypesignupCard(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!): PromotionOfferReserve 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): StringsetChatCurrency(chatId: Int!, currency: String!): ChatType!setChatRequisites(chatId: Int!, details: String, remove: Boolean): DuesRequisitesTypesetDuesStatus(eventId: Int!, paidAmount: Int, status: String!, userIds: [Int!]!): [DuesEntryType!]!setEventFee(amount: Int, eventId: Int!, remove: Boolean): IntsetEventNamingTemplate(chatId: Int!, label: String, scheme: String!): EventNamingType!setMemberRole(chatId: Int!, role: String!, userId: Int!): Boolean!setOrganizerStepPreference(chatId: Int!, language: String!, preference: OnboardingPreference!, stepKey: String!): OrganizerOnboardingSkip 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!): OrganizerOnboardingStart 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): RegistrationTypeupdateEvent(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!