Getting Started

Disclaimer: The Elder Scrolls, The Elder Scrolls: Legends, ZeniMax, Bethesda, Bethesda Softworks and related logos are registered trademarks or trademarks of ZeniMax Media Inc. This website is not produced, endorsed, supported, or affiliated with ZeniMax Media Inc.

Welcome to the ESL API! You can use the API to access ESL API endpoints, which can get information on cards and sets. All API access is performed over HTTPS and accessed from the https://api.elderscrollslegends.io domain.

To use the API endpoints, the format is as follows:

https://api.elderscrollslegends.io/<version>/<resource>

For example:

https://api.elderscrollslegends.io/v1/cards

There are multiple SDKs available to make it even easier to consume the API. To chat with other developers and discuss the API and SDKs, checkout the Discord Server!

esl-developers on discord

Developer SDKs

There are multiple developer SDKs available. To see how to install and use them, refer to the links below:

Rate Limits

Overview

Rate limits are enforced for all third-party applications and services. This document is an overview of the rate limits themselves, as well as how they are enforced and best practices for handling the errors returned when a rate limit is reached.

Third-party applications are currently throttled to 5000 requests per hour. As this API continues to age, the rate limits may be updated to provide better performance to users

Rationale

As previously mentioned, the primary goal is to provide a responsive interface for developers and users to use when accessing the Elder Scrolls: Legends data. Since each request made to the API incurs a computational cost, it’s in the best interest of both the Elder Scrolls: Legends API and its developer partners that these costs be minimized to the greatest degree possible.

Rate limiting also helps third-party developers by encouraging them to build their integrations to make economical use of API requests.

HTTP/1.1 403 Forbidden
Date: Mon, 21 Apr 2014 13:26:48 GMT
Content-Type: application/json; charset=utf-8
{
  "message": "Rate Limit Exceeded"
}

Errors

Code Name Description
400 Bad Request We could not process that action
403 Forbidden You exceeded the rate limit
404 Not Found The requested resource could not be found
500 Internal Server Error We had a problem with our server. Please try again later
503 Service Unavailable We are temporarily offline for maintenance. Please try again later
{
  "status": 404,
  "error": "error message here"
}

/cards

Get All Cards

This call will return a maximum of 100 cards.

Paginate the response using the page parameter. You can change the amount of cards returned with the pageSize parameter. Anywhere from 1-100 is valid.

Each field below can be used as a query parameter. By default, fields that have a singular value such as rarity, type, and name will always use a logical “or” operator when querying with a list of values. Fields that can have multiple values such as attributes and keywords can use a logical “and” or a logical “or” operator.

The accepted delimiters when querying fields are the pipe character or a comma character. The pipe represents a logical “or”, and a comma represents a logical “and”.

Example:name=alduin|glenumbra

More examples: keywords=guard,prophecy versus keywords=guard|prophecy

Parameters
name
The card name. Put the name in double quotes for an exact match, otherwise partial matching will be applied.
rarity
The rarity of the card (ex. Common, Epic, Rare, Legendary)
type
The type of the card (ex. Action, Creature, Item, Support)
subtypes
The subtypes of the card (ex. Argonian, Dragon, Imperial)
cost
How much it costs to cast the card
power
How much damage the card can do
health
The total health of the card
set.id
The id of the set the card belongs to
set.name
The name of the set the card belongs to
soulSummon
The number of soul gems it costs to soul summon
soulTrap
The number of soul gems it costs to soul trap
text
Rules of the card
attributes
The attributes of the card (ex. Agility, Endurance, Intelligence)
keywords
The keywords of the card (ex. Assemble, Breakthrough, Charge)
unique
Is the card unique? Unqiue cards can only be included once per deck.
id
A unique id for this card. It is made up via a SHA1 of the {card name}-{set name}

Other Fields in Response

The fields below are also part of the response (if not null), but cannot currently be used as query parameters

Parameters
imageUrl
The image url for a card.
require 'elder_scroll_legends_sdk'

# Get all cards
cards = ElderScrollsLegends::Card.all

# Filter cards
cards = ElderScrollsLegends::Card.where(type: 'creature', keywords: 'assemble|breakthrough')

# Get specific page of data
cards = ElderScrollsLegends::Card.where(page: 3)
from elderscrollslegendssdk import Card

# Get all cards
cards = Card.all()

# Filter cards
cards = Card.where(type='creature', keywords='assemble|breakthrough')

# Get specific page of data
cards = Card.where(page=3) 
# Get all cards
curl "https://api.elderscrollslegends.io/v1/cards"

# Filter cards
curl "https://api.elderscrollslegends.io/v1/cards?type=creature&keywords=assemble|breakthrough"

# Get specific page of data
curl "https://api.elderscrollslegends.io/v1/cards?page=3"
{
  "cards": [
    {
      "name": "Adoring Fan",
      "rarity": "Legendary",
      "type": "Creature",
      "subtypes": ["Wood Elf"],
      "cost": 3,
      "power": 0,
      "health": 1,
      "set": {
        "id": "cs",
        "name": "Core Set",
        "_self": "https://api.elderscrollslegends.io/v1/sets/cs"
      },
      "soulSummon": 1200,
      "soulTrap": 400,
      "text": "Prophecy, Guard. Last Gasp: Adoring Fan will return. Adoring Fan is immune to Silence.",
      "attributes": [
        "Neutral"
      ],
      "keywords": [
        "Guard",
        "Last Gasp",
        "Prophecy"
      ],
      "unique": true,
      "imageUrl": "https://images.elderscrollslegends.io/cs/adoring_fan.png",
      "id": "21909c205c443aa683d32133514db5cc3435f712"
    }
  ],
  "_pageSize": 100,
  "_totalCount": 1
}

/cards/:id

Get Card

Returns a specific card by id

require 'elder_scrolls_legends_sdk'

card = ElderScrollsLegends::Card.find('1fd81123ab3eca0b29c4c19757045db9757b4f1a')
from elderscrollslegendssdk import Card

card = Card.find('1fd81123ab3eca0b29c4c19757045db9757b4f1a')
curl "https://api.elderscrollslegends.io/v1/cards/1fd81123ab3eca0b29c4c19757045db9757b4f1a"
{
  "name": "Alduin",
  "rarity": "Legendary",
  "type": "Creature",
  "subtypes": ["Dragon"],
  "cost": 20,
  "power": 12,
  "health": 12,
  "set": {
    "id": "hos",
    "name": "Heroes of Skyrim",
    "_self": "https://api.elderscrollslegends.io/v1/sets/hos"
  },
  "soulSummon": 1200,
  "soulTrap": 400,
  "text": "Costs 2 less for each Dragon in your discard pile. Summon: Destroy all other creatures. At the start of your turn, summon a random Dragon from your discard pile.",
  "attributes": [
    "Neutral"
  ],
  "keywords": [],
  "unique": true,
  "imageUrl": "https://images.elderscrollslegends.io/hos/alduin.png",
  "id": "1fd81123ab3eca0b29c4c19757045db9757b4f1a"
}

/sets

Get All Sets

This call will return a maximum of 100 sets.

Paginate the response using the page parameter. You can change the amount of sets returned with the pageSize parameter. Anywhere from 1-100 is valid.

Each field below can be used as a query parameter. By default, fields that have a singular value such as rarity, type, and name will always use a logical “or” operator when querying with a list of values. Fields that can have multiple values such as attributes and keywords can use a logical “and” or a logical “or” operator.

The accepted delimiters when querying fields are the pipe character or a comma character. The pipe represents a logical “or”, and a comma represents a logical “and”.

Example:name=core|brotherhood

More examples: name=dark,brother versus kenameywords=dark|brother

Parameters
name
The set name. Put the name in double quotes for an exact match, otherwise partial matching will be applied.
releaseDate
The date the set was released. Formatted as YYYY-MM-DD
totalCards
The total number of cards in the set
id
The id of the set
require 'elder_scroll_legends_sdk'

# Get all sets
sets = ElderScrollsLegends::Set.all

# Filter sets
sets = ElderScrollsLegends::Set.where(name: 'core')

# Get specific page of data
sets = ElderScrollsLegends::Set.where(page: 1)
from elderscrollslegendssdk import Set

# Get all sets
sets = Set.all()

# Filter sets
sets = Set.where(name='core')

# Get specific page of data
sets = Set.where(page=1) 
# Get all sets
curl "https://api.elderscrollslegends.io/v1/sets"

# Filter sets
curl "https://api.elderscrollslegends.io/v1/sets?name=core"

# Get specific page of data
curl "https://api.elderscrollslegends.io/v1/sets?page=1"
{
"sets":[
  {
    "name":"Core Set",
    "releaseDate":"2016-04-01",
    "totalCards":412,
    "id":"cs"
  },
  {
    "name":"Madhouse Collection",
    "releaseDate":"2016-12-14",
    "totalCards":10,
    "id":"mc"
  },
  {
    "name":"Monthly Rewards",
    "releaseDate":"",
    "totalCards":17,
    "id":"mr"
  },
  {
    "name":"The Fall of the Dark Brotherhood",
    "releaseDate":"2017-04-05",
    "totalCards":40,
    "id":"fodb"
  },
  {
    "name":"Heroes of Skyrim",
    "releaseDate":"2017-06-29",
    "totalCards":154,
    "id":"hos"
  },
  {
    "name":"Return to Clockwork City ",
    "releaseDate":"2017-11-30",
    "totalCards":55,
    "id":"rcc"
  }
],
"_pageSize":100,
"_totalCount":6
}

/sets/:id

Get Set

Returns a specific set by id

require 'elder_scrolls_legends_sdk'

set = ElderScrollsLegends::Set.find('cs')
from elderscrollslegendssdk import Set

set = Set.find('cs')
curl "https://api.elderscrollslegends.io/v1/sets/cs"
{
"set":
  {
    "name":"Core Set",
    "releaseDate":"2016-04-01",
    "totalCards":412,
    "id":"cs"
  }
}

/attributes

Get All Attributes

This call will return a maximum of 100 attributes.

Paginate the response using the page parameter. You can change the amount of attributes returned with the pageSize parameter. Anywhere from 1-100 is valid.

require 'elder_scroll_legends_sdk'

attributes = ElderScrollsLegends::Attribute.all
from elderscrollslegendssdk import Attribute

attributes = Attribute.all()
curl "https://api.elderscrollslegends.io/v1/attributes"
{
  "attributes": [
      "Agility",
      "Endurance",
      "Intelligence",
      "Neutral",
      "Strength",
      "Willpower"
  ],
  "_pageSize": 100,
  "_totalCount": 6
}

/keywords

Get All Keywords

This call will return a maximum of 100 keywords.

Paginate the response using the page parameter. You can change the amount of keywords returned with the pageSize parameter. Anywhere from 1-100 is valid.

require 'elder_scroll_legends_sdk'

keywords = ElderScrollsLegends::Keyword.all
from elderscrollslegendssdk import Keyword

keywords = Keyword.all()
curl "https://api.elderscrollslegends.io/v1/keywords"
{
  "keywords": [
      "Assemble",
      "Breakthrough",
      "Charge",
      "Drain",
      "Guard",
      "Last Gasp",
      "Lethal",
      "Pilfer",
      "Prophecy",
      "Regenerate",
      "Shackle",
      "Slay",
      "Treasure Hunt",
      "Ward"
  ],
  "_pageSize": 100,
  "_totalCount": 14
}

/types

Get All Types

This call will return a maximum of 100 types.

Paginate the response using the page parameter. You can change the amount of types returned with the pageSize parameter. Anywhere from 1-100 is valid.

require 'elder_scroll_legends_sdk'

types = ElderScrollsLegends::Type.all
from elderscrollslegendssdk import Type

types = Type.all()
curl "https://api.elderscrollslegends.io/v1/types"
{
  "types": [
      "Action",
      "Creature",
      "Item",
      "Support"
  ],
  "_pageSize": 100,
  "_totalCount": 4
}

/subtypes

Get All Subtypes

This call will return a maximum of 100 subtypes.

Paginate the response using the page parameter. You can change the amount of subtypes returned with the pageSize parameter. Anywhere from 1-100 is valid.

require 'elder_scroll_legends_sdk'

subtypes = ElderScrollsLegends::Subtype.all
from elderscrollslegendssdk import Subtype

subtypes = Subtype.all()
curl "https://api.elderscrollslegends.io/v1/subtypes"
{
  "subtypes": [
      "Argonian",
      "Ash Creature",
      "Beast",
      "Breton",
      "Centaur",
      "Chaurus",
      "Daedra",
      "Dark Elf",
      "Defense",
      ...
  ],
  "_pageSize": 100,
  "_totalCount": 50
}