EchoMTG Logo
Dashboard / Home
My Collection
Magic: the Gathering logo
Magic: the Gathering
MTG Expansions
MTG Market
Special Groups
MTG Types
Disney Lorcana logo
Disney Lorcana
My Apps
Lists / Decks
Sealed Manager
Earnings Tracker
Watchlist
Trade List
Statistics
Import Tool
My Account
EchoMTG
Blog
API Docs
Subscription Plans
Login
EchoMTG Logo

API Documentation for EchoMTG

Magic: the Gathering API for EchoMTG Collection Tools

Search name, description, or url of EchoMTG API
Your API Token

About the EchoMTG API

This API returns JSON and is open to any EchoMTG user interested in writing custom scripts, apps, or integrations. The EchoMTG website and Mobile apps are 100% built on the API.

API Tokens

Attain a token by Registering an Echo user. Tokens expire after 24 hours. To have longer token life, join discord and ask for teeg about registering an app.

User

The majority of calls requires user authentication. Soon you will be able to create a user on the fly here as well. This will let you use EchoMTG's preexisting user base without creating your own.

POST
Auth: Retrieving a User token

Description
Example Javascript Request
Example JSON Response

Authenticate a user to receive an access token which allows you to make API calls on behalf of the user. You will want to store the token to your application's memory or database for further use. A new token is generated every time a user is auth'd from anywhere. Tokens expire after 24 hours.

Param Required Description
email required user email address
password required user password
type optional Send curl to received a plain text token (no json)

POST
User: Change Currency

Description
Example Javascript Request
Example JSON Response

Changing currency will modify the values of all API output that involves a monetary value. The conversion rate is calculated from a daily pull from https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

Available Currencies

  • USD - U.S. Dollars
  • GBP - British Pounds
  • EUR - Euros
  • AUD - Australian Dollars
  • BRL - Brazilian Real
  • CAD - Canadian Dollars
  • CZK - Czech koruny
  • DKK - Danish Kroner
  • HKD - Hong Kong Dollars
  • HUF - Hungarian Forints
  • ILS - Israeli Shekels
  • JPY - Japanese Yen
  • MYR - Malaysian Ringgits
  • MXN - Mexican Pesos
  • NZD - New Zealand Dollars
  • NOK - Norwegian Kroner
  • PHP - Philippine Pesos
  • PLN - Polish zloty
  • SGD - Singapore Dollars
  • SEK - Swedish Kronor
  • CHF - Swiss Francs
  • TWD - Taiwan New Dollars
  • THB - Thai Baht
  • TRY - Turkish Liras

GET
User: Meta Data

Description
Example Javascript Request
Example JSON Response

Access user information like name, email, about, and other meta data that can control the interface like currency code and default sort orders.

GET
User: Public Profile

Description
Example Javascript Request

Access user information like name, email, about, and other meta data that can control the interface like currency code and default sort orders.

GET
User: Unique Check

Description
Example Javascript Request

Checks if a name is available

type options: username, email, discord, twitter

GET
User: Logout

Description
Example Javascript Request
Example JSON Response

Destroy the user session and cookies. Invalidates the token.

POST
User: Update Meta Data

Description
Example Javascript Request
Example JSON Response

Update user profile information and settings.

Default Sort Options

Date Entered = i.id 
Card Name = c.card_name 
Price = p.tcg_mid 
Personal Gain = personal_gain 
7-Day Movement = p.change 
Expansion = c.expansion

POST
User: Upload Avatar

Description
Example Javascript Request
Example JSON Response

Change the user avatar (image) that appears in the interface, comments, and blog posts.

POST
Auth: Register User

Description
Example Javascript Request

Register a new user into the system.

Param Required Description
email required user email address
password required user password, must contain a letter and number
username required public handle
referrer optional referring hash of the user who invite. This can be found in user/meta call.

POST
Auth: Invite Friend

Description
Example Javascript Request

Invite a friend to echomtg and gain 100 additional inventory storage

Param Required Description
email required email to send an invite to

POST
User: Forgot Password

Description
Example Javascript Request

Email of the user who forgot their password. Sends a hash link to the requesting email which kicks off a reset password flow for that user.

POST
User: Reset Forgotten Password

Description
Example Javascript Request

Past of the Forgot Password flow. Need a password and reset token that is generated from the /api/user/forgot_password/ endpoint.

POST
User: Change Password

Description
Example Javascript Request

Authenticated way to change a user password.

Inventory

The most valuable part of EchoMTG is the inventory (collection) aspect. Being able to manipulate this from multiple application allows magic players to keep on top of their collections. This is a quick and easy way to add more value to your magic applications for users.

POST
Inventory: Add an Item

Description
Example Javascript Request
Example JSON Response

Add a card to the user inventory.

Param Required Default Description
emid required EchoID
quantity optional 1 number to record
language optional EN Card text language. See language options below
condition optional NM Card condition, see options below
foil optional 0 1=foiled, 0=regular
image optional A remote URL to an uploaded image. To add an image through Echo, see the Upload Image endpoint

Condition Options

NM = Near Mint  
LP = Lightly Played  
MP = Moderately Played  
HP = Heavily Played  
D = Damaged  
ALT = Altered  
ART = Artist Proof  
PRE = Pre-release  
TS = Timestamped  
SGN = Signed  
BGS = BGS  
B10 = BGS 10  
B95 = BGS 9.5  
B9 = BGS 9.0  
B85 = BGS 8.5  
B8 = BGS 8.0  
B75 = BGS 7.5  
B7 = BGS 7.0  
PSA = PSA  
P10 = PSA 10  
P95 = PSA 9.5  
P9 = PSA 9.0  
P85 = PSA 8.5  
P8 = PSA 8.0  
P75 = PSA 7.5  
P7 = PSA 7.0

Language Options

EN = english  
DE = german  
FR = french  
RU = russian  
IT = italian  
ES = spanish  
PT = portuguese  
CT = chinese traditional  
CS = chinese simplified  
JP = japanese  
KR = korean  

POST
Inventory: Adding Items Batch

Description
Example Javascript Request
Example JSON Response

Add a card to the user inventory.

Param Required Default Description
emid required EchoID
quantity optional 1 number to record
language optional EN Card text language. See language options below
condition optional NM Card condition, see options below
foil optional 0 1=foiled, 0=regular
image optional A remote URL to an uploaded image. To add an image through Echo, see the Upload Image endpoint

Condition Options

NM = Near Mint  
LP = Lightly Played  
MP = Moderately Played  
HP = Heavily Played  
D = Damaged  
ALT = Altered  
ART = Artist Proof  
PRE = Pre-release  
TS = Timestamped  
SGN = Signed  
BGS = BGS  
B10 = BGS 10  
B95 = BGS 9.5  
B9 = BGS 9.0  
B85 = BGS 8.5  
B8 = BGS 8.0  
B75 = BGS 7.5  
B7 = BGS 7.0  
PSA = PSA  
P10 = PSA 10  
P95 = PSA 9.5  
P9 = PSA 9.0  
P85 = PSA 8.5  
P8 = PSA 8.0  
P75 = PSA 7.5  
P7 = PSA 7.0

Language Options

EN = english  
DE = german  
FR = french  
RU = russian  
IT = italian  
ES = spanish  
PT = portuguese  
CT = chinese traditional  
CS = chinese simplified  
JP = japanese  
KR = korean  

POST
Inventory: Update Item

Description
Example Javascript Request
Example JSON Response

Update an inventory item.

Param Required Default Description
id required Inventory ID
quantity optional 1 number to record
language optional EN Card text language. See language options below
condition optional NM Card condition, see options below
foil optional 0 1=foiled, 0=regular
image optional A remote URL to an uploaded image. To add an image through Echo, see the Upload Image endpoint

Condition Options

NM = Near Mint  
LP = Lightly Played  
MP = Moderately Played  
HP = Heavily Played  
D = Damaged  
ALT = Altered  
ART = Artist Proof  
PRE = Pre-release  
TS = Timestamped  
SGN = Signed  
BGS = BGS  
B10 = BGS 10  
B95 = BGS 9.5  
B9 = BGS 9.0  
B85 = BGS 8.5  
B8 = BGS 8.0  
B75 = BGS 7.5  
B7 = BGS 7.0  
PSA = PSA  
P10 = PSA 10  
P95 = PSA 9.5  
P9 = PSA 9.0  
P85 = PSA 8.5  
P8 = PSA 8.0  
P75 = PSA 7.5  
P7 = PSA 7.0

Language Options

EN = english  
DE = german  
FR = french  
RU = russian  
IT = italian  
ES = spanish  
PT = portuguese  
CT = chinese traditional  
CS = chinese simplified  
JP = japanese  
KR = korean  

POST
Inventory: Upload Item Image

Description
Example Javascript Request
Example JSON Response

Add a custom image to an inventory item. This feature is only available to paid tiers.

POST
Inventory: Removing Items

Description
Example Javascript Request
Example JSON Response

The call will remove an inventory record from a user's inventory.

POST
Inventory: Batch Tradable

Description
Example Javascript Request
Example JSON Response

The call will make everything tradable.

GET
Inventory: View

Description
Example Javascript Request
Example JSON Response

View user inventory. All options can be combined.

Maximum limit is 1000.

Searches automatically limit to 1000 returned.

Meta data in return contains information for pagination.

Param Required Default Description
start optional 0
limit optional 100 Number to records to return. Maximum 250
sort optional date_acquired price_acquired, date_acquired, name, set, price_change, tcg_market, tcg_mid, foil_price
direction optional ASC Change sort direction
cmc optional A math equation like '<=1' or '=0' or '>=5'
color optional colorless, blue, white, red, multicolor, black, green
tradable optional true, false
reserve_list optional true, false
price_under optional float number, return any item worth less than number
price_over optional float number, return any item worth more than number

GET
Inventory: Search

Description
Example Javascript Request
Example JSON Response

View user inventory. All options can be combined.

Maximum limit is 1000.

Searches automatically limit to 1000 returned.

Meta data in return contains information for pagination.

Param Required Default Description
start optional 0
limit optional 100 Number to records to return. Maximum 250
sort optional date_acquired price_acquired, date_acquired, name, set, price_change, tcg_market, tcg_mid, foil_price
direction optional ASC Change sort direction
cmc optional A math equation like '<=1' or '=0' or '>=5'
color optional colorless, blue, white, red, multicolor, black, green
tradable optional true, false
reserve_list optional true, false
price_under optional float number, return any item worth less than number
price_over optional float number, return any item worth more than number

GET
Inventory: Quickstats

Description
Example Javascript Request
Example JSON Response

Quick response on user collection statistics, its faster then the normal /stats/ call, and is used to update the main nav bar and inventory app on update.

GET
Inventory: Stats

Description
Example Javascript Request

Larger and slower request than quick stats. Gives more in-depth information on the collection.

Notes

POST
Note Creation

Description
Example Javascript Request
Example JSON Response

Create a note in the system.

field required default description
target_app optional inventory name of app to create note for
target_id required id of the resource the note is for, inventory id, earnings id, etc.
note required text string note

GET
Note Get

Description
Example Javascript Request
Example JSON Response

Retrieve a note

POST
Note Edit

Description
Example Javascript Request
Example JSON Response

POST
Note Delete

Description
Example Javascript Request
Example JSON Response

Delete a note by its ID.

Lists

GET
Get All Lists

Description
Example Javascript Request
Example JSON Response

Get all the user lists

GET
Get Single List

Description
Example Javascript Request
Example JSON Response

Get all the user lists

POST
Lists: Add Item to List

Description
Example Javascript Request
Example JSON Response

Add an item to a list. If a non-foil is added as foil, it will default to non-foil vice versa.

Param Description
emid (int) EchoID of card to add
list (int) list id, see lists/all/
foil (int) 0=false, 1=true
sb (int) sideboard 0=false, 1=true

POST
Lists: Remove Item

Description
Example Javascript Request
Example JSON Response

Add an item to a list. If a non-foil is added as foil, it will default to non-foil vice versa.

Param Description
emid (int) EchoID of card to add
list (int) list id, see lists/all/
foil (int) 0=false, 1=true
sb (int) sideboard 0=false, 1=true

POST
Lists: Delete List

Description
Example Javascript Request

Delete a list.

Param Description
list (int) list id, see lists/all/
status (int) 0=delete, 1=undelete

POST
Lists:Swap

Description
Example Javascript Request

Replace a card in a list position with another card.

Param Description
id (int) list item id
emid (int) echomtg id of card to swap

POST
Lists: Deck Reader

Description
Example Javascript Request

Read a deck, support formats are COD, DEC, Areana, Modo, DEK

'COD' => '/ '/ '/SB: \d\s(.*)\\n/', 'ARENA' => '/\d+\s+(.*)\s\([A-Za-z0-9]+\)\s\d+/', //1 Baird, Steward of Argive (DAR) 4 'MODO' => '/\d+\s+(.*)/'

Param Description
text deck text

POST
Lists: Toggle Foil Copy

Description
Example Javascript Request

Add an item to a list. If a non-foil is added as foil, it will default to non-foil vice versa.

Param Description
emid (int) EchoID of card to add
list (int) list id, see lists/all/
foil (int) 0=false, 1=true
sb (int) sideboard 0=false, 1=true

POST
Lists: Toggle Sideboard

Description
Example Javascript Request
Example JSON Response

Add an item to a list. If a non-foil is added as foil, it will default to non-foil vice versa.

Param Description
emid (int) EchoID of card to add
list (int) list id, see lists/all/
foil (int) 0=false, 1=true
sb (int) sideboard 0=false, 1=true

Earnings

GET
Earnings: Get List View

Description
Example Javascript Request

Access the users earning data.

GET
Earnings: Statistics

Description
Example Javascript Request
Example JSON Response

POST
Earnings: Adding Items

Description
Example Javascript Request
Example JSON Response

Add a card to the user inventory.

Param Required Default Description
emid required EchoID
quantity optional 1 number to record
language optional EN Card text language. See language options below
condition optional NM Card condition, see options below
foil optional 0 1=foiled, 0=regular
image optional A remote URL to an uploaded image. To add an image through Echo, see the Upload Image endpoint

Condition Options

NM = Near Mint  
LP = Lightly Played  
MP = Moderately Played  
HP = Heavily Played  
D = Damaged  
ALT = Altered  
ART = Artist Proof  
PRE = Pre-release  
TS = Timestamped  
SGN = Signed  
BGS = BGS  
B10 = BGS 10  
B95 = BGS 9.5  
B9 = BGS 9.0  
B85 = BGS 8.5  
B8 = BGS 8.0  
B75 = BGS 7.5  
B7 = BGS 7.0  
PSA = PSA  
P10 = PSA 10  
P95 = PSA 9.5  
P9 = PSA 9.0  
P85 = PSA 8.5  
P8 = PSA 8.0  
P75 = PSA 7.5  
P7 = PSA 7.0

Language Options

EN = english  
DE = german  
FR = french  
RU = russian  
IT = italian  
ES = spanish  
PT = portuguese  
CT = chinese traditional  
CS = chinese simplified  
JP = japanese  
KR = korean  

POST
Earnings: Update Sold Price

Description
Example Javascript Request
Example JSON Response

POST
Earnings: Update Acquired Price

Description
Example Javascript Request
Example JSON Response

POST
Earnings: Update Sold Date

Description
Example Javascript Request

POST
Earnings: Delete Entry

Description
Example Javascript Request
Example JSON Response

Trades

Trades are inventory items mark as tradable, when items are marked for trade they become searchable in a public trade list.

GET
Trades: View Haves

Description
Example Javascript Request

View user inventory. All options can be combined.

Param Required Default Description
user required The public user hash of the tradable user.
conversion optional 1 NOT SUPPORTED, currency return related to user trade list. Will be used for currency conversion against USD, 1.5 would return all prices 1.5*USD
start optional 0
limit optional 100 Number to records to return, max is 250
sort optional date_acquired price_acquired, date_acquired, name, set, price_change, tcg_market, tcg_mid, foil_price
direction optional ASC Change sort direction
min_value optional float number, return any item worth more than number
max_value optional float number, return any item worth less than number

GET
Trades: View Wants

Description
Example Javascript Request
Example JSON Response

View user inventory. All options can be combined.

Param Required Default Description
user required The public username of the tradable user.
conversion optional 1 NOT SUPPORTED, currency return related to user trade list. Will be used for currency conversion against USD, 1.5 would return all prices 1.5*USD
start optional 0
limit optional 100 Number to records to return, max is 250
sort optional date_acquired price_acquired, date_acquired, name, set, price_change, tcg_market, tcg_mid, foil_price
direction optional ASC Change sort direction
min_value optional float number, return any item worth more than number
max_value optional float number, return any item worth less than number

GET
Trades: Public List

Description
Example Javascript Request
Example JSON Response

View user inventory. All options can be combined.

Param Required Default Description
start optional 0
limit optional 100 Number to records to return, max is 250
search user name search

POST
Trades: Add Want

Description
Example Javascript Request

Add a card to the user's want list.

Param Required Default Description
emid required EchoID
count optional 1 number user wants to collect
priority optional 1 1-9, 9 meaning top card the users wants
foil optional 0 1=foiled, 0=regular

POST
Trades: Reduce/Increase Want Count

Description
Example Javascript Request

Change the count wanted on a want entry.

Param Required Default Description
emid required EchoID
quantity required 1 number to change the count. negative numbers will subtract

POST
Trades: Delete Want

Description
Example Javascript Request

Delete a want entry

Param Required Description
id required ID of the want entry, it can be found from the wants list.

Watchlist

Track item price movement in a watchlist.

POST
Watchlist: Add Item

Description
Example Javascript Request
Example JSON Response

POST
Watchlist: Update

Description
Example Javascript Request
Example JSON Response

GET
Watchlist: Get View

Description
Example Javascript Request
Example JSON Response

Get watchlist items.

Param default Description
start 0 Item to start from, used for pagination
limit 100 total items to return, used for pagination

Comments

POST
Comments: Create

Description
Example Javascript Request

Create a comment on the platform.

field required description
resource_id required id of the target resource
resource required string of the resource type
comment required comment string, markdown accepted
url required full URL of where the coment was made
thread_parent_id optional ID of the comment being responded to

POST
Comments: Delete

Description
Example Javascript Request

Create a note in the system.

field required default description
target_app optional inventory name of app to create note for
target_id required id of the resource the note is for, inventory id, earnings id, etc.
note required text string note

POST
Comments: Vote

Description
Example Javascript Request

Create a note in the system.

field required default description
target_app optional inventory name of app to create note for
target_id required id of the resource the note is for, inventory id, earnings id, etc.
note required text string note

GET
Comments: Get All

Description
Example Javascript Request
Example JSON Response

Retrieve a note

Groups

Custom collection of item data.

GET
Group: Get Single

Description
Example Javascript Request
Example JSON Response

Fetched items dedicated in a group based on specific request parameters. Defaults to sorting by pricing high to low.

Unique Options

true or false, determins where to return unique cards with no variants or not. default: false

Name Options

  • magic-reserved-list - magic reserve list

  • commanders - magic legendary creatures

  • lands - magic rare land cycles

  • artifacts - top 150 magic artifacts

  • tokens - top 150 magic tokens

  • creatures - top 150 magic creatures

  • power9 - magic power 9

  • tiny - magic tiny leaders

  • trendingup - magic items increasing in value

  • trendingdown - magic item decreasing in value

  • custom - look for a specific card type, see type options

Type Options

Type param only work with name=custom. Must be one part of a type like "merfolk" or "instant" or a fully qualified type like "Elf Druid". Examples:

  • Merfolk

  • Goblin

  • Instant

  • Elf Druid

  • Tribal

  • Enchantment

  • World Enchantment

Limit Options

Default is 150, accepting an integer. Optional.

GET
Groups: Get All Groups

Description
Example Javascript Request

Get listing of groups per game

Importing

Endpoints to import or read card data.

POST
CSV Reader

Description
Example Javascript Request

Upload a CSV of card and get back a mapping to EchoMTG ID's

POST
Scanner Paste Reader

Description
Example Javascript Request

Upload a CSV of card and get back a mapping to EchoMTG ID's

Articles

Create, edit, and retrieve articles.

GET
Data: Get Articles

Description
Example Javascript Request
Example JSON Response

GET
Data: Get Single Article

Description
Example Javascript Request
Example JSON Response

Fetch an article by its unique ID (int). Get ID from the URL or from querying the articles endpoint.

Search and Data

GET
Data: Search

Description
Example Javascript Request

Returns popular cards for a given game based on data in EchoMTG. This endpoint is restricted to login and EchoMTG websites.

Required Description
tcg_id true TCGplayer ID
set optional Set Code as stored in EchoMTG
card optional Card name as stored in EchoMTG

GET
Data: Item

Description
Example Javascript Request
Example JSON Response

Returns information on an item in the echomtg database.

Required Default Description
emid true echomtg id

GET
Data: Variants

Description
Example Javascript Request

Returns popular cards for a given game based on data in EchoMTG. This endpoint is restricted to login and EchoMTG websites.

Required Description
tcg_id true TCGplayer ID
set optional Set Code as stored in EchoMTG
card optional Card name as stored in EchoMTG

GET
Data: Set

Description
Example Javascript Request

Fetches a set. Larger sets struggle to load in SSR apps. ?minified=true option added to reduce return sizes in half.

Param Required Default Description
set_code true 3-5 letter set code
minified false true Return results without card_text and purchase link
start false 0 index to start at
limit false 5000 total items to reutrn

GET
Data: Sets

Description
Example Javascript Request

Fetches a set. Larger sets struggle to load in SSR apps. ?minified=true option added to reduce return sizes in half.

Param Required Default Description
set_code true 3-5 letter set code
minified false true Return results without card_text and purchase link
start false 0 index to start at
limit false 5000 total items to reutrn

GET
Data: Item History

Description
Example Javascript Request

Returns information on an item in the echomtg database.

Required Default Description
emid true echomtg id

GET
Data: Games

Description
Example Javascript Request

Returns the games supported by EchoMTG

EchoMTG ©2025, ThoughtBomb Studios, LLC.Privacy Policy and Terms and Conditions. Magic: the Gathering™ references are property of Wizards of the Coast. Lorcana references are property of Disney.