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
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") }
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
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") }
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
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") }
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.