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
https://eodhd.com/api/id-mapping?filter[symbol]=AAPL.US&page[limit]=100&page[offset]=0&api_token=YOUR_API_TOKEN&fmt=json
(Sign up for free to get an API token)
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"
(Sign up for free to get an API token)
$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();
}
(Sign up for free to get an API token)
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)
(Sign up for free to get an API token)
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")
}
(Sign up for free to get an API token)
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)
Try it now (it's free)!
How to use it (YouTube)
Parameters
| Parameter | Required | Type | Description |
|---|---|---|---|
| filter[symbol] | Yes (if no other filter provided) | string | Scope results by ticker, for example: AAPL.US |
| filter[ex] | Yes (if no other filter provided) | string | Scope results by exchange code, for example: US |
| filter[isin] | Yes (if no other filter provided) | string | Scope results by ISIN, for example: US0378331005 |
| filter[figi] | Yes (if no other filter provided) | string | Scope results by OpenFigi identifier, for example: BBG000B9XRY4 |
| filter[lei] | Yes (if no other filter provided) | string | Scope results by LEI, for example: HWUPKR0MPOU8FGXBT394 |
| filter[cusip] | Yes (if no other filter provided) | string | Scope results by CUSIP, for example: 037833100 |
| filter[cik] | Yes (if no other filter provided) | string | Scope results by CIK, for example: 0000320193 |
| page[limit] | No | integer | Limit results per request. Default: 1000, min: 1, max: 1000 |
| page[offset] | No | integer | Offset for pagination. Default: 0 |
| api_token | Yes | string | Your unique API access token |
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.
| Field | Type | Description |
|---|---|---|
| meta.total | integer | Total number of results available |
| meta.limit | integer | Max number of results returned in this response |
| meta.offset | integer | Offset applied to this response |
| data | array | List of mapping records |
| data[].symbol | string | Ticker symbol |
| data[].isin | string | ISIN identifier |
| data[].figi | string | OpenFigi identifier |
| data[].lei | string | LEI identifier |
| data[].cusip | string | CUSIP identifier |
| data[].cik | string | CIK identifier |
| links.next | string or null | URL 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:
https://eodhd.com/api/id-mapping?filter[isin]=US0378331005&api_token=YOUR_API_TOKEN
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/id-mapping?filter[isin]=US0378331005&api_token=YOUR_API_TOKEN&fmt=json"
(Sign up for free to get an API token)
$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();
}
(Sign up for free to get an API token)
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)
(Sign up for free to get an API token)
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")
}
(Sign up for free to get an API token)
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)
Try it now (it's free)!
How to use it (YouTube)
Looking by exchange code:
https://eodhd.com/api/id-mapping?filter[ex]=US&page[limit]=50&api_token=YOUR_API_TOKEN
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/id-mapping?filter[ex]=US&page[limit]=50&api_token=YOUR_API_TOKEN&fmt=json"
(Sign up for free to get an API token)
$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();
}
(Sign up for free to get an API token)
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)
(Sign up for free to get an API token)
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")
}
(Sign up for free to get an API token)
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)
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.