Report Configuration API
One of the basic concepts in the BMC Public API is the concept of scheduling Benchmark reports. This API provides the ability to create, edit, list, and delete a report configuration.
What is a Report Configuration
The BMC Public API (v1) is a data vendoring API. It does not exercise real-time report generation. It allows users to create Benchmark reports using defined filters and parameters and then schedule those reports to be run by an asynchronous listener process
Message Structures
Request Example
The basic structure of Report Configuration Request is as follows:
{
"Parameters" : {
"BenchmarkId" : "ab79ec4c-d341-41a2-a104-9f7128639b72",
"ReportType" : "<see ReportTypes enum>",
"DataMode" : "2019Q2",
"ModeType" : "Preliminary",
"VintageYearBy": "FCF",
"Scheduling" : {
"Frequency" : "Daily"
},
"AttributeFilter" : [
"IRRPooled",
"IRREqualWeighted",
"IRRAverage",
"IRRMax",
"IRR95Percentile",
"IRRQuartileUpper",
"IRRQuartileLower",
"IRR5Percentile",
"IRRMin"
]
}
}
Note : report type specific parameters (see below)
The request type is quite simple in that it supports a basic set of constructs and then permits a set of report attributes based on the ReportType.
| Parameter | DataType | Nullable | Description |
|---|---|---|---|
| BenchmarkId | uuidv4 | false | this is the ID of the predefined BMC benchmark |
| ReportType | string | false | this is one of the enumerated report types allowed (see below) |
| VintageYearBy | string | false | Defines whether "FCF" or "LID". |
| Scheduling.Frequency | string | false | Defines the scheduling model.Must be "One-Time" which tells the api to queue the report to execute asap (async) , "Daily" which will run the report every day during daily batch process, or "Quarterly" which will run based on BMC quarter data availability |
| ModeType | string | false | Defines whether "Preliminary" or "Published" data is requested in the calculations."Published" modetype should not be allowed for "Daily" |
| AttributeFilter | array of strings | true | See Note Below |
You can think of AttributeFilter as the SQL SELECT clause describing the attributes you want the report to return. The value can be any valid attribute in the response message based on ReportType. The validation logic will compare the attribute defined in request against those which are available in profile. If specified attribute is not in your profile, you will receive a HTTP 403 - Forbidden error in response. If you leave the attribute null or an empty array, it will return all the attributes to which you have access based on your profile.
Report Types
There are total of five distinct report types supported by the Public API, each with a distinct set of parameters
- Fund Since Inception (FUND_SINCE_INCEPTION)
- Fund Since Inception mPME (FUND_SINCE_INCEPTION_MPME)
- Fund Horizon (FUND_HORIZON)
- Fund Horizon mPME (FUND_HORIZON_MPME)
- Investment Since Inception (INVESTMENT_SINCE_INCEPTION)
Request Type Parameters
For POST or PUT methods, the following tables provide the available Parameters allowed per Report Type. These criteria will allow the user to filter the results they receive when the scheduled report runs.
Since Inception Report
Acceptable parameters for the Since Inception Report
| Parameter | Data Type | Optional | Default | Notes |
|---|---|---|---|---|
| DataMode | string | false | Most current quarter | yyyyQ#, Old Quarters allowed only for One-Time scheduling,Future quarters not allowed |
| AsOfDate | date | true | Always same as DataMode date | yyyy-mm-dd |
| Universe | string | true | 2 | enumerated, 3 - ILPA , 4 - Impact Investing, 2 - C|A Benchmark, 1 - All Funds |
| Currency | string | true | USD | ISO Curr |
| VintageYearBy | string | false | LID | LID - Legal Inception Date,FCF-First Cash Flow |
| VintageYears | string | true | None | Shows all vintage years if this is not used |
| ReportedBy | number | true | None | Only 11 (Vintage Year) is allowed |
| Internal | boolean | true | false | Should always be false |
| FreeText | string | true | None | Only for S&P. FreeText cannot be null or empty and less than 50 charecters. FreeText can only have A-z a-z 0-9 !@#$^&()[]{}'+ |
Since Inception mPME Report
Acceptable parameters for the Since Inception mPME Report
| Parameter | Data Type | Optional | Default | Notes |
|---|---|---|---|---|
| DataMode | string | false | Most current quarter | yyyyQ#, Old Quarters allowed only for One-Time scheduling,Future quarters not allowed |
| AsOfDate | date | true | Always same as DataMode date | yyyy-mm-dd |
| Universe | string | true | 2 | enumerated, 3 - ILPA , 4 - Impact Investing, 2 - C|A Benchmark, 1 - All Funds |
| Currency | string | true | USD | ISO Curr |
| VintageYearBy | string | false | LID | LID - Legal Inception Date,FCF-First Cash Flow |
| VintageYears | string | true | None | Shows all vintage years if this is not used |
| ReportedBy | number | true | None | Only 11 (Vintage Year) is allowed |
| Index | number | true | "1"(S&P 500), "18781"(CON NASDAQ PR/TR), "106"(R2000), "126"(R3000) | enumerated |
| Internal | boolean | true | false | Should always be false |
| FreeText | string | true | None | Only for S&P. FreeText cannot be null or empty and less than 50 charecters. FreeText can only have A-z a-z 0-9 !@#$^&()[]{}'+ |
Horizon Report
Acceptable parameters for the Horizon Report
| Parameter | Data Type | Optional | Default | Notes |
|---|---|---|---|---|
| DataMode | string | false | Most recent quarter | yyyyQ#, Old Quarters allowed only for One-Time scheduling,Future quarters not allowed |
| StartDate | date | true | yyyy-mm-dd | |
| EndDate | date | true | yyyy-mm-dd | |
| Universe | string | true | 2 | enumerated, 3 - ILPA , 4 - Impact Investing, 2 - C|A Benchmark, 1 - All Funds |
| Currency | string | true | USD | ISO Curr |
| VintageYearBy | string | false | LID | LID - Legal Inception Date,FCF-First Cash Flow |
| VintageYears | string | true | None | Shows all vintage years if this is not used |
| ReportedBy | number | true | None | Only 11 (Vintage Year) is allowed |
| Internal | boolean | true | false | Should always be false |
| FreeText | string | true | None | Only for S&P. FreeText cannot be null or empty and less than 50 charecters. FreeText can only have A-z a-z 0-9 !@#$^&()[]{}'+ |
Horizon mPME Report
Acceptable parameters for the Horizon mPME Report
| Parameter | Data Type | Optional | Default | Notes |
|---|---|---|---|---|
| DataMode | string | false | Most current quarter | yyyyQ#, Old Quarters allowed only for One-Time scheduling,Future quarters not allowed |
| StartDate | date | true | yyyy-mm-dd | |
| EndDate | date | true | yyyy-mm-dd | |
| Universe | string | true | 2 | enumerated, 3 - ILPA , 4 - Impact Investing, 2 - C|A Benchmark, 1 - All Funds |
| Currency | string | true | USD | ISO Curr |
| VintageYearBy | string | false | LID | LID - Legal Inception Date,FCF-First Cash Flow |
| VintageYears | string | true | None | Shows all vintage years if this is not used |
| Index | number | true | "1"(S&P 500), "18781"(CON NASDAQ PR/TR), "106"(R2000), "126"(R3000) | enumerated |
| Internal | boolean | true | false | Should always be false |
| FreeText | string | true | None | Only for S&P. FreeText cannot be null or empty and less than 50 charecters. FreeText can only have A-z a-z 0-9 !@#$^&()[]{}'+ |
Investment Since Inception
Acceptable parameters for the Investment Since Inception
| Parameter | Data Type | Optional | Default | Notes |
|---|---|---|---|---|
| DataMode | string | false | Most current quarter | yyyyQ#, Old Quarters allowed only for One-Time scheduling,Future quarters not allowed |
| AsOfDate | date | true | Always same as DataMode date | yyyy-mm-dd |
| Universe | string | true | 2 | enumerated, 3 - ILPA , 4 - Impact Investing, 2 - C|A Benchmark, 1 - All Funds |
| Currency | string | true | USD | ISO Curr |
| VintageYearBy | string | false | LID | LID - Legal Inception Date,FCF-First Cash Flow |
| ReportedBy | number | true | None | Enumeration different for Investment Level |
| ThenBy | number | true | None | Enumeration different for Investment Level |
| Internal | boolean | true | false | Should always be false |
Response Example
Response Example
The response for this API call will echo a Payload which represents the parameters submitted, with the addition of the system generated ReportId and audit information (names and timestamps).
{
"RequestId" : "692ddba1-1cd6-44df-8b32-be4fd6e89d8b",
"StatusCode" : 202,
"Errors" : null,
"Payload" : [
{
"ReportId" : "0fe4dc19-71ae-48f2-8f1f-f3e20ffd8959",
"BenchmarkId" : "ab79ec4c-d341-41a2-a104-9f7128639b72",
"ReportType" : "<see ReportTypes enum>",
//... report type specific parameters (see above)
"DataMode" : "2019Q2",
"ModeType" : "Preliminary",
"VintageYearBy" : "LID",
"Scheduling" : {
"Frequency" : "Daily"
},
"AttributeFilter" : [
"IRRPooled","IRREqualWeighted","IRRAverage","IRRMax",
"IrrTop10Percentile","IrrBottom10Percentile","TvpiTop10Percentile",
"TvpiBottom10Percentile ","IRR95Percentile","IRRQuartileUpper",
"IRRQuartileLower", "IRR5Percentile","IRRMin"],
"CreatedOn" : "2020-06-25T13:21:51.000Z",
"CreatedBy" : "jdoe",
"LastModOn" : "2020-08-25T20:00:42.000Z",
"LastModBy" : "tsmith"
}
],
"Stats" : {}
}
Create Report Config API
Creates and configures a new scheduled report
POST /api/v1/reports/config
On Success: HTTP 202 - Accepted
Payload: JSON payload (see above)
Successful requests adds ReportId, which is the uniqueidentifier (uuidv4) representing this report throughout its lifecycle.
Update Report Config
Allows a user to update an existing report configuration
PUT /api/v1/reports/config/:reportId
On Success: HTTP 200 - OK
Payload: JSON payload (see above)
ReportId is the uniqueidentifier (uuidv4) returned by the Create Report Config.
Delete Report Config
Allows a user to delete an existing report configuration.
Please note: C|A will archive all report configurations, but there will not be an automated mechanism to restore a deleted report config. Moreover, all reports run for the specific config will also be deleted, if the config is removed.
DELETE /api/v1/reports/config/:reportId
On Success: HTTP 204 - No Content
Payload: None
List Report Config
Allows a user to list all the report configurations they have created in the API
GET /api/v1/reports/config?pagingHash=<value>
On Success: HTTP 200 - OK
Payload: JSON payload (see above)
Details About Paging Data
The system will return a max of 50 records in its results. If there are more records available, the system will generate a Stat called PagingHash which you may pass into a subsequent request to continue paging through the resource.
"Stats" : {
"PagingHash" : "0fe4dc19-71ae-48f2-8f1f-f3e20ffd8959"
}
}
Get Report Configuration
Retrieves a specific Report Configuration by its Report ID
GET /api/v1/reports/config/:reportId
ReportId is the uniqueidentifier (uuidv4) returned by the Create Report Config.
On Success: HTTP 200 - OK
Payload: JSON payload (see above)