--- title: "Using Bloomberg DLPS Luminesce providers to import data" slug: "using-bloomberg-dlps-luminesce-providers-to-import-data" updated: 2026-05-11T10:39:14Z published: 2026-05-11T10:39:14Z canonical: "support.lusid.com/using-bloomberg-dlps-luminesce-providers-to-import-data" --- > ## Documentation Index > Fetch the complete documentation index at: https://support.lusid.com/llms.txt > Use this file to discover all available pages before exploring further. # Using Bloomberg DLPS Luminesce providers to import data LUSID offers the following Luminesce providers that enable you to build bespoke Bloomberg DLPS data import flows: - `Bloomberg.DataLicensePerSecurity.Request.BloombergValuation` - `Bloomberg.DataLicensePerSecurity.Request.CorporateActions` - `Bloomberg.DataLicensePerSecurity.Request.CurrentData` - `Bloomberg.DataLicensePerSecurity.Request.EntityData` - `Bloomberg.DataLicensePerSecurity.Request.HistoricalData` - `Bloomberg.DataLicensePerSecurity.Request.PricingSnapshot` - `Bloomberg.DataLicensePerSecurity.Request.TickHistory` Once you trigger a request to Bloomberg using the above providers, you can use the following providers to retrieve the data from the request in LUSID: - `Bloomberg.DataLicensePerSecurity.DownloadableResponse` - `Bloomberg.DataLicensePerSecurity.DownloadableResponse.Data` Additionally, you can use the following supporting providers for instrument creation: - `Bloomberg.Instrument.Mapping.RequiredFields`: Retrieves the set of Bloomberg fields that LUSID requires to create a particular instrument type using `Bloomberg.Instrument.Mapping`. - `Bloomberg.Instrument.Mapping`: Maps instrument data retrieved from Bloomberg to a LUSID instrument definition; you can then pass this definition into [Lusid.Instrument.Writer](/v1/docs/lusidinstrumentwriter) to create the instrument in LUSID. - `Bloomberg.InstrumentEvent.Mapping`: Maps corporate action data retrieved from Bloomberg to a LUSID [instrument event](/v1/docs/what-is-an-event-in-lusid) definition. LUSID currently supports the following Bloomberg **Action Event Types**: - `DVD_CASH` - `DVD_STOCK` - `SPIN` - `STOCK_SPLT` [See how to use the **Integrations** dashboard to enrich existing instruments.](/v1/docs/bloomberg-data-license-per-security) ## Setting up credentials for Luminesce data providers Before getting started with the Luminesce data providers, you must supply your Bloomberg credentials in LUSID. ### Step 1: Obtain Bloomberg application credentials If you haven't previously done so, [follow these steps to obtain your Bloomberg application **client_id** and **client_secret**](/v1/docs/bloomberg-data-license-per-security#step-1-obtain-bloomberg-application-credentials). ### Step 2: Add your credentials to the Configuration Store 1. Sign in to LUSID and navigate to **System Settings > Configuration Store**. 2. Select the **Shared keys** tab. 3. Locate and **Edit** the configuration set with scope `Luminesce-Provider` and code `Bloomberg`. ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-1MPITHLA.png?sv=2026-02-06&spr=https&st=2026-11-09T07%3A16%3A14Z&se=2026-11-09T08%3A16%3A14Z&sr=c&sp=r&sig=VJYPW7tt2zLdyrgC4dXEwtPqWjrIDFt4lToJBcUuLMI%3D) 4. Provide your **ClientId** and **ClientSecret** values from [step 1](/v1/docs/bloomberg-data-license-per-security#step-1-obtain-bloomberg-application-credentials). ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/image-WDWMM0NQ.png?sv=2026-02-06&spr=https&st=2026-11-09T07%3A16%3A14Z&se=2026-11-09T08%3A16%3A14Z&sr=c&sp=r&sig=VJYPW7tt2zLdyrgC4dXEwtPqWjrIDFt4lToJBcUuLMI%3D) 5. Click **Save.** You can check your credentials are correct by navigating to **Data Virtualisation > Query Editor** and [sending the following query](/v1/docs/what-tools-are-available-to-write-luminesce-queries): ```sql @@requestId = select 'Test' || substr(generate_hash('SHA1', datetime('now')), 0, 10); @instruments = select 'ISIN' as IdentifierType,'INVALID_ISIN' as IdentifierValue; select * from Bloomberg.DataLicensePerSecurity.Request.CurrentData where Universe = @instruments  and FieldList = 'NAME'  and Identifier = @@requestId  and Title = 'Test Connection'  and SubmitImmediately = true  and NotificationWaitSecs = 50; ``` You should receive a response containing a `RequestId` and `ErrorCode` of `0`; this confirms your connection is working. ## Running the integration You can use Luminesce to [build custom queries](/v1/docs/understanding-the-luminesce-sql-query-syntax) and bespoke data imports using the relevant data providers. Each custom query should follow this basic outline: 1. Use the `Bloomberg.DataLicensePerSecurity.Request.<x>` providers to request data from Bloomberg. 2. Use `Bloomberg.DataLicensePerSecurity.DownloadableResponse` to retrieve the Bloomberg `RequestId` and `Key`. 3. Once Bloomberg produces your requested data, use `Bloomberg.DataLicensePerSecurity.DownloadableResponse.Data` to retrieve the data for onward processing in LUSID. Note we recommend scheduling a separate query for this step to guarantee Bloomberg has had time to process your request; see [example A](/v1/docs/using-bloomberg-dlps-luminesce-providers-to-import-data#example-a-daily-price-refresh). ### Example A: Daily price refresh For example, to refresh pricing data for some instruments using the `Bloomberg.DataLicensePerSecurity.Request.HistoricalData` provider: #### Step 1: Request data from Bloomberg The following example sets up a daily recurring request for the `PX_MID` and `PX_LAST` fields for some specified instrument holdings: ```sql -- Define the instruments you want to request data for @instruments_table = select LusidInstrumentId, Scope as InstrumentScope, 'ISIN' as IdentifierType, Isin as IdentifierValue from Lusid.Instrument where scope = 'Finbourne-Examples'  and LusidInstrumentId = 'LUID_00003DJO'; @portfolio_table = select i.LusidInstrumentId, i.InstrumentScope, i.IdentifierType, i.IdentifierValue from @instruments_table i inner join Lusid.Portfolio.Holding h  on h.LusidInstrumentId = i.LusidInstrumentId    and h.InstrumentScope = i.InstrumentScope where h.PortfolioScope = 'Finbourne-Examples-Int'  and h.PortfolioCode = 'EU'; -- Specify a friendly name and unique RequestId for the scheduled request @@requestName = select 'RefreshPrice';   @@requestId = select 'DailyPriceRefresh123'; -- Send the request to Bloomberg, specifying your recurring schedule select c.* from Bloomberg.DataLicensePerSecurity.Request.HistoricalData c where c.Universe = @portfolio_table  and c.FieldList = 'PX_MID,PX_LAST'  and c.Identifier = @@requestId  and c.Name = @@requestName  and c.Title = 'Refresh Prices'  and c.StartDate = '2025-09-18'  and c.StartTime = '16:00:00'  and c.Frequency = 'Daily' ``` Note the following: - You should specify a unique `RequestId` and keep a note of the value; you can use this to update or delete your recurring scheduled request. - You can define how often the schedule recurs by setting `Frequency` to one of the following: - `once` - `daily` - `weekday` - `weekend` - `weekly` - `monthly` - Specify a `StartDate` and `StartTime` to define when the schedule should come into effect. - For `FieldList`, you should specify a comma-separated list of values corresponding to the **Mnemonic** values in Bloomberg. #### Step 2: Schedule a query to retrieve the data from Bloomberg Once you've set up your recurring request schedule, create a second query that retrieves the data requested from Bloomberg. > [!NOTE] > Note > > You should schedule this query to run at least 15 minutes after your scheduled request ([step 1](/v1/docs/using-bloomberg-dlps-luminesce-providers-to-import-data#step-1-request-some-data-from-bloomberg)) to allow time for [request batching](/v1/docs/bloomberg-data-license-per-security#appendix-usage-and-cost-management) in Bloomberg. You can then choose to save the data to Drive with [Drive.SaveAs](/v1/docs/drivesaveas), or immediately process the data using the relevant [LUSID provider](/v1/docs/readwrite-lusid-investment-data-lusid). The following example upserts the pricing data to the LUSID Quote Store using [Lusid.Instrument.Quote.Writer](/v1/docs/lusidinstrumentquotewriter): ```sql @@requestId = select 'DailyPriceRefresh123'; @@today = select Date('now'); @@responseKey = select Key from Bloomberg.DataLicensePerSecurity.DownloadableResponse where RequestId = @@requestId  and SnapshotStartTime > @@today limit 1; -- parse JSON file returned by BBG @bbgData = use Bloomberg.DataLicensePerSecurity.DownloadableResponse.Data with @@requestId, @@responseKey --RequestId={@@requestId} --ResponseKey={@@responseKey} enduse; -- Transform Bloomberg data into LUSID quote format @quotesToWrite = select  'Finbourne-Examples' as QuoteScope,  'Bloomberg' as Provider,  IDENTIFIER as InstrumentId,  'Isin' as IdentifierType,  'Price' as QuoteType,  'mid' as Field,  PX_MID as Value,  'EUR' as Unit,  "DATE" as QuoteEffectiveAt,  'Upsert' as WriteAction from @bbgData where PX_MID is not null union all select  'Finbourne-Examples' as QuoteScope,  'Bloomberg' as Provider,  IDENTIFIER as InstrumentId,  'Isin' as IdentifierType,  'Price' as QuoteType,  'last' as Field,  PX_LAST as Value,  'EUR' as Unit,  "DATE" as QuoteEffectiveAt,  'Upsert' as WriteAction from @bbgData where PX_LAST is not null; -- Upload the quotes to the LUSID Quote Store select * from Lusid.Instrument.Quote.Writer where ToWrite = @quotesToWrite; ``` #### Update the instruments in a Bloomberg scheduled request ```sql @instruments_table = select LusidInstrumentId,  Scope as InstrumentScope,  'ISIN' as IdentifierType,  Isin as IdentifierValue from Lusid.Instrument where Scope = 'Finbourne-Examples'  and LusidInstrumentId = 'LUID_00003DJO'; @portfolio_table = select i.LusidInstrumentId,  i.InstrumentScope,  i.IdentifierType,  i.IdentifierValue from @instruments_table i inner join Lusid.Portfolio.Holding h  on h.LusidInstrumentId = i.LusidInstrumentId    and h.InstrumentScope = i.InstrumentScope where h.PortfolioScope = 'Finbourne-Examples-Int'  and h.PortfolioCode = 'EU'; @@requestId = select 'DailyPriceRefresh'; select * from Bloomberg.DataLicensePerSecurity.Request.HistoricalData where Identifier = @@requestId  and Universe = @PortfolioTable  and WriteAction = 'Update' ``` #### Delete a Bloomberg scheduled request ```sql @@requestName = select 'RefreshPrice';   @@requestId = select 'DailyPriceRefresh'; select * from Bloomberg.DataLicensePerSecurity.Request.HistoricalData where Identifier = @@requestId  and WriteAction = 'Delete' ``` ### Example B: Instrument creation To create LUSID instruments using the `Bloomberg.DataLicensePerSecurity.Request.CurrentData` provider: 1. Use `Bloomberg.Instrument.Mapping.RequiredFields` to retrieve the list of Bloomberg fields you'll need to request for your desired instrument type. > [!NOTE] > Note > > You must specify a Bloomberg `ProviderVersion` for both the `Bloomberg.Instrument.Mapping.RequiredFields` and `Bloomberg.Instrument.Mapping` providers. If you're unsure of which version to use, [contact support](/v1/docs/how-do-i-use-the-support-centre). 2. Send your request to Bloomberg, passing in the list of fields. > [!NOTE] > Note > > The example below specifies `cd.SubmitImmediately = true and cd.NotificationWaitSecs = 200` to request data from Bloomberg immediately as a one-time request, rather than waiting for batch processing. [Read about Bloomberg embargos.](https://developer.blpprofessional.com/pages/products/dl/doc/2454#embargos) > > If you want to create instruments on a recurring schedule, set up this request on a schedule to help manage costs, [as shown in example A](/v1/docs/using-bloomberg-dlps-luminesce-providers-to-import-data#example-daily-price-refresh). [Read more on cost management.](/v1/docs/bloomberg-data-license-per-security#appendix-usage-and-cost-management) 3. Retrieve the data from Bloomberg and map it to the corresponding fields in LUSID using `Bloomberg.Instrument.Mapping`. You can override or set particular behaviours using the `Configuration` and `MappingParameters` parameters. > [!NOTE] > Configuring instrument mapping behaviour > > `Bloomberg.Instrument.Mapping` has two optional parameters that allow you to override or customise certain mapping behaviours. > > **Configuration** > > A table of key-value pairs. The following keys are currently available: > > | Key | Value | Description | > | --- | --- | --- | > | `AddIsinToCloFixing` | `True` or `False` | Modifies the handling of fixing references for CLO instruments. When set to `True`, LUSID appends the CLO's ISIN to the index convention `fixingReference`, and valuations of the CLO will expect a `fixingReference_ISIN` rate in the quote store. The rate is calculated from Bloomberg as follows: $\text{CPN} - \frac{\text{FLT\_SPREAD}}{100.00}$ | > | `TimeZoneOverride` | A valid IANA timezone string, for example `UTC`, `GMT`, `America/New_York` | Overrides the instrument's default timezone | > > **MappingParameters** > > An optional table parameter that lets you customise price scale factor behaviour by instrument type and mapping rule. Each row must include `InstrumentType` and at least one of `PriceScaleFactorOverride` or `PriceScaleFactorDefault`. > > | Column | Value | Description | > | --- | --- | --- | > | `InstrumentType` | A LUSID instrument type, for example `SimpleInstrument`, `ComplexBond` | The instrument type to apply the scale factor rule to. | > | `RuleType` | The name of the mapping rule to limit the price scale factor changes to | LUSID’s mapping provider attempts rules in order; the first matching rule determines the instrument type. For instrument types where multiple rules can match (for example, `ComplexBond`), you can use this column to limit a price scale factor override/default to a specific mapping rule. Set to `null` to apply the changes to all matching rules for the instrument type. | > | `PriceScaleFactorOverride` | Decimal | Overrides any other price scale factor value. | > | `PriceScaleFactorDefault` | Decimal | Used as a fallback when no other price scale factor is available. | 4. Create the instruments in LUSID using `Lusid.Instrument.Writer`. The following example creates a cash dividend instrument event in LUSID: ```sql @@requestId = select 'InstrumentCreation1'; -- Note the requestID must be unique; increment the value in subsequent requests. @instruments_to_create = select 'ISIN' as IdentifierType,'US91282CGQ87' as IdentifierValue; -- 1. Retrieve the list of Bloomberg fields you'll need to request for your desired instrument type: @@fields = select AllRequiredFieldsForInstrumentType from Bloomberg.Instrument.Mapping.RequiredFields where NormaliseFields = false  and ProviderVersion = 2  and InstrumentType = 'Bond' limit 1; -- 2. Send your request to Bloomberg, passing in the list of fields: @@responseKey = select dr.[Key] from Bloomberg.DataLicensePerSecurity.Request.CurrentData cd join Bloomberg.DataLicensePerSecurity.DownloadableResponse dr  on dr.RequestId = cd.RequestId where cd.Universe = @instruments_to_create  and cd.FieldList = @@fields  and cd.Identifier = @@requestId  and cd.Title = 'Bond instrument creation'  and cd.SubmitImmediately = true  and cd.NotificationWaitSecs = 200; -- 3. Retrieve the data from Bloomberg and map it to the corresponding LUSID fields: @x = use Bloomberg.DataLicensePerSecurity.DownloadableResponse.Data with @@requestId, @@responseKey --RequestId={@@requestId} --ResponseKey={@@responseKey} enduse; @priceScaleFactorOverrides = select 'Bond' as InstrumentType,  'TreasuryBillRule' as RuleType,  101.0 as PriceScaleFactorOverride; @configurationKeyValues = select 'TimeZoneOverride' as Key, 'America/Chicago' as Value  union all  select 'AddIsinToCloFixing' as Key, 'true' as Value; @lusidDefs = select * from Bloomberg.Instrument.Mapping where ToMap = @x  and ProviderVersion = 2,  and MappingParameters = @priceScaleFactorOverrides,  and Configuration = @configurationKeyValues; -- 4. Create the instruments in LUSID. @@scope = select 'Finbourne-Examples-Ints'; @instruments = select @@scope as Scope,  'BbgDLPS' || Identifier as ClientInternal,  Identifier as Isin,  'Bond: ' || Identifier as DisplayName,  DefinitionJson,  SettlementCycleBusinessDayOffset,  SettlementCycleCalendars from @lusidDefs; select * from Lusid.Instrument.Writer where ToWrite = @instruments; ``` ### Example C: Instrument events To map instrument events using the `Bloomberg.InstrumentEvent.Mapping` provider: 1. Define the instruments you want to retrieve corporate actions data for. 2. Send the request to Bloomberg using `Bloomberg.DataLicensePerSecurity.Request.CorporateActions`, passing in a list of Bloomberg `ActionsFilterActionMnemonics` (Bloomberg fields) data points. > [!NOTE] > Note > > The example below specifies `c.SubmitImmediately = true and c.NotificationWaitSecs = 200` to request data from Bloomberg immediately as a one-time request, rather than waiting for batch processing. > > If you want to create instruments on a recurring schedule, set up this request on a schedule to help manage costs, [as shown in example A](/v1/docs/using-bloomberg-dlps-luminesce-providers-to-import-data#example-daily-price-refresh). [Read more on cost management.](/v1/docs/bloomberg-data-license-per-security#appendix-usage-and-cost-management) 3. Retrieve the data from Bloomberg and map the responses using `Bloomberg.InstrumentEvent.Mapping`. 4. Create the instrument events in LUSID using `Lusid.InstrumentEvent.<x>.Writer`. The following example maps instrument events from Bloomberg corporate actions data: ```sql -- 1. Define the instruments you want to request data for: @instruments_table = select LusidInstrumentId,  Scope as InstrumentScope,  'ISIN' as IdentifierType,  Isin as IdentifierValue from Lusid.Instrument where Scope = 'Finbourne-Examples'  and LusidInstrumentId = 'LUID_00003DX1'; @portfolio_table = select i.LusidInstrumentId,  i.InstrumentScope,  i.IdentifierType,  i.IdentifierValue from @instruments_table i inner join Lusid.Portfolio.Holding h  on h.LusidInstrumentId = i.LusidInstrumentId    and h.InstrumentScope = i.InstrumentScope where h.PortfolioScope = 'Finbourne-Examples'  and h.PortfolioCode = 'InstrumentEvents'; @@requestId = select 'CorporateActions1'; -- 2. Send the request to Bloomberg, passing in a string list of fields (Mnemonics): @@responseKey = select dr.[Key] from Bloomberg.DataLicensePerSecurity.Request.CorporateActions c join Bloomberg.DataLicensePerSecurity.DownloadableResponse dr   on dr.RequestId = c.RequestId where c.Universe = @portfolio_table  and c.ActionsFilterActionMnemonics = 'DVD_CASH'  and c.SubmitImmediately = True  and c.NotificationWaitSecs = 200  and c.Identifier = @@requestId  and c.Title = 'Corporate Actions 1'  and RuntimeOptionsDateRangeStartDate = DateTime('now', '-5 day')  and RuntimeOptionsDateRangeEndDate = DateTime('now')  and RuntimeOptionsActionsDate = 'Entry'; -- Define corporate action source if you haven't already done so: @@CASourceScope = select 'Finbourne-Examples'; @@CASourceCode = select 'CASH_DVD'; @corporateActionSource = select @@CASourceScope as CorporateActionSourceScope,  @@CASourceCode as CorporateActionSourceCode,  'InstrumentEventMapping' as DisplayName,  'Insert' as WriteAction; @writeSource = select * from Lusid.CorporateAction.Source.Writer WAIT where ToWrite = @corporateActionSource; -- 3. Retrieve the data from Bloomberg and map it to the corresponding LUSID fields: @bbgData = use Bloomberg.DataLicensePerSecurity.DownloadableResponse.Data with @@requestId, @@responseKey --RequestId={@@requestId} --ResponseKey={@@responseKey} enduse; @mappedInstrEvents = select * from Bloomberg.InstrumentEvent.Mapping WAIT where ToMap = @bbgData; -- 4. Create the instrument events in LUSID: @instrEventsToWrite = select @@CASourceScope as CorporateActionSourceScope,  @@CASourceCode as CorporateActionSourceCode,  REPLACE(Identifier, ' ', '_') || @@requestId as InstrumentEventId,  SequenceNumber as SequenceNumber,  ParticipationType as ParticipationType,  DefinitionJson as DefinitionJson from @mappedInstrEvents; @writeInstrEvents = select * from Lusid.InstrumentEvent.CashDividendEvent.Writer WAIT where ToWrite = @instrEventsToWrite; select * from Lusid.InstrumentEvent WAIT where CorporateActionSourceScope = @@CASourceScope  and CorporateActionSourceCode = @@CASourceCode; ``` --- ### Troubleshooting connection issues #### `unauthorized-client` error The following error indicates you are missing an IP address from your whitelisted IPs within the Bloomberg Enterprise Console LUSID application you created in [step 1](/v1/docs/bloomberg-data-license-per-security#step-1-obtain-bloomberg-application-credentials): ```json Failed when calling Bloomberg HAPI: ... Errored with : Unauthorized Details : {"errors":[{...                      "errorCode":"unauthorized-client",                      "status":401,                      "detail":"Invalid IP, IP 123.12.123.12 not whitelisted"}],                      "error":"unauthorized_client"} ``` #### `No config found` error ```plaintext Query Execution failed. 'No config found in the Configuration Store under 'Bloomberg'' ``` If you experience this error, verify that you've entered your Bloomberg credentials in the [correct configuration set](/v1/docs/using-bloomberg-dlps-luminesce-providers-to-import-data#step-2-add-your-credentials-to-the-configuration-store): - **Scope:** `Luminesce-Provider` - **Code:** `Bloomberg` #### `ClientId`/`ClientSecret has not been set` error ```plaintext Invalid configuration. ClientId has not been set. ``` ```plaintext Invalid configuration. ClientSecret has not been set. ``` If you experience this error, check that you've entered your Bloomberg credentials correctly in the [Configuration Store](/v1/docs/using-bloomberg-dlps-luminesce-providers-to-import-data#step-2-add-your-credentials-to-the-configuration-store). #### `403 (Forbidden)` **error** ```plaintext Response status code does not indicate success: 403 (Forbidden). ``` If you experience this error, check the values you've entered for your Bloomberg credentials in the [Configuration Store](/v1/docs/using-bloomberg-dlps-luminesce-providers-to-import-data#step-2-add-your-credentials-to-the-configuration-store) are correct.