Table of Contents

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

string

BbgCompTicker

The Bloomberg composite ticker, or null.

public string? BbgCompTicker { get; init; }

Property Value

string

Cfi

The Classification of Financial Instruments, as an ISO 10962 string, or null.

public string? Cfi { get; init; }

Property Value

string

Cic

The Complementary Identification Code, or null.

public string? Cic { get; init; }

Property Value

string

Cik

The Central Index Key, or null.

public string? Cik { get; init; }

Property Value

string

DelistingDate

The date the security was delisted, or null.

public LocalDate? DelistingDate { get; init; }

Property Value

LocalDate?

Exchange

Exchange code for this listing.

public required string Exchange { get; init; }

Property Value

string

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

string

FigiTicker

The Bloomberg exchange-level ticker, or null.

public string? FigiTicker { get; init; }

Property Value

string

Fisn

The Financial Instrument Short Name, or null.

public string? Fisn { get; init; }

Property Value

string

Gics

The Global Industry Standard Classification, or null.

public string? Gics { get; init; }

Property Value

string

IncorporationCountry

The issuer's country of incorporation.

public required Country IncorporationCountry { get; init; }

Property Value

Country

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

string

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

string

IssuerName

The issuer name.

public required string IssuerName { get; init; }

Property Value

string

Lei

The Legal Entity Identifier, or null.

public string? Lei { get; init; }

Property Value

string

ListingCountry

The listing country, or default when the row carries none.

public Country ListingCountry { get; init; }

Property Value

Country

ListingCreatedDate

The date the listing was created.

public required LocalDate ListingCreatedDate { get; init; }

Property Value

LocalDate

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

LocalDate?

ListingGroupId

Groups every listing of the same security on one exchange, often in different trading currencies.

public required string ListingGroupId { get; init; }

Property Value

string

ListingId

Unique listing numerical ID — a sequence number concatenated with ListingGroupId.

public required string ListingId { get; init; }

Property Value

string

ListingSource

Whether the listing-level data in this record is main or secondary.

public required ListingSource ListingSource { get; init; }

Property Value

ListingSource

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

ListingStatus

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

string

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

bool

Naics

The North American Industrial Classification System code, or null.

public string? Naics { get; init; }

Property Value

string

NasdaqSymbol

The Nasdaq Integrated Platform suffix-convention symbol, or null.

public string? NasdaqSymbol { get; init; }

Property Value

string

OperatingMic

Market Identifier Code (MIC), as an ISO 10383 string, or null.

public string? OperatingMic { get; init; }

Property Value

string

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

decimal?

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

The currency ParValue is denominated in, or default when the row carries none.

public Currency ParValueCurrency { get; init; }

Property Value

Currency

PrimaryExchange

Exchange code for the primary security, or null.

public string? PrimaryExchange { get; init; }

Property Value

string

RegisterCountry

The register country, or default when the row carries none.

public Country RegisterCountry { get; init; }

Property Value

Country

SecurityDescription

The security description.

public required string SecurityDescription { get; init; }

Property Value

string

SecurityId

Security-level numerical ID, linking every listing of the same security together.

public required string SecurityId { get; init; }

Property Value

string

SecurityType

The security type, or default when the row carries none.

public SecurityType SecurityType { get; init; }

Property Value

SecurityType

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

string

SegmentMicName

The market segment name, or null.

public string? SegmentMicName { get; init; }

Property Value

string

SharesOutstanding

The number of shares outstanding, or null.

public ulong? SharesOutstanding { get; init; }

Property Value

ulong?

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

LocalDate?

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

string

Structure

The security structure, or null.

public string? Structure { get; init; }

Property Value

string

Symbol

The query input symbol this row matched, or null.

public string? Symbol { get; init; }

Property Value

string

TradingCurrency

The trading currency, or default when the row carries none.

public Currency TradingCurrency { get; init; }

Property Value

Currency

TsCreated

When Databento added the record, in UTC.

public required Instant TsCreated { get; init; }

Property Value

Instant

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

Instant

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

Instant

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

string

VotePerSec

The number of votes per security, or null.

public decimal? VotePerSec { get; init; }

Property Value

decimal?

Remarks

decimal for the reason ParValue gives.

Voting

The voting rights carried, or null.

public Voting? Voting { get; init; }

Property Value

Voting?

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.