The ID Mapping API lets you resolve common identifiers (CUSIP, ISIN, OpenFIGI, LEI, CIK) to a tradable symbol (e.g. AAPL) and vice-versa using flexible filters. It’s ideal for onboarding portfolios, normalizing vendor feeds, or building “search-and-resolve” experiences.

API Endpoint

GET https://eodhd.com/api/id-mapping

Description

Retrieve common identifiers for a symbol or by a specific identifier. Supports CUSIP, ISIN, OpenFigi, LEI, and CIK. At least one filter value is required.

Request Example

URL
cURL
PHP
Python
R
Chat GPT
https://eodhd.com/api/id-mapping?filter[symbol]=AAPL.US&page[limit]=100&page[offset]=0&api_token=YOUR_API_TOKEN&fmt=json
curl --location "https://eodhd.com/api/id-mapping?filter[symbol]=AAPL.US&page[limit]=100&page[offset]=0&api_token=YOUR_API_TOKEN&fmt=json"
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/id-mapping?filter[symbol]=AAPL.US&page[limit]=100&page[offset]=0&api_token=YOUR_API_TOKEN&fmt=json',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));

$data = curl_exec($curl);
curl_close($curl);

try {
    $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
    var_dump($data);
} catch (Exception $e) {
    echo 'Error. '.$e->getMessage();
}
import requests

url = f'https://eodhd.com/api/id-mapping?filter[symbol]=AAPL.US&page[limit]=100&page[offset]=0&api_token=YOUR_API_TOKEN&fmt=json'
data = requests.get(url).json()

print(data)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/id-mapping?filter[symbol]=AAPL.US&page[limit]=100&page[offset]=0&api_token=YOUR_API_TOKEN&fmt=json'
response <- GET(url)

if (http_type(response) == "application/json") {
    content <- content(response, "text", encoding = "UTF-8")
    cat(content)
} else {
    cat("Error while receiving data\n")
}
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Parameters

ParameterRequiredTypeDescription
filter[symbol]Yes (if no other filter provided)stringScope results by ticker, for example: AAPL.US
filter[ex]Yes (if no other filter provided)stringScope results by exchange code, for example: US
filter[isin]Yes (if no other filter provided)stringScope results by ISIN, for example: US0378331005
filter[figi]Yes (if no other filter provided)stringScope results by OpenFigi identifier, for example: BBG000B9XRY4
filter[lei]Yes (if no other filter provided)stringScope results by LEI, for example: HWUPKR0MPOU8FGXBT394
filter[cusip]Yes (if no other filter provided)stringScope results by CUSIP, for example: 037833100
filter[cik]Yes (if no other filter provided)stringScope results by CIK, for example: 0000320193
page[limit]NointegerLimit results per request. Default: 1000, min: 1, max: 1000
page[offset]NointegerOffset for pagination. Default: 0
api_tokenYesstringYour unique API access token
fmtNostringResponse format: json or xml (default: json)

Notes:

  • Provide at least one of the following: filter[symbol], filter[ex], filter[isin], filter[figi], filter[lei], filter[cusip], filter[cik].
  • Filters use deep-object style (filter[…]) for clarity and future extensibility.

Output Format (JSON)

The response includes meta for pagination, a data array of mapping objects, and links for pagination.

FieldTypeDescription
meta.totalintegerTotal number of results available
meta.limitintegerMax number of results returned in this response
meta.offsetintegerOffset applied to this response
dataarrayList of mapping records
data[].symbolstringTicker symbol
data[].isinstringISIN identifier
data[].figistringOpenFigi identifier
data[].leistringLEI identifier
data[].cusipstringCUSIP identifier
data[].cikstringCIK identifier
links.nextstring or nullURL to the next page, if available

Output Response Example

{
  "meta": {
    "total": 1,
    "limit": 100,
    "offset": 0
  },
  "data": [
    {
      "symbol": "AAPL.US",
      "isin": "US0378331005",
      "figi": "BBG000B9XRY4",
      "lei": "HWUPKR0MPOU8FGXBT394",
      "cusip": "037833100",
      "cik": "0000320193"
    }
  ],
  "links": {
    "next": null
  }
}

Additional Examples

Lookup by ISIN:

URL
cURL
PHP
Python
R
Chat GPT
https://eodhd.com/api/id-mapping?filter[isin]=US0378331005&api_token=YOUR_API_TOKEN
curl --location "https://eodhd.com/api/id-mapping?filter[isin]=US0378331005&api_token=YOUR_API_TOKEN&fmt=json"
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/id-mapping?filter[isin]=US0378331005&api_token=YOUR_API_TOKEN&fmt=json',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));

$data = curl_exec($curl);
curl_close($curl);

try {
    $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
    var_dump($data);
} catch (Exception $e) {
    echo 'Error. '.$e->getMessage();
}
import requests

url = f'https://eodhd.com/api/id-mapping?filter[isin]=US0378331005&api_token=YOUR_API_TOKEN&fmt=json'
data = requests.get(url).json()

print(data)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/id-mapping?filter[isin]=US0378331005&api_token=YOUR_API_TOKEN&fmt=json'
response <- GET(url)

if (http_type(response) == "application/json") {
    content <- content(response, "text", encoding = "UTF-8")
    cat(content)
} else {
    cat("Error while receiving data\n")
}
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Looking by exchange code:

URL
cURL
PHP
Python
R
Chat GPT
https://eodhd.com/api/id-mapping?filter[ex]=US&page[limit]=50&api_token=YOUR_API_TOKEN
curl --location "https://eodhd.com/api/id-mapping?filter[ex]=US&page[limit]=50&api_token=YOUR_API_TOKEN&fmt=json"
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/id-mapping?filter[ex]=US&page[limit]=50&api_token=YOUR_API_TOKEN&fmt=json',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));

$data = curl_exec($curl);
curl_close($curl);

try {
    $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
    var_dump($data);
} catch (Exception $e) {
    echo 'Error. '.$e->getMessage();
}
import requests

url = f'https://eodhd.com/api/id-mapping?filter[ex]=US&page[limit]=50&api_token=YOUR_API_TOKEN&fmt=json'
data = requests.get(url).json()

print(data)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/id-mapping?filter[ex]=US&page[limit]=50&api_token=YOUR_API_TOKEN&fmt=json'
response <- GET(url)

if (http_type(response) == "application/json") {
    content <- content(response, "text", encoding = "UTF-8")
    cat(content)
} else {
    cat("Error while receiving data\n")
}
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Use our Search API to locate assets filtering by asset category, exchange or ticker name.