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!
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
}