Transaction Model
Every change to a policy is recorded as an immutable transaction. Transactions are the single source of truth — policy state is always derived from them, never authored directly.Configure
Define your fields, option sets, and exposure types via the Configuration API.
Endorse
POST /{policyId}/transaction/endorse modifies the policy — add exposures, change field values, adjust coverage periods.Transaction Types
NEW_BUSINESS
Creates the policy. The effective date is the policy start date. Produces one segment covering the full term.
ENDORSE
Modifies policy state from a given effective date. May split existing segments or merge them if the change aligns state across periods.
CANCEL
Cancels the policy from the cancellation date. The policy term ends at the cancellation date.
REINSTATE
Reverses a cancellation. The policy term is restored to its pre-cancellation state.
RENEW
Creates a new term for an existing policy. The effective date is the new term start date.
Effective Date vs Transaction Timestamp
Each transaction has two timestamps:effectiveDate— when the policy state changes. For an endorsement, this is when the new coverage begins. For a cancellation, this is when coverage ends.transactionTimestamp— when the business decision was made. Defaults to the current time, but can be set explicitly for imports (e.g., aligning to a bordereau booking date).
Segments
A segment is a maximal contiguous date range where the policy state is identical.Segments are NOT one-to-one with transactions. Multiple transactions may produce fewer segments than you expect. A single endorsement may split one segment into many. Corrections can merge segments back together.
Segment Properties
- No overlapping segments within a version
- Full coverage of the policy period — no gaps
- No adjacent identical segments — automatically merged
How Segments Change
- Create
- Endorse (split)
- Correction (merge)
A new policy starts with one segment covering the full term.
Versions
Each transaction produces a new policy version. A version is a complete snapshot — it contains the full set of segments for the policy at that point in the transaction history.| Property | Description |
|---|---|
policyVersion | Sequential version number (1, 2, 3, …) |
transactionId | The transaction that produced this version |
segments | Complete set of segments for this version |
startDate / endDate | Policy term boundaries |
How It Works
When you submit a transaction, the system:- Loads the previous version — gets the current segments
- Applies changes — applies the transaction’s field changes to the affected date ranges
- Normalizes — produces deterministic JSON and computes a hash for each resulting segment
- Merges — collapses adjacent segments with identical hashes into one
- Persists — stores the new version with its segments
Premiums and Rating
The API does not calculate premiums. When you submit a transaction, you supply the per-segment field values (including
annualPremium) and the fullTermPolicyBilling aggregates yourself. The system stores what you send — it does not pro-rate or re-aggregate.When using the application UI (not headless) with a rater configured, a special aggregation rater automatically computes the fullTermPolicyBilling totals across segments. Through the API, this is your responsibility.Worked Example: Segment Merging
A medical facility policy for Jan 1 – Dec 31 with one exposure (Main Hospital, 120 beds). In each step, the API caller supplies the segment field values and fullTerm aggregates.1. Create policy — 1 segment
1. Create policy — 1 segment
2. Endorse Apr 1: add satellite clinic — 2 segments
2. Endorse Apr 1: add satellite clinic — 2 segments
The caller submits an endorsement effective April 1 that adds a satellite clinic and sets the new fullTermPolicyBilling: policyPremium = $123,250 (caller-supplied)Result: 2 segments with different premiums and different exposure lists.
annualPremium for the Apr–Dec period. The caller also updates fullTermPolicyBilling with the pro-rated total.3. Backdate clinic to Jan 1 — segments merge, premium increases
3. Backdate clinic to Jan 1 — segments merge, premium increases
Worked Example: Out-of-Order Endorsement
Starting from the merged state above (1 segment, $136k, 2 exposures), a backdated endorsement arrives.4. Backdate bed increase to Aug 1 — segment splits
4. Backdate bed increase to Aug 1 — segment splits
The caller submits an endorsement effective August 1 increasing Main Hospital bed count from 120 to 150, with a new fullTermPolicyBilling: policyPremium = $141,000 (caller-supplied)Result: 2 segments. The backdated endorsement splits the previously merged segment because the Aug–Dec state now differs from Jan–Jul.
annualPremium for the Aug–Dec period and an updated fullTermPolicyBilling total.Transaction Deletion
Only the most recent transaction on a policy can be deleted. Deleting a transaction:- Produces a new version derived from the prior transaction’s state
- Preserves the audit trail — the deleted transaction is archived, not erased
- Is irreversible through the API once deleted (the transaction can be re-created manually)
