The request body is a JSON representation of the PolicyTransaction dataDictionary.
See the API reference for api/MetaData/Domains/{domain}/DataDictionary where PolicyTransaction is the {domain} value.
If a key is unrecognized, the API throws InvalidOperationException("Unknown field: {key}").
The supplied fields are applied to a new PolicyTransaction object, then copied onto the cancellation's policy transaction record. The following system-managed fields are excluded from the copy (they are set automatically):
| Excluded field | Reason |
|---|
PolicyTransactionID | Auto-generated primary key |
ClientID | Set from the policy |
MemberID | Set from the policy |
MemberTransactionID | Set by the system |
Type | Always set to Cancellation |
PolicyID | Set from the policy |
ProposalID | Set from the endorsement |
EntryDate | Set to current timestamp |
EntryUserID | Set to the authenticated user |
TransactionDate | Set to the cancelDate parameter |
CancellationType | Derived from IsFlatCancellation / IsShortRateCancellation |
These are the fields most commonly used for cancellations:
| Field | Type | Description |
|---|
CancellationReasonID | int | ID of the cancellation reason code. Use the Codes/CancellationReasonCodes endpoint to retrieve valid values for a given policy. |
Description | string (max 250) | Notes or description for the cancellation transaction |
CancelledBy | string (1 char) | Code indicating who initiated the cancellation (e.g., insurer, insured) |
IsFlatCancellation | bool | Flat cancellation — full premium returned regardless of time elapsed |
IsShortRateCancellation | bool | Short-rate cancellation — premium returned with a penalty factor |
IsFlatCancellation and IsShortRateCancellation are mutually exclusive. If both are set, flat takes priority. If neither is set, the cancellation uses pro-rata calculation (default).
Any writable PolicyTransaction field can be included in the request body. Beyond the cancellation-specific fields above, commonly available fields include:
| Field | Type | Description |
|---|
Amount | decimal | Transaction amount |
Source | string (max 250) | Source identifier for the transaction |
CoverageID | int | Link to a specific coverage |
PremiumCategoryID | int | Premium category for the transaction |
CustomText1 – CustomText10 | string (max 256) | Custom text fields |
CustomDate1 – CustomDate5 | DateTime | Custom date fields |
CustomBool1 – CustomBool5 | bool | Custom boolean fields |
CustomNumber1 – CustomNumber5 | decimal | Custom numeric fields |
CustomMoney1 – CustomMoney5 | decimal | Custom currency fields |
CustomCode1ID – CustomCode10ID | int | Custom code list lookups |
CustomUser1ID – CustomUser5ID | int | Custom user reference fields |
CustomNarrative1 – CustomNarrative5 | string | Custom long-text fields |
CustomMultiSelectCode1 – CustomMultiSelectCode5 | string | Custom multi-select code values |
Note: The actual field names available depend on your schema's PolicyTransaction domain configuration. Custom fields may have display name overrides — use the field's internal name (as shown above), not the display label.
POST /api/Policies/12345/Cancel?cancelDate=2026-06-01
Content-Type: application/json
{
"CancellationReasonID": 42,
"Description": "Insured requested cancellation"
}
POST /api/Policies/12345/Cancel?cancelDate=2026-06-01
Content-Type: application/json
{
"IsFlatCancellation": true,
"CancellationReasonID": 7
}
Minimal request (no policy transaction data):
POST /api/Policies/12345/Cancel?cancelDate=2026-06-01
Content-Type: application/json
null