Hey folks,

 

With patch 9.19 we’ll be adding Teamfight Tactics (TFT) match history into the League of Legends client. If you are interested in seeing what it looks like in the client, it is live now on the PBE. Along with the addition to the client, we will be adding TFT match history to the Riot Games API soon via a new endpoint.

 

Please be aware that this is a first pass on match history and it will evolve over the next couple of patches. We are looking to keep a standard schema and just add more data as we go.

 

But before that happens, we'd like to take some space here to talk about a few high level rules that have shown up in the past as we’ve worked with League of Legends, but have crystallized into policy after talking to the development team on Teamfight Tactics. There are three big points we want to discourage third-party applications from:

 

Reducing gameplay diversity

In Teamfight Tactics, this means (as one example) encouraging players to tunnel into one item or synergy build, regardless of context. Each game in Teamfight Tactics contains unique mitigating circumstances that change what “optimal” decisions look like. We want third-party tools to accurately represent player mastery as juggling many potential paths to victory, and drawing from unique in-game context to inform actions. In addition to being a meaningful path to victory in Teamfight Tactics, diversity is also an important element in keeping the game sustainably fun. Teamfight Tactics is designed to be more fun when players feel like they have multiple ways to win and are encouraged to pursue those different win conditions.

 

Creating an uneven playing field

In Teamfight Tactics, this means that we want (for example) to avoid making the “scouting” phase of each round unequal. It’s important that players have a level field in using their time between rounds to do a variety of tasks, including scouting other players’ boards. If third-party tools make that information too accessible, those actions become less “expensive”, and can give a demonstrable edge to players with tools vs without. The design team may change exactly how “expensive” these actions are from patch to patch, but all players should share the same “expense” for each action in a given game.

 

Playing for the player

In Teamfight Tactics, this would look (as an example) like placing enough information in players’ hands that their drafting behavior becomes “on-rails.” Knowing the probability of rolling for an exact champion at any given time, or pushing players to re-roll or level up, explicitly chips away at moments where the game is designed to force players to make real-time choices. Providing deterministic answers about what players “should” choose in a given moment ultimately robs players of agency, circumvents a key skill challenge, and ultimately, if everyone is following the same list of recommendations, reduces gameplay diversity.

 

All of these concepts are connected, and they keep coming up in our design discussions, so we wanted to provide them as high-level guidance when third parties design their own applications. These are very much not confined to Teamfight Tactics, so keep them in mind as you work on applications for any of Riot’s game(s).

 

With all that said we wanted to share with you the general structure of the schema for Teamfight Tactics match history that’ll be available in the API in the coming days.

 

{

  "metadata": {

    "match_id": "NA1_00000000000",

    "product": "TFT",

    "info_type": "SUMMARY",

    "data_version": "1",

    "timestamp": "0000000000000",

    "tags": [

      "ranked"

    ],

    "participants": [

      "puuid",

      ...

    ],

  },

  "json": {

    "game_datetime": "0000000000000",

    "game_id": 0000000000,

    "game_length": 1000,

    "game_version": "Version 9.19.290.2458 (Sep 20 2019/16:43:50) [PUBLIC] <__MAIN__>",

    "queue_id": 1100,

    "tft_set_number": 1,

    "participants": [

      {

        "puuid": "puuid",

        "level": 1,

        "placement": 1,

        "last_round": 1,

        "traits": [

          {

            "name": "Assassin",

            "num_units": 0,

            "tier_current": 0,

            "tier_total": 0

          },

          ...

        ],

        "units": [

          {

            "name": "Garen",

            "tier": 1

          },

          ...

        ]

      },

      ...

    ]

  }

}


If you have any questions or concerns feel free to ask them on the Developer Discord or message us on Twitter.