| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Overview
Performs multiple insert, update, and delete operations on schedule records in a single request. All operations target the same domain on the same proposal.
It accepts three arrays:
Inserts – records to create
Updates – records to modify
Deletes – records to remove
Each item in the response includes an OrderNumber field that corresponds to its zero-based position in its respective input array, allowing callers to correlate results back to the original request.
Preconditions
The proposal must be modifiable. A proposal cannot be modified when:
- Its status is Bound (B), Rejected (R), or Cancelled (0).
- Its proposal set is bound.
- It has a pending expiry date change endorsement.
The domain must be a valid schedule domain for the proposal.
Examples
Scenario 1: Mixed operations, non-atomic - all succeed:
POST /api/Quotes/Proposals/12345/Schedules/ProposalLocation/UpsertMulti?isAtomic=false
Content-Type: application/json
{
"Inserts": [
{
"Fields": {
"LocationName": "New Branch",
"Address1": "100 Elm St",
"City": "Springfield",
"StateCode": "IL"
}
},
{
"Fields": {
"LocationName": "Regional Office",
"Address1": "250 Pine Rd",
"City": "Peoria",
"StateCode": "IL"
}
}
],
"Updates": [
{
"ID": 100,
"Fields": {
"City": "Naperville",
"ZipCode": "60540"
}
},
{
"ID": 102,
"Fields": {
"LocationName": "Warehouse (East)"
}
}
],
"Deletes": [
{
"ID": 101
},
{
"ID": 103
}
]
}{
"Inserts": [
{
"IsSuccessful": true,
"RecordID": 104,
"OrderNumber": 0,
"Message": "Inserted schedule with id 104 successfully.",
"Warnings": null
},
{
"IsSuccessful": true,
"RecordID": 105,
"OrderNumber": 1,
"Message": "Inserted schedule with id 105 successfully.",
"Warnings": null
}
],
"Updates": [
{
"IsSuccessful": true,
"RecordID": 100,
"OrderNumber": 0,
"Message": "Updated schedule with id 100 successfully.",
"Warnings": null
},
{
"IsSuccessful": true,
"RecordID": 102,
"OrderNumber": 1,
"Message": "Updated schedule with id 102 successfully.",
"Warnings": null
}
],
"Deletes": [
{
"IsSuccessful": true,
"RecordID": 101,
"OrderNumber": 0,
"Message": "Deleted schedule with id 101 successfully.",
"Warnings": null
},
{
"IsSuccessful": true,
"RecordID": 103,
"OrderNumber": 1,
"Message": "Deleted schedule with id 103 successfully.",
"Warnings": null
}
]
}Scenario 2: Atomic mode - one update fails, entire batch rolled back:
POST /api/Quotes/Proposals/12345/Schedules/ProposalLocation/UpsertMulti?isAtomic=true
Content-Type: application/json
{
"Inserts": [
{
"Fields": {
"LocationName": "Good Insert",
"Address1": "200 Oak St",
"StateCode": "IL"
}
}
],
"Updates": [
{
"ID": 100,
"Fields": {
"LocationName": ""
}
}
],
"Deletes": []
}{
"Inserts": [],
"Updates": [
{
"IsSuccessful": false,
"RecordID": 100,
"OrderNumber": 0,
"Message": "LocationName is required.",
"Warnings": null
}
],
"Deletes": []
}In atomic mode, the successful insert is excluded from the response because the transaction was rolled back.
Scenario 3: Non-atomic - partial success:
POST /api/Quotes/Proposals/12345/Schedules/ProposalLocation/UpsertMulti?isAtomic=false
Content-Type: application/json
{
"Inserts": [
{
"Fields": {
"LocationName": "Valid Location",
"StateCode": "IL"
}
},
{
"Fields": {
"StateCode": "IL"
}
}
],
"Updates": [],
"Deletes": []
}{
"Inserts": [
{
"IsSuccessful": true,
"RecordID": 104,
"OrderNumber": 0,
"Message": "Inserted schedule with id 104 successfully.",
"Warnings": null
},
{
"IsSuccessful": false,
"RecordID": 0,
"OrderNumber": 1,
"Message": "LocationName is required.",
"Warnings": null
}
],
"Updates": [],
"Deletes": []
}The first insert succeeds and is committed. The second insert fails independently.
All operations can be processed either atomically or individually, based on the isAtomic parameter.
This saves time when you need to enter several vehicles, properties, or other items for a single proposal.