Class SecurityMaster
- Namespace
- DatabentoDotNet.Reference
- Assembly
- DatabentoDotNet.Reference.dll
One row of a security_master.get_range or security_master.get_last response: what
a listing was, where it traded, every identifier it is known by, and the window over which that
description held.
public sealed record SecurityMaster : IEquatable<SecurityMaster>
- Inheritance
-
SecurityMaster
- Implements
- Inherited Members
Remarks
Port of upstream's SecurityMaster (security.rs:161-294), field for field and in
its order, including the five group comments it is written under. Fifty properties, thirty-five
of them optional — upstream's Option in every case, never a judgement made here.
Both endpoints return this same type, which is upstream's arrangement too: the difference between them is which rows are selected, never what a row contains. See SecurityMasterClient.
Three timestamps that are easy to confuse, so they are named together once here. TsEffective is when the details became true of the security; TsRecord is when Databento last changed the record saying so; and TsCreated is when Databento first added it. Only the first two can be filtered on, and SecurityMasterIndex is how.
The optionality here disagrees with AdjustmentFactor on three fields, and that
is reproduced rather than reconciled. operating_mic is required there and optional
here; exchange is optional there and required here; security_type is a bare enum
there and an Option here. Upstream types each of the six that way
(adjustment.rs:104-118 against security.rs:200-215), and a client that quietly
made them agree would be reporting a guess as though it were the API's contract. #57 is where
real rows can say which library is right about each.
Two spellings of "absent", as in AdjustmentFactor. A missing
string is null; a missing reference code — the four
Country and Currency properties, and SecurityType — is
that type's default, whose HasValue is false.
Voting is the exception that proves it is a rule about carriers rather than about
structs: it is one of the nine closed enums, whose default is an
undefined byte rather than "no value", so absence there needs a
Nullable<T> and gets one.
Rows arrive in the server's order and this library does not sort them. Upstream sorts its
buffered Vec — by the index for get_range (security.rs:50-53) and by
TsEffective for get_last (security.rs:77). Both stream here, and a
stream cannot be sorted. See GetRangeAsync(SecurityMasterGetRangeParams, CancellationToken) and ROADMAP.md §6.
Properties
BbgCompId
The Bloomberg composite global ID, or null.
public string? BbgCompId { get; init; }
Property Value
BbgCompTicker
The Bloomberg composite ticker, or null.
public string? BbgCompTicker { get; init; }
Property Value
Cfi
The Classification of Financial Instruments, as an ISO 10962 string, or null.
public string? Cfi { get; init; }
Property Value
Cic
The Complementary Identification Code, or null.
public string? Cic { get; init; }
Property Value
Cik
The Central Index Key, or null.
public string? Cik { get; init; }
Property Value
DelistingDate
The date the security was delisted, or null.
public LocalDate? DelistingDate { get; init; }
Property Value
Exchange
Exchange code for this listing.
public required string Exchange { get; init; }
Property Value
Remarks
Equivalent to the MIC but more stable: a MIC may not be published in a timely fashion, and a MIC can change while the exchange stays the same. Required here and optional on AdjustmentFactor — upstream's asymmetry, reproduced.
Figi
The Bloomberg FIGI — the exchange-level ID — or null.
public string? Figi { get; init; }
Property Value
FigiTicker
The Bloomberg exchange-level ticker, or null.
public string? FigiTicker { get; init; }
Property Value
Fisn
The Financial Instrument Short Name, or null.
public string? Fisn { get; init; }
Property Value
Gics
The Global Industry Standard Classification, or null.
public string? Gics { get; init; }
Property Value
IncorporationCountry
The issuer's country of incorporation.
public required Country IncorporationCountry { get; init; }
Property Value
Remarks
The one reference code on this record upstream does not wrap in an Option. It is
still an open carrier here, so a country outside the modelled set arrives in Code
with IsKnown false rather than failing the row.
Isin
The ISIN global identifier, as an ISO 6166 string, or null.
public string? Isin { get; init; }
Property Value
Remarks
The field allocate_isins is about. Left at its default, a request may create a new
allocation to populate this on an ISIN-limited plan; set it false and the
row is dropped instead. See AllocateIsins.
IssuerId
Issuer-level numerical ID, linking every security of one company together.
public required string IssuerId { get; init; }
Property Value
IssuerName
The issuer name.
public required string IssuerName { get; init; }
Property Value
Lei
The Legal Entity Identifier, or null.
public string? Lei { get; init; }
Property Value
ListingCountry
The listing country, or default when the row carries none.
public Country ListingCountry { get; init; }
Property Value
ListingCreatedDate
The date the listing was created.
public required LocalDate ListingCreatedDate { get; init; }
Property Value
Remarks
A LocalDate, not a DateOnly — CLAUDE.md, "Dates and times". It carries
no zone because the wire does not: the field is yyyy-MM-dd, and attaching a zone here
would invent one. The same holds for the other three dates below.
ListingDate
The date the security was listed, or null.
public LocalDate? ListingDate { get; init; }
Property Value
ListingGroupId
Groups every listing of the same security on one exchange, often in different trading currencies.
public required string ListingGroupId { get; init; }
Property Value
ListingId
Unique listing numerical ID — a sequence number concatenated with ListingGroupId.
public required string ListingId { get; init; }
Property Value
ListingSource
Whether the listing-level data in this record is main or secondary.
public required ListingSource ListingSource { get; init; }
Property Value
Remarks
One of the nine closed enums, and the smallest of them — two codes. See ListingSource.
ListingStatus
The listing's activity status at market level.
public required ListingStatus ListingStatus { get; init; }
Property Value
Remarks
One of the nine closed enums: twelve single-character codes, and an unrecognised one is an error rather than an opaque value. See ListingStatus.
LocalCode
The local code, or null.
public string? LocalCode { get; init; }
Property Value
Remarks
Usually unique at market level, with exceptions. Either an alphabetic string or a number, so it stays a string either way.
LotSize
The lot size — the fewest shares acquirable in one transaction — or null.
public uint? LotSize { get; init; }
Property Value
- uint?
MultiCurrency
true when the market currently carries more than one listing of this security.
public required bool MultiCurrency { get; init; }
Property Value
Naics
The North American Industrial Classification System code, or null.
public string? Naics { get; init; }
Property Value
NasdaqSymbol
The Nasdaq Integrated Platform suffix-convention symbol, or null.
public string? NasdaqSymbol { get; init; }
Property Value
OperatingMic
Market Identifier Code (MIC), as an ISO 10383 string, or null.
public string? OperatingMic { get; init; }
Property Value
Remarks
Optional here and required on AdjustmentFactor. See this type's remarks.
ParValue
The par value amount, or null.
public decimal? ParValue { get; init; }
Property Value
Remarks
decimal where upstream has f64. #53 settled that for all
twelve rate fields across the three reference models and this issue does not re-open it;
Factor carries the measurement, including what
decimal costs at magnitudes no par value reaches.
ParValueCurrency
public Currency ParValueCurrency { get; init; }
Property Value
PrimaryExchange
Exchange code for the primary security, or null.
public string? PrimaryExchange { get; init; }
Property Value
RegisterCountry
The register country, or default when the row carries none.
public Country RegisterCountry { get; init; }
Property Value
SecurityDescription
The security description.
public required string SecurityDescription { get; init; }
Property Value
SecurityId
Security-level numerical ID, linking every listing of the same security together.
public required string SecurityId { get; init; }
Property Value
SecurityType
The security type, or default when the row carries none.
public SecurityType SecurityType { get; init; }
Property Value
Remarks
An open carrier rather than an enum: a code Databento adds to the dictionary is kept rather than rejected. Upstream models 30 of the 64 codes the live dictionary reports, so one of the 34 it does not know fails the whole row there. See SecurityType, and this type's remarks for why the field is optional here and required on AdjustmentFactor.
SegmentMic
The segment Market Identifier Code (MIC), as an ISO 10383 string, or null.
public string? SegmentMic { get; init; }
Property Value
SegmentMicName
The market segment name, or null.
public string? SegmentMicName { get; init; }
Property Value
SharesOutstanding
The number of shares outstanding, or null.
public ulong? SharesOutstanding { get; init; }
Property Value
Remarks
A ulong, upstream's u64. A share count is not a rate, so the
decimal argument does not reach it: the value is an exact integer on the
wire and an exact integer here.
SharesOutstandingDate
The date SharesOutstanding is effective from, or null.
public LocalDate? SharesOutstandingDate { get; init; }
Property Value
Remarks
The fourth LocalDate on this record, and the one outside the listing group — it belongs to the share count above rather than to the listing's lifecycle.
Sic
The Standard Industrial Classification code, or null.
public string? Sic { get; init; }
Property Value
Structure
The security structure, or null.
public string? Structure { get; init; }
Property Value
Symbol
The query input symbol this row matched, or null.
public string? Symbol { get; init; }
Property Value
TradingCurrency
The trading currency, or default when the row carries none.
public Currency TradingCurrency { get; init; }
Property Value
TsCreated
When Databento added the record, in UTC.
public required Instant TsCreated { get; init; }
Property Value
Remarks
Distinct from TsRecord, which moves every time the record changes, and from TsEffective, which is about the security rather than about the record. Neither endpoint filters on this one.
TsEffective
When the record's details take effect, in UTC.
public required Instant TsEffective { get; init; }
Property Value
Remarks
The other field SecurityMasterIndex can filter on, and its default. This is
also the key upstream sorts get_last by after buffering; see
GetLastAsync(SecurityMasterGetLastParams, CancellationToken).
TsRecord
When the record last changed, in UTC.
public required Instant TsRecord { get; init; }
Property Value
Remarks
An Instant, not a DateTimeOffset — CLAUDE.md, "Dates and times".
Upstream reads this through its own deserialize_date_time rather than serde's
default, which is exactly the set of spellings
InstantJsonConverter reads. One of the two
fields SecurityMasterIndex can filter on.
UsCode
The US domestic CUSIP, or null.
public string? UsCode { get; init; }
Property Value
VotePerSec
The number of votes per security, or null.
public decimal? VotePerSec { get; init; }
Property Value
Remarks
Voting
The voting rights carried, or null.
public Voting? Voting { get; init; }
Property Value
Remarks
The one Nullable<T> among this record's coded fields, and the only place a
closed enum meets an Option. The nine closed enums are byte-backed so that
default is an undefined value rather than a member — see
ReferenceWireStrings — which is exactly why absence cannot be spelled as
default here the way it is for the four reference codes above.
It needs no second converter, and that was checked.
System.Text.Json answers a null token for a Nullable<T>
itself, without reaching VotingJsonConverter — so only the empty
string would, and the VOTING group of corporate_actions.list_enums
lists no blank entry. That is the difference from Fraction and
PaymentType, which do get one. See
Voting.