Instruments
Overview
SDS is the platform's canonical store for all instrument definitions. It accepts instruments from one or more external data providers, enriches them with a platform-assigned identifier, and re-publishes them as editable messages for all downstream consumers.
Supported instrument types:
InstrumentType | Description |
|---|---|
BOND | Fixed Income Bond — zero coupon, fixed, floating, fixed-to-float |
IR_SWAP | Interest Rate Swap — convention-based or explicit pay/receive legs |
IR_FUTURE | Interest Rate Future |
BOND_FUTURE | Bond Future |
Instrument ID
Every instrument stored in SDS is assigned a unique alpha-numeric instrumentId. The format encodes the instrument type and currency:
{typePrefix}{currency}{sequentialNumber}
| Type | Prefix | Example |
|---|---|---|
| Bond | B | BUSD00001, BGBP00042 |
| IR Swap | S | SUSD00001 |
| IR Future / Bond Future | F | FUSD00001 |
instrumentId is immutable once assigned. It serves as the stable internal reference used by all platform services.
Identifiers
SDS resolves instruments by any of the following identifiers. All lookups are case-insensitive.
| Identifier Type | Field | Notes |
|---|---|---|
STATIC_DATA_SERVER | instrumentId | Platform-assigned, e.g. BUSD00001 |
ISIN | isin | ISO 6166 |
CUSIP | cusip | CUSIP 9-character |
FIGI | figi | Bloomberg FIGI |
ALIAS | alias | Managed via the alias table (see Aliases) |
CUSTOM / VENUE | additionalInstrumentIdsEntry | Source-specific or venue identifiers |
When a new instrument arrives, SDS checks all known identifiers before creating a new record. If any identifier matches an existing instrument, it is treated as an update rather than a new addition.
SDS also publishes an InstrumentIdReverseMapping message for every identifier associated with an instrument. This allows consumers to resolve any identifier directly to a canonical instrumentId without querying SDS.
Data Providers
SDS can be configured to source instruments from one or more external data providers via KS_SDS_INSTRUMENT_SOURCES. Each provider is a separate KeySquare application that publishes InstrumentDto messages which SDS subscribes to on a CACHED_AND_LIVE basis.
KS_SDS_INSTRUMENT_SOURCES=[
{
"name": "ION Data Provider",
"topicSource": "ion-data-provider",
"topicGroup": ""
},
{
"name": "ANVIL Data Provider",
"topicSource": "anvil-data-provider",
"topicGroup": ""
}
]
Multiple providers can coexist. An instrument arriving from one provider will not overwrite changes made by a different provider — SDS tracks the originTopicSource of each instrument and only applies updates from its original source.
See data provider for more details on how to setup a custom data provider.
Source Ownership
Each instrument records its origin:
originTopicSource— thetopicSourceof the data provider that first created itoriginTopicId— thetopicIdof the instrument at its origin
If an instrument was created manually (via MessageAdd) with no data provider, the originTopicSource field is blank. The first provider to subsequently publish a matching instrument will become its origin and take ownership.
Instrument Lifecycle
Creating an Instrument
An instrument can enter SDS in two ways:
- From a data provider — the provider publishes an
InstrumentDtoon its topic; SDS subscribes and ingests it automatically - Manually via MessageAdd — a Key UI user or API client sends a
MessageAddwith anInstrumentDtopayload
In both cases, SDS validates the instrument (see Validation), assigns an instrumentId if new, and persists it.
Updating an Instrument
When a source provider publishes an update, SDS computes a field-level diff between the incoming and stored versions. Only changed fields are applied. Fields that have been manually edited (tracked in modifiedFieldsEntry) are protected — a source update will not overwrite a field that a user has explicitly changed.
Edit-restricted fields can additionally be configured via KS_SDS_INSTRUMENT_EDIT_RESTRICTED to prevent even manual edits. By default, tradeRestrictionFlags.restricted and tradeRestrictionFlags.sanctioned are restricted.
Matured Bonds
By default, SDS filters out bonds whose maturityDate is in the past (relative to the current business date for the instrument's currency). This keeps the active instrument set clean.
Set KS_SDS_INCLUDE_MATURED_BONDS=true to publish matured bonds to the platform. This is useful for historical analysis or back-office workflows.
Instrument Profile
Each instrument belongs to exactly one Instrument Profile. Instrument Profile helps manage operational data as a group, rather than needing to update it per individual security. See instrument profiles for more detail.
Validation
SDS enforces the following on every instrument before persisting:
All instruments:
currencymust be set and supported (a business date must exist for that currency)instrumentTypemust beBONDorIR_SWAP
Bonds additionally:
couponTypemust be setcouponFrequencymust be set (unlesscouponTypeisZERO)maturityTypemust be setmaturityDatemust be set (unlessmaturityTypeisPERPETUAL)
Swaps additionally:
- Either
endTenorormaturityDatemust be set - Either
swapConventionmust be set, or bothpayLegandreceiveLegmust be provided
RPC Functions
Static Data Servers exposes a set of remote procedure calls (RPCs) to provide request/response functionality to both key-ui and api users. Developers can test these functions by navigating to the Tools -> RPC section in the user interface.
Search
The SearchInstrument RPC returns descriptors for instruments that match the requested criteria. Searches can filter by:
- Free text — matches against
descriptionand all identifier fields - Currency — one or more currency filters
- Instrument type — one or more type filters
Results are capped at 1,000 entries.
External Search
If no local results are found and searchExternalSources=true is set in the request, SDS forwards the search request to all configured data providers in parallel and aggregates their responses. Each external result is tagged with its source.
Get Instrument
The GetInstrument RPC looks up an instrument by any identifier. If the instrument is not found locally and addToWishListIfMissing=true, SDS adds it to the wish list (see Wish List) and responds with ok=false.
Wish List
The wish list tracks instrument identifiers that have been requested but not yet found locally. It is used to trigger data providers to push missing instruments.
When a provider subsequently publishes an instrument whose identifiers match a wish list entry, SDS removes that entry from the wish list automatically — the instrument is now available locally.
Wish list entries can be added:
- Automatically on a
GetInstrumentcall withaddToWishListIfMissing=true - Explicitly via the
AddInstrumentToWishListRPC
SDS publishes an InstrumentWishDto message for each wish list entry, allowing providers to subscribe and fulfil requests proactively.
Aliases
An alias is a named shortcut that resolves to a canonical instrumentId. Aliases are stored in the InstrumentAlias table and are case-insensitive.
To set an alias:
- Use the
SetInstrumentAliasRPC with an alias string and one or more candidate identifiers - SDS resolves the identifiers to a known
instrumentIdand persists the mapping - Going forward, any lookup using that alias string will resolve to the canonical instrument
Aliases are published as separate InstrumentAliasDto messages with their own topic.
The alias field on InstrumentDto cannot be modified directly. It is managed by static data server
Benchmark Instrument
The SetBenchmarkInstrument RPC links one instrument as the benchmark for another by populating the benchmarkInstrumentId field. This is used by pricing services to identify the on-the-run benchmark for spread calculations.
Reset Operations
Reset Field
The ResetInstrumentField RPC resets a single editable field on an instrument back to its source-provided value. This removes the field from modifiedFieldsEntry, allowing subsequent source updates to overwrite it again.
Reset Origin
The ResetInstrumentOrigin RPC clears the originTopicSource and originTopicId from an instrument. This is used when you want to re-link an instrument to a new data provider — the next provider to publish a matching instrument will take ownership.