When you attach a single-value property to an entity you must create it as either a label value or a metric value. This is determined by the underlying data type of the property type.
When you create a property type, you specify a data type that can either be:
- A primitive built-in data type such as
string
,number
,boolean
ordate
. - A complex built-in data type such as
rating
orcurrencyAndAmount
. - A custom data type you create yourself.
Each data type has an underlying value type that automatically determines whether property values must be created as label values or metric values.
Creating a property type that mandates label values
The following property type request uses the built-in complex data type rating
(highlighted in red):
curl -X POST "https://<your-domain>.lusid.com/api/api/propertydefinitions"
-H "Authorization: Bearer <your-API-access-token>"
-H "Content-Type: application/json-patch+json"
-d '{
"domain": "Instrument",
"scope": "BBG",
"code": "AnalystRating",
"displayName": "Analyst Rating",
"dataTypeId": {"scope": "system", "code": "rating"},
"lifeTime": "TimeVariant",
"constraintStyle": "Property",
"propertyDescription": "Analyst ratings from Bloomberg for instruments"
}'
In the response, LUSID confirms that property values must be created as label values:
{
"key": "Instrument/BBG/AnalystRating",
"valueType": "String",
"displayName": "Analyst Rating",
"dataTypeId": {
"scope": "system",
"code": "rating"
},
"type": "Label",
"unitSchema": "NoUnits",
"domain": "Instrument",
"scope": "BBG",
"code": "AnalystRating",
"valueRequired": false,
"lifeTime": "TimeVariant",
"constraintStyle": "Property",
"propertyDefinitionType": "ValueProperty",
"propertyDescription": "Analyst ratings from Bloomberg for instruments",
...
}
Creating a property type that mandates metric values
The following property type request uses the built-in complex data type currencyAndAmount
:
curl -X POST "https://<your-domain>.lusid.com/api/api/propertydefinitions"
-H "Authorization: Bearer <your-API-access-token>"
-H "Content-Type: application/json-patch+json"
-d '{
"domain": "Transaction",
"scope": "Ibor",
"code": "Fee",
"displayName": "Broker fee",
"dataTypeId": {"scope": "system", "code": "currencyAndAmount"},
"lifeTime": "Perpetual",
"constraintStyle": "Property",
"propertyDescription": "Fee paid to broker"
}'
In the response, LUSID confirms that property values must be created as metric values, and in addition specifies a unit schema of Iso4217Currency
:
{
"key": "Transaction/Ibor/Fee",
"valueType": "Decimal",
"displayName": "Broker fee",
"dataTypeId": {
"scope": "system",
"code": "currencyAndAmount"
},
"type": "Metric",
"unitSchema": "Iso4217Currency",
"domain": "Transaction",
"scope": "Ibor",
"code": "Fee",
"valueRequired": false,
"lifeTime": "Perpetual",
"constraintStyle": "Property",
"propertyDefinitionType": "ValueProperty",
"propertyDescription": "Fee paid to broker",
...
}
The Iso4217Currency
unit schema mandates that when you attach a property to an entity the metricValue
object must have a unit
that is a valid ISO 4127 country code specified as a string, for example:
"properties": {
"Transaction/Ibor/Fee": {
"key": "Transaction/Ibor/Fee",
"value": {
"metricValue": {
"value": 30,
"unit": "GBP"
}
}
}
}
Note it is possible for a metric value to have a unit schema of Basic
or NoUnits
, in which case there is no need to specify a unit
for a metricValue
object; it can be left empty or omitted:
"properties": [
{
"key": "Instrument/Ibor/ReplacementCost",
"value": {
"metricValue": {
"value": 15,
"unit": ""
}
}
}
]