egdata API

GraphQL Profiles

Fetch public profile showcase data with field-level GraphQL selection.

The GraphQL endpoint is available at:

https://api.egdata.app/graphql

Use profile(id: ID!) to fetch public player identity, showcase highlights, featured games, rare achievements, and recent activity without calling multiple REST profile routes. The query is public: it does not require an Authorization header, bearer token, or token scopes.

Arguments

profile accepts the Epic account id as id.

ArgumentTypeRequiredBehavior
idID!YesEpic account id to resolve. Returns null when the Epic profile cannot be found or is unavailable.

Profile list fields accept these arguments:

FieldArgumentsDefaultsMaximum limit
featuredAchievementslimitlimit: 8100
featuredGameslimit, filter, sortlimit: 6, filter: ALL, sort: COMPLETION100
recentActivitylimit, pagelimit: 12, page: 1100
gameslimit, page, filter, sortlimit: 12, page: 1, filter: ALL, sort: COMPLETION100
achievementslimit, pagelimit: 25, page: 1100

Pagination uses 1-based page values. page: 2 returns the next limit results after page 1. Non-positive page values are normalized to the first page, and large limit values are capped at 100.

Game Filters

featuredGames and games support the same filter values:

ValueMeaning
ALLAll games with imported achievement data.
COMPLETEDGames where every achievement is unlocked.
NEAR_PLATINUMGames at high completion that are not complete or platinumed yet.
IN_PROGRESSGames with at least one unlock and less than full completion.
PLATINUMGames with a platinum/player award.

Game Sorts

featuredGames and games support the same sort values:

ValueMeaning
COMPLETIONHighest completion first, then XP and unlock count.
ALPHABETICALGame title ascending.
XPHighest earned XP first.
ACHIEVEMENTSHighest unlocked achievement count first.

completionPercent is returned from 0 to 100. level is calculated as Math.floor(totalXP / 250), and profile totalXP includes earned achievement XP plus 250 XP for each platinum/player award.

recentActivity currently returns only ACHIEVEMENT_UNLOCKED and PLATINUM_EARNED items because those records have reliable timestamps.

Showcase Query

query ProfileShowcase($id: ID!) {
  profile(id: $id) {
    accountId
    displayName
    avatar {
      large
    }
    linkedAccounts
    creationDate
    reviewsCount
    highlights {
      level
      totalXP
      totalGames
      totalAchievements
      totalPlatinums
      reviewsCount
    }
    heroGame {
      sandboxId
      title
      imageUrl
      completionPercent
      earnedXP
      totalXP
      hasPlatinum
    }
    featuredAchievements(limit: 8) {
      displayName
      description
      iconUrl
      rarityPercent
      xp
      sandboxId
      gameTitle
      unlockedAt
    }
    featuredGames(limit: 6, filter: ALL, sort: COMPLETION) {
      sandboxId
      title
      imageUrl
      completionPercent
      earnedXP
      totalXP
      hasPlatinum
      rarestAchievements {
        displayName
        iconUrl
        rarityPercent
      }
    }
    recentActivity(limit: 8, page: 1) {
      type
      sandboxId
      gameTitle
      achievementName
      achievementIconUrl
      occurredAt
    }
  }
}

Library Query

Use the games and achievements connections when a page needs paginated library data.

query ProfileLibrary($id: ID!, $page: Int!) {
  profile(id: $id) {
    games(limit: 12, page: $page, filter: IN_PROGRESS, sort: ALPHABETICAL) {
      total
      page
      limit
      elements {
        sandboxId
        title
        completionPercent
        unlocked
        total
        earnedXP
        totalXP
        hasPlatinum
      }
    }
    achievements(limit: 25, page: $page) {
      total
      page
      limit
      elements {
        displayName
        iconUrl
        rarityPercent
        xp
        sandboxId
        gameTitle
        unlockedAt
      }
    }
  }
}

Errors

profile returns null when the Epic profile lookup fails. Profiles with no imported achievement data return empty game, achievement, and activity lists.

Invalid GraphQL documents, missing required variables, or invalid enum values such as an unknown filter or sort return standard GraphQL errors. The profile query itself is public, so 401 and 403 responses are not expected for valid profile requests. Clients may still receive 429 if platform rate limits are exceeded, or 5xx responses for unexpected upstream or server failures.

On this page