scalar DateTime scalar URL scalar JSON enum PostSort { HOT NEW TOP24 TOPWEEK MATERIAL TUNED COMMENTS VOTES } enum PostScope { FOLLOWING BOOKMARKS HISTORY UPVOTED WATCH } enum UserKind { PERSON ORG } enum DivergenceSide { BULLISH BEARISH } enum SignalDirection { BULLISH BEARISH NEUTRAL } enum AttentionStatus { SURGING ELEVATED NORMAL } enum StorylineStatus { ACTIVE PROPOSED CONCLUDED } enum FloorSort { HOT LATEST OLDEST } enum CommentParentType { POST FLOOR COMMENT SQUAD_FLOOR } enum LeaderboardRange { DAY WEEK MONTH YEAR ALL } enum ReportReason { SPAM MISLEADING ABUSE DUPLICATE OTHER } enum SupportTopic { ASK_ANYTHING REPORT_A_STORY REPORT_A_BUG REQUEST_A_FEATURE } enum SupportTicketStatus { OPEN ANSWERED CLOSED } type SupportReply { body: String! createdAt: DateTime! } type SupportTicket { id: ID! topic: SupportTopic! body: String! status: SupportTicketStatus! createdAt: DateTime! replies: [SupportReply!]! } enum ModerationState { VISIBLE HIDDEN REMOVED } enum AlertMetric { ATTENTION EXPERT DIVERGENCE MATERIAL } enum AlertChannel { INAPP EMAIL WEBHOOK } enum ExportScope { ALL WATCHLIST MATERIAL PERSONAL } enum ExportFormat { CSV JSON } enum TunePreset { DAYTRADER RESEARCHER BUILDER CUSTOM } enum UpcomingKind { FORK UNLOCK MACRO LEGAL } enum TuneSuggestionKind { LESS_TOPIC MORE_TOPIC BUDGET } enum ActivityRange { DAY WEEK } type UserRef { handle: String! displayName: String! avatar: URL repLevel: Int! trustBadge: String kind: UserKind! orgUrl: URL headline: String indexable: Boolean! foundingCircle: Boolean! } type ProfileLinks { github: String x: String website: URL } input ProfileLinksInput { github: String x: String website: URL } type SourceRef { name: String! slug: String! avatar: URL } type Source { name: String! slug: String! avatar: URL followers: Int! viewerFollowing: Boolean! storiesPublished: Int! latest: DateTime } directive @public on FIELD_DEFINITION directive @apiKey on FIELD_DEFINITION type Signal { severity: Int! @apiKey assets: [String!]! confidence: Float! @apiKey entities: [String!]! eventTimestamp: DateTime @apiKey attentionVelocity: Float @apiKey smartReaders: Int @apiKey divergence: Divergence @apiKey attentionSeries: [Float!]! @apiKey direction: SignalDirection @apiKey attentionStatus: AttentionStatus @apiKey eventType: String @apiKey expertAttentionPct: Float @apiKey smartReadersMult: Float @apiKey eventStudy: EventStudy @apiKey } type Divergence { side: DivergenceSide! strength: Float! } type EventStudy { asset: String! price: Price series: [Float!]! returns: [EventReturn!]! excess72h: Float } type EventReturn { hours: Int! pct: Float! } type ViewerState { read: Boolean! upvoted: Boolean! downvoted: Boolean! bookmarked: Boolean! bookmarkFolder: String readPosition: Float bookmarkNote: String reported: Boolean! highlights: [String!]! } type Highlight { id: ID! post: Post! text: String! createdAt: DateTime! } type Post { id: ID! slug: String! title: String! source: SourceRef! author: UserRef publishedAt: DateTime! readMinutes: Int tags: [String!]! flair: String votes: Int! downvotes: Int! commentCount: Int! image: URL body: String tldr: String links: [URL!]! media: [URL!]! signal: Signal viewer: ViewerState! comments(sort: FloorSort = HOT, after: String, first: Int = 20): CommentConnection! revisions: [Revision!]! moderationState: ModerationState! collections: [Collection!]! storyline: PostStoryline openReviewCount: Int! floorQuoteCount: Int! claims: [Claim!]! impressions: Int! } type PostConnection { edges: [Post!]! pageInfo: PageInfo! meta: FeedMeta! } type FeedMeta { total: Int! unread: Int! } type PageInfo { endCursor: String hasNextPage: Boolean! } type Comment { id: ID! author: UserRef! body: String! media: [URL!]! links: [URL!]! createdAt: DateTime! upvotes: Int! viewerUpvoted: Boolean! upvoterCount: Int! downvotes: Int! viewerDownvoted: Boolean! quotedPost: Post direction: DivergenceSide quotedExcerpt: String storylineRef: Storyline replies: [Comment!]! asset: String tags: [String!]! claim: Claim moderationState: ModerationState! authorBlocked: Boolean! chatterSpike: Int } type FloorTrend { asset: String! threads: Int! upvotes: Int! baselineMultiple: Int } type CommentConnection { edges: [Comment!]! pageInfo: PageInfo! } enum ClaimStatus { PENDING WON LOST EXPIRED } type Claim { id: ID! post: Post! statement: String! stake: Int! status: ClaimStatus! author: UserRef! expiresAt: DateTime! decidedAt: DateTime createdAt: DateTime! } enum ReviewStatus { OPEN ACCEPTED REJECTED } type Revision { hash: String! at: DateTime! author: UserRef! summary: String reviewRequest: ReviewRequest } type ReviewRequest { id: ID! post: Post! oldText: String! newText: String! note: String status: ReviewStatus! author: UserRef! createdAt: DateTime! notes: [ReviewNote!]! } type ReviewNote { id: ID! author: UserRef! body: String! createdAt: DateTime! } type Storyline { key: ID! title: String! description: String status: StorylineStatus! followers: Int! updatedAt: DateTime! entryCount: Int! tags: [String!]! curator: UserRef viewerFollowing: Boolean! entries: [StorylineEntry!]! latestEntry: StorylineEntry viewerReadCount: Int ended: String related: [RelatedStoryline!]! } type StorylineEntry { post: Post! addedAt: DateTime! note: String } type PostStoryline { storyline: Storyline! part: Int! parts: Int! } type RelatedStoryline { storyline: Storyline! tag: String! } type Collection { key: ID! name: String! desc: String curator: UserRef! posts: [Post!]! followers: Int! viewerFollowing: Boolean! createdAt: DateTime! } input PostInput { title: String! body: String! tags: [String!] flair: String media: [URL!] storylineKey: ID squadKey: ID publishAt: DateTime } input CommentInput { parentType: CommentParentType! parentId: ID body: String! media: [URL!] quotedPostId: ID storylineKey: ID asset: String tags: [String!] squadKey: ID direction: DivergenceSide quotedExcerpt: String } input AlertRuleInput { metric: AlertMetric! asset: String threshold: Float channel: AlertChannel! webhookUrl: URL enabled: Boolean } input TuneInput { preset: TunePreset topicWeights: JSON typeWeights: JSON sourceWeights: JSON minSeverity: Int minConfidence: Float watchlistFirst: Boolean budget: Int } type Squad { key: ID! name: String! desc: String tags: [String!]! members: Int! viewerJoined: Boolean! home: Boolean! cover: URL memberSample: [UserRef!]! floorCount: Int floor(sort: FloorSort = HOT, after: String): CommentConnection! } type WatchlistItem { asset: String! unreadMaterial: Int! price: Price newSinceYesterday: Int! net: SignalDirection! } type Price { asset: String! px: String! d24: Float! } type UpcomingEvent { id: ID! kind: UpcomingKind! name: String! startsAt: DateTime! happeningNow: Boolean! } type StorylineActivity { storyline: Storyline! activity: Int! deltaPct: Float } type TagActivity { tag: String! activity: Int! deltaPct: Float } type AlertRule { id: ID! metric: AlertMetric! asset: String threshold: Float channel: AlertChannel! webhookUrl: URL enabled: Boolean! lastFiredAt: DateTime latestMatch: Post } type AlertRules { items: [AlertRule!]! slots: Int! } type Me { handle: String! displayName: String! avatar: URL joinedAt: DateTime! repLevel: Int! repPoints: Int! streak: Streak! readingDays: Int! analytics: ReadingAnalytics! trust: Trust! preferences: JSON! tune: TuneProfile achievements: [Achievement!]! invites: InviteStatus! suspended: Boolean! isAdmin: Boolean! watchlist: [WatchlistItem!]! alertRules: AlertRules! followedSources: [Source!]! followedUsers: [PublicUser!]! counts: ProfileCounts! profileCompletion: ProfileCompletion! invitees: [Invitee!]! headline: String banner: URL links: ProfileLinks! highlights: [Highlight!]! readingYear(year: Int): ReadingYear! contributionActivity(year: Int): [ContributionMonth!]! tuneSuggestions: [TuneSuggestion!]! supportTickets(first: Int = 10): [SupportTicket!]! webhookSecretHint: String } type Streak { current: Int! longest: Int! freezes: Int! pointsInRange(range: LeaderboardRange = WEEK): Int! lastSevenDays: [Boolean!]! percentile: Int } type ReadingAnalytics { viewsWeek: Int! viewsMonth: Int! viewsTotal: Int! rhythm: [Int!]! insight: String topTags: [ReadTally!]! topSources: [ReadTally!]! contribution: ContributionImpact! storylineProgress: [StorylineProgress!]! quietTags: [String!]! thisWeek: WeekStats! lastWeek: WeekStats! whenYouRead: [ReadTally!]! whenInsight: String } type ReadTally { label: String! count: Int! } type WeekStats { storiesRead: Int! minutesReading: Int! commentsWritten: Int! highlightsSaved: Int! upvotesGiven: Int! avgMinPerStory: Float! } type ReadingYear { year: Int from: DateTime! days: [Int!]! readingDays: Int! } type PublicReading { year: ReadingYear rhythm: [Int!] topTags: [ReadTally!] storylineProgress: [StorylineProgress!] privateSections: Int! } type ContributionImpact { editsSuggested: Int! editsAccepted: Int! storylinesCurated: Int! } type ContributionMonth { month: String! storiesRead: Int! topicsRead: [ReadTally!]! editsSuggested: Int! editsAccepted: Int! editedPosts: [ReadTally!]! eventsAdded: Int! storylinesAdded: [ReadTally!]! commentsWritten: Int! discussions: Int! } type StorylineProgress { storyline: Storyline! read: Int! total: Int! } type Trust { repLevel: Int! repPoints: Int! nextLevelAt: Int! votePower: Float! unlocks: [Unlock!]! trackRecord: [Claim!]! floorQuota: FloorQuota! } type Unlock { label: String! atLevel: Int! unlocked: Boolean! } type FloorQuota { limit: Int used: Int! resetsAt: DateTime! } type ProfileCounts { upvotesGiven: Int! followers: Int! sourcesFollowed: Int! } type CompletionStep { key: String! label: String! done: Boolean! } type ProfileCompletion { percent: Int! steps: [CompletionStep!]! } type Invitee { user: UserRef! joinedAt: DateTime! activatedAt: DateTime } type InviteStatus { link: URL! accepted: Int! milestones: [Milestone!]! } type Milestone { at: Int! reward: String! unlocked: Boolean! } type TuneProfile { preset: TunePreset topicWeights: JSON typeWeights: JSON sourceWeights: JSON minSeverity: Int minConfidence: Float watchlistFirst: Boolean budget: Int } type TuneSuggestion { kind: TuneSuggestionKind! topic: String opened: Int available: Int budget: Int blockStartUtc: Int } type LeaderboardRow { rank: Int! user: UserRef! points: Int! delta: Int! stats: LeaderboardStats! } type LeaderboardStats { posts: Int! comments: Int! upvotesReceived: Int! } type LadderRung { label: String! atLevel: Int! } type Achievement { id: ID! title: String! desc: String pts: Int! unlockedAt: DateTime progress: Int! target: Int! } type PublicUser { handle: String! displayName: String! avatar: URL bio: String repLevel: Int! trustBadge: String kind: UserKind! orgUrl: URL joinedAt: DateTime! viewerFollowing: Boolean! posts(after: String, first: Int = 20): PostConnection! replies(after: String, first: Int = 20): CommentConnection! indexable: Boolean! headline: String banner: URL links: ProfileLinks! stats: LeaderboardStats! currentStreak: Int similar: [UserRef!]! foundingCircle: Boolean! trackRecord: [Claim!]! reading: PublicReading viewerBlocked: Boolean! } type Brief { dateline: String! readTime: String! topReads: [Post!]! storyUpdates: [Storyline!]! topicReads: [Post!]! topic: String } type Notification { id: ID! kind: String! label: String! href: String read: Boolean! createdAt: DateTime! } type NotificationConnection { edges: [Notification!]! pageInfo: PageInfo! hasUnread: Boolean! } type Export { downloadUrl: URL! } type ExportPreview { columns: [String!]! rows: [[String!]!]! total: Int! } type Query { posts(sort: PostSort = HOT, scope: PostScope, tag: String, flair: String, asset: String, unread: Boolean, q: String, author: String, source: String, squad: ID, after: String, first: Int = 20, tags: [String!], catchup: Boolean): PostConnection! @public post(id: ID, slug: String): Post @public me: Me user(handle: String!): PublicUser @public floor(sort: FloorSort = HOT, asset: String, topic: String, squad: ID, after: String, first: Int = 20, storylineKey: ID, quotedPostId: ID): CommentConnection! floorTrending: [FloorTrend!]! searchPosts(q: String!): [Post!]! storylines(status: StorylineStatus, sort: String = "latest", q: String, curator: String): [Storyline!]! @public storyline(key: ID!): Storyline @public leaderboard(range: LeaderboardRange = WEEK): [LeaderboardRow!]! leaderboardMe(range: LeaderboardRange = WEEK): LeaderboardRow unlockLadder: [LadderRung!]! notifications(after: String, first: Int = 20): NotificationConnection! reviewRequests(postId: ID, mine: Boolean, all: Boolean, status: ReviewStatus): [ReviewRequest!]! prices(assets: [String!]!): [Price!]! signals(asset: String, since: DateTime): [Signal!]! @apiKey upcoming(first: Int = 4): [UpcomingEvent!]! storylineActivity(range: ActivityRange = DAY, first: Int = 10): [StorylineActivity!]! tagActivity(range: ActivityRange = DAY): [TagActivity!]! exportPreview(scope: ExportScope!): ExportPreview! source(slug: String!): Source collections(first: Int = 3, after: String): [Collection!]! collection(key: ID!): Collection squads(tab: String): [Squad!]! squad(key: ID!): Squad brief: Brief! searchUsers(q: String!, first: Int = 10): [PublicUser!]! inviter(code: String!): PublicUser } type Mutation { votePost(postId: ID!): Post! unvotePost(postId: ID!): Post! downvotePost(postId: ID!): Post! bookmarkPost(postId: ID!, folder: String = "Read later"): Post! unbookmarkPost(postId: ID!): Post! setBookmarkNote(postId: ID!, note: String): Post! highlightParagraph(postId: ID!, text: String!): Post! unhighlightParagraph(postId: ID!, text: String!): Post! markRead(postId: ID!): Post! markAllRead(scope: String = "feed", scopeKey: String): Boolean! setReadPosition(postId: ID!, pct: Float!): Boolean! markShared(postId: ID!): Boolean! recordImpression(postId: ID!): Boolean! reportContent(postId: ID, commentId: ID, reason: ReportReason!, note: String): Boolean! sendSupportMessage(topic: SupportTopic!, body: String!): Boolean! createComment(input: CommentInput!): Comment! voteComment(commentId: ID!): Comment! downvoteComment(commentId: ID!): Comment! unvoteComment(commentId: ID!): Comment! createStoryline(title: String!, firstPostId: ID, description: String): Storyline! followStoryline(key: ID!, follow: Boolean!): Storyline! addStorylineEntry(key: ID!, postId: ID!, note: String): Storyline! concludeStoryline(key: ID!, ended: String): Storyline! setStorylineDescription(key: ID!, description: String): Storyline! stakeClaim(postId: ID!, statement: String!, stake: Int!, expiresAt: DateTime, asset: String, tags: [String!], media: [URL!], storylineKey: ID, direction: DivergenceSide, quotedExcerpt: String): Claim! updateMe(displayName: String, bio: String, avatar: URL, banner: URL, headline: String, links: ProfileLinksInput): Me! followUser(handle: String!, follow: Boolean!): PublicUser! blockUser(handle: String!, block: Boolean!): PublicUser! readAllNotifications: Boolean! createReviewRequest(postId: ID!, oldText: String!, newText: String!, note: String): ReviewRequest! acceptReviewRequest(id: ID!): ReviewRequest! rejectReviewRequest(id: ID!, note: String): ReviewRequest! addReviewNote(requestId: ID!, body: String!): ReviewNote! setWatchlist(assets: [String!]!): [WatchlistItem!]! createAlertRule(input: AlertRuleInput!): AlertRule! updateAlertRule(id: ID!, input: AlertRuleInput!): AlertRule! deleteAlertRule(id: ID!): Boolean! rotateWebhookSecret: String! createExport(scope: ExportScope!, format: ExportFormat!): Export! createPost(input: PostInput!): Post! cancelScheduledPost(id: ID!): Boolean! followSource(slug: String!, follow: Boolean!): Source! createCollection(name: String!, desc: String, postIds: [ID!]!): Collection! followCollection(key: ID!, follow: Boolean!): Collection! joinSquad(key: ID!, join: Boolean!): Squad! createSquad(name: String!, desc: String, tags: [String!]): Squad! setTune(profile: TuneInput!): Me! updatePreferences(patch: JSON!): Me! clearReadingHistory: Me! } type Subscription { floorPostAdded(squad: ID): Comment! notificationAdded: Notification! reviewNoteAdded(requestId: ID!): ReviewNote! }