Which Python API can be used to retrieve ALL underwriters of a bond

I am looking for a method to retrieve all underwriters of a specific bond using a python API.
Within the Refinitiv Workspace, you can open a bond and retrieve a set of multiple underwriters, as exampel
Following the article Debt Structure Analysis on an Organizational Level, I constructed the following Python code:
import refinitiv.data as rd
from refinitiv.data.content import search
# opens session with refinitiv-data.config.json
rd.open_session()
organization = "4295885383" # YARA International ASA
# Fields
fields = [
# basic bond data
"PermID",
"ISIN",
"IssueDate",
"Currency",
"FaceIssuedTotal",
# underwriter fields
"UnderwriterCode",
"UnderwriterID",
"UnderwriterName",
"UnderwriterSetupDate",
"UnderwriterAmount",
]
df = search.Definition(
view=search.Views.GOV_CORP_INSTRUMENTS,
filter=f"ParentOAPermID eq '{organization}' and IsActive eq true",
select=",".join(fields),
).get_data()
data = df.data.df
print(data)
The result is per obligation the underwriter, as such:
However, you can see that for obligation permID NO0010727993, there is only 1 underwriter, but in the Workspace you see 3 underwriters.
Another way to search for this field is using the data Item Browser. Searching for the permID you see the fields can be called: "TR.Underwriter", "TR.UnderwriterCode", "TR.UnderwriterRankDescription", "TR.UnderwriterAmount", "TR.FIUseOfProceedsAmount".
However, these fields are not known in the search engine. I retrieve the error: "Error code 221 | The access to field(s) denied".
Alternative, I can use the followings calls: "fundamental_and_reference.Definition", "rd.get_history" and "rd.get_data". They all give errors and no data.
As such, My question is:
What Python API should I use, and how do I set this up, to retrieve ALL underwriters of a obligation.
Best Answer
-
Hi @r.fernandez
I used the `SearchPropertyExplorer` module in the LDL, and found that the "UnderwriterCode" property is unfortunately not navigable:
# pip install lseg.data
import lseg.data as ld
ld.open_session()
props = ld.discovery.SearchPropertyExplorer.get_properties_for(
view = ld.discovery.Views.GOV_CORP_INSTRUMENTS,
query="NO0010727993")
props.get_by_name("under").dfThis means that the Search API will not suffice in returning all values for this property. An example of how you may do so for fields that are navigatable would be:
props0 = ld.discovery.SearchPropertyExplorer.get_properties_for(
view = ld.discovery.Views.GOV_CORP_INSTRUMENTS,
query = "LSEG bonds",
# navigators = "RCSIssuerCountry, RCSIssuerCountryLeaf",
# filter = "IsPerpetualSecurity ne true and IsActive eq true and not(AssetStatus in ('MAT' 'DC'))"
)
props0.get_by_name("IssuerCountry").df
You can even use the `get_possible_values` function, e.g. withprops2 = ld.discovery.SearchPropertyExplorer.get_properties_for(
view = ld.discovery.Views.GOV_CORP_INSTRUMENTS,
query = "LSEG bonds",
navigators = "RCSIssuerCountryLeaf")
rcs_issuer_country_leaf = props2.properties["RCSIssuerCountryLeaf"].get_possible_values()
rcs_issuer_country_leaf.df
In your case, you will need to go through a 2nd step, calling for the data you're after:ld.get_data(
universe="NO0010727993",
fields = [
"TR.Underwriter"])| Instrument | Underwriter Name |
|------------------------|----------------------------|
| N000101727993 | DANSKE BANK A/S |
| N000101727993 | NORDEA BANK AB |
| N000101727993 | DNB ASA |
0
Categories
- All Categories
- 3 Polls
- 6 AHS
- 36 Alpha
- 166 App Studio
- 6 Block Chain
- 4 Bot Platform
- 18 Connected Risk APIs
- 47 Data Fusion
- 34 Data Model Discovery
- 684 Datastream
- 1.4K DSS
- 615 Eikon COM
- 5.2K Eikon Data APIs
- 10 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- 3 Trading API
- 2.9K Elektron
- 1.4K EMA
- 249 ETA
- 554 WebSocket API
- 37 FX Venues
- 14 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 23 Messenger Bot
- 3 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 60 Open Calais
- 275 Open PermID
- 44 Entity Search
- 2 Org ID
- 1 PAM
- PAM - Logging
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 22 RDMS
- 1.9K Refinitiv Data Platform
- 643 Refinitiv Data Platform Libraries
- 4 LSEG Due Diligence
- LSEG Due Diligence Portal API
- 4 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.2K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 12 World-Check Customer Risk Screener
- 1K World-Check One
- 46 World-Check One Zero Footprint
- 45 Side by Side Integration API
- 2 Test Space
- 3 Thomson One Smart
- 10 TR Knowledge Graph
- 151 Transactions
- 143 REDI API
- 1.8K TREP APIs
- 4 CAT
- 26 DACS Station
- 121 Open DACS
- 1.1K RFA
- 104 UPA
- 192 TREP Infrastructure
- 228 TRKD
- 915 TRTH
- 5 Velocity Analytics
- 9 Wealth Management Web Services
- 90 Workspace SDK
- 11 Element Framework
- 5 Grid
- 18 World-Check Data File
- 1 Yield Book Analytics
- 46 中文论坛