Real-time Updates via Webhooks

An overview of Root's real-time update capabilities and catalog of webhook payloads

Once you've been on-boarded onto the Carrier Platform API, Root can configure your application to receive automated messages when important events happen. They have a message—or payload—which is sent to a single URL on your server. You can also configure a unique URL per message if it better suits your application. Webhooks almost always provide faster updates than polling.

To receive our webhooks, you will need to set up a web application that can receive POST requests containing the payloads detailed below; we expect a response with status 200 to signal the webhook was received successfully. Recipients should be prepared to deduplicate webhook events based on the unique id in the payload, as well as be capable of re-ordering events according to the timestamp within the payload should events be received out of order.

Envelope (Top-level Keys)

Root's events will generally comply with the CloudEvents specification. In addition, consumers from Root should expect consistent structure within source and type and consistent presence of keys CloudEvents specifies as optional, detailed below.

KeyTypeDescription
specversionStringVersion of CloudEvents
idStringUnique identifier to deduplicate resent events
timeTimestampISO8601 time when the event occurred (not necessarily when the event was sent, be ready to receive backdated and out-of-order events)
sourceURIWill always contain root.com with a path concerning the domain the event relates to (such as /policy)
typeStringA reverse-DNS event name taking the form com.root.subject.past-tense-verb.version
datacontenttypeStringThe MIME type of data, typically "application/json"
dataJSONThe nested JSON data specific to the particular event

Events Catalog

Quoting-related Events

TCPA Consent Collected

Occurs at most once per quoteId as soon as TCPA consent is given.

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/quoting",
  "type": "com.root.tcpa-consent.collected.v2",
  "datacontenttype": "application/json",
  "data": {
    "quoteId": "uuid",
    "tcpaConsentTimestamp": "ISO8601 Timestamp"
  }
}

Quote Estimated

Occurs each time a new RC1 generates in the course of quoting. Note that depending on the channel and the user's behavior this may happen a significant number of times. The user may not see every RC1 generated as the quoting happens asynchronously and they may have already moved on to make further changes.

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/quoting",
  "type": "com.root.quote.estimated.v2",
  "datacontenttype": "application/json",
  "data": {
    "quoteId": "uuid"
  }
}

Quote Finalized

Occurs at least once prior to binding (i.e. purchasing) a policy. But can occur any number of times, including zero times should a prospect not continue through the quoting process to finalization.

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/quoting",
  "type": "com.root.quote.finalized.v2",
  "datacontenttype": "application/json",
  "data": {
    "quoteId": "uuid"
  }
}

Quote Rated

Occurs each time a new RC3 generates in the course of quoting. Note that depending on the channel and the user's behavior this may happen many times. The user may not see every RC3 generated as the rating happens asynchronously and they may have already moved on to make further changes.

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/quoting",
  "type": "com.root.quote.rated.v2",
  "datacontenttype": "application/json",
  "data": {
    "quoteId": "uuid"
  }
}

Policy-related Events

Policy Bound

Occurs once per policy bind (i.e. initial purchase of a policy)

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/policy",
  "type": "com.root.policy.bound.v2",
  "datacontenttype": "application/json",
  "data": {
    "quoteId": "uuid",
    "policyId": "uuid",
    "policyNumber": "string",
    "effectiveTimestamp": "ISO8601 Timestamp"
  }
}

Policy Canceled

Occurs when a policy is canceled and coverage concludes.

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/policy",
  "type": "com.root.policy.canceled.v2",
  "datacontenttype": "application/json",
  "data": {
    "policyId": "uuid",
    "policyNumber": "string",
    "effectiveTimestamp": "ISO8601 Timestamp"
  }
}

Policy Endorsed

Occurs each time a policy is changed, such as different limits or deductible or a new vehicle added. Note that changes may be future dated (effectiveTimestamp later than time).

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/policy",
  "type": "com.root.policy.endorsed.v2",
  "datacontenttype": "application/json",
  "data": {
    "policyId": "uuid",
    "policyNumber": "string",
    "effectiveTimestamp": "ISO8601 Timestamp"
  }
}

Policy Reinstated

Occurs when a policy is reinstated after a period of lapse. Note that effectiveTimestamp may be future dated.

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/policy",
  "type": "com.root.policy.reinstated.v2",
  "datacontenttype": "application/json",
  "data": {
    "policyId": "uuid",
    "policyNumber": "string",
    "effectiveTimestamp": "ISO8601 Timestamp"
  }
}

Policy Renewed

Occurs when a new policy term begins after the conclusion of the prior policy term. The policyNumber will remain consistent between the two terms.

{
  "specversion": "1.0",
  "id": "uuid",
  "time": "ISO8601 Timestamp",
  "source": "root.com/policy",
  "type": "com.root.policy.renewed.v2",
  "datacontenttype": "application/json",
  "data": {
    "policyId": "uuid",
    "policyNumber": "string",
    "effectiveTimestamp": "ISO8601 Timestamp"
  }
}