Converting ISINs to RICs using the DSS REST API

Introduction

This article investigates several use cases that involve translating ISINs into RICs, or retrieving data using ISINs directly, with the DSS (DataScope Select) REST API. To keep it short we will concentrate on the DSS REST API.

You will need some basic DSS GUI and DSS REST API knowledge to understand this article. If you want to test the code a valid DSS user account is also required.

separate article covers the same topic for TRTH REST API users.

Instrument identifier codes

Instrument identifiers can be referred to using several coding systems.

Thomson Reuters products use RICs (Reuters Instrument Codes), which uniquely identify financial instruments, including where they are traded. As an example, IBM.N identifies the IBM stock traded on NYSE, and IBM.L identifies the IBM stock traded on LSE. The RIC syntax here is <ticker>.<exchange>, which is the most common syntax in use, but there are cases where the syntax is different (options, futures, FX, etc.).

Several other codes are in use in the financial world (ISIN, Sedol, Cusip, etc.). One of the popular ones is ISINs (International Securities Identification Number) which uniquely identify securities, but do not identify the venue (or exchange) where they are traded. For example, US4592001014 identifies the IBM stock (whatever venue it is traded on).

Mapping ISINs to RICs

To request data on DSS you can use the ISIN (and an exchange code), but for other Thomson Reuters products (like Elektron) you must use the RIC, so if you have ISINs (or other codes) you will need to map them to RICs.

As an ISIN does not identify the venue, a single ISIN maps to several RICs. For example, the IBM ISIN US4592001014 maps to more than 50 RICs, one for each data source (i.e. venue or exchange): IBM.LM, IBM.MX, IBM.BE, IBM.HA, IBM.H, IBMI.L, etc.

Primary RIC

One of these is the primary RIC. It identifies the exchange with the primary listing for the instrument (i.e. the venue where it was originally listed, which is usually in the country of origin of the company). In the case of IBM the primary exchange is NYSE, and the Primary RIC is IBM.N.

Other identifier types: Cusip, Sedol

This article uses ISINs as an example, because their use is widespread, but everything in this article can also be applied when working with Cusips and Sedols.

Instruments and code extracts used in this article

We use 4 ISINs in our examples:

ISIN Asset class Comment Primary RIC Primary Exchange
US4592001014 Equity   IBM.N  NYS
GB00B29MWZ99 Equity Delisted Sept. 2009 TRIL.L LSE
DE000C0JK7R7 Future derivative Expires Sept. 2017 STXXU7 EUX
DE0001135317 Bond Expired 4 Apr. 2017 N/A CPL

The code extracts are based on pure HTTP requests. To try them out you can cut and paste them into a REST client, like Postman. This is explained in the REST API Tutorials Introduction. You can also download the associated Postman environment and collection to avoid copy/pasting. All request headers must contain an authentication token; refer to the REST API Tutorial 1 for details.

The full workflow for some requests is omitted for clarity, but when required you will find pointers to the tutorials where the details are explained.

Delisted RICs

Some queries might return delisted RICs among the results. A delisted RIC is no longer listed on the exchange, there are no quotes, and it is no longer tradable. One is included in our list, TRIL.L, the old RIC for Thomson Reuters, delisted in September 2009.

You can recognize delisted RICs in results through a special syntax: TRIL.L^I09

Here is the syntax: the original RIC (TRIL.L) followed by “^”, followed by a month code and a year code that indicate when the RIC was delisted. For equities the month code starts at “A” for January, so “I” is for September. The year code 09 means 2009.

Use cases

When converting an ISIN to RIC(s) there are 3 main use cases:

  1. You want the primary RIC
  2. You want the RIC(s) for a particular exchange (or currency), or a set of exchanges
  3. You want all the RICs

Another use case could be that you want to find the primary exchange.

There are different ways to go about these use cases.

Manually importing an instrument list file containing ISINs

Before moving to the API calls, I’d like to mention a nice DSS GUI capability. You can create an instrument list, and then populate it by importing a CSV file containing ISINs, optionally specifying one or more exchanges.

CSV file format (columns 3 to 5 are optional):

<IdentifierType>,<Identifier>[,<UserDefinedID 1>,<exchange list>,<UserDefinedID 2>]

Exchange list (column 4) allows choosing a list of exchanges. If it is empty the primary exchange will be taken. Format:

<ExchangeCode>[|<ExchangeCode>]

User defined IDs (columns 3 and 5) are optional tags you can add for your own usage (the DSS server will save them, but otherwise ignore them).

Example lines:

ISN,US4592001014,UserDef11,NYS|PSE|SWX,UserDef12
ISN,US4592001014,,PSE
ISN,US4592001014
ISN,GB00B29MWZ99
ISN,DE000C0JK7R7
ISN,DE0001135317

The first example line above will create 3 entries, one for each exchange code (NYS, PSE and SWX), all with the specified user IDs. The second will create 1 entry for exchange PSE, whereas the third will create an entry for the corresponding primary exchange (NYS, automatically populated).

An extraction referring to an instrument list containing an ISIN and exchange will return data for the RIC corresponding to that ISIN and exchange pair.

You cannot replicate this with the API, but as you will see from the following the API delivers many capabilities to convert ISINs to RIC or retrieve data using ISINs.

API use cases and calls summary

In a nutshell, here is the list of use cases with associated API calls.

Use case API call Comment
Find primary exchange for an ISIN InstrumentListValidateWithOptions Delivers for each input ISIN the primary exchange.
Find primary RIC for an ISIN TermsAndConditionsExtractionRequest Delivers for each input ISIN the primary RIC. You can also retrieve the currency and exchange code.
Find RIC(s) for 1 or more exchanges for an ISIN

TermsAndConditionsExtractionRequest

 

Search

 

Delivers for each input ISIN and exchange the corresponding RIC; you can also retrieve the currency.

The family of Search requests delivers for an input ISIN all RICs and corresponding exchanges; select from results the RICs for the exchanges of interest.

Directly run a data extraction request using an ISIN   You can extract data using the ISIN directly, optionally specifying the exchange.

The details are covered in the next section.

Use cases and calls details

Let us look at the relevant API calls in detail, to get a better understanding of their capabilities.

Finding the primary exchange for an ISIN

A call to InstrumentListValidateWithOptions delivers for each input ISIN the primary exchange.

A single call suffices for multiple ISINs.

Here are the details of the API call:

Method: POST

Endpoint: https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/InstrumentListValidateWithOptions

Body:

{
  "InputsForValidation": [
    { "Identifier": "US4592001014", "IdentifierType": "Isin" },
    { "Identifier": "GB00B29MWZ99", "IdentifierType": "Isin" },
    { "Identifier": "DE000C0JK7R7", "IdentifierType": "Isin" },
    { "Identifier": "DE0001135317", "IdentifierType": "Isin" }
  ],
  "Options": {
    "AllowDuplicateInstruments": false,
    "AllowHistoricalInstruments": true,
    "AllowInactiveInstruments": true,
    "AllowOpenAccessInstruments": false,
    "AllowUnsupportedInstruments": false,
    "ExcludeFinrAsPricingSourceForBonds": false,
    "UseConsolidatedQuoteSourceForCanada": false,
    "UseConsolidatedQuoteSourceForUsa": false,
    "UseDebtOverEquity": false,
    "UseExchangeCodeInsteadOfLipper": false,
    "UseUsQuoteInsteadOfCanadian": false
  }
}

Response data:

{
    "@odata.context": "https://hosted.datascopeapi.reuters.com/RestApi/v1/$metadata#ThomsonReuters.Dss.Api.Extractions.SubjectLists.InstrumentsValidateIdentifiersResult",
    "ValidatedInstruments": [
        {
            "Identifier": "US4592001014",
            "IdentifierType": "Isin",
            "Source": "NYS",
            "Key": "VjF8MHgwMDAzZGQwMDEzNzlkNDYwfDB4MDAwM2RjMDA0YTAyNGZkOHxOWVN8RVFRVXxFUVRZfE9EU0h8RXx8SUJNLk58MDA3Nw",
            "Description": "INTERNATIONAL BUSINESS MACHINES ORD",
            "InstrumentType": "EquityQuote",
            "Status": "Valid"
        },
        {
            "Identifier": "GB00B29MWZ99",
            "IdentifierType": "Isin",
            "Source": "LSE",
            "Key": "VjF8MHgwMDAzZGQwMDE0NzUyYzkzfDB4MDAwM2RjMDA0NzkxZGRkNHxMU0V8RVFRVXxFUVRZfE9EU0h8RXx8VFJJTC5MXkkwOXwwNjkx",
            "Description": "THOMSON REUTERS PLC ORD",
            "InstrumentType": "EquityQuote",
            "Status": "Valid"
        },
        {
            "Identifier": "DE000C0JK7R7",
            "IdentifierType": "Isin",
            "Source": "EUX",
            "Key": "VjF8MHgwMDEwMGIwMDEzY2U0MjkwfDB4MDAxMDBiMDAxMzliNzY2YnxFVVh8REVSVnxERVJWfEZVVHxEfHxTVFhYVTd8NTAxMQ",
            "Description": "STX 50 SEP7",
            "InstrumentType": "Derivative",
            "Status": "Valid"
        },
        {
            "Identifier": "DE0001135317",
            "IdentifierType": "Isin",
            "Source": "CPL",
            "Key": "VjF8MHgwMDAzZTcwMDAzZTEzYTNjfDB4MDAwNDA1MDAzMDJmOTE4ZnxDUEx8R0NCRHxHT1ZUfEdCVU5EfEd8RXx8",
            "Description": "DEGV   3.750 01/04/17 MATd",
            "InstrumentType": "GovCorpBond",
            "Status": "Valid"
        }
    ],
    "ValidationResult": {
        "ValidInstrumentCount": 3,

[…]

The response contains an object ValidatedInstruments, array that contains several objects (one for each input ISIN) containing the fields we are interested in: Identifier and Source.

Results: parsing the response allows you to build a list of ISINs and corresponding primary exchange codes:

  • US4592001014 – NYS
  • GB00B29MWZ99 – LSE
  • DE000C0JK7R7 – EUX
  • DE0001135317 – CPL

Notes:

  • The request body contains a number of options. As we set "AllowInactiveInstruments": true the recently matured bond and the delisted equity were delivered. If we had set that parameter to false no results would have been returned for the matured bond and the expired equity.
  • To validate historical instruments you must also set "AllowHistoricalInstruments": true.

Finding the primary RIC for an ISIN

A TermsAndConditionsExtractionRequest delivers for each input ISIN the primary RIC (except if you specified the source, see next section). It is also possible to retrieve the currency and exchange code.

A single call suffices for multiple ISINs.

Method: POST

Endpoint: https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/Extract

Body:

{
  "ExtractionRequest": {
    "@odata.type": "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.TermsAndConditionsExtractionRequest",
    "ContentFieldNames": [ 
      "RIC", "ISIN", "Currency Code", "Exchange Code", "Exchange Code List"
    ],
    "IdentifierList": {
      "@odata.type": "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.InstrumentIdentifierList",
      "InstrumentIdentifiers": [
        { "Identifier": "US4592001014", "IdentifierType": "Isin" },
        { "Identifier": "GB00B29MWZ99", "IdentifierType": "Isin" },
        { "Identifier": "DE000C0JK7R7", "IdentifierType": "Isin" },
        { "Identifier": "DE0001135317", "IdentifierType": "Isin" }
      ],
      "ValidationOptions": { "AllowHistoricalInstruments": true },
      "UseUserPreferencesForValidationOptions": false
    }
  }
}

Response:

Depending on the request size the response will either contain the data, or (if it takes more than 30 seconds) it will be empty, and the header will contain a location URL. A subsequent GET request to the location URL will deliver the data when it is ready. For details see REST API Tutorial 7: On Demand T&C extraction.

Response data:

{
    "@odata.context": "https://hosted.datascopeapi.reuters.com/RestApi/v1/$metadata#Collection(ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.ExtractionRow)",
    "value": [
        {
            "IdentifierType": "Isin",
            "Identifier": "US4592001014",
            "RIC": "IBM.N",
            "ISIN": "US4592001014",
            "Currency Code": "USD",
            "Exchange Code": "NYS",
            "Exchange Code List": "ADC,AEX,BAT,BCO,BDS,BEC,BER,BOS,BRN,BTE,BTY,CHI,CIN,DEA,DEU,DEX,DUS,ETX,FRA,GER,HAM,HAN,IEX,LMA,LSE,MEX,MID,MIL,MUN,NBN,NYQ,NYS,PAR,PPB,PSE,SGO,STO,STU,SWX,TDG,THM,TRQ,VIE,XBO,XDS,XPH"
        },
        {
            "IdentifierType": "Isin",
            "Identifier": "GB00B29MWZ99",
            "RIC": "TRIL.L^I09",
            "ISIN": "GB00B29MWZ99",
            "Currency Code": "GBp",
            "Exchange Code": "LSE",
            "Exchange Code List": null
        },
        {
            "IdentifierType": "Isin",
            "Identifier": "DE000C0JK7R7",
            "RIC": "STXXU7",
            "ISIN": "DE000C0JK7R7",
            "Currency Code": "EUR",
            "Exchange Code": "EUX",
            "Exchange Code List": null
        },
        {
            "IdentifierType": "Isin",
            "Identifier": "DE0001135317",
            "RIC": null,
            "ISIN": "DE0001135317",
            "Currency Code": "EUR",
            "Exchange Code": "CPL",
            "Exchange Code List": null
        }
    ]
}

The response contains an object value, array that contains several objects (one for each input ISIN) containing the field we are interested in: RIC. In this example we also include the Currency Code and Exchange Code as control elements.

Results: parsing the response allows us to build a list of ISINs and corresponding primary RIC, primary exchange and currency:

  • US4592001014 – IBM.N – NYS – USD
  • GB00B29MWZ99 – TRIL.L^I09 – LSE – GBp
  • DE000C0JK7R7 – STXXU7 – EUX – EUR
  • DE0001135317 – null – CPL – EUR

Notes on the expired instruments:

  • The syntax of TRIL.L^I09 shows it is a delisted instrument.
  • No primary RIC is delivered for the matured bond, because it is no longer quoted.

For more information on the Terms and Conditions extraction, see REST API Tutorial 7: On Demand T&C extraction.

Finding the RIC(s) for one or more exchanges for an ISIN

The TermsAndConditionsExtractionRequest we saw in the previous section defaults to the primary RIC. But you can add to each input ISIN a specific exchange; the result will then contain the corresponding RIC.

To get results for several exchanges, you need one entry per source.

For instance, if you want to convert the ISIN US4592001014 to get the RICs on the PSE and SWX exchanges, as well as the primary RIC, you would set the following in the InstrumentIdentifiers:

        { "Identifier": "US4592001014", "IdentifierType": "Isin", "Source": "PSE" },
        { "Identifier": "US4592001014", "IdentifierType": "Isin", "Source": "SWX" },
        { "Identifier": "US4592001014", "IdentifierType": "Isin" },

Results: this returns the following RICs: IBM.P, IBM.S and IBM.N.

The above scenario assumes you know exactly what exchanges you want. If you do not, you might want to use a Search.

The family of Search requests delivers for an input ISIN all RICs and corresponding exchanges, from the results you can select those for exchanges of interest.

You need to run one call per ISIN.

The various search requests have different filtering capabilities, for example:

  • InstrumentSearch is the generic search; it allows filtering by instrument type.
  • EquitySearch allows filtering by 1 currency and/or several exchanges.
  • FuturesAndOptionsSearch allows filtering by a combination of 1 currency, several exchanges, expiration date and/or strike price.
  • GovCorpSearch allows filtering by a combination of asset statuses (where matured is MAT), several currencies, dates and more.
  • Etc.

This allows you to find the RICs for specific exchanges.

The set of fields that are returned in the response is not configurable. For each result it is recommended to check the value of field IdentifierType, because in cases where a RIC is not available a different identifier type might be returned, as illustrated by our last search example below (the GovCorpSearch).

No RICs are delivered if the instrument is no longer quoted.

Let us see these calls in more detail.

Basic instrument search

InstrumentSearch allows filtering by InstrumentTypeGroup.

Method: POST

Endpoint: https://hosted.datascopeapi.reuters.com/RestApi/v1/Search/InstrumentSearch

Body:

{
  "SearchRequest": {
    "InstrumentTypeGroups": [
      "CollatetizedMortgageObligations", "Commodities", "Equities", "Funds",
      "FuturesAndOptions", "GovCorp", "Money", "MortgageBackedSecurities",
      "Municipals"
    ],
    "IdentifierType": "Isin",
    "Identifier": "US4592001014",
    "PreferredIdentifierType": "Ric"
  }
}

Response data:

{
    "@odata.context": "https://hosted.datascopeapi.reuters.com/RestApi/v1/$metadata#Collection(ThomsonReuters.Dss.Api.Content.ValidatedInstrument)",
    "value": [
        {
            "Identifier": "IBM.LM",
            "IdentifierType": "Ric",
            "Source": "LMA",
            "Key": "VjF8MHgwMDAzZGQwMDEzNzlkNDYwfDB4MDAwM2RjMDAzZGNiNDE2OHxMTUF8RVFRVXxFUVRZfE9EU0h8RXx8SUJNLkxNfDAzOTM",
            "Description": "INTERNATIONAL BUSINESS MACHINES ORD",
            "InstrumentType": "EquityQuote",
            "Status": "Valid"
        },

[…]

        {
            "Identifier": "IBM.N",
            "IdentifierType": "Ric",
            "Source": "NYS",
            "Key": "VjF8MHgwMDAzZGQwMDEzNzlkNDYwfDB4MDAwM2RjMDA0YTAyNGZkOHxOWVN8RVFRVXxFUVRZfE9EU0h8RXx8SUJNLk58MDA3Nw",
            "Description": "INTERNATIONAL BUSINESS MACHINES ORD",
            "InstrumentType": "EquityQuote",
            "Status": "Valid"
        },

[…]

        {
            "Identifier": "IBM.VI",
            "IdentifierType": "Ric",
            "Source": "VIE",
            "Key": "VjF8MHgwMDAzZGQwMDEzNzlkNDYwfDB4MDAxMDBiMDAxNGNiMjRhNnxWSUV8RVFRVXxFUVRZfE9EU0h8RXx8SUJNLlZJfDA1Nzg",
            "Description": "INTERNATIONAL BUSINESS MACHINES ORD",
            "InstrumentType": "EquityQuote",
            "Status": "Valid"
        }
    ]
}

The response contains an object value, array that contains one or more objects (one for each RIC that maps to the input ISIN) containing the fields we are interested in: Identifier and Source (i.e. the venue / exchange).

Results: parsing the response allows us to build a list of all the RICs and corresponding source (exchange):

  • US4592001014 – more than 50 results.

    Note: the primary RIC cannot be distinguished from the others.
  • GB00B29MWZ99 – no results
  • DE000C0JK7R7 – one result - RIC : STXXU7 – EUX
  • DE0001135317 – no results

There are no results for the delisted equity and the matured bond, because they are no longer quoted.

For more information on instrument search refer to REST API Tutorial 11: Search by Instrument.

Equity search

EquitySearch allows filtering by 1 currency and/or several exchanges.

Method: POST

Endpoint: https://hosted.datascopeapi.reuters.com/RestApi/v1/Search/EquitySearch

Body:

{
  "SearchRequest": {
    "AssetStatus": "Active",
    "AssetCategoryCodes": null,
    "SubTypeCodes": null,
    "CurrencyCodes": [ "USD" ],
    "CompanyName": null,
    "Description": null,
    "DomicileCodes": null,
    "ExchangeCodes": [ "NAS", "NYS", "GSM", "NSM", "SWX" ],
    "FairValueIndicator": null,
    "FileCodes": null,
    "GicsCodes": null,
    "OrgId": null,
    "Ticker": null,
    "Identifier": "US4592001014",
    "IdentifierType": "Isin",
    "PreferredIdentifierType": "Ric"
  }
}

Note: this example illustrates how additional filtering can be done on one single currency code (multiple codes are not supported) and one or more exchange codes.

Response data:

{
    "@odata.context": "https://hosted.datascopeapi.reuters.com/RestApi/v1/$metadata#Collection(ThomsonReuters.Dss.Api.Content.ValidatedInstrument)",
    "value": [
        {
            "Identifier": "IBM.N",
            "IdentifierType": "Ric",
            "Source": "NYS",
            "Key": "VjF8MHgwMDAzZGQwMDEzNzlkNDYwfDB4MDAwM2RjMDA0YTAyNGZkOHxOWVN8RVFRVXxFUVRZfHxFfHxJQk0uTnwwMDc3",
            "Description": "INTERNATIONAL BUSINESS MACHINES ORD",
            "InstrumentType": "EquityQuote",
            "Status": "Valid"
        },
        {
            "Identifier": "IBMUSD.S",
            "IdentifierType": "Ric",
            "Source": "SWX",
            "Key": "VjF8MHgwMDAzZGQwMDEzNzlkNDYwfDB4MDAxMDBiMDAxMjkwM2NiNXxTV1h8RVFRVXxFUVRZfHxFfHxJQk1VU0QuU3wwNDc3",
            "Description": "INTERNATIONAL BUSINESS MACHINES ORD",
            "InstrumentType": "EquityQuote",
            "Status": "Valid"
        }
    ]
}

The response contains an object value, array that contains one or more objects (one for each RIC that maps to the input ISIN) containing the fields we are interested in: Identifier and Source (i.e. the venue / exchange).

Results: parsing the response allows us to build a list of all the equity RICs (with corresponding exchange) for the selected exchanges and currency:

  • US4592001014 – IBM.N (NYS) and IBMUSD.S (SWX)
  • GB00B29MWZ99 – TRIL.L^I09 and RTRS.L^G93 (for a search on LSE). Their syntax shows they are delisted instruments.

There is no point using EquitySearch for DE000C0JK7R7 and DE0001135317 as they are not equities, no results will be returned.

For more information on equity search refer to REST API Tutorial 12: Search for an Equity.

Futures and Options search

FuturesAndOptionsSearch allows filtering by a combination of 1 currency, several exchanges, expiration date and/or strike price.

Method: POST

Endpoint: https://hosted.datascopeapi.reuters.com/RestApi/v1/Search/FuturesAndOptionsSearch

Body:

{
  "SearchRequest": {
    "FileCodes": null,
    "CurrencyCodes": [ "EUR" ],
    "ExchangeCodes": [ "EUX", "DTB" ],
    "StrikePrice": null,
    "ExpirationDate": {
      "@odata.type": "#ThomsonReuters.Dss.Api.Search.DateValueComparison",
      "ComparisonOperator": "GreaterThanEquals",
      "Value": "2016-12-31T00:00:00.000Z"
    },
    "IdentifierType": "Isin",
    "Identifier": "DE000C0JK7R7",
    "PreferredIdentifierType": "Ric",
    "UnderlyingRic": null
  }
}

Note: this example illustrates how additional filtering can be done on one single currency code (multiple codes are not supported), on one or more exchange codes, and on the expiration date. We did not add a filter on strike price, it would not apply to this ISIN.

Response data:

{
    "@odata.context": "https://hosted.datascopeapi.reuters.com/RestApi/v1/$metadata#Collection(ThomsonReuters.Dss.Api.Content.ValidatedInstrument)",
    "value": [
        {
            "Identifier": "STXXU7",
            "IdentifierType": "Ric",
            "Source": "EUX",
            "Key": "VjF8MHgwMDEwMGIwMDEzY2U0MjkwfDB4MDAxMDBiMDAxMzliNzY2YnxFVVh8REVSVnxGVVR8fER8fFNUWFhVN3w1MDEx",
            "Description": "STX 50 SEP7",
            "InstrumentType": "Derivative",
            "Status": "Valid"
        }
    ]
}

The response contains an object value, array that contains one or more objects (one for each RIC that maps to the input ISIN) containing the fields we are interested in: Identifier and Source (i.e. the venue / exchange).

Results: parsing the response allows us to build a list of all the future and option RICs (with corresponding exchange) for the selected exchanges, currency and expiration date:

  • DE000C0JK7R7 – STXXU7 – EUX

There is no point using FutureAndOptionSearch for US4592001014, GB00B29MWZ99 and DE0001135317 as they are not futures or options, no results will be returned.

For more information on future and option search refer to REST API Tutorial 13: Search for a Future or Option.

Government Corporates search

GovCorpSearch allows filtering by a combination of asset statuses (where MAT stands for matured), several currencies, dates and more.

Method: POST

Endpoint: https://hosted.datascopeapi.reuters.com/RestApi/v1/Search/GovCorpSearch

Body:

{
  "SearchRequest": {
    "AssetStatuses": ["CLD", "CAN", "DFS", "RDM", "EXC", "MAT", "FNG", "DEF", "ISS", "LIQ", "NAC", "PRE", "PUT", "RPN", "REF", "RMK", "RBM", "FDD", "REP", "RES", "TEN", "TBC", "TBE", "TBI", "TBP", "TBR", "TBB", "WHN"],
    "Coupon": null,
    "CurrencyCodes": [ "EUR", "USD" ],
    "Group": { "Agency": true, "Government": true, "Corporate": true, "Supra": true },
    "MoodyRatingsCodes": null,
    "StandardPoorsRatingsCodes": null,
    "Callable": false,
    "Convertable": false,
    "Extendable": false,
    "Putable": false,
    "Sinkable": false,
    "IssueDate": null,
    "MaturityDate": null,
    "NextPayDate": null,
    "Identifier": "DE0001135317",
    "IdentifierType": "Isin",
    "PreferredIdentifierType": "Ric"
  }
}

Note: this example illustrates some of the filtering capabilities.

Response data:

There are 120 results:

{
    "@odata.context": "https://hosted.datascopeapi.reuters.com/RestApi/v1/$metadata#Collection(ThomsonReuters.Dss.Api.Content.ValidatedInstrument)",
    "value": [
        {
            "Identifier": "DE0001135317",
            "IdentifierType": "Isin",
            "Source": "EJV",
            "Key": "VjF8MHgwMDAzZTcwMDAzZTEzYTNjfDB4MDAwNDA1MDAzMDJmNzE2ZnxFSlZ8R0NCRHx8fEd8RXx8R09SUA",
            "Description": "DEGV   3.750 01/04/17 MATd",
            "InstrumentType": "GovCorpBond",
            "Status": "Valid"
        },
        {
            "Identifier": "DE0001135317",
            "IdentifierType": "Isin",
            "Source": "AAF",
            "Key": "VjF8MHgwMDAzZTcwMDAzZTEzYTNjfDB4MDAwNDA1MDAzMDJmNzI2Y3xBQUZ8R0NCRHx8fEd8RXx8",
            "Description": "DEGV   3.750 01/04/17 MATd",
            "InstrumentType": "GovCorpBond",
            "Status": "Valid"
        },

[…]

        {
            "Identifier": "DE0001135317=VTMR",
            "IdentifierType": "Ric",
            "Source": "ZNR",
            "Key": "VjF8MHgwMDAzZTcwMDAzZTEzYTNjfDB4MDAxMDJjZDhkZWI1MGI4NHxaTlJ8R0NCRHx8fEd8RXxERTAwMDExMzUzMTc9VlRNUnw",
            "Description": "DEGV   3.750 01/04/17 MATd",
            "InstrumentType": "GovCorpBond",
            "Status": "Valid"
        }
    ]
}

The response contains an object value, array that contains one or more objects (one for each RIC that maps to the input ISIN) containing the fields we are interested in: Identifier and Source (i.e. the venue / exchange).

Results: RICs are not always available for a particular instrument, so the response contains a set of ISINs (always the same, with one record per source) and a set of RICs (in this case a mix of contributor and exchange RICs). This is why we recommend checking the value of field IdentifierType, to verify if the returned identifier is a RIC, or if a different identifier type was returned because no RIC was available.

There is no point using GovCorpSearch for US4592001014, GB00B29MWZ99 and DE000C0JK7R7 as they are not bonds, no results will be returned.

Directly running a data extraction request using an ISIN

A DSS data extraction can be done using the ISIN directly. You can add to each input ISIN a specific exchange. The result will then contain data for the corresponding RIC. If you do not mention the exchange, the result will contain data for the primary RIC.

If you want results for several exchanges, you need one entry per source.

For instance, if you want to retrieve data for ISIN US4592001014 on the PSE and SWX exchanges, as well as the primary exchange, you could set the following in the InstrumentIdentifiers:

        { "Identifier": "US4592001014", "IdentifierType": "Isin", "Source": "PSE" },
        { "Identifier": "US4592001014", "IdentifierType": "Isin", "Source": "SWX" },
        { "Identifier": "US4592001014", "IdentifierType": "Isin" },

Results: this will return data for the following RICs: IBM.P, IBM.S and IBM.N.

To see the details of the ISIN to RIC mapping you can include the following fields in the request: RIC, ISIN, Currency Code and Exchange Code. But we do not recommend adding static data to the output field list, because this data will be delivered for every single output record, resulting in slower processing due to useless duplication and information treatment.

As an example, let us look at an End of Day pricing request.

End of Day Pricing request

The EndOfDayPricingExtractionRequest delivers for each input ISIN the data for the exchange you specified, or for the primary RIC if you did not mention the exchange. You can also retrieve the RIC, currency and exchange code, asset and trading status, expiration date, etc.

The following query specifies the exchange for the first ISIN, and defaults to the primary for the others:

Method: POST

Endpoint: https://hosted.datascopeapi.reuters.com/RestApi/v1/Extractions/Extract

Body:

{
  "ExtractionRequest": {
    "@odata.type": "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.EndOfDayPricingExtractionRequest",
    "ContentFieldNames": [
      "ISIN", "RIC", "Underlying RIC", "Trading Status", "Asset Status",
      "Currency Code", "Exchange Code", "Expiration Date",
      "Trade Date", "Open Price", "High Price", "Low Price", "Close Price", "Volume"
    ],
    "IdentifierList": {
      "@odata.type": "#ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.InstrumentIdentifierList",
      "InstrumentIdentifiers": [
        { "Identifier": "US4592001014", "IdentifierType": "Isin", "Source": "PSE" },
        { "Identifier": "US4592001014", "IdentifierType": "Isin" },
        { "Identifier": "GB00B29MWZ99", "IdentifierType": "Isin" },
        { "Identifier": "DE000C0JK7R7", "IdentifierType": "Isin" },
        { "Identifier": "DE0001135317", "IdentifierType": "Isin" }],
      "ValidationOptions": { "AllowHistoricalInstruments": true },
      "UseUserPreferencesForValidationOptions": false
    },
    "Condition": null
  }
}

Response:

Depending on the request size the response will either contain the data, or (if it takes more than 30 seconds) the response will be empty, and the header will contain a location URL. A subsequent GET request to the location URL will deliver the data. For details see REST API Tutorial 2: On Demand End of Day extraction.

Response data:

{
    "@odata.context": "https://hosted.datascopeapi.reuters.com/RestApi/v1/$metadata#Collection(ThomsonReuters.Dss.Api.Extractions.ExtractionRequests.ExtractionRow)",
    "value": [
        {
            "IdentifierType": "Isin",
            "Identifier": "US4592001014",
            "ISIN": "US4592001014",
            "RIC": "IBM.P",
            "Underlying RIC": null,
            "Trading Status": 1,
            "Asset Status": "ISS",
            "Currency Code": "USD",
            "Exchange Code": "PSE",
            "Expiration Date": null,
            "Trade Date": "2017-07-21",
            "Open Price": 147.59,
            "High Price": 147.86,
            "Low Price": 146.51,
            "Close Price": 147.01,
            "Volume": 307236
        },
        {
            "IdentifierType": "Isin",
            "Identifier": "US4592001014",
            "ISIN": "US4592001014",
            "RIC": "IBM.N",
            "Underlying RIC": null,
            "Trading Status": 1,
            "Asset Status": "ISS",
            "Currency Code": "USD",
            "Exchange Code": "NYS",
            "Expiration Date": null,
            "Trade Date": "2017-07-05",
            "Open Price": 155.58,
            "High Price": 155.88,
            "Low Price": 153.63,
            "Close Price": 153.67,
            "Volume": 1103305
        },
        {
            "IdentifierType": "Isin",
            "Identifier": "GB00B29MWZ99",
            "ISIN": "GB00B29MWZ99",
            "RIC": "TRIL.L^I09",
            "Underlying RIC": null,
            "Trading Status": 0,
            "Asset Status": "NAC",
            "Currency Code": "GBp",
            "Exchange Code": "LSE",
            "Expiration Date": null,
            "Trade Date": "2009-09-09",
            "Open Price": 1858,
            "High Price": 1893,
            "Low Price": 1815,
            "Close Price": 1892,
            "Volume": null
        },
        {
            "IdentifierType": "Isin",
            "Identifier": "DE000C0JK7R7",
            "ISIN": "DE000C0JK7R7",
            "RIC": "STXXU7",
            "Underlying RIC": ".STOXX50",
            "Trading Status": 1,
            "Asset Status": "ISS",
            "Currency Code": "EUR",
            "Exchange Code": "EUX",
            "Expiration Date": "2017-09-15",
            "Trade Date": "2017-07-05",
            "Open Price": 3129,
            "High Price": 3134,
            "Low Price": 3116,
            "Close Price": 3134,
            "Volume": 755
        },
        {
            "IdentifierType": "Isin",
            "Identifier": "DE0001135317",
            "ISIN": "DE0001135317",
            "RIC": null,
            "Underlying RIC": null,
            "Trading Status": 0,
            "Asset Status": "MAT",
            "Currency Code": "EUR",
            "Exchange Code": "CPL",
            "Expiration Date": null,
            "Trade Date": null,
            "Open Price": null,
            "High Price": null,
            "Low Price": null,
            "Close Price": null,
            "Volume": null
        }
    ]
}

Results: the response contains the data for IBM on the PSE exchange. For the other ISINs it contains the data for the primary exchange, and, where available, the corresponding primary RIC, primary exchange and currency:

  • US4592001014 / PSE – IBM.P – PSE – USD
  • US4592001014 – IBM.N – NYS – USD
  • GB00B29MWZ99 – TRIL.L^I09 – LSE – GBp
  • DE000C0JK7R7 – STXXU7 – EUX – EUR
  • DE0001135317 – null – CPL - EUR

Notes:

  • Asset Status “ISS” means “Issued”, “NAC” means “Not Active”, “MAT” means “Expired/Matured”.
  • Trading Status is 1 if the instrument is currently traded, 0 otherwise.

Notes on the expired instruments:

  • The syntax of TRIL.L^I09 shows it is a delisted instrument.
  • No data nor primary RIC is delivered for the matured bond, because it is no longer quoted. The asset status tells us the instrument has matured.

Conclusions

In this article we saw several DSS REST API calls that allow us to find the primary exchange for an ISIN, the primary RIC for an ISIN, a RIC for a specific ISIN and exchange, and all the RICs for an ISIN. The last capability allows us to select a subset of RICs for specific exchanges (and / or currencies) of interest. We also saw that we can directly retrieve data using ISINs (and exchanges).