2026.12.a
HighlightsThe 2026.12 release introduces the Risk Data Refinery APIs.
Moody's publishes preliminary information to inform stakeholders ahead of the targeted Intelligent Risk Platform update. Note that these described features are not guaranteed for the next update or any subsequent updates and may be changed without notice. The definitive list of features will be provided in the Changelogs at the time of the official release.
Risk Data Refinery
The Risk Data Refinery API enables Intelligent Risk Platform tenants to create exposure resources based on unstructured text in imported policy slip or schedule of value documents.
The Intelligent Risk Platform uses AI to transform unstructured submission documents (policy slips and schedule of value worksheets) uploaded to the Intelligent Risk Platform into structured, platform-ready exposure data.
The Risk Data Refinery supports two pipelines:
- The Slip pipeline extracts coverage data from policy slips: limits, deductibles, perils, and special conditions across six standard perils.
- The SoV pipeline processes schedule of value worksheets into cleansed, geocoded, enriched, model-ready exposure data that can be imported into the tenant's Intelligent Risk Platform.
Create Folder
The Create Folder operation (POST /platform/riskdatarefinery/v1/folders) creates a submission folder.
The optional X-Rms-RequestId header parameter can be specified to make the request idempotent. a request ID used to make the operation idempotent. When supplied, repeated requests with the same value return the result of the original request.
The files parameter defines an array of files to be uploaded to the folder. The following file formats are supported: PDF, XLS, XLSX, and XLSM. (XLSB and XLSN are not supported.)
{
"files": [
{
"fileName": "test.pdf",
"encodedFileContent": "JVBERi0xLjQKJ..."
}
]
}If successful, returns 201 Created HTTP status code and a response that provides details about the folder.
{
"folderUuid": "f4e1c0a2-9b7d-4e3a-8c21-2a6b9d0e1f34",
"expiresAt": "2026-06-09T21:15:00.123Z",
"files": [
{
"fileName": "test.pdf",
"fileUri": "2001906/import/data-refinery/f4e1c0a2-9b7d-4e3a-8c21-2a6b9d0e1f34/input/test.pdf",
"uploadUrl": "string"
}
]
}Get RDR Folder
The Get Folder operation (GET /platform/riskdatarefinery/v1/folders/{folderUuid}) retrieves the specified RDR folder.
The required folderUuid path parameter specified the UUID of an RDR folder.
If true, the optional detectFiles body parameter detects the presence of files in the RDR folder and returns the updated status and updatedAt folder properties, and the detectionStatus, fileType, and priority of each file in that folder. If false, returns the stored classification without re-parsing. By default, false.
The response includes information about each file in the RDR folder:
{
"folderUuid": "f4e1c0a2-9b7d-4e3a-8c21-2a6b9d0e1f34",
"expiresAt": "2026-06-09T21:15:00.123Z",
"status": "COMPLETED",
"updatedAt": "2026-06-09T21:05:13.456Z",
"files": [
{
"fileName": "test.pdf",
"detectionStatus": "COMPLETED",
"fileType": "slip",
"priority": 1,
"fileUri": "2001906/import/data-refinery/f4e1c0a2-9b7d-4e3a-8c21-2a6b9d0e1f34/input/test.pdf",
"isIncluded": true
}
]
}Create Submission
The Create Submission operation (POST /platform/riskdatarefinery/v1/submissions) creates an RDR submission,
A submission is a bundle of uploaded documents (one or more policy slip and/or SoV documents, in any supported format) that are imported together as a single unit for processing. Every submission is defined by UUID of a RDR folder (folderUuid) and the names of the files (slipStream and sovStream) uploaded to that RDR folder.
This operation supports submitting slipStream and sovSteam files that have been uploaded to the specified RDR folder.
- A
slipStreamfile is a policy slip document, a broker-authored submission text that states the account's limits, deductibles, sublimits, exclusions, and perils. Within a submission it is routed to the slip pipeline, which uses AI to extract those coverage terms into structured, model-ready policy data. - An
sovStreamfile is a Schedule of Values workbook that lists an account's insured locations and exposure attributes (e.g. addresses, construction, occupancy, and coverage values). Within a submission it is routed to the SoV pipeline, which cleanses, geocodes, and enriches the data into model-ready location and account exposure.
Typically, both a slip stream and statement of value document are submitted in the same submission. In general, most accounts include both a slipStream file and an sovStream file. Both documents go into one import, added as one submission bundle. The slipStream and sovStream parameters are optional.
The x-rms-resource-group-id header parameter is required.
{
"folderUuid": "f4e1c0a2-9b7d-4e3a-8c21-2a6b9d0e1f34",
"submissionName": "ABC.pdf",
"groupIds": ["5f1c0a2b-9b7d-4e3a-8c21-2a6b9d0e1f34"],
"slipStream": {
"files": [
{
"fileName": "Sov1.xlsx",
"isIncluded": true,
"priority": 1
}
],
"decode": {
"specialInstructions": "Treat the attached email body as the policy slip."
}
},
"sovStream": {
"files": [
{
"fileName": "Sov1.xlsx",
"isIncluded": true
}
]
}
}The folderUuid is required. The request is usually defined by both slipStream and sovStream objects. If a file is uploaded
| Property | Type | Description |
|---|---|---|
folderUuid | string (uuid) | Unique ID of the folder containing the uploaded files, returned by Create folder. |
submissionName | string | Name of the submission. Provided by the principal; if omitted, defaults to the uploaded file name. |
groupIds | array of string (uuid) | IDs of groups to assign the submission to. |
slipStream | object | Policy slip extraction stream inputs. Optional; omit to let the pipeline classify files automatically. |
sovStream | object | Schedule of values (SOV) extraction stream inputs. Optional; omit to let the pipeline classify files automatically. |
A slipStream file is a policy slip document: the broker-authored submission text, typically 20 to 200 pages, that states the account’s limits, deductibles, sublimits, exclusions, and perils. Within a submission it is routed to the slip pipeline, which uses AI to extract those coverage terms into structured, model-ready policy data.”
| Property | Type | Description |
|---|---|---|
files | array | Files to process in the policy slip stream. |
files[].fileName | string | Name of the uploaded file to process. |
files[].isIncluded | boolean | Whether the file is included in submission processing. Included by default; set to false to exclude. By default, true |
files[].priority | int32 | Processing priority of the file. Lower numbers are processed first. |
decode | object | Special instructions to process instead of files. Used when no files are uploaded. |
decode.specialInstructions | string | Free-text special instructions for the policy slip stream. |
An sovStream file is a Schedule of Values workbook: a worksheet that lists an account’s insured locations and exposure attributes (e.g. addresses, construction, occupancy, and coverage values). Within a submission it is routed to the SoV pipeline, which cleanses, geocodes, and enriches the data into model-ready location and account exposure.
| Property | Type | Description |
|---|---|---|
files | array of object | Files to process in the schedule of values stream. |
files[].fileName | string | Name of the uploaded file to process. |
files[].isIncluded | boolean (default true) | Whether the file is included in submission processing. Included by default; set to false to exclude. |
Search Submissions
The Search Submission operation (GET /platform/riskdatarefinery/v1/submissions) returns a list of submissions.
This operation supports filtering based on the value of query string parameters:
| Property | Data Type | Comparison | List | Logical |
|---|---|---|---|---|
submissionId | int64 | = | IN | AND |
userId | string | = | IN | AND |
status | string | = | IN | AND |
progress | int32 | = | IN | AND |
submissionName | string | LIKE | IN | AND |
exposureResourceName | string | LIKE | IN | AND |
startTime | date-time | < <= > >= | AND | |
endTime | date-time | < <= > >= | AND | |
groupIds | uuid | = | IN | AND |
This operation supports sorting by processingTime. To learn more, see Filtering Responses
For each submission that matches the specified filter, the response returns following values:
[
{
"submissionId": 100024,
"userId": "[email protected]",
"status": "COMPLETED",
"progress": 100,
"submissionName": "ABC.pdf",
"processingTime": 445.043,
"startTime": "2026-06-03T20:12:48.125Z",
"endTime": "2026-06-03T20:20:13.168Z",
"exposureResourceName": "XYZ",
"groupIds": ["5f1c0a2b-9b7d-4e3a-8c21-2a6b9d0e1f34"],
"metrics": {
"fileTypes": ["slip", "sov"],
"fileCount": 2,
"accountsProcessed": 12,
"locationsProcessed": 480,
"sheetsProcessed": 3
}
}
]| Property | Data type | Description |
|---|---|---|
submissionId | int64 | ID of submission. |
userId | string | Login of principal that submitted the document, e.g. [email protected]. |
status | string | Status of submission processing. Accepted case-insensitively. One of COMPLETED, CANCELLED, PENDING, FAILED, IN_PROGRESS, QUEUED) |
progress | int32 | Percent of submission processing completion. |
submissionName | string | Name of submission. |
processingTime | double | Total processing time in seconds. |
startTime | string | Time submission processing started in ISO 8601 format, e.g. 2020-01-01T00:00:00.000Z. null when processing has not started. |
endTime | string | Time submission processing ended in ISO 8601 format, e.g. 2020-01-01T00:00:00.000Z. null when processing has not ended. |
exposureResourceName | string | Name of the exposure resource extracted from the submission. null when no exposure resource has been extracted. |
groupIds | array | UUIDs of team groups. |
metrics | object | Metrics for the submission. |
The metrics object returns information about the data extracted during the submission:
| Property | Data type | Description |
|---|---|---|
fileTypes | array | Stream types (slip, sov) in the submission. Both values indicate a mixed submission; an empty array indicates files are not yet classified. |
fileCount | int32 | Number of documents in the submission. |
accountsProcessed | int32 | Number of accounts processed. |
locationsProcessed | int32 | Number of locations processed. |
sheetsProcessed | int32 | Number of Excel sheets processed in the submission's input files. |
Get Submission
The Get Submission operation (GET /platform/riskdatarefinery/v1/submissions/{submissionId}) returns detailed information about the specified submission.
This operation can be used to poll the status of a submission.
{
"submissionId": 100024,
"userId": "[email protected]",
"status": "COMPLETED",
"progress": 100,
"submissionName": "ABC.pdf",
"processingTime": 445.043,
"startTime": "2026-06-03T20:12:48.125Z",
"endTime": "2026-06-03T20:20:13.168Z",
"exposureResourceName": "XYZ",
"groupIds": ["5f1c0a2b-9b7d-4e3a-8c21-2a6b9d0e1f34"],
"metrics": {
"fileTypes": ["slip", "sov"],
"fileCount": 2,
"accountsProcessed": 12,
"locationsProcessed": 480,
"sheetsProcessed": 3
},
"slipStream": {
"uuid": "947e5e86-328b-49ec-8985-5bad47a16dd7",
"status": "COMPLETED",
"progress": 100,
"currentStep": "completed",
"name": "Sample_Policy_Slip.pdf",
"type": "slip",
"totalSize": 883122,
"startTime": "2026-06-04T07:32:48.124Z",
"endTime": "2026-06-04T07:40:13.168Z"
},
"sovStream": {
"uuid": "947e5e86-328b-49ec-8985-5bad47a16dd7",
"status": "COMPLETED",
"progress": 100,
"currentStep": "completed",
"name": "Sample_Policy_Slip.pdf",
"type": "sov",
"totalSize": 883122,
"startTime": "2026-06-04T07:32:48.124Z",
"endTime": "2026-06-04T07:40:13.168Z"
},
"riskData": {
"jobId": 72893672,
"status": "COMPLETED",
"progress": 100,
"exposureName": "EDM_NA_Property_2026Q3",
"priorJobIds": [0]
}
}Delete Submission
The Delete Submission operation (DELETE /platform/riskdatarefinery/v1/submissions/{submissionId}) deletes the specified submission.
Download Submission
The Download Submission operation (POST /platform/riskdatarefinery/v1/submissions/{submissionId}/download) downloads files from specified submission.
The downloadType and fileExtension parameters are required.
{
"downloadType": "exposureBatchEditFile",
"fileExtension": "json",
"fileName": "exposure_batch_edit",
"delimiter": "comma"
}The required downloadType parameter specifies the type of files to download from the folder.
| Download Type | Output | Supported Files |
|---|---|---|
exposureBatchEditFile | Combined exposure batch as a flat JSON file | JSON |
mriFiles | MRI account and location files, delivered as a single ZIP archive | CSV |
processedSoVFile | Processed SOV output | XLSX, PDF |
processedSlipFile | Processed policy slip output | JSON, PARQUET, XLS |
If successful returns 202 Accepted. The download is prepared asynchronously; poll Get task until status is COMPLETED, then download the file from fileUrl. The Task UUID is returned in the Location HTTP response header.
The Save Risk Data
The Save Risk Data operation (POST /platform/riskdatarefinery/v1/submissions/{submissionId}/save-risk-data) saves to an EDM processed data from the specified submission.
This operation creates an EXPOSURE_BATCH_EDIT job that copies the processed submission data to the specified EDM.
The resourceType and resourceUri body parameters are required.
{
"resourceType": "exposure",
"resourceUri": "/platform/riskdata/v1/exposures/2334242",
"settings": {
"jobName": "Bell Partners"
}
}The resourceType and resourceUri body parameters are required.
| Parameter | Type | Description |
|---|---|---|
resourceType | string | Type of risk data resource, i.e. exposure (EDM). |
resourceUri | string | URI of EDM into which exposure data is to be saved. |
settings.description | string | Description of EXPOSURE_BATCH_EDIT job. |
settings.jobName | string | Name of of EXPOSURE_BATCH_EDIT job. |
If successful, returns 202 Accepted. The submission's processed exposure data is applied to the destination EDM asynchronously via an EXPOSURE_BATCH_EDIT job.
Poll the job URL returned in the Location header for live status (see Search risk data jobs in the Risk Data API). The latest job's status is also returned in the riskData block of Get submission.
Only one save job may run per submission at a time. Once the job ends, a new save may be started; each new save replaces the submission's riskData block.
