arrow-left

Only this pageAll pages
gitbookPowered by GitBook
1 of 38

XCover

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Introduction

XCover enables the world’s largest ecommerce companies to protect all of their customers.

The XCover platform includes an easy-to-use API integration to promote, sell, and manage insurance products provided by Cover Genius underwriting partners. It is designed to seamlessly integrate with any ecommerce platform and sell any line of insurance products.

This is made possible by the XCover API, a flexible interface based on RESTarrow-up-right that returns standard HTTP response codes and JSONarrow-up-right-encoded responses.

Please, follow us on LinkedInarrow-up-right for the latest updates.

hashtag
Integration outline

This outline is intended to provide an overview of the integration workflows for anyone working with an XCover API integration, including (but not limited to): Product & Project Managers, Software Engineers, and Business Analysts.

It demonstrates an example XCover distribution partner with a typical online store.

hashtag
Quote

The store uses XCover API to quote for insurance prices for the product insurance policies and offers to their customer to purchase ancillary insurance products along with the main products. Customers can add the insurance product to their shopping cart and continue to checkout. Alternatively, they can opt-out from the insurance offering and proceed to checkout with the main product only.

hashtag
Booking

After successful checkout, the store calls XCover API to notify about the policies purchased and provides the policyholder information. XCover API will inform customers about all the insurance product features, offer to create an account on to the XCover.com website where they can modify, renew, cancel the purchased policies, or lodge a claim. XCover takes care of registering the purchased policies with the underwriting partners as well.

hashtag
Modifications

If booking Modifications are allowed by the underwriting partner XCover allows booking modification by customers via XCover.com. Alternatively, booking modifications can be triggered by one of the partner's platforms via XCover API.

hashtag
Cancellation

It can happen that the customer is not happy with the product purchased and wants to return it. XCover API offers cancellation workflows that allow the previously issued policy to be canceled and refunded automatically in this case.

hashtag
Renewals

XCover.com also offers automatic renewals when it is required by the integration.

hashtag
Claims

Customers can always send a claim via XCover.com in case if one of the conditions under the policy is triggered. XCover offers highly automated and fast quote assessments and payouts via its XClaim and XPay internal APIs.

Integration Checklist

The following checklist describes the high level tasks that need to be completed in order to completely integrate the XCover API and begin selling insurance policies.

Travel / Accommodation
Parcel / Shipping
Product / Retail
Implement the Purchase Workflow
Implement the Cancellation Workflow
Implement the Modification Workflow

Common Use Cases

Outline of some frequently implemented approaches for specific industries

XCover enables in context sale of insurance to multiple industry verticals. Generally, purchase of goods and services and insurance follows a linear path: 1. Product or service selected by consumer 2. Insurance quote generated and presented to user 3. Insurance is selected and attached to the main product 4. Payment is received and then the insurance booking is confirmed with XCover The following common use cases explain in more detail how this process operates.

JS based offer display

Using XCover elements, the work of coding to display quote response is removed.

  1. A simple script is used as a wrapper for the quote request

  2. If custom display settings are required, they may be applied using signals or taken from quote request variables (see below example).

  3. Using Content Delivery Network (CDN), offers are displayed within the purchase flow on partner site.

  4. Response Signals are used to determine user interaction/purchase choices.

This approach reduces the up front development effort and any ongoing growth project maintenance, allowing for streamlined launch and optimizations

Important: Most display variations are handled by quote request attributes for example the currency display could be set as Indonesian Rp (IDR):

hashtag
Custom Variable Display Requirements

In some cases, partners may have custom display requirements based on experience settings or customisations. An examples of custom display settings is shown below:

In the above example, circled (blue) formatting for currency symbol is selected using custom set signals (symbol). Eg:

In the below example, the currencyDisplay config element is set to narrowSymbol

Insurance Opt-Out

The Insurance opt-out workflow describes the API call that must be made in the case that XCover insurance is offered but not selected by the customer. The purpose of utilising the opt-out workflow is so Cover Genius can demonstrate conversion rate to the regulators ensuring the product and pricing is fit for purpose. It also enables XCover machine learning platform Brightwrite to deliver the optimal products at the optimal prices.

hashtag
Sending Opt-Out Data

POST

Property / Renters

Property related insurance products such as Renters, Landlord, etc

Commonly, partners will integrate XCover using two key purchase process API calls: and . Most integrations follow the below high level flow of events:

1. User goes through a property related User Experience 2. Partner platform sends a to the create quote endpoint 3. User selects insurance option/s 4. User pays for travel and insurance at checkout 5. 6. Partner sends a to the create booking endpoint 7. XCover sends confirmation email including policy details, Partner sends purchase confirmation and tax invoice.

hashtag

Policy Management

Most users will manage policies on XCover.com

After booking and over the course of using a policy, users may need to manage their policy, to view and reference their policy inclusions, limits, or terms and conditions, and to update their account information. In most instances, this is performed on Partners may wish to include a link to this page in their experience, and often a specific policy URL will be appropriate to include, such as: Claims: Modification: Certificate of Insurance (COI): Policy Disclosure Statement / Policy Wording (PDS): Users will also need to have created an account before using these links. In most cases, users will receive an account creation email containing a specific login URL shared with them after booking, usually via a policy confirmation email.

Rate Limits

By default, the following base API rate limits apply for all partner API keys:

  • Fast quote endpoint: 50 req/sec

  • All other endpoints: 10 req/sec (shared across all endpoints)

All testing API keys: 2 req/sec

Please, reach out to the Account Manager or Client Solution Engineer if you want to increase these limits.

XCover.comarrow-up-right
https://xcover.com/en/account/claims/fnol?bookingID=1ABCD-VWXYZ-INSarrow-up-right
https://xcover.com/en/modify/1ABCD-VWXYZ-INSarrow-up-right
https://xcover.com/en/coi/1ABCD-VWXYZ-INSarrow-up-right
https://xcover.com/en/pds/1ABCD-VWXYZ-INSarrow-up-right
See more documentation for XCover Elements panel display herearrow-up-right
Example of currency variation in panel display
Partner Website display based on JS and included quote request
Partner Website display based on JS and included quote request
quote_request: {
    "customer_language": "en",  //LANGUAGE: en for English, id for Bahasa
    "customer_country": "ID",   //POLICY LOCALE: AU for English, ID for Indonesia
    "currency": "IDR",          //AUD for Australia Dollar, IDR for Indonesian Rupiah
currency_config: {
currencyDisplay: 'symbol',	//'symbol' or 'narrowSymbol'
trailingZeroDisplay: 'stripIfInteger'//'auto' or 'stripIfInteger' 
    },
https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/opt_out

The opt-out request does not require any data to be contained in the payload.

hashtag
Path Parameters

Name
Type
Description

partner_id

string

Uniquer Partner Code

quote_package_id

string

Quote Package ID

hashtag
Headers

Name
Type
Description

Date

string

Current Datetime

Authorization

string

HMAC Signature

X-Api-Key

string

API Key

Opt-Out Workflow
Post sale processes

Modificationarrow-up-right Changes to customer details such as name, address, or any rating factor needs to be captured in order to ensure the customer is paying the appropriate premium.

Cancellationarrow-up-right Should a partner need to facilitate policy cancellation, the below workflow should be referenced.

hashtag
Opt-out process

In circumstances where a customer chooses to purchase the anchor product or service, but not the insurance offer. An opt-out request is used to notify XCover of a non-opted insurance quote. This assists with pricing and product offer data analysis and ultimately improved offers and sales results.

create quote
create booking
quote package payloadarrow-up-right
Payment collectionarrow-up-right
booking request payloadarrow-up-right

Product / Retail

Product Insurance or Warranties

Retail platforms and marketplaces can seamlessly present relevant warranty and insurance policies in the purchase path. Commonly, partners will integrate XCover using two key purchase process API calls: create quotearrow-up-right and create bookingarrow-up-right. Depending where the offer of insurance is provided (at product page, cart page, or between as a product is added to cart), a single product quote or package quote can be used. See a collection of common requests for this integration type Most integrations follow the below high-level flow of events:

1. User browses product options and; 2. Selects a product to cart (or arrives at a product page etc.) 3. Partner platform sends a quote package payload to the create quote endpoint 4. User selects insurance option/s 5. User pays for product/s and insurance at checkout 6. Payment collectionarrow-up-right 7. Partner sends a booking request to the create booking endpoint 8. XCover sends confirmation email including policy details, Partner sends purchase confirmation and tax invoice.

In-Store CG Portal Process

For in-store purchases, sales associates can utilize the Cover Genius Portal on an iPad or similar device. The online form requires a few details about the product and some customer and payment information to protect a customer's purchase(s).

hashtag
Post sale processes

Should a partner need to facilitate policy cancellation (for example, a product return, or order cancellation), the below workflow should be referenced.

hashtag
Opt-out process

In circumstances where a customer chooses to purchase products, but not the insurance offer. An opt-out request is used to notify XCover of a non-opted insurance quote. This assists with pricing and product offer data analysis and ultimately improved offers and sales results.

Parcel / Shipping

Total Shipping Insurance - Offered to Merchants or Consumers

Shipping services and platforms offering parcel shipping, or marketplaces connected to 3rd party logistics services (3PL's) can enable the offer and or attachment of parcel insurance policies in the purchase path. Commonly, partners will integrate XCover using two key purchase process API calls: create quotearrow-up-right and create bookingarrow-up-right. 💡 See a collection of common requests for this integration type. Many integrations follow the below high level flow of events:

1. User creates a shipment order 3. Partner platform sends a quote package payloadarrow-up-right to the create quote endpoint 4. User selects insurance option/s 5. User pays for shipment and insurance - this is often a debit of merchants shipping account wallet 6. Partner sends a booking request payloadarrow-up-right to the create booking endpoint 7. Confirmation of the coverage is presented to the user

hashtag
Post sale processes

In the event that a shipment label is not collected, and rendered void by the platform (within appropriate timeframes) the policy booking may be cancelled.

Claim

How are users able to view and understand policy details, and initiate claims?

hashtag
Claims Handling

Due to their regulated nature, claims are solely handled by Cover Genius. Cover Genius is responsible for all communications with users, claims assessment and claims payments. Users can lodge the claim on XCover.com/claimsarrow-up-right by completing an online, pre-filled form, provide a description of the situation/event and provide any supporting information or documents required. Generally, in situations where customers contact your platform in regards to claims, they should be redirected to XCover.comarrow-up-right.

hashtag
First Notice of Loss (FNOL)

Users will need to submit a first notice of loss form (FNOL) in order for claims to be assessed. Generally, this is completed by a logged in user at .

hashtag
Claim Assessment

Claims will be assessed by Cover Genius via our in-house claims assessment system. We leverage our technology and existing policy data to provide efficient and automated approval process, and fast electronic claims payment.

hashtag
Medical and Emergency Claims

Medical assistance and medical-related claims may be handled by our underwriting partners directly. Cover Genius works with our underwriters to create a user-centric workflow to ensure a smooth process relevant to your use case.

hashtag
Can we integrate claims submission ourselves?

Generally, claims are solely managed by Cover Genius. If you wish to discuss integrating claims submission into your experience, please contact your partnership manager.

Error Management

General error management

Error Handling

XCover uses conventional HTTP response codes to indicate the success or failure of an API request. Error codes ranging from 400 to 499 represent various error codes. Errors that can be resolved programmatically will result in an error code that briefly explains the type of error or reason for the error. In the unlikely event of a 5xx error, our engineering team will automatically receive a report and will fix any issue as fast as possible.

Note the below workflow for error handling:

Flagging errors in distribution flow - Similar approach should be established for post sales tasks

XCover strongly recommends the following mechanisms for error handling:

Retry Mechanism

The request/response goes through various hops between Partners and XCover. These may include various networks and servers. If at any point, the request fails due to network issue for example (e.g. a timeout), Partners should try to resend the request at least twice to rule out any intermittent issue. For Asynchronous request situations, retries may be spaced comfortably, ideally 2-5 mins apart before sending out an alert for someone to manually check any issues. We recommend at least 5 second timeout for bookings, and setting it to 10 seconds or more should be more reliable and not be a problem for customers. If requests fail, they should be retried with exponential backoff. In case the booking creation failed 5 times, partners should flag and raise with Cover Genius. Similar logic should apply for cancellations.

Alert Mechanism

If, after the second try Partners fail to receive the expected response (received, confirmed etc), it is recommended to establish alert mechanisms that notify responsible teams of the failure.

Logging Mechanism

Irrespective of a correct or a failed request/response, it is highly recommended for Partners to log requests and responses all centrally. These assist investigation where besides direct issue itself, patterns may become visible, helping to identify overarching issues.

XCover Quote Package State

A XCover Quote Package and individual Quotes within a Quote Package can transition between several different statuses. The below is a state diagram of these transitions and their conditions.

Purchase Workflow Overview

The XCover platform enables efficient, flexible, and compliant offer and sale of any line of insurance within a partner web experience. Some examples include: - A public facing Online Travel Agent selling flight and accomodation packages, with related travel and cancellation insurance. - A merchant facing shipping management platform selling parcel and shipping insurance. - An ecommerce retail marketplace facilitating sales and offering warranties and or insurance policies for relevant products. In most integrations XCover policies are attached to one or more main products or services. An example of main product is a laptop purchased from an online store, flight tickets, hotel reservations, etc. Depending on the partner integration, the insurance offering is typically placed in the main product booking path. Common Request Flow: 1. Quote The initial status after the Quote Request is RECEIVED 2. Booking After customers complete the booking process and insurance premiums are collected by the partner a request to the booking endpoint must be made. A CONFIRMED INS is considered booked, sold, provisioned, and will result in a policy confirmation being submitted to the user. A simple example of such integration is demonstrated below.

Simple insurance purchase workflow

Travel / Accomodation

Travel Insurance such as Comprehensive, Medical, Baggage, Cancellation, Smart Delay, Insolvency, and more - Offered via Online Travel Agents and other platforms.

Online Travel Agents (OTA's) and Accommodation platforms selling flights, hotel bookings, experiences and travel packages can seamlessly present relevant travel insurance policies in the purchase booking path. Commonly, partners will integrate XCover using two key purchase process API calls: and . 💡 See a collection of common requests for this integration type Most integrations follow the below high level flow of events:

1. User browses travel options and; 2. Selects a travel offer 3. Partner platform sends a to the create quote endpoint 4. User selects insurance option/s 5. User pays for travel and insurance at checkout 6. 7. Partner sends a to the create booking endpoint 8. XCover sends confirmation email including policy details, Partner sends purchase confirmation and tax invoice.

Idempotency Keys

Idempotency keys are unique identifiers that API clients can provide in HTTP request headers to ensure that a specific API request is not processed multiple times even if it is accidentally sent more than once. This mechanism helps maintain data consistency and prevent undesired side effects like duplicated transactions or repeating customer notifications.

Idempotency keys can be passed to most of the non-idempotent endpoints through a custom header x-idempotency-key. The value of this header should be a unique operation identifier. If the request with the same idempotency key and body has already been processed in the past the response body will be stored in a temporary storage for 48 hours and returned to all subsequent requests with 409 Conflict status code. The 409 responses can be handled by the API client as if it would be a successful response. The use of a separate response code can help API consumers identify the root cause for duplicated requests and fix the issue.

In some cases when two duplicated requests are sent within a short interval of time it is possible that a 423 Locked response code will be returned. The 423 response indicates that the API started processing the previous request, but the response was not generated yet. The API client should retry the request after a reasonable amount of time.

Payment Process

How will customers pay for their policy premium?

hashtag
Single Payment

Most XCover partners operate their own shopping cart, checkout, and payment collection processes. From a customer experience perspective, a single itemised purchase transaction is preferable (for example a travel booking along with the insurance policy).

Please refer to the for more information.

Quote/Policy Status

An XCover Quote Package and individual Quotes within a Quote Package can transition between several different statuses. Below is a state diagram of these transitions and their conditions.

The XCover API operates with a set number of states that a quote can rest in. RECEIVED: Refers to an initial quote creation state - this is not a live policy, but may be booked from this state. CONFIRMED: A booked policy, this policy is confirmed as being paid for and activated. It may be active or expired. May be cancellable or modifiable, and can be claimed against. CANCELLED: A cancelled policy cannot be claimed against, or modified. DELETED: A rare status that depicts a removed quote/booking. PENDING_PAYMENT: Only relevant for quotes that are booked using the require_payment_confirmation flag during a create booking request (usually followed by the confirm booking request) end state if confirmed will be CONFIRMED. FAILED: A failed quote status. RENEWED: A state used to depict a renewed prior booked policy (for example after an annual renewal payment is confirmed).

Events / Tickets

Event cancellation insurance or warranties - Offered via event or ticket booking platforms

Ticket and event sales services can present relevant cancellation insurance or ticket warranty policies in the event purchase booking path. Commonly, partners will integrate XCover using two key purchase process API calls: and . See a collection of common requests for this integration type, by contacting your CSE. Most integrations follow the below high level flow of events:

1. User browses event options and 2. Selects a event/ticket package 3. Partner platform sends a quote package payload to the create quote endpoint 4. User selects insurance options 5. User pays for tickets and insurance at checkout 6. 7. Partner sends a booking request to the create booking endpoint 8. XCover sends confirmation email including policy details and partner sends purchase confirmation and tax invoice.

FAQs

Frequently asked questions by developers, devops, business analysts

hashtag
Common FAQs by Insurance Vertical

Travel / Accommodation

Property / Renters

Apple Private Relay

How to add Cover Genius domains to your Apple Private Relay Email Sources

Due to the regulated nature of insurance customers must receive email communication about their coverage from the licensed entity distributing the insurance.

Usually, customers will receive these emails from our brands rentalcover.com, xcover.com and sweetly.com with no issues. The advent of new and convenient sign-up/in methods such as "Sign in with Apple" allows users to use an anonymous email address. When a user provides such an address to your app or website, the private relay email service routes all emails between you and the user. A private relay email service sends email to a recipient using an automatically generated email address. This hides the real email address to preserve privacy.

By default, this prevents third parties such as Cover Genius and its associated brands from sending emails to customers who opt into this service which presents a compliance issue for Cover Genius and you as a distribution partner.

Thankfully Apple provides a simple process for adding third-party domains. If you currently allow customers to "Sign in with Apple" or are planning to in the future please follow these steps to ensure customers receive emails from Cover Genius and its associated brands:

Events / Tickets FAQs

FAQs specific to insurance policies in the events space

chevron-rightWhat happens if the event is cancelled, does the customer get a refund on insurance, do we cancel the insurance?hashtag

If the event is cancelled then it is recommended to send a /cancellation request including the reason_for_cancellation as "Event cancelled". A refund will be issued to the customer only within the cooling off period. This period depends on region. For this reason it is recommended to perform a cancellation preview and confirmation and refund the amount returned in the preview response.

  • In Certificates, Identifiers & Profilesarrow-up-right, click More in the sidebar, then click Configure under Sign in with Apple for Email Communication.

  • In the Email Sources section, click the add button (+) on the top left.

  • Copy the following comma-delimited list: xcover.com,rentalcover.com,go.xcover.com,covergenius.com

  • Paste the comma-delimited list of Cover Genius domains that will be used for email communication, then click Next.

  • Confirm your entered email sources and click Register.

  • The table will display if the registered email source domain passed an SPF check.

  • All SPF checks should pass, if there is an issue please get in touch with your assigned CSE (Client Solutions Engineer) or Partner Growth Manager.

    Customers will now be able to receive email communication from Cover Genius and its associated brands.

    XCover.com/claimsarrow-up-right
    hashtag
    Dual Payment

    In rare circumstances, Partners and XCover may agree to operate a dual payment integration approach. This results in two transactions against the same payment method of the user in quick succession. The merchant of record for the product/service remains the Partner, and the merchant of record for Insurance remains XCover. If this is your preferred integration method, please speak to your Partnerships manager or Client Solutions Engineer.

    Please refer to the Dual Payment page for details on implementing this workflow.

    hashtag
    Split Payment

    In some circumstances, Partners may choose to integrate split payments (by using an approved payment provider) to split the transaction after payment collection, ie. One payment, two merchants (Partner and XCover), and two settlements (Partner and XCover). If this is your preferred integration method, please speak to your Partnerships manager or Client Solutions Engineer.

    Single Payment page
    Parcel / Shipping

    Product / Retail

    hashtag
    General API FAQs

    chevron-rightHow long does a typical partner integration take?hashtag

    Integrations typically take between 4 to 8 weeks. There are several factors affecting this timeline:

    • Partner developer resources, in regards to availability, capacity and numbers.

    • Customisations to the API

    • Testing

    • Pricing and bundle experimentation

    • Premium collection method (payment processing)

    chevron-rightXCover API p99 and p95 latencieshashtag

    /quotes endpoint without fast quote parameter p99 of 400ms

    /bookings endpoint p99 of 200ms

    chevron-rightCan you provide a Sandbox environment?hashtag

    A sandboxed environment will be provided to the partner once a commercial agreement is in place.

    The sandbox allows partners to create and modify quotes, create bookings, create. customers, test API responses and perform various other activities.

    Events / Tickets
    hashtag
    Post sale processes

    Modification - Only non financial modifications are applicable for this policy type.

    Cancellation - Due to the nature of event/cancellation policies cancellations are restricted in line with relevant regulations.

    hashtag
    Opt-out process

    In circumstances where a customer chooses to purchase tickets, but not the insurance offer. An opt-out request is used to notify XCover of a non-opted insurance quote. This assists with pricing and product offer data analysis and ultimately improved offers and sales results.

    create quote
    create booking
    Payment collection
    QuoteStatus:
        RECEIVED
        CONFIRMED
        CANCELLED
        DELETED
        PENDING_PAYMENT
        FAILED
        RENEWED 

    Find below an example of code that illustrates implementing the idempotency keys mechanism using Python's requests library.

    import json
    import requests
    from requests.adapters import HTTPAdapter
    from urllib3.util.retry import Retry
    
    from logging import getLogger
    
    logger = getLogger("xcover")
    
    url = "https://api.xcover.com/x/partners/YOUR_PARTNER_ID/instant_booking/"
    
    payload = json.dumps({
        # ... generated payload
    })
    
    headers = {
        # ... other required headers
        'x-idempotency-key': 'db55f986-c30c-4883-ac4f-0d2cfada6d3f'
    }
    retry_strategy = Retry(total=3, status_forcelist=[423, 429, 502, 503, 504], backoff_factor=5)
    
    with requests.Session() as session:
        session.mount(url, HTTPAdapter(max_retries=retry_strategy))
        response = session.post(url, headers=headers, data=payload)
        if response.status_code in (200, 409):
            if response.status_code == 409:
                # this request is a duplicate, let's log it as a warning
                logger.warning("duplicated xcover request")
    
            # successfull response
            print(response.json())
        else:
            # error response
            print(response.status_code)
    hashtag
    Post sale processes

    Modificationarrow-up-right Where a partner operates a management service for booked travel services, modifications to policies may be submitted to adjust for trip length (financial adjustment), or basic updates such as address changes for a policy profile (non-financial adjustment)

    Cancellationarrow-up-right Should a partner need to facilitate travel and policy cancellation (note that this differs from trip cancellation policies, which due to their nature, may not be cancelled), the below workflow should be referenced.

    hashtag
    Opt-out process

    In circumstances where a customer chooses to purchase travel, but not the insurance offer. An opt-out request is used to notify XCover of a non-opted insurance quote. This assists with pricing and product offer data analysis and ultimately improved offers and sales results.

    create quote
    create booking
    quote package payloadarrow-up-right
    Payment collectionarrow-up-right
    booking request payloadarrow-up-right
    Cancellationarrow-up-right
    Cancellationarrow-up-right

    API Responses

    XCover uses conventional HTTP response codes to indicate the success or failure of API requests. Error codes ranging from 200 to 299 indicate successful operations. Error codes ranging from 400 to 499 represent various error codes. Errors that can be resolved programmatically will result in an error code that briefly explains the error type and the reason for failure. 5xx codes indicate an unexpected error within the XCover application. In the unlikely event of a 5xx error, our engineering team will automatically receive a notification and will fix the issue as fast as possible.

    Status

    Description

    200 - OK

    Everything worked as expected

    201 - Created

    The request has been fulfilled and has resulted in one or more new resources being created

    Single Payment

    Overview of the payment process where the partner is the Merchant of Record (MoR)

    Partners operating in markets that allow the collection of insurance premiums by non-insurance companies may use this method of premium collection. This is the most common approach for XCover partner integrations, and offers significant efficiency, process, and approval rate benefits.

    If you are planning to sell insurance products to residents of the United States of America then it is likely the integration would use the Dual Payment method unless the insurance products are travel or warranty related, in which case you might be eligible for a Travel Retailers or general warranty exemption. Please contact your assigned Client Solutions Engineer (CSE) for more information.

    For partners planning to sell insurance products solely to residents of the Europe Union you might be eligible to become an Approved Representative of Cover Genius allowing you to collect premium. Otherwise you must use the Dual Payment method. Please contact your assigned CSE for more information.

    For partners planning to sell insurance products to residents elsewhere please contact your assigned CSE for more information on how to collect premiums if you wish to remain the Merchant of Record.

    Optionally, Partners may choose to track the payment/checkout item using meta-data fields as indicated below, in the booking or instant booking request:

    circle-info

    No integration steps are required for a single payment implementation approach

    Error Types

    Error type and management

    hashtag
    API Errors

    (Stated in headers): , global environment based Basic approach: “Does the API respond with a 20X response?” Useful for: - General API function - Confirmation of actions - Basic operation validation

    Example of use: - Was a quote request received? - Was a booking request received? - Was there any full failures

    Data Formats

    The API adheres to the REST principles and provides developers-friendly, predictive and logically organised resource-oriented structure.

    hashtag
    Dates

    XCover API accepts date and date-time parameters in the format as defined by , for example 2018-01-01

    400 - Bad Request

    The request was not accepted, often due to the wrong format of the request

    401 - Unauthorized

    No valid API key was provided

    404 - Not Found

    The requested resource doesn't exist

    409 - Conflict

    The request conflicts with another request, perhaps due to the usage of the same idempotency key

    422 - Unprocessable Entity

    Validation failed or logical error

    429 - Too Many Requests

    Too many requests hit the API too quickly. We recommend an exponential back-off of your requests.

    500, 502, 503, 504 - Server Errors

    Something went wrong on XCover side

    ,
    2018-01-01T17:00:01Z
    ,
    2018-01-01T17:00:00+01:00
    ,
    2018-01-01T17:00:01.04399-04:00
    . We encourage partners to keep the original timezone in contrast to sending all dates in UTC. Having original timezone can helps XCover to deal with potential issues with DST changes.

    hashtag
    Country Codes

    All country codes provided in API requests must be compliant with ISO 3166-1 Alpha-2arrow-up-right standard.

    hashtag
    Currency

    Currency must be compliant with 3-letter codes as defined by ISO 4217arrow-up-right.

    hashtag
    Languages

    Language input must be compliant with 2-letter codes as defined but ISO 639-1arrow-up-right standard. Variations of base languages use a variant indicator, for example: "en-us" to specify english, united states variant (where applicable).

    hashtag
    Telephone (Mobile Phone) numbers

    Phone numbers provided (at booking stage) should predominantly be of personal mobile/cell type, with the format of +[country_code] plus a phone number, e.g., +61412345678arrow-up-right In some use cases, XCover will validate the phone number format (to allow sending SMS policy and claim communications to the customer), and return an error if an invalid format is provided.

    RFC 3339, section 5.6arrow-up-right
      "partner_metadata": {
            "trip_name": "Holiday trip",
            "primary_contact": "Dana Skulky",
            "primary_contact_number": "+123123123",
            "primary_contact_email": "[email protected]",
            "custom_platform_transaction_reference": "XZY123" }
    hashtag
    Logic Errors

    Logic errors are present in API response body, are case by case, and policy based. They are often the indicator of a problem with the booking or quote, and may represent a partial booking failure. Always look for the "errors" array. Basic approach: “Does the request contain any content concerns, or logical failures?” Useful for: - Calculation issues - Confirmation over various state actions (does a booking match a quote expectation) - In depth rule validation Example of use: - Was a quote request valid? - Was a booking request complete, were there any partial failures?

    Logic error management:

    1. All quotes in a quote or booking request should be confirmed individually (not just package, or package status). An erroneous quote will return a "null" response for the object. Example:

      a quote request and components of the response
    2. Booking request items should be confirmed similarly Example, basic elements present, first quote id sent also present

      A booking request and part of the response

    3. Booking request shouldn't have errors, mismatched values, or null quote responses

    In the below example, the booking was successful, but partially failed due to a component quote having a logic error.

    A booking response showing package section, and a quote response component missing from the package total, with error
    1. A null quote component will result in a differing value for the policy bundle, even in a confirmed state.

    Part of a booking request and response, showing the first quote in response does not match the first in request.

    Understanding and monitoring for these response variations and errors will greatly reduce misalinged bookings and improve customer satisfaction.

    In API Guidearrow-up-right

    Displaying the Quote

    Presenting the Insurance/Protection offer in the purchase path

    Partners will often present an insurance offer after customers have selected a core product (such as a laptop, travel booking, event tickets, etc.). There are key components to presenting an insurance/protection offer, where 1-3 are dynamic from API response, and the items under 4 are static (provided or approved by Cover Genius CSE):

    1. Price

    2. Disclaimer

    3. Policy wording link

    4. Product name, inclusions, panel content, Trustpilot banner, and graphical elements.

    Cover Genius offers a standard or customised design structure optimised for the partner specific use case (ie. Travel, Parcel, Ticket, Retail, etc.). A Travel example is presented below:

    Legend: Red = Static content , Blue = API response

    A Trustpilot.com rating for XCover, demonstrates reliability

    B Inclusions content, taken from XCover supplied content

    API Response content:

    1. Price, per ticket (division of "total_price"by number of travellers/units) or full price if in "add" button ("total_price")

    2. Disclaimer, taken from "content":{ "disclaimer"} field

    3. Policy Wording, taken from the "pds_url" quote response field, for example: "view wording" as a hyperlink of: "ABCD-1234-INS"

    Generally, the quote display should address:

    1. Customer relevance - Does the quote/product presentation make sense for this purchase flow?

    2. Compliance and regulatory requirements - Does the offer meet requirements for disclaimers, price, statements of fact, and availability of policy wording?

    3. Marketing copy and trust - Is the offer likely to be understood and selected by the customer? Is the offer trusted/compelling?

    https://www.xcover.com/en/pds/arrow-up-right
    Travel Protection Offer Panel Example

    API Authentication

    All HTTP requests sent to the XCover API must be signed with a special signature. The signature must be provided in the Authorization header. In order to generate signature partners need to have a valid API key and a secret signing key. Please note, a new signature must be generated for every request.

    hashtag
    Generate HMAC Signature

    XCover API uses HMAC-basedarrow-up-right authentication.

    To authenticate API request the client application needs to perform the following steps:

    1. Prepare request data for signing.

    2. Sign data using one of the HMAC algorithms such as SHA1 (dprecated), SHA256 , SHA384 or SHA512 algorithms.

    circle-exclamation

    Please note the date string to be signed should be in e.g. Thu, 04 Nov 2021 18:07:11 GMT

    The date must be padded e.g. 04.

    circle-exclamation

    Please note the signature must be a base64 encoded strictly matching RFC 4648. Some programming languages will URL safe base64 encode which will replace the "+" and "/" characters with "-" and "_" respectively. This will cause a "Signature string does not match!" error.

    Below you can see an example code implementing these steps, this code can be used as a pre-request script in Postman.

    hashtag
    Testing API Keys

    XCover API offers provides access to staging environment that can be used to test the platform during the integration. To access the sandbox environment partners need to use testing API key that is provided by XCover team.

    Encode the signature using Base64 encoding.

  • URL encode the result of the previous step.

  • Prepare Authorization header containing the Base64 and URL encoded signature string, API Key and the algorithm used, for example hmac-sha512.

  • RFC 822 Section 5.1 formatarrow-up-right
    var apiKey = environment.api_key,
        apiSecret = environment.api_secret,
        date = (new Date()).toUTCString(),
        sigContent = 'date: ' + date,
        sig = CryptoJS.HmacSHA512(sigContent, apiSecret).toString(CryptoJS.enc.Base64
        authHeader = 'Signature keyId="' + apiKey + '",algorithm="hmac-sha512",signature="' + encodeURIComponent(
    
    pm.environment.set("authHeader", authHeader);  // Authorization header
    pm.environment.set("date", date);  // Date header
    import requests
    # Module defined below
    from auth import SignatureAuth
    
    # Prodivded by the assigned Client Solutions Engineer (CSE)
    XCOVER_API_KEY = ""
    XCOVER_SECRET = ""
    
    def _apply_auth(request):
        request.headers.update(
            SignatureAuth(XCOVER_API_KEY,
                          XCOVER_SECRET).sign()
        )
        return request
    
    session = requests.Session()
    request = requests.Request('POST', url, json=payload, headers=headers
    response = session.send(_apply_auth(request.prepare()))
    
    print(response.status_code)
        
    # auth.py
    """
    Authentication related module.
    """
    from __future__ import unicode_literals
    ​
    from base64 import b64encode
    from hashlib import sha512
    import hmac
    from urllib.parse import quote
    ​
    from datetime import datetime
    from time import mktime
    from wsgiref.handlers import format_date_time
    ​
    def http_date():
        now = datetime.utcnow()
        return format_date_time(mktime(now.timetuple()))
    ​
    ​
    class SignatureAuth:
        """Class for basic authentication support."""
    ​
        def __init__(self, key, secret):
            self._key = key
            self._secret = secret
            self._headers = None
    ​
        def create_signature(self, date):
            raw = 'date: {date}'.format(date=date)
            hashed = hmac.new(self._secret.encode('utf-8'), raw.encode('
            return quote(b64encode(hashed), safe='')
    ​
        def build_signature(self, signature, key):
            template = ('Signature keyId="%(key)s",algorithm="hmac-sha512",'
                        'signature="%(signature)s"')
    ​
            return template % {
                'key': key,
                'signature': signature
            }
    ​
        def sign(self):
            date = http_date()
            auth = self.build_signature(signature=self.create_signature(date), key=self.
    ​
            return {
                'Date': date,
                'Authorization': auth,
                'X-Api-Key': self._key,
            }
    

    Renewal Workflow

    For certain policy types (eg. Warranty/Product Insurance/Renters) a renewal period may be established for ongoing protection. Eg. A laptop warranty with an annual renewal cycle. Or a renters insurance product

    Before the policy end date the customer should be sent a notification that their policy is expiring and will be (auto) renewed (depending on their settings in your platform).

    An example of the renewal workflow is illustrated below.

    hashtag
    Quote for Renewal

    PATCH https://api.xcover.com/x/partners/:partner_id/renewals/:quote_package_id/quote_for_renewal/

    Generates an updated booking with a renewal price that should be charged to the customer. It also contains any other changes to benefits/limits or policy wording that may have changed since the first policy was purchased. Request contains no payload.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Confirm Renewal

    To confirm a renewal once payment has been collected a request to the following endpoint needs to be made.

    hashtag
    Confirm Renewal

    POST https://api.xcover.com/x/partners/:partner_id/renewals/:quote_package_id/confirm/:renewal_id/

    Confirms the renewal and issues the updated policy to the customer.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Request Body

    Name
    Type
    Description

    Fast Quote (Optional)

    Sending a Fast Quote Request

    The Fast Quote endpoint is available to partners who meet specific criteria outlined by Cover Genius. Please contact your assigned Client Solutions Engineer (CSE) to discuss use of the Fast Quote endpoint.

    Fast Quote request is commonly issued at product pages to display selective information about the policy which could include:

    • Policy Price

    • Product Disclosure Statement

    • Legal Disclaimer

    • Inclusions/Exclusions

    hashtag
    Making a Fast Quote Request

    Making a POST request to the fast quotes endpoint returns one or several insurance products based on the request. The request to the fast quotes endpoint is a list (as shown below). At the top level of the request, include the common fields for the quotes like currency , customer_country , customer_language along with boolean field fast quoteset as true.

    Every Fast Quote request should have the minimum required information to get a quote for the specific Product. For instance, in the case of Product Insurance - we need the item category, price, name, description.

    The response could have the policy details, static PDS and the price in the requested currency for the supplied parameters. This information can be presented to the customer to move them to the Booking stage.

    Fast Quote is followed by Instant Booking as the next stage in the user journey where insurance is selected.

    An example of fast quote request can be found below.

    hashtag
    Request a Quote

    POST https://api.xcover.com/x/partners/:partner_id/quotes/?fast_quote=1

    This API call will retrieve the most relevant policies available for distribution

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Query Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description
    circle-info

    In the request body, you can send multiple quote . This means that in the case of a 200ok, you will get back a quote for each request. You only need to make one API call to get many quotes.

    using System;
    using System.Web;
    using System.Text;
    using System.Security.Cryptography;
    
    class Program {
        static void Main(string[] args) {
            String rfc1123DateString = DateTime.Now.ToString("R");
            String apiKey = "";
            String apiSecret = "";
    	String signatureContentString = "date: " + rfc1123DateString;
    	HMACSHA512 hmacsha512 = new HMACSHA512(Encoding.UTF8.GetBytes(apiSecret));
    	byte[] bytes = hmacsha512.ComputeHash(Encoding.UTF8.GetBytes(signatureContentString));
    	String signature = Convert.ToBase64String(bytes);
    	String authHeader = "Signature keyId=\""+apiKey+"\",algorithm=\"hmac-sha512\",signature=\""+HttpUtility.UrlEncode(signatureString)+"\"";
    	return authHeader;
        }
    }
    require "base64"
    require "time"
    require 'openssl'
    require 'cgi/util'
    
    def auth_header
      rfc1123_date_string = Time.now.httpdate
      api_key = ""
      api_secret = ""
      sig_content = "date: #{rfc1123_date_string}"
      sig = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha512'), api_secret, sig_content)
      encoded_sig = Base64.strict_encode64(sig)
      "Signature keyId=\"#{api_key}\",algorithm=\"hmac-sha512\",signature=\"#{CGI.escape(encoded_sig)}\""
    end
    )
    ,
    sig
    )
    +
    '
    "
    '
    ;
    )
    utf-8
    '
    ),
    sha512
    ).
    digest
    ()
    _key
    )

    partner_id

    string

    Unique Partner Code

    fast_quote

    boolean

    true

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    requestsarrow-up-right
    {
      "currency": "AUD",
      "quotes": {
        "0": {
          "policy_start_date": "2021-03-28T10:50:20.350000+00:00",
          "policy_end_date": "2022-03-28T10:50:20.350000+00:00",
          "price": 15,
          "price_formatted": "A$15.00",
          "policy": {
            "policy_type": "product_insurance",
            "policy_name": "Full Furniture Protection",
            "policy_code": "PFUO01CG",
            "policy_version": "1d69c52e-580c-4a7b-b87c-7658f8057a86",
            "category": "furniture-insurance",
            "content": {
              "title": "Full Furniture Protection",
              "header": "Furniture Cover For Life",
              "description": "Theft, damage and expanded warranty that covers the product for life. Cancel anytime.",
              "optout_msg": "<p>.</p>",
              "inclusions": [
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ /year. Cancel anytime.",
                  "description": "Full replacement if the item can’t be repaired."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ /year. Cancel anytime.",
                  "description": "Cancel anytime."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ /year. Cancel anytime.",
                  "description": "Covers theft."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ /year. Cancel anytime.",
                  "description": "Covers repairs when your item is damaged."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ /year. Cancel anytime.",
                  "description": "Covers what the manufacturer's warranty doesn’t."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ /year. Cancel anytime.",
                  "description": "Extends warranty protection for the life of the policy."
                }
              ],
              "disclaimer": "<p>I am over 18 and agree to the terms of this policy. This cover is powered by XCover.com and underwritten by Pacific International Insurance Pty Ltd.</p>"
            }
          },
          "pds_url": "https://www.xcover.com/en/pds/__I6F3D__ffp-pacific/",
          "files": []
        }
      },
      "errors": {}
    }
    {
        "currency": "AUD",
        "customer_country": "AU",
        "customer_language": "en",
        "partner_transaction_id": "ABCD-EFGG-0000-0000",
        "request": [
            {
                "policy_type": "product_insurance",
                "policy_type_version": "1",
                "policy_start_date": "2021-03-28T10:43:56.371Z",
                "last_used_date": "2021-03-28",
                "purchase_date": "2021-03-28",
                "renewal_period": "annual",
                "retail_value": 300,
                "category": "furniture-insurance",
                "title": "Bed Base",
                "brand": "BaseWorks",
                "model": "Syntia XXL",
                "description": "Durable, king sized bed frame",
                "condition": "new"
            }
        ]
    }

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID (INS)

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-API-Key

    string

    API Key

    partner_id

    string

    Unique Partner ID

    quote_package_id

    string

    Quote Package ID (INS)

    renewal_id

    string

    ID referencing the renewal

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-API-Key

    string

    API Key

    id*

    String

    The policy quote requires updating.

    policy_start_date*

    String

    The new policy start date

    Instalments Workflow

    This feature allows customers to pay for an insurance product that covers them for a period of time (annually) in instalments instead of up-front.

    The above diagram illustrates the API calls and webhook events made in order to record the payment of each instalment.

    hashtag
    Policy Instalment Options

    When a quote request is made for a policy that allows payment to be made in instalments an instalment_plans property will be returned in the API response.

    The amount to surface to the customer is reflected in the first_instalment_amount attribute.

    hashtag
    Confirming Instalment Plan

    The instalment plan can be selected by provide the desired instalment name in the instalment_plan attribute during a booking request.

    hashtag
    Processing a Periodic Payment

    Depending on the payment services provider a periodic payment will generate a webhook event. This event should be processed by your platform and the following API calls should be made to the instalments endpoint.

    hashtag
    Fetching Payment Plan Details

    In order to record an instalment the correct instalment_id needs to be provided. The next scheduled instalment_id can be obtained by performing a GET request against the instalment endpoint.

    hashtag
    Fetch Instalment Details

    GET https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/instalments/

    Returns instalment details including the payment schedule.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Confirming an Instalment Transaction

    To confirm the instalment once a payment attempt has been made a request to the following endpoint needs to be made containing the instalment_id from the previous step.

    hashtag
    Confirm Instalment

    POST https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/instalments/

    Confirms the instalment providing whether the payment was successful or not.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    {
        "renewal_id": "xeJsp-UcMlR-FXv0U-UPD",
        "quotes": [
            {
                "id": "25fb6ea3-3236-4743-b077-ce77b8631fe0",
                "policy_start_date": "2021-07-27T13:25:00+00:00",
                "policy_end_date": "2021-08-26T13:25:00+00:00",
                "status": "RECEIVED",
                "price": 16.0,
                "price_formatted": "US$16.00",
                "policy": {
                    "policy_type": "renters_insurance",
                    "policy_name": "Renters Insurance",
                    "policy_code": "RE01RHI",
                    "policy_version": "cca6cb3a-5cdf-412b-959a-9911e30e7dd1",
                    "category": null,
                    "content": {},
                    "underwriter": {
                        "disclaimer": "This plan is arranged by XCover.com and underwritten by Markel International Insurance Company Limited",
                        "name": "Markel International Insurance Company Limited"
                    },
                    "claim_selector_id": "",
                    "show_benefits": true
                },
                "insured": [
                    {
                    }
                ],
                "tax": {
                    "total_tax": 0.0,
                    "total_amount_without_tax": 16.0,
                    "total_tax_formatted": "US$0.00",
                    "total_amount_without_tax_formatted": "US$16.00",
                    "taxes": [
                    ]
                },
                "duration": "30 00:00:00",
                "benefits": [
                    {}
                ],
                "commission": {
                },
                "created_at": "2021-06-22T16:04:55.416289Z",
                "confirmed_at": null,
                "updated_at": "2021-06-22T16:04:55.416306Z",
                "cancelled_at": null,
                "is_renewable": false,
                "is_pricebeat_enabled": null,
                "cover_amount": null,
                "cover_amount_formatted": null,
                "pds_url": "https://www.xcover.com/en-us/pds/4XNE7-B8YGP-INS?policy_type=renters_insurance_v1",
                "attachments": [],
                "files": [],
                "extra_fields": {
                },
                "surcharge": {
                    "total_amount": null,
                    "total_amount_formatted": null,
                    "surcharges": null
                },
                "discount_price": 16.0,
                "discount_price_formatted": "US$16.00",
                "discount_amount": 0.0,
                "discount_amount_formatted": "US$0.00"
    }
    {
    }
    {
        "quotes": [
            {
                "id": "{{quote_1_id}}",
                "policy_start_date": "{{policy_start_date}}",
                "insured": [
                    {
                        ...
                    }
                ]
            }
        ]
    }

    partner_id

    string

    Unique Partner ID

    quote_package_id

    string

    Quote Package ID (INS)

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-API-Key

    string

    API Key

    partner_id

    string

    Unique Partner ID

    quote_package_id

    string

    Quote Package ID (INS)

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-API-Key

    string

    API Key

    Booking

    Booking process overview

    The Booking endpoint is used to confirm the purchase of the insurance offering.

    If a customer has chosen to purchase the insurance product(s) offered in the previous Quote step the customer must complete the checkout process with payment being successfully collected before proceeding with the following steps to confirm and distribute the policy.

    After customers complete the booking process and insurance premiums are collected by the partner a request to the booking endpoint must be made. Validations: 1. Given the initial status after the Quote Request is RECEIVED , when a booking request is submitted, the expected status returned in response payload after a successful booking request is CONFIRMED. 2. The price field should also be validated, to confirm the final price matches the quote stage price. 3. The presence of an "errors" object in response payload indicates an important logic error in booking, that should be noted. A CONFIRMED INS is considered booked, sold, provisioned, and will result in a policy confirmation being submitted to the user.

    hashtag
    Make a Booking

    POST https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id

    The booking endpoint accepts a JSON payload against the URI containing the quote package ID returned in the quote request. The payload consists of policyholder information (most likely the same as the customer) and a list of quotes selected for purchase. the most relevant policies available for distribution

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    Webhooks

    Webhooks allow partners to be notified when important events happen in XCover. When one of those events are triggered, we will send an HTTP POST payload to the webhook's configured URL. Webhooks can be used to send a customer notification, initiate a policy renewal process or perform any custom logic. To establish webhooks, partners can provide to their CSE: 1. Listener URL 2. Authentication Key & Secret 3. Support URL 4. Requested events (CSE may propose or suggest these as part of solutioning).

    We will provide an HTTP signature generated on our end in Authorization header and the api key itself in X-Api-Key header. We will base the signature on your provided key pair. You can use the same HMAC based algorithm for signature verification, if required. Please use the information from the signature header to check which hash algorithm is used in order to validate the request. Currently, webhook requests are signed using sha256 algorithm.

    {
        "quotes": {
            "0": {
                ...,
                "instalment_plans": [
                    {
                        "name": "1year-monthly",
                        "label": "1Year-Monthly",
                        "amount": 308.0,
                        "first_instalment_amount": 25.67
                    }
                ]
            }
        }
    }
    
    {
        "quotes": [
            {
                "id": "UUID",
                "instalment_plan": "1year-monthly"
            }
        ],
        "policyholder": {
            ...
        }
    }
    {
        "quotes": [
            {
                "id": "95230b02-9f7f-463f-be6d-81b46e3c5955",
                "next_payment": {
                    "id": "ba718007-964a-4115-b0f9-f746f20d6bdd",
                    "number": 2,
                    "quote": "95230b02-9f7f-463f-be6d-81b46e3c5955",
                    "period_start_date": "2021-09-25T02:47:00Z",
                    "period_end_date": "2021-10-24T02:47:00Z",
                    "status": "UNPAID",
                    ..
                    "tax": {
                        "taxes": [],
                        "total_amount_without_tax": "7.50",
                        "total_amount_without_tax_formatted": "€7.50"
                    },
                    "surcharges": {},
                    "payment_failures": null
                },
                "paid_until": "2021-08-25T02:47:12.115862Z",
                "payment_schedule": [
                    {
                        "id": "2b0c7a96-be7a-450b-86b1-04feb5813b37",
                        "number": 1,
                       ....
                    },
                "total_amount_paid": 7.5,
                "total_amount_due": 82.5
            }
        ],
        "currency": "USD"
    }
    {
        // Response
    }
    {
      "quotes": [
        {
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "instalment_id": "286b1dc2-e2f0-40ea-bc39-079ef019b7d0",
          "instalment_number": 0,
          "payment_attempted_date": "2019-08-24T14:15:22Z",
          "payment_status": "PAID",
          "payment_failures": {}
        }
      ]
    }
    In case of multiple failures with the webhook notification, where the partner supplied endpoint does not respond with a 200 OK, we will try the webhook for up to 3 times.

    hashtag
    Authentication

    Your webhook API endpoint should implement HMAC authentication to verify that the API request was sent and signed by XCover.

    import base64
    import hashlib
    import hmac
    from
    

    hashtag
    BOOKING_CREATED

    Description: The payload is sent in a webhook to the Partner whenever the Booking is Created through an API Request.

    hashtag
    BOOKING_UPDATED

    Description: The payload is sent to the Partner whenever the Booking is Updated through an API Request

    hashtag
    BOOKING_CANCELLED

    Description: The payload is sent to the Partner whenever the Booking is cancelled through an API Request

    hashtag
    RENEWAL_CREATED

    Description: Used to notify partner that the policy has been renewed.

    Example:

    hashtag
    RENEWAL_NOTIFICATION

    Description: Used to notify partner about approaching renewal.

    Example:

    hashtag
    RENEWAL_DUE

    Description: Sent on the renewal due date, the customer policy will be active until the end of the grace period (expiry_date).

    Example:

    hashtag
    RENEWAL_EXPIRED

    Description: Sent on the renewal expiry date, the customer policy is no longer renewable after this event is triggered.

    Example:

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    Dual Payment

    Overview of the dual payment process where Cover Genius is the Merchant of Record

    Partners that are at a minimum of PCI DSS SAQ A compliant are able to utilise the XPay API to process the insurance transaction. This will make Cover Genius the Merchant of Record (MoR).

    After a customer selects the insurance product and proceeds to the checkout stage, the payment information (credit card details) must be collected and transmitted through the customer tokens endpoint.

    hashtag
    Sending Payment Details

    The XPay API uses a long lived JSON Web Token (JWT) which will be provided to you by the assigned Client Solutions Engineer (CSE).

    hashtag
    Tokenize Card Details

    POST https://api.xpay.xcover.com/customer-tokens

    This API call will tokenize the customers credit card details.

    hashtag
    Headers

    Name
    Type
    Description
    circle-info

    Note, the /cutomer-tokens endpoint will not charge the customer, just tokenise their payment details. The customer is charged on the subsequent /bookings API call.

    hashtag
    Making a Booking

    After a successful response from the customer tokens endpoint, the partner must confirm the booking by sending a request to the booking endpoint with the customer_token_id set to the id from the previous step, this will charge the customer.

    hashtag
    Make a Booking

    POST https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id

    This API call will retrieve the most relevant policies available for distribution

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description
    circle-info

    Once payment has been finalised policy documents, certificate of insurance will then be issued to the customer.

    {
      'event': 'BOOKING_CREATED',
      'payload': {
        'id': '8AMKH-KQ8NR-INS',
        'status': 'CONFIRMED',
        'currency': 'USD',
        'total_price': 68.71,
        'total_price_formatted': 'US$68.71',
        'partner_transaction_id': null,
        'quotes': [
          {
            'id': '8bfb48ab-6947-4f34-a932-c4dcede958f6',
            'policy_start_date': '2023-10-08T00:00:49.751227+00:00',
            'policy_end_date': '2023-10-13T00:00:49.751247+00:00',
            'status': 'CONFIRMED',
            'price': 68.71,
            'price_formatted': 'US$68.71',
            'policy': {
              'policy_type': 'travel_medical',
              'policy_name': 'PolicyVersion 0',
              'policy_version': 'e94df011-ee0b-44a1-bdb1-1dd05cb67fc7'
            },
            'duration': '5 00:00:00.000020',
            'total_renewed_times': 0
          }
        ]
      }
    }
    {
      'event': 'BOOKING_UPDATED',
      'payload': {
        'id': 'TKBZN-XGPAX-INS',
        'status': 'CONFIRMED',
        'currency': 'USD',
        'total_price': 68.71,
        'total_price_formatted': 'US$68.71',
        'partner_transaction_id': null,
        'quotes': [
          {
            'id': '4d3b7919-9372-4c54-bdaf-05f770ffc2fc',
            'policy_start_date': '2023-10-08T01:09:19.649112+00:00',
            'policy_end_date': '2023-10-13T01:09:19.649133+00:00',
            'status': 'CONFIRMED',
            'price': 68.71,
            'price_formatted': 'US$68.71',
            'policy': {
              'policy_type': 'travel_medical',
              'policy_name': 'PolicyVersion 0',
              'policy_version': '1637bc92-0299-4624-8f38-c9b9e15d379e'
            },
            'duration': '5 00:00:00.000021',
            'total_renewed_times': 0
          }
        ]
      }
    }  
    {
      'event': 'BOOKING_CANCELLED',
      'payload': {
        'id': 'HMZZ8-3YYHZ-INS',
        'status': 'CANCELLED',
        'currency': 'USD',
        'total_price': 0.0,
        'total_price_formatted': 'US$0.00',
        'partner_transaction_id': null,
        'quotes': [
          {
            'id': 'e0925616-824d-4216-bd18-450fb669c017',
            'policy_start_date': '2023-10-08T01:19:41.766661+00:00',
            'policy_end_date': '2023-10-13T01:19:41.766719+00:00',
            'status': 'CANCELLED',
            'price': 68.71,
            'price_formatted': 'US$68.71',
            'policy': {
              'policy_type': 'travel_medical',
              'policy_name': 'PolicyVersion 0',
              'policy_version': 'dd5aef78-5ce5-4f19-a455-968780b89ea2'
            },
            'duration': '5 00:00:00.000058',
            'total_renewed_times': 0,
            'refund_value': 68.71
          }
        ]
      }
    }
    {
        "event": "RENEWAL_CREATED",
        "payload": {
            "id": "daSJp-fwdoj-REN",
            "package_id": "GKDK9-CECQU-INS",
            "quote_id": "c8ddb161-e3d9-455b-9621-96df90f17acb",
            "status": "ACTIVE",
            "start_date": "2019-02-25T13:00:00Z",
            "notification_date": "2018-11-22T00:21:41Z",
            "due_date": "2019-02-25T13:00:00Z",
            "expiry_date": "2018-11-21T22:56:01Z",
            "cancelled_on": null,
            "paid_on": "2019-02-25T13:00:00Z",
            "created_at": "2018-11-21T04:15:12.175468Z"
        }
    }
    {
        "event": "RENEWAL_NOTIFICATION",
        "payload": {
            "id": "daSJp-fwdoj-REN",
            "package_id": "GKDK9-CECQU-INS",
            "quote_id": "c8ddb161-e3d9-455b-9621-96df90f17acb",
            "status": "ACTIVE",
            "start_date": "2019-02-25T13:00:00Z",
            "notification_date": "2018-11-22T00:21:41Z",
            "due_date": "2019-02-25T13:00:00Z",
            "expiry_date": "2018-11-21T22:56:01Z",
            "cancelled_on": null,
            "paid_on": null,
            "created_at": "2018-11-21T04:15:12.175468Z"
        }
    }
    {
        "event": "RENEWAL_DUE",
        "payload": {
            "id": "daSJp-fwdoj-REN",
            "package_id": "GKDK9-CECQU-INS",
            "quote_id": "c8ddb161-e3d9-455b-9621-96df90f17acb",
            "status": "DUE",
            "start_date": "2019-02-25T13:00:00Z",
            "notification_date": "2018-11-22T00:21:41Z",
            "due_date": "2019-02-25T13:00:00Z",
            "expiry_date": "2018-11-21T22:56:01Z",
            "cancelled_on": null,
            "paid_on": null,
            "created_at": "2018-11-21T04:15:12.175468Z"
        }
    }
    {
        "event": "RENEWAL_DUE",
        "payload": {
            "id": "daSJp-fwdoj-REN",
            "package_id": "GKDK9-CECQU-INS",
            "quote_id": "c8ddb161-e3d9-455b-9621-96df90f17acb",
            "status": "DUE",
            "start_date": "2019-02-25T13:00:00Z",
            "notification_date": "2018-11-22T00:21:41Z",
            "due_date": "2019-02-25T13:00:00Z",
            "expiry_date": "2018-11-21T22:56:01Z",
            "cancelled_on": null,
            "paid_on": null,
            "created_at": "2018-11-21T04:15:12.175468Z"
        }
    }
    {
      "id": "string",
      "status": "string",
      "currency": "str",
      "total_price": 0,
      "total_price_formatted": "string",
      "partner_transaction_id": "string",
      "created_at": "2021-01-04T17:10:37Z",
      "updated_at": "2021-01-04T17:10:37Z",
      "pds_url": "http://example.com",
      "security_token": "string",
      "quotes": [
        {
          "id": "string",
          "policy_start_date": "2021-01-04T17:10:37Z",
          "policy_end_date": "2021-01-04T17:10:37Z",
          "status": "string",
          "price": 0,
          "price_formatted": "string",
          "policy": {
            "policy_type": "string",
            "policy_name": "string",
            "policy_code": "string",
            "policy_version": "string",
            "category": "string",
            "content": {
              "title": "string",
              "header": "string",
              "description": "string",
              "optout_msg": "string",
              "inclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "exclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "disclaimer": "string",
              "disclaimer_html": "string",
              "payment_disclaimer": "string",
              "in_path_disclaimer": "string"
            },
            "underwriter": {
              "disclaimer": "string",
              "name": "string"
            }
          },
          "insured": [
            {
              "id": "string",
              "first_name": "string",
              "middle_name": "string",
              "last_name": "string",
              "email": "[email protected]",
              "country": "AF",
              "address1": "string",
              "address2": "string",
              "city": "string",
              "postcode": "string",
              "region": "string",
              "phone": "string",
              "age": 0,
              "birth_date": "2021-01-04",
              "metadata": {
                "property1": "string",
                "property2": "string"
              },
              "company": "string"
            }
          ],
          "tax": {
            "total_tax": 0,
            "total_amount_without_tax": 0,
            "total_tax_formatted": "string",
            "total_amount_without_tax_formatted": "string",
            "taxes": [
              {
                "tax_amount": 0,
                "tax_code": "string",
                "tax_amount_formatted": "string"
              }
            ]
          },
          "duration": "string",
          "benefits": [
            {
              "description": "string",
              "limit_description": "string",
              "limit": 0,
              "limit_policy_currency": 0,
              "limit_formatted": "string",
              "limit_policy_currency_formatted": "string",
              "limit_per_unit": 0,
              "limit_per_unit_policy_currency": 0,
              "limit_per_unit_formatted": "string",
              "limit_per_unit_policy_currency_formatted": "string",
              "excess_description": "string",
              "excess": 0,
              "excess_policy_currency": 0,
              "excess_formatted": "string",
              "excess_policy_currency_formatted": "string",
              "minimum_claim_amount": 0,
              "minimum_claim_amount_policy_currency": 0,
              "minimum_claim_amount_formatted": "string",
              "minimum_claim_amount_policy_currency_formatted": "string"
            }
          ],
          "commission": {
            "total_commission": 0,
            "total_commission_formatted": "string"
          },
          "created_at": "2021-01-04T17:10:37Z",
          "confirmed_at": "2021-01-04T17:10:37Z",
          "updated_at": "2021-01-04T17:10:37Z",
          "cancelled_at": "2021-01-04T17:10:37Z",
          "is_renewable": true,
          "cover_amount": 0,
          "cover_amount_formatted": "string",
          "pds_url": "http://example.com",
          "attachments": "string",
          "files": "string",
          "extra_fields": {
            "property1": "string",
            "property2": "string"
          },
          "next_renewal": {
            "id": "string",
            "package_id": "string",
            "quote_id": "string",
            "status": "string",
            "start_date": "2021-01-04T17:10:37Z",
            "notification_date": "2021-01-04T17:10:37Z",
            "due_date": "2021-01-04T17:10:37Z",
            "expiry_date": "2021-01-04T17:10:37Z",
            "cancelled_on": "2021-01-04T17:10:37Z",
            "paid_on": "2021-01-04T17:10:37Z",
            "created_at": "2021-01-04T17:10:37Z"
          },
          "can_be_cancelled": true,
          "errors": [
            "string"
          ]
        }
      ],
      "coi": {
        "pdf": "http://example.com",
        "url": "http://example.com"
      },
      "account_url": "http://example.com",
      "policyholder": {
        "first_name": "string",
        "middle_name": "string",
        "last_name": "string",
        "email": "[email protected]",
        "phone": "string",
        "country": "AF",
        "age": 0,
        "address1": "string",
        "address2": "string",
        "city": "string",
        "postcode": "string",
        "region": "string",
        "secondary_email": "[email protected]",
        "birth_date": "2021-01-04",
        "company": "string",
        "tax_payer_id": "string"
      },
      "total_tax": 0,
      "total_tax_formatted": "string",
      "total_premium": 0,
      "total_premium_formatted": "string"
    }
    {
        "quotes": [
            {
                "id": "d7780bcc-c47c-446b-a9fb-b41f62fc1e81",
                "insured": [
                    {
                        "first_name": "User",
                        "last_name": "Example",
                        "birth_date": "1991-03-11",
                        "email": "[email protected]"
                    }
                ]
            }
        ],
        "policyholder": {
            "first_name": "User",
            "last_name": "Example",
            "birth_date": "1991-03-11",
            "email": "[email protected]",
            "country": "GB"
        }
    }
     "id": "ABCD-12345-INS",
        "status": "CONFIRMED",
        "currency": "AUD",
        "total_price": 100.0,
    urllib
    .
    parse
    import
    unquote
    # You will provide your assigned Client Solution Engineer with an API key and secret
    # they will configure the XCover platform
    api_key = "--your-api-key--"
    secret = "--your-secret--"
    # This is just an example, you would obtain this from your server library
    # E.g. a Flask server
    # from flask import Flask, request
    # app = Flask(__name__)
    # @app.post('/my-xcover-webhook')
    # def xcover_webhook():
    #. request_headers = request.headers
    # return do_everything_below()
    request_headers = {
    'X-Api-Key': '--api-key--',
    'Authorization': '--signature--',
    'Date': 'Thu, 27 Feb 2025 05:01:47 GMT'
    }
    # Extract signature from the request headers
    auth_header = request_headers.get('Authorization', '')
    if not auth_header.startswith('Signature '):
    raise ValueError("Invalid Authorization header")
    auth_parts = dict(
    part.split('=', 1) for part in
    auth_header.replace('Signature ', '').split(',')
    )
    received_signature = unquote(auth_parts.get('signature', '').strip('"'))
    # Compute the expected signature
    date_header = request_headers.get('Date')
    if not date_header:
    raise ValueError("Missing Date header")
    raw = f"date: {date_header}"
    expected_hash = hmac.new(
    secret.encode("utf-8"),
    raw.encode("utf-8"),
    hashlib.sha256
    ).digest()
    expected_signature = base64.b64encode(expected_hash).decode('utf-8')
    is_valid = hmac.compare_digest(expected_signature, received_signature)

    Content-Type

    string

    application/json

    Authorization

    string

    Bearer {{JWT}}

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    Instant Booking

    The Instant Booking endpoint is available to partners who meet strict criteria outlined by Cover Genius. Please contact your assigned Client Solutions Engineer (CSE) to discuss use of the Instant Booking endpoint.

    If a customer has chosen to purchase the insurance product(s) offered through your platform then a call to the Instant Booking endpoint should be issued after the insurance premium has been calculated and payment has been captured.

    hashtag
    Make an Instant Booking

    POST https://api.xcover.com/x/partners/:partner_id/instant_booking/

    The payload consists of information necessary to issue the policy (widely varying depending on policy type) and policyholder information

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    {
        "data": {
            "id": "5a0e92d8-bca6-4006-be87-3254af39c865",
            "customerId": "30db40c8-6e48-4406-9f06-b097273035b4",
            "paymentProviderId": "47d7cc91-294b-40ce-85cf-99653c44bee2",
            "createdAt": "2020-09-14T15:56:25+00:00",
            "updatedAt": "2021-01-04T02:19:33+00:00",
            "metadata": {
                "variant": "visa",
                "paymentMethod": "Credit card",
                "expiryMonth": "3",
                "expiryYear": "2030",
                "holderName": "Darin Sikanic",
                "number": "1111"
            },
            "partnerId": "9f6cebc9-b24b-4d33-8546-6c9edd12d751",
            "isVisible": true,
            "isDefault": true
            }
        }
    }
       "customer": {
         "email": "[email protected]"
       },
       "creditCard": {
         "number":"4111111111111111",
         "expiryMonth":"03",
         "expiryYear":"2030",
         "cvc":"737",
         "holderName":"Darin Sikanic"
       }
    }
    {
      "id": "string",
      "status": "string",
      "currency": "str",
      "total_price": 0,
      "total_price_formatted": "string",
      "partner_transaction_id": "string",
      "created_at": "2021-01-04T17:10:37Z",
      "updated_at": "2021-01-04T17:10:37Z",
      "pds_url": "http://example.com",
      "security_token": "string",
      "quotes": [
        {
          "id": "string",
          "policy_start_date": "2021-01-04T17:10:37Z",
          "policy_end_date": "2021-01-04T17:10:37Z",
          "status": "string",
          "price": 0,
          "price_formatted": "string",
          "policy": {
            "policy_type": "string",
            "policy_name": "string",
            "policy_code": "string",
            "policy_version": "string",
            "category": "string",
            "content": {
              "title": "string",
              "header": "string",
              "description": "string",
              "optout_msg": "string",
              "inclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "exclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "disclaimer": "string",
              "disclaimer_html": "string",
              "payment_disclaimer": "string",
              "in_path_disclaimer": "string"
            },
            "underwriter": {
              "disclaimer": "string",
              "name": "string"
            }
          },
          "insured": [
            {
              "id": "string",
              "first_name": "string",
              "middle_name": "string",
              "last_name": "string",
              "email": "[email protected]",
              "country": "AF",
              "address1": "string",
              "address2": "string",
              "city": "string",
              "postcode": "string",
              "region": "string",
              "phone": "string",
              "age": 0,
              "birth_date": "2021-01-04",
              "metadata": {
                "property1": "string",
                "property2": "string"
              },
              "company": "string"
            }
          ],
          "tax": {
            "total_tax": 0,
            "total_amount_without_tax": 0,
            "total_tax_formatted": "string",
            "total_amount_without_tax_formatted": "string",
            "taxes": [
              {
                "tax_amount": 0,
                "tax_code": "string",
                "tax_amount_formatted": "string"
              }
            ]
          },
          "duration": "string",
          "benefits": [
            {
              "description": "string",
              "limit_description": "string",
              "limit": 0,
              "limit_policy_currency": 0,
              "limit_formatted": "string",
              "limit_policy_currency_formatted": "string",
              "limit_per_unit": 0,
              "limit_per_unit_policy_currency": 0,
              "limit_per_unit_formatted": "string",
              "limit_per_unit_policy_currency_formatted": "string",
              "excess_description": "string",
              "excess": 0,
              "excess_policy_currency": 0,
              "excess_formatted": "string",
              "excess_policy_currency_formatted": "string",
              "minimum_claim_amount": 0,
              "minimum_claim_amount_policy_currency": 0,
              "minimum_claim_amount_formatted": "string",
              "minimum_claim_amount_policy_currency_formatted": "string"
            }
          ],
          "commission": {
            "total_commission": 0,
            "total_commission_formatted": "string"
          },
          "created_at": "2021-01-04T17:10:37Z",
          "confirmed_at": "2021-01-04T17:10:37Z",
          "updated_at": "2021-01-04T17:10:37Z",
          "cancelled_at": "2021-01-04T17:10:37Z",
          "is_renewable": true,
          "cover_amount": 0,
          "cover_amount_formatted": "string",
          "pds_url": "http://example.com",
          "attachments": "string",
          "files": "string",
          "extra_fields": {
            "property1": "string",
            "property2": "string"
          },
          "next_renewal": {
            "id": "string",
            "package_id": "string",
            "quote_id": "string",
            "status": "string",
            "start_date": "2021-01-04T17:10:37Z",
            "notification_date": "2021-01-04T17:10:37Z",
            "due_date": "2021-01-04T17:10:37Z",
            "expiry_date": "2021-01-04T17:10:37Z",
            "cancelled_on": "2021-01-04T17:10:37Z",
            "paid_on": "2021-01-04T17:10:37Z",
            "created_at": "2021-01-04T17:10:37Z"
          },
          "can_be_cancelled": true,
          "errors": [
            "string"
          ]
        }
      ],
      "coi": {
        "pdf": "http://example.com",
        "url": "http://example.com"
      },
      "account_url": "http://example.com",
      "policyholder": {
        "first_name": "string",
        "middle_name": "string",
        "last_name": "string",
        "email": "[email protected]",
        "phone": "string",
        "country": "AF",
        "age": 0,
        "address1": "string",
        "address2": "string",
        "city": "string",
        "postcode": "string",
        "region": "string",
        "secondary_email": "[email protected]",
        "birth_date": "2021-01-04",
        "company": "string",
        "tax_payer_id": "string"
      },
      "total_tax": 0,
      "total_tax_formatted": "string",
      "total_premium": 0,
      "total_premium_formatted": "string"
    }
    {
        "quotes": [
            {
                "id": "d7780bcc-c47c-446b-a9fb-b41f62fc1e81",
                "insured": [
                    {
                        "first_name": "User",
                        "last_name": "Example",
                        "birth_date": "1991-03-11",
                        "email": "[email protected]"
                    }
                ]
            }
        ],
        "policyholder": {
            "first_name": "User",
            "last_name": "Example",
            "birth_date": "1991-03-11",
            "email": "[email protected]",
            "country": "GB"
        },
        "payment_details": {
            "customer_token_id": "{{customer_token_id}}"
        }
    }

    partner_id

    string

    Unique Partner Code

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    {
      "id": "string",
      "status": "string",
      "currency": "str",
      "total_price": 0,
      "total_price_formatted": "string",
      "partner_transaction_id": "string",
      "created_at": "2021-01-04T17:10:37Z",
      "updated_at": "2021-01-04T17:10:37Z",
      "pds_url": "http://example.com",
      "security_token": "string",
      "quotes": [
        {
          "id": "string",
          "policy_start_date": "2021-01-04T17:10:37Z",
          "policy_end_date": "2021-01-04T17:10:37Z",
          "status": "string",
          "price": 0,
          "price_formatted": "string",
          "policy": {
            "policy_type": "string",
            "policy_name": "string",
            "policy_code": "string",
            "policy_version": "string",
            "category": "string",
            "content": {
              "title": "string",
              "header": "string",
              "description": "string",
              "optout_msg": "string",
              "inclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "exclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "disclaimer": "string",
              "disclaimer_html": "string",
              "payment_disclaimer": "string",
              "in_path_disclaimer": "string"
            },
            "underwriter": {
              "disclaimer": "string",
              "name": "string"
            }
          },
          "insured": [
            {
              "id": "string",
              "first_name": "string",
              "middle_name": "string",
              "last_name": "string",
              "email": "[email protected]",
              "country": "AF",
              "address1": "string",
              "address2": "string",
              "city": "string",
              "postcode": "string",
              "region": "string",
              "phone": "string",
              "age": 0,
              "birth_date": "2021-01-04",
              "metadata": {
                "property1": "string",
                "property2": "string"
              },
              "company": "string"
            }
          ],
          "tax": {
            "total_tax": 0,
            "total_amount_without_tax": 0,
            "total_tax_formatted": "string",
            "total_amount_without_tax_formatted": "string",
            "taxes": [
              {
                "tax_amount": 0,
                "tax_code": "string",
                "tax_amount_formatted": "string"
              }
            ]
          },
          "duration": "string",
          "benefits": [
            {
              "description": "string",
              "limit_description": "string",
              "limit": 0,
              "limit_policy_currency": 0,
              "limit_formatted": "string",
              "limit_policy_currency_formatted": "string",
              "limit_per_unit": 0,
              "limit_per_unit_policy_currency": 0,
              "limit_per_unit_formatted": "string",
              "limit_per_unit_policy_currency_formatted": "string",
              "excess_description": "string",
              "excess": 0,
              "excess_policy_currency": 0,
              "excess_formatted": "string",
              "excess_policy_currency_formatted": "string",
              "minimum_claim_amount": 0,
              "minimum_claim_amount_policy_currency": 0,
              "minimum_claim_amount_formatted": "string",
              "minimum_claim_amount_policy_currency_formatted": "string"
            }
          ],
          "commission": {
            "total_commission": 0,
            "total_commission_formatted": "string"
          },
          "created_at": "2021-01-04T17:10:37Z",
          "confirmed_at": "2021-01-04T17:10:37Z",
          "updated_at": "2021-01-04T17:10:37Z",
          "cancelled_at": "2021-01-04T17:10:37Z",
          "is_renewable": true,
          "cover_amount": 0,
          "cover_amount_formatted": "string",
          "pds_url": "http://example.com",
          "attachments": "string",
          "files": "string",
          "extra_fields": {
            "property1": "string",
            "property2": "string"
          },
          "next_renewal": {
            "id": "string",
            "package_id": "string",
            "quote_id": "string",
            "status": "string",
            "start_date": "2021-01-04T17:10:37Z",
            "notification_date": "2021-01-04T17:10:37Z",
            "due_date": "2021-01-04T17:10:37Z",
            "expiry_date": "2021-01-04T17:10:37Z",
            "cancelled_on": "2021-01-04T17:10:37Z",
            "paid_on": "2021-01-04T17:10:37Z",
            "created_at": "2021-01-04T17:10:37Z"
          },
          "can_be_cancelled": true,
          "errors": [
            "string"
          ]
        }
      ],
      "coi": {
        "pdf": "http://example.com",
        "url": "http://example.com"
      },
      "account_url": "http://example.com",
      "policyholder": {
        "first_name": "string",
        "middle_name": "string",
        "last_name": "string",
        "email": "[email protected]",
        "phone": "string",
        "country": "AF",
        "age": 0,
        "address1": "string",
        "address2": "string",
        "city": "string",
        "postcode": "string",
        "region": "string",
        "secondary_email": "[email protected]",
        "birth_date": "2021-01-04",
        "company": "string",
        "tax_payer_id": "string"
      },
      "total_tax": 0,
      "total_tax_formatted": "string",
      "total_premium": 0,
      "total_premium_formatted": "string"
    }
    {
        "currency": "USD",
        "customer_language": "en",
        "request": [
            {
                "policy_type": "parcel_insurance",
                "policy_type_version": "1",
                "policy_start_date": "2021-03-07T09:25:00+00:00",
                "shipping_cost": 0.0,
                "order_total": 0.0,
                "shipping_date": "2021-03-07T09:25:00+00:00",
                "carrier": "Fedex",
                "carrier_service_name": "Fedex",
                "declared_value": 4000.0,
                "delivery_confirmation_type": "None",
                "delivery_confirmation_price": 0,
                "partner_price": 30.0,
                "sender": {
                    "first_name": "Homer",
                    "last_name": "Simpson",
                    "company_name": "The Simpsons LLC",
                    "address1": "742 Evergreen Terrace",
                    "city": "Springfield",
                    "postcode": "98122",
                    "region": "WA",
                    "country": "US",
                    "email": "[email protected]"
                },
                "receiver": {
                    "first_name": "Charles Montgomery",
                    "last_name": "Burns",
                    "company_name": "Springfield Nuclear Power Plant",
                    "address1": "100 Industrial Way",
                    "city": "Sprinfield",
                    "postcode": "98122",
                    "region": "WA",
                    "country": "US",
                    "email": "[email protected]"
                },
                "tracking_reference": "SNDR5152",
                "tracking_url": "http://www.tracking-example-url.com/tracking/SNDR5152",
                "packages": [
                    {
                        "declared_value": 4000.0,
                        "description": "Test",
                        "type": "Package",
                        "width": 2.0,
                        "height": 2.0,
                        "length": 2.0,
                        "weight": 1.0,
                        "items": [],
                        "tracking_reference": "SNDR5152",
                        "tracking_url": "http://www.tracking-example-url.com/tracking/SNDR5152"
                    }
                ]
            }
        ],
        "policyholder": {
            "first_name": "Homer",
            "last_name": "Simpson",
            "address1": "742 Evergreen Terrace",
            "city": "Springfield",
            "postcode": "98122",
            "region": "WA",
            "country": "US",
            "email": "[email protected]"
        }
    }

    Cancellation Workflow

    Cancel a specific policy booking

    Cancelling a policy booking is used where a user no longer requires coverage, and has contacted the partner directly to cancel this policy.

    For example: Cancellation of a Product insurance policy where the product is on-sold or no longer needed. Where a refund is due, the partner (depending on method of payment collection, and policy cooling off period) may need to provide a refund to the user. This calculated pro-rata refund for the user (where applicable) is returned in the Cancellation response.

    Cancellation Workflow

    hashtag
    Booking Retrieval

    The first step is to obtain information regarding the customers purchased insurance, this step can be skipped if you have stored all relevant information about a customers insurance booking such as INS number, Quote IDs, price paid, etc.

    hashtag
    Retrieve a Booking

    GET https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id

    Retrieves a specific booking by providing the quote package ID.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Booking Cancellation

    Once a booking has been retrieved, check the can_be_cancelled flag is set to true in the response before issuing a cancellation request.

    circle-exclamation

    To ensure you refund the correct amount to the customer, it is recommended to first preview a cancellation and then confirm the cancellation once you have successfully issued the refund.

    hashtag
    Cancel Booking

    POST https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/cancel

    The booking cancel endpoint accepts a JSON payload against the URI containing the Quote Package ID returned by a /booking request. The payload consists of a list of quotes selected for cancellation and an optional reason for the cancellation.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Preview a Cancellation

    An optional preview flag can be set to true in the booking cancellation request payload, the response will confirm a refund amount and timeframe required before cancellation can be completed.

    circle-info

    It is important to note key details in the response, including thecancellation_id,total_refund amount and theconfirm_beforedatetime

    hashtag
    Preview Cancellation

    POST https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/cancel

    The booking cancel endpoint accepts a JSON payload against the URI containing the Quote Package ID returned by a /booking request. The payload consists of a the preview flag set to true along with a list of quotes selected for cancellation and an optional reason for the cancellation.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Confirm Cancellation

    To confirm a cancellation that has been previewed a request to the following endpoint needs to be made.

    hashtag
    Confirm Cancellation

    POST https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/confirm_cancellation

    Confirm the previewed cancellation.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID (INS)

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    partner_id

    string

    Unique Parter Code

    quote_package_id

    string

    Quote Package ID

    cancellation_id

    string

    Cancellation ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    {
        "id": "8WD8Y-LTEKE-INS",
        "status": "CONFIRMED",
        "currency": "USD",
        "total_price": 4.27,
        "total_price_formatted": "US$4.27",
        "partner_transaction_id": "id-to-stitch-transactions-in-two-systems",
        "created_at": "2021-01-15T01:19:49.529799Z",
        "updated_at": "2021-01-15T01:19:59.773302Z",
        "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS",
        "security_token": "UiRlP-6bLfQ-1YLjR-ste66",
        "quotes": [
            {
                "id": "201eb11b-4494-40e8-97fa-e107c76501bf",
                "policy_start_date": "2021-01-17T13:00:00+00:00",
                "policy_end_date": "2021-01-19T13:00:00+00:00",
                "status": "CONFIRMED",
                "price": 4.27,
                "price_formatted": "US$4.27",
                "policy": {
                    "policy_type": "event_ticket_protection",
                    "policy_name": "Missed Event Cover (Generic)",
                    "policy_code": "MECG0001",
                    "policy_version": "5d24e2d1-a341-4b8b-9917-82878470a9c3",
                    "category": "event_ticket_protection",
                    "content": {
                        "title": "Missed Event Cover for Justin Bibber",
                        "header": null,
                        "description": "90% of attendees add Missed Event Cover for generous protection when things go wrong or your plans change. For only  per ticket it covers you - and all ticket holders - if:",
                        "optout_msg": "",
                        "disclaimer": "<p>This insurance is arranged by Cover Genius Ltd which is authorised and regulated by the FCA (No.750711). Policies are underwritten by Markel International Insurance Company Limited which is authorised by the PRA and regulated by the FCA, (No.202570).</p>"
                    },
                    "underwriter": {
                        "disclaimer": "This plan is arranged by XCover.com",
                        "name": "Cover Genius Pty Ltd"
                    },
                    "claim_selector_id": null
                },
                "insured": [
                    {
                        "id": "3aa30165-7a71-45ab-8899-f479fcb6e8e2",
                        "first_name": "Darin",
                        "last_name": "Sikanic",
                        "email": "[email protected]",
                        "region": null
                    }
                ],
                "tax": {
                    "total_tax": 0.0,
                    "total_amount_without_tax": 4.27,
                    "total_tax_formatted": "US$0.00",
                    "total_amount_without_tax_formatted": "US$4.27",
                    "taxes": []
                },
                "duration": "2 00:00:00",
                "benefits": [
                    {
                        "description": "Updated Transalation",
                        "limit": 7.77,
                        "limit_policy_currency": 10.0,
                        "limit_formatted": "US$7.77",
                        "limit_policy_currency_formatted": "A$10.00",
                        "excess": 3.88,
                        "excess_policy_currency": 5.0,
                        "excess_formatted": "US$3.88",
                        "excess_policy_currency_formatted": "A$5.00"
                    },
                    {
                        "description": "Updated Transalation",
                        "limit_description": "Benefit Text Test 01",
                        "excess": 4.66,
                        "excess_policy_currency": 6.0,
                        "excess_formatted": "US$4.66",
                        "excess_policy_currency_formatted": "A$6.00"
                    },
                    {
                        "description": "Description",
                        "limit": 11.65,
                        "limit_policy_currency": 15.0,
                        "limit_formatted": "US$11.65",
                        "limit_policy_currency_formatted": "A$15.00"
                    },
                    {
                        "description": "Description",
                        "limit": 15.54,
                        "limit_policy_currency": 20.0,
                        "limit_formatted": "US$15.54",
                        "limit_policy_currency_formatted": "A$20.00",
                        "excess_description": "Excess Text Test 01"
                    },
                    {
                        "description": "Description",
                        "limit_description": "Benefit Text Test 02",
                        "excess_description": "Excess Text Test 02"
                    }
                ],
                "commission": {
                    "total_commission": 0.0,
                    "total_commission_formatted": "US$0.00"
                },
                "created_at": "2021-01-15T01:19:49.523137Z",
                "confirmed_at": "2021-01-15T01:19:59.750719Z",
                "updated_at": "2021-01-15T01:19:59.763517Z",
                "cancelled_at": null,
                "is_renewable": false,
                "cover_amount": 77.7,
                "cover_amount_formatted": "US$77.70",
                "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS?policy_type=event_ticket_protection_v1",
                "attachments": [],
                "files": [],
                "extra_fields": {},
                "next_renewal": null,
                "can_be_cancelled": true
            }
        ],
        "coi": {
            "url": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS?security_token=UiRlP-6bLfQ-1YLjR-ste66",
            "pdf": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS.pdf?security_token=UiRlP-6bLfQ-1YLjR-ste66"
        },
        "account_url": "https://staging.xcover.com/en/account?id=0bde2670-c3f9-4e79-a837-063d5d5e3874&signup_token=zl4qR-wNoL5-fHZ4M-u0Lmb",
        "policyholder": {
            "first_name": "Ben",
            "middle_name": null,
            "last_name": "H",
            "email": "[email protected]",
            "phone": null,
            "country": "US",
            "age": null,
            "address1": null,
            "address2": null,
            "city": null,
            "postcode": null,
            "region": "NYC",
            "secondary_email": null,
            "birth_date": null,
            "company": null
        },
        "total_tax": 0.0,
        "total_tax_formatted": "US$0.00",
        "total_premium": 4.27,
        "total_premium_formatted": "US$4.27",
        "partner": {
            "id": "87ZRF",
            "name": "Generic Partner",
            "title": "Generic Partner",
            "logo": "https://staging.static.xcover.com/media/partnerlogos/2020/08/12/travel_logo.png",
            "contact_url": "https://staging.xcover.com/en/about",
            "partner_url": "https://staging.xcover.com",
            "help_center_url": "https://staging.xcover.com/en/help/your-insurance",
            "updated_at": "2020-10-28T07:48:24.671777Z",
            "xpay_refund_enabled": false,
            "subsidiary": {
                "id": "87ZRF",
                "name": "Generic Partner",
                "title": "Generic Partner",
                "logo": "https://staging.static.xcover.com/media/partnerlogos/2020/08/12/travel_logo.png",
                "contact_url": "https://staging.xcover.com/en/about",
                "partner_url": "https://staging.xcover.com",
                "help_center_url": "https://staging.xcover.com/en/help/your-insurance",
                "updated_at": "2020-10-28T07:48:24.671777Z",
                "xpay_refund_enabled": false
            }
        },
        "customer_language": "en"
    }
    {
      "id": "string",
      "status": "string",
      "quotes": [
        {
          "id": "string",
          "policy_start_date": "2020-09-25T05:31:10Z",
          "policy_end_date": "2020-09-25T05:31:10Z",
          "policy_cancellation_date": "2020-09-25T05:31:10Z",
          "policy_coolingoff_date": "2020-09-25T05:31:10Z",
          "status": "string",
          "price": 0,
          "refund_value": 0,
          "adjustment_fee": 0,
          "policy": {
            "policy_type": "string",
            "policy_name": "string",
            "policy_code": "string",
            "policy_version": "string",
            "category": "string",
            "content": {
              "title": "string",
              "header": "string",
              "description": "string",
              "optout_msg": "string",
              "inclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "exclusions": [
                {
                  "title": "string",
                  "description": "string"
                }
              ],
              "disclaimer": "string",
              "disclaimer_html": "string"
            },
            "underwriter": {
              "disclaimer": "string",
              "name": "string"
            }
          },
          "insured": [
            {
              "id": "string",
              "first_name": "string",
              "middle_name": "string",
              "last_name": "string",
              "email": "[email protected]",
              "country": "AF",
              "address1": "string",
              "address2": "string",
              "city": "string",
              "postcode": "string",
              "region": "string",
              "phone": "string",
              "age": 0,
              "birth_date": "2020-09-25",
              "metadata": {
                "property1": "string",
                "property2": "string"
              },
              "company": "string"
            }
          ],
          "created_at": "2020-09-25T05:31:10Z",
          "confirmed_at": "2020-09-25T05:31:10Z",
          "updated_at": "2020-09-25T05:31:10Z",
          "cancelled_at": "2020-09-25T05:31:10Z"
        }
      ],
      "policyholder": {
        "first_name": "string",
        "middle_name": "string",
        "last_name": "string",
        "email": "[email protected]",
        "phone": "string",
        "country": "AF",
        "age": 0,
        "address1": "string",
        "address2": "string",
        "city": "string",
        "postcode": "string",
        "region": "string",
        "secondary_email": "[email protected]",
        "birth_date": "2020-09-25",
        "company": "string",
        "tax_payer_id": "string"
      },
      "pds_url": "http://example.com",
      "coi": {
        "pdf": "http://example.com",
        "url": "http://example.com"
      },
      "created_at": "2020-09-25T05:31:10Z",
      "updated_at": "2020-09-25T05:31:10Z",
      "total_price": 0,
      "total_price_formatted": "string",
      "total_refund": 0,
      "total_refund_formatted": "string",
      "total_tax": 0,
      "total_tax_formatted": "string",
      "total_premium": 0,
      "total_premium_formatted": "string",
      "currency": "str",
      "cancellation_id": "string",
      "confirm_before": "2020-09-25T05:31:10Z",
      "partner": {
        "id": "string",
        "name": "string",
        "title": "string",
        "logo": "http://example.com",
        "contact_url": "http://example.com",
        "partner_url": "http://example.com",
        "help_center_url": "http://example.com",
        "updated_at": "2020-09-25T05:31:10Z",
        "xpay_refund_enabled": true,
        "subsidiary": {
          "id": "string",
          "name": "string",
          "title": "string",
          "logo": "http://example.com",
          "contact_url": "http://example.com",
          "partner_url": "http://example.com",
          "help_center_url": "http://example.com"
        }
      }
    }
    {
        "quotes": [
            {
                "id": "62fd1f8b-f8fa-420a-82a0-6990976fb8cc",
                "reason_for_cancellation": "No longer travelling"
            }
        ]
    }
    {
      "id": "8UHPK-ALPQT-INS",
      "status": "CANCELLED",
      "quotes": [
        {
          "id": "d5465e90-f22f-477a-b0cc-2950fcf034ff",
          "policy_start_date": "2021-01-07T18:18:48Z",
          "policy_end_date": "2021-01-17T15:45:00Z",
          "policy_cancellation_date": null,
          "policy_coolingoff_date": "2021-01-21T18:18:59.940059Z",
          "status": "CANCELLED",
          "price": 22.4,
          "refund_value": 22.4,
          "adjustment_fee": 0.0,
          "created_at": "2021-01-07T18:18:49.035218Z",
          "confirmed_at": "2021-01-07T18:18:59.940059Z",
          "updated_at": "2021-01-07T18:19:04.222570Z",
          "cancelled_at": null
        }
      ],
      "created_at": "2021-01-07T18:18:49.145872Z",
      "updated_at": "2021-01-07T18:18:59.958252Z",
      "total_price": 0.0,
      "total_price_formatted": "€0.00",
      "total_refund": 22.4,
      "total_refund_formatted": "22.40",
      "currency": "EUR",
      "cancellation_id": "90o3N-fIexx-Zw2bd-CCL",
      "confirm_before": "2021-01-08T18:19:04.228699Z"
    }
    
    {
        "preview": true,
        "quotes": [
            {
                "id": "62fd1f8b-f8fa-420a-82a0-6990976fb8cc",
                "reason_for_cancellation": "No longer travelling"
            }
        ]
    }
    {
      "id": "8UHPK-ALPQT-INS",
      "status": "CANCELLED",
      "quotes": [
        {
          "id": "d5465e90-f22f-477a-b0cc-2950fcf034ff",
          "policy_start_date": "2021-01-07T18:18:48Z",
          "policy_end_date": "2021-01-17T15:45:00Z",
          "policy_cancellation_date": null,
          "policy_coolingoff_date": "2021-01-21T18:18:59.940059Z",
          "status": "CANCELLED",
          "price": 22.4,
          "refund_value": 22.4,
          "adjustment_fee": 0.0,
          "created_at": "2021-01-07T18:18:49.035218Z",
          "confirmed_at": "2021-01-07T18:18:59.940059Z",
          "updated_at": "2021-01-07T18:19:04.222570Z",
          "cancelled_at": null
        }
      ],
      "created_at": "2021-01-07T18:18:49.145872Z",
      "updated_at": "2021-01-07T18:18:59.958252Z",
      "total_price": 0.0,
      "total_price_formatted": "€0.00",
      "total_refund": 22.4,
      "total_refund_formatted": "22.40",
      "currency": "EUR",
      "cancellation_id": "90o3N-fIexx-Zw2bd-CCL",
      "confirm_before": "2021-01-08T18:19:04.228699Z"
    }
    

    Modification Workflow

    Modifying an existing booked policy

    The modification workflow is used when a customer wants to make a change to their existing policy. Examples could include; changing the date of an overseas vacation, increasing the item value or value of goods in a container, or changing the date of an event.

    These changes may be possible for certain policies and can be done using the Booking Update API endpoints. These changes, if available, will cause a difference in policy price which may result in a refund or additional fee depending on the changes made.

    The below diagram illustrates the API calls needed to successfully modify a customers policy.

    hashtag
    Booking Retrieval

    The first step is to obtain information regarding the customers purchased insurance, this step can be skipped if you have stored all relevant information about a customers insurance booking such as INS number, Quote IDs, price paid, etc.

    hashtag
    Retrieve a Booking

    GET https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id

    Retrieves a specific booking by providing the quote package ID.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Booking Modification

    In some circumstances a modification will not impact the premium price of a specific policy. This could be for a variety of reasons where additional information is supplied to enhance the profile of a policy, covered item, or insured party. Examples of such use cases: - Manufacturer or serial number information received after the policy booking - Product receipt or ownership verification documents or images - Address or phone number information updates for the insured

    circle-exclamation

    Ensure the fields you are modifying do not affect price. Speak to your assigned Client Solutions Engineer (CSE) before implementing this endpoint.

    hashtag
    Modify Booking

    PATCH https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/

    Updates booking details instantly.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Preview Modification - Quote for Booking Update.

    A request to the quote_for_booking_update endpoint will include the details of the policy that have changed the response will include the outstanding amount to be charged or refunded.

    After calling the quote_for_booking_update endpoint, and once partial refund or any additional charge is collected, a confirm update request is submitted to complete the booking update workflow.

    hashtag
    Preview Modification

    PATCH https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/quote_for_update

    Generates a Quote for booking changes as specified in the request which can then be confirmed using the endpoint specified in the Response

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description
    circle-info

    A reduction in ticket prices here is used as an example for a cause for policy value refund. See response in above section tab.

    hashtag
    Confirm Modification

    To confirm a modification that has been previewed a request to the following endpoint needs to be made.

    hashtag
    Confirm Modification

    POST https://api.xcover.com/x/partners/:partner_id/bookings/:quote_package_id/confirm_update/:update_id/

    Confirm the booking update and charge or refund. Optionally include the charge ID reference. Request contains no payload.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID (INS)

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID (INS)

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-API-Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID (INS)

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-API-Key

    string

    API Key

    partner_id

    string

    Unique Partner ID

    quote_package_id

    string

    Quote Package ID (INS)

    update_id

    string

    ID referencing the update

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-API-Key

    string

    API Key

    {
        "id": "8WD8Y-LTEKE-INS",
        "status": "CONFIRMED",
        "currency": "USD",
        "total_price": 4.27,
        "total_price_formatted": "US$4.27",
        "partner_transaction_id": "id-to-stitch-transactions-in-two-systems",
        "created_at": "2021-01-15T01:19:49.529799Z",
        "updated_at": "2021-01-15T01:19:59.773302Z",
        "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS",
        "security_token": "UiRlP-6bLfQ-1YLjR-ste66",
        "quotes": [
            {
                "id": "201eb11b-4494-40e8-97fa-e107c76501bf",
                "policy_start_date": "2021-01-17T13:00:00+00:00",
                "policy_end_date": "2021-01-19T13:00:00+00:00",
                "status": "CONFIRMED",
                "price": 4.27,
                "price_formatted": "US$4.27",
                "policy": {
                    "policy_type": "event_ticket_protection",
                    "policy_name": "Missed Event Cover (Generic)",
                    "policy_code": "MECG0001",
                    "policy_version": "5d24e2d1-a341-4b8b-9917-82878470a9c3",
                    "category": "event_ticket_protection",
                    "content": {
                        "title": "Missed Event Cover for Justin Bibber",
                        "header": null,
                        "description": "90% of attendees add Missed Event Cover for generous protection when things go wrong or your plans change. For only  per ticket it covers you - and all ticket holders - if:",
                        "optout_msg": "",
                        "disclaimer": "<p>This insurance is arranged by Cover Genius Ltd which is authorised and regulated by the FCA (No.750711). Policies are underwritten by Markel International Insurance Company Limited which is authorised by the PRA and regulated by the FCA, (No.202570).</p>"
                    },
                    "underwriter": {
                        "disclaimer": "This plan is arranged by XCover.com",
                        "name": "Cover Genius Pty Ltd"
                    },
                    "claim_selector_id": null
                },
                "insured": [
                    {
                        "id": "3aa30165-7a71-45ab-8899-f479fcb6e8e2",
                        "first_name": "Darin",
                        "last_name": "Sikanic",
                        "email": "[email protected]",
                        "region": null
                    }
                ],
                "tax": {
                    "total_tax": 0.0,
                    "total_amount_without_tax": 4.27,
                    "total_tax_formatted": "US$0.00",
                    "total_amount_without_tax_formatted": "US$4.27",
                    "taxes": []
                },
                "duration": "2 00:00:00",
                "benefits": [
                    {
                        "description": "Updated Transalation",
                        "limit": 7.77,
                        "limit_policy_currency": 10.0,
                        "limit_formatted": "US$7.77",
                        "limit_policy_currency_formatted": "A$10.00",
                        "excess": 3.88,
                        "excess_policy_currency": 5.0,
                        "excess_formatted": "US$3.88",
                        "excess_policy_currency_formatted": "A$5.00"
                    },
                    {
                        "description": "Updated Transalation",
                        "limit_description": "Benefit Text Test 01",
                        "excess": 4.66,
                        "excess_policy_currency": 6.0,
                        "excess_formatted": "US$4.66",
                        "excess_policy_currency_formatted": "A$6.00"
                    },
                    {
                        "description": "Description",
                        "limit": 11.65,
                        "limit_policy_currency": 15.0,
                        "limit_formatted": "US$11.65",
                        "limit_policy_currency_formatted": "A$15.00"
                    },
                    {
                        "description": "Description",
                        "limit": 15.54,
                        "limit_policy_currency": 20.0,
                        "limit_formatted": "US$15.54",
                        "limit_policy_currency_formatted": "A$20.00",
                        "excess_description": "Excess Text Test 01"
                    },
                    {
                        "description": "Description",
                        "limit_description": "Benefit Text Test 02",
                        "excess_description": "Excess Text Test 02"
                    }
                ],
                "commission": {
                    "total_commission": 0.0,
                    "total_commission_formatted": "US$0.00"
                },
                "created_at": "2021-01-15T01:19:49.523137Z",
                "confirmed_at": "2021-01-15T01:19:59.750719Z",
                "updated_at": "2021-01-15T01:19:59.763517Z",
                "cancelled_at": null,
                "is_renewable": false,
                "cover_amount": 77.7,
                "cover_amount_formatted": "US$77.70",
                "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS?policy_type=event_ticket_protection_v1",
                "attachments": [],
                "files": [],
                "extra_fields": {},
                "next_renewal": null,
                "can_be_cancelled": true
            }
        ],
        "coi": {
            "url": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS?security_token=UiRlP-6bLfQ-1YLjR-ste66",
            "pdf": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS.pdf?security_token=UiRlP-6bLfQ-1YLjR-ste66"
        },
        "account_url": "https://staging.xcover.com/en/account?id=0bde2670-c3f9-4e79-a837-063d5d5e3874&signup_token=zl4qR-wNoL5-fHZ4M-u0Lmb",
        "policyholder": {
            "first_name": "Ben",
            "middle_name": null,
            "last_name": "H",
            "email": "[email protected]",
            "phone": null,
            "country": "US",
            "age": null,
            "address1": null,
            "address2": null,
            "city": null,
            "postcode": null,
            "region": "NYC",
            "secondary_email": null,
            "birth_date": null,
            "company": null
        },
        "total_tax": 0.0,
        "total_tax_formatted": "US$0.00",
        "total_premium": 4.27,
        "total_premium_formatted": "US$4.27",
        "partner": {
            "id": "87ZRF",
            "name": "Generic Partner",
            "title": "Generic Partner",
            "logo": "https://staging.static.xcover.com/media/partnerlogos/2020/08/12/travel_logo.png",
            "contact_url": "https://staging.xcover.com/en/about",
            "partner_url": "https://staging.xcover.com",
            "help_center_url": "https://staging.xcover.com/en/help/your-insurance",
            "updated_at": "2020-10-28T07:48:24.671777Z",
            "xpay_refund_enabled": false,
            "subsidiary": {
                "id": "87ZRF",
                "name": "Generic Partner",
                "title": "Generic Partner",
                "logo": "https://staging.static.xcover.com/media/partnerlogos/2020/08/12/travel_logo.png",
                "contact_url": "https://staging.xcover.com/en/about",
                "partner_url": "https://staging.xcover.com",
                "help_center_url": "https://staging.xcover.com/en/help/your-insurance",
                "updated_at": "2020-10-28T07:48:24.671777Z",
                "xpay_refund_enabled": false
            }
        },
        "customer_language": "en"
    }
    {
        "id": "8WD8Y-LTEKE-INS",
        "status": "CONFIRMED",
        "currency": "USD",
        "total_price": 3.5,
        "total_price_formatted": "US$3.50",
        "partner_transaction_id": "id-to-stitch-transactions-in-two-systems",
        "created_at": "2021-01-15T01:19:49.529799Z",
        "updated_at": "2021-01-15T01:30:17.360948Z",
        "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS",
        "security_token": "UiRlP-6bLfQ-1YLjR-ste66",
        "quotes": [
            {
                "id": "201eb11b-4494-40e8-97fa-e107c76501bf",
                "policy_start_date": "2021-01-17T13:00:00+00:00",
                "policy_end_date": "2021-01-19T13:00:00+00:00",
                "status": "CONFIRMED",
                "price": 3.5,
                "price_formatted": "US$3.50",
                "policy": {
                    "policy_type": "event_ticket_protection",
                    "policy_name": "Missed Event Cover (Generic)",
                    "policy_code": "MECG0001",
                    "policy_version": "5d24e2d1-a341-4b8b-9917-82878470a9c3",
                    "category": "event_ticket_protection",
                    "content": {
                        "title": "Missed Event Cover for Justin Bibber",
                        "header": null,
                        "description": "90% of attendees add Missed Event Cover for generous protection when things go wrong or your plans change. For only  per ticket it covers you - and all ticket holders - if:",
                        "optout_msg": "",
                        "disclaimer": "<p>This insurance is arranged by Cover Genius Ltd which is authorised and regulated by the FCA (No.750711). Policies are underwritten by Markel International Insurance Company Limited which is authorised by the PRA and regulated by the FCA, (No.202570).</p>"
                    },
                    "underwriter": {
                        "disclaimer": "This plan is arranged by XCover.com",
                        "name": "Cover Genius Pty Ltd"
                    },
                    "claim_selector_id": null
                },
                "insured": [
                    {
                        "id": "3aa30165-7a71-45ab-8899-f479fcb6e8e2",
                        "first_name": "Darin",
                        "last_name": "Sikanic",
                        "email": "[email protected]",
                        "region": null
                    }
                ],
                "tax": {
                    "total_tax": 0.0,
                    "total_amount_without_tax": 3.5,
                    "total_tax_formatted": "US$0.00",
                    "total_amount_without_tax_formatted": "US$3.50",
                    "taxes": []
                },
                "duration": "2 00:00:00",
                "benefits": [
                    {
                        "description": "Updated Transalation",
                        "limit": 7.77,
                        "limit_policy_currency": 10.0,
                        "limit_formatted": "US$7.77",
                        "limit_policy_currency_formatted": "A$10.00",
                        "excess": 3.88,
                        "excess_policy_currency": 5.0,
                        "excess_formatted": "US$3.88",
                        "excess_policy_currency_formatted": "A$5.00"
                    },
                    {
                        "description": "Updated Transalation",
                        "limit_description": "Benefit Text Test 01",
                        "excess": 4.66,
                        "excess_policy_currency": 6.0,
                        "excess_formatted": "US$4.66",
                        "excess_policy_currency_formatted": "A$6.00"
                    },
                    {
                        "description": "Description",
                        "limit": 11.65,
                        "limit_policy_currency": 15.0,
                        "limit_formatted": "US$11.65",
                        "limit_policy_currency_formatted": "A$15.00"
                    },
                    {
                        "description": "Description",
                        "limit": 15.54,
                        "limit_policy_currency": 20.0,
                        "limit_formatted": "US$15.54",
                        "limit_policy_currency_formatted": "A$20.00",
                        "excess_description": "Excess Text Test 01"
                    },
                    {
                        "description": "Description",
                        "limit_description": "Benefit Text Test 02",
                        "excess_description": "Excess Text Test 02"
                    }
                ],
                "commission": {
                    "total_commission": 0.0,
                    "total_commission_formatted": "US$0.00"
                },
                "created_at": "2021-01-15T01:19:49.523137Z",
                "confirmed_at": "2021-01-15T01:19:59.750719Z",
                "updated_at": "2021-01-15T01:30:17.355406Z",
                "cancelled_at": null,
                "is_renewable": false,
                "cover_amount": 38.85,
                "cover_amount_formatted": "US$38.85",
                "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS?policy_type=event_ticket_protection_v1",
                "attachments": [],
                "files": [],
                "extra_fields": {},
                "next_renewal": null,
                "can_be_cancelled": true,
                "price_diff": -0.77,
                "price_diff_formatted": "-US$0.77"
            }
        ],
        "coi": {
            "url": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS?security_token=UiRlP-6bLfQ-1YLjR-ste66",
            "pdf": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS.pdf?security_token=UiRlP-6bLfQ-1YLjR-ste66"
        },
        "account_url": "https://staging.xcover.com/en/account?id=0bde2670-c3f9-4e79-a837-063d5d5e3874&signup_token=zl4qR-wNoL5-fHZ4M-u0Lmb",
        "policyholder": {
            "first_name": "Ben",
            "middle_name": null,
            "last_name": "H",
            "email": "[email protected]",
            "phone": null,
            "country": "US",
            "age": null,
            "address1": null,
            "address2": null,
            "city": null,
            "postcode": null,
            "region": "NYC",
            "secondary_email": null,
            "birth_date": null,
            "company": null
        },
        "total_tax": 0.0,
        "total_tax_formatted": "US$0.00",
        "total_premium": 3.5,
        "total_premium_formatted": "US$3.50",
        "total_price_diff": -0.77,
        "total_price_diff_formatted": "-US$0.77",
        "update_id": "qh89u-AIB2k-34CC8-UPD"
    }
    {
        "quotes": [
            {
                "id": "{{quote_1_id}}",
                "update_fields": {
                    "insured": [
                        {
                            "id": "{{insured_uuid}}",
                            "first_name": "Darin",
                            "last_name": "Sikanic",
                            "email": "[email protected]"
                        }
                    ]
                }
            }
        ]
    }
    {
        "id": "8WD8Y-LTEKE-INS",
        "status": "CONFIRMED",
        "currency": "USD",
        "total_price": 3.5,
        "total_price_formatted": "US$3.50",
        "partner_transaction_id": "id-to-stitch-transactions-in-two-systems",
        "created_at": "2021-01-15T01:19:49.529799Z",
        "updated_at": "2021-01-15T01:30:17.360948Z",
        "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS",
        "security_token": "UiRlP-6bLfQ-1YLjR-ste66",
        "quotes": [
            {
                "id": "201eb11b-4494-40e8-97fa-e107c76501bf",
                "policy_start_date": "2021-01-17T13:00:00+00:00",
                "policy_end_date": "2021-01-19T13:00:00+00:00",
                "status": "CONFIRMED",
                "price": 3.5,
                "price_formatted": "US$3.50",
                "policy": {
                    "policy_type": "event_ticket_protection",
                    "policy_name": "Missed Event Cover (Generic)",
                    "policy_code": "MECG0001",
                    "policy_version": "5d24e2d1-a341-4b8b-9917-82878470a9c3",
                    "category": "event_ticket_protection",
                    "content": {
                        "title": "Missed Event Cover for Justin Bibber",
                        "header": null,
                        "description": "90% of attendees add Missed Event Cover for generous protection when things go wrong or your plans change. For only  per ticket it covers you - and all ticket holders - if:",
                        "optout_msg": "",
                        "disclaimer": "<p>This insurance is arranged by Cover Genius Ltd which is authorised and regulated by the FCA (No.750711). Policies are underwritten by Markel International Insurance Company Limited which is authorised by the PRA and regulated by the FCA, (No.202570).</p>"
                    },
                    "underwriter": {
                        "disclaimer": "This plan is arranged by XCover.com",
                        "name": "Cover Genius Pty Ltd"
                    },
                    "claim_selector_id": null
                },
                "insured": [
                    {
                        "id": "3aa30165-7a71-45ab-8899-f479fcb6e8e2",
                        "first_name": "Darin",
                        "last_name": "Sikanic",
                        "email": "[email protected]",
                        "region": null
                    }
                ],
                "tax": {
                    "total_tax": 0.0,
                    "total_amount_without_tax": 3.5,
                    "total_tax_formatted": "US$0.00",
                    "total_amount_without_tax_formatted": "US$3.50",
                    "taxes": []
                },
                "duration": "2 00:00:00",
                "benefits": [
                    {
                        "description": "Updated Transalation",
                        "limit": 7.77,
                        "limit_policy_currency": 10.0,
                        "limit_formatted": "US$7.77",
                        "limit_policy_currency_formatted": "A$10.00",
                        "excess": 3.88,
                        "excess_policy_currency": 5.0,
                        "excess_formatted": "US$3.88",
                        "excess_policy_currency_formatted": "A$5.00"
                    },
                    {
                        "description": "Updated Transalation",
                        "limit_description": "Benefit Text Test 01",
                        "excess": 4.66,
                        "excess_policy_currency": 6.0,
                        "excess_formatted": "US$4.66",
                        "excess_policy_currency_formatted": "A$6.00"
                    },
                    {
                        "description": "Description",
                        "limit": 11.65,
                        "limit_policy_currency": 15.0,
                        "limit_formatted": "US$11.65",
                        "limit_policy_currency_formatted": "A$15.00"
                    },
                    {
                        "description": "Description",
                        "limit": 15.54,
                        "limit_policy_currency": 20.0,
                        "limit_formatted": "US$15.54",
                        "limit_policy_currency_formatted": "A$20.00",
                        "excess_description": "Excess Text Test 01"
                    },
                    {
                        "description": "Description",
                        "limit_description": "Benefit Text Test 02",
                        "excess_description": "Excess Text Test 02"
                    }
                ],
                "commission": {
                    "total_commission": 0.0,
                    "total_commission_formatted": "US$0.00"
                },
                "created_at": "2021-01-15T01:19:49.523137Z",
                "confirmed_at": "2021-01-15T01:19:59.750719Z",
                "updated_at": "2021-01-15T01:30:17.355406Z",
                "cancelled_at": null,
                "is_renewable": false,
                "cover_amount": 38.85,
                "cover_amount_formatted": "US$38.85",
                "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS?policy_type=event_ticket_protection_v1",
                "attachments": [],
                "files": [],
                "extra_fields": {},
                "next_renewal": null,
                "can_be_cancelled": true,
                "price_diff": -0.77,
                "price_diff_formatted": "-US$0.77"
            }
        ],
        "coi": {
            "url": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS?security_token=UiRlP-6bLfQ-1YLjR-ste66",
            "pdf": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS.pdf?security_token=UiRlP-6bLfQ-1YLjR-ste66"
        },
        "account_url": "https://staging.xcover.com/en/account?id=0bde2670-c3f9-4e79-a837-063d5d5e3874&signup_token=zl4qR-wNoL5-fHZ4M-u0Lmb",
        "policyholder": {
            "first_name": "Ben",
            "middle_name": null,
            "last_name": "H",
            "email": "[email protected]",
            "phone": null,
            "country": "US",
            "age": null,
            "address1": null,
            "address2": null,
            "city": null,
            "postcode": null,
            "region": "NYC",
            "secondary_email": null,
            "birth_date": null,
            "company": null
        },
        "total_tax": 0.0,
        "total_tax_formatted": "US$0.00",
        "total_premium": 3.5,
        "total_premium_formatted": "US$3.50",
        "total_price_diff": -0.77,
        "total_price_diff_formatted": "-US$0.77",
        "update_id": "qh89u-AIB2k-34CC8-UPD"
    }
    {
        "quotes": [
            {
                "id": "{{quote_1_id}}",
                "update_fields": {
                    "tickets": [
                    	{"price": 25},
                    	{"price": 25}
                    ]
                }
            }
        ]
    }
    {
        "id": "8WD8Y-LTEKE-INS",
        "status": "CONFIRMED",
        "currency": "USD",
        "total_price": 3.5,
        "total_price_formatted": "US$3.50",
        "partner_transaction_id": "id-to-stitch-transactions-in-two-systems",
        "created_at": "2021-01-15T01:19:49.529799Z",
        "updated_at": "2021-01-15T01:43:18.466465Z",
        "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS",
        "security_token": "UiRlP-6bLfQ-1YLjR-ste66",
        "quotes": [
            {
                "id": "201eb11b-4494-40e8-97fa-e107c76501bf",
                "policy_start_date": "2021-01-17T13:00:00+00:00",
                "policy_end_date": "2021-01-19T13:00:00+00:00",
                "status": "CONFIRMED",
                "price": 3.5,
                "price_formatted": "US$3.50",
                "policy": {
                    "policy_type": "event_ticket_protection",
                    "policy_name": "Missed Event Cover (Generic)",
                    "policy_code": "MECG0001",
                    "policy_version": "5d24e2d1-a341-4b8b-9917-82878470a9c3",
                    "category": "event_ticket_protection",
                    "content": {
                        "title": "Missed Event Cover for Justin Bibber",
                        "header": null,
                        "description": "90% of attendees add Missed Event Cover for generous protection when things go wrong or your plans change. For only  per ticket it covers you - and all ticket holders - if:",
                        "optout_msg": "",
                        "disclaimer": "<p>This insurance is arranged by Cover Genius Ltd which is authorised and regulated by the FCA (No.750711). Policies are underwritten by Markel International Insurance Company Limited which is authorised by the PRA and regulated by the FCA, (No.202570).</p>"
                    },
                    "underwriter": {
                        "disclaimer": "This plan is arranged by XCover.com",
                        "name": "Cover Genius Pty Ltd"
                    },
                    "claim_selector_id": null
                },
                "insured": [
                    {
                        "id": "3aa30165-7a71-45ab-8899-f479fcb6e8e2",
                        "first_name": "Darin",
                        "last_name": "Sikanic",
                        "email": "[email protected]",
                        "region": null
                    }
                ],
                "tax": {
                    "total_tax": 0.0,
                    "total_amount_without_tax": 3.5,
                    "total_tax_formatted": "US$0.00",
                    "total_amount_without_tax_formatted": "US$3.50",
                    "taxes": []
                },
                "duration": "2 00:00:00",
                "benefits": [
                    {
                        "description": "Updated Transalation",
                        "limit": 7.77,
                        "limit_policy_currency": 10.0,
                        "limit_formatted": "US$7.77",
                        "limit_policy_currency_formatted": "A$10.00",
                        "excess": 3.88,
                        "excess_policy_currency": 5.0,
                        "excess_formatted": "US$3.88",
                        "excess_policy_currency_formatted": "A$5.00"
                    },
                    {
                        "description": "Updated Transalation",
                        "limit_description": "Benefit Text Test 01",
                        "excess": 4.66,
                        "excess_policy_currency": 6.0,
                        "excess_formatted": "US$4.66",
                        "excess_policy_currency_formatted": "A$6.00"
                    },
                    {
                        "description": "Description",
                        "limit": 11.65,
                        "limit_policy_currency": 15.0,
                        "limit_formatted": "US$11.65",
                        "limit_policy_currency_formatted": "A$15.00"
                    },
                    {
                        "description": "Description",
                        "limit": 15.54,
                        "limit_policy_currency": 20.0,
                        "limit_formatted": "US$15.54",
                        "limit_policy_currency_formatted": "A$20.00",
                        "excess_description": "Excess Text Test 01"
                    },
                    {
                        "description": "Description",
                        "limit_description": "Benefit Text Test 02",
                        "excess_description": "Excess Text Test 02"
                    }
                ],
                "commission": {
                    "total_commission": 0.0,
                    "total_commission_formatted": "US$0.00"
                },
                "created_at": "2021-01-15T01:19:49.523137Z",
                "confirmed_at": "2021-01-15T01:19:59.750719Z",
                "updated_at": "2021-01-15T01:43:18.462228Z",
                "cancelled_at": null,
                "is_renewable": false,
                "cover_amount": 38.85,
                "cover_amount_formatted": "US$38.85",
                "pds_url": "https://staging.xcover.com/en/pds/8WD8Y-LTEKE-INS?policy_type=event_ticket_protection_v1",
                "attachments": [],
                "files": [],
                "extra_fields": {},
                "next_renewal": null,
                "can_be_cancelled": true,
                "price_diff": -0.77,
                "price_diff_formatted": "-US$0.77"
            }
        ],
        "coi": {
            "url": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS?security_token=UiRlP-6bLfQ-1YLjR-ste66",
            "pdf": "https://staging.xcover.com/en/coi/8WD8Y-LTEKE-INS.pdf?security_token=UiRlP-6bLfQ-1YLjR-ste66"
        },
        "account_url": "https://staging.xcover.com/en/account?id=0bde2670-c3f9-4e79-a837-063d5d5e3874&signup_token=zl4qR-wNoL5-fHZ4M-u0Lmb",
        "policyholder": {
            "first_name": "Ben",
            "middle_name": null,
            "last_name": "H",
            "email": "[email protected]",
            "phone": null,
            "country": "US",
            "age": null,
            "address1": null,
            "address2": null,
            "city": null,
            "postcode": null,
            "region": "NYC",
            "secondary_email": null,
            "birth_date": null,
            "company": null
        },
        "total_tax": 0.0,
        "total_tax_formatted": "US$0.00",
        "total_premium": 3.5,
        "total_premium_formatted": "US$3.50",
        "total_price_diff": -0.77,
        "total_price_diff_formatted": "-US$0.77"
    }

    Quote Request for Policies

    Sending a Quote Request

    The Quote request details the required information of this attached main product so that an appropriate policy quotation can be generated. The response from the Quote endpoint can be used to display information about the policy which includes:

    • Policy Reference ID - Unique 13 letter code for each policy (id eg. TXLDR-LH8UN-INS)

    • Policy Price and Applicable Taxes

    • Product Disclosure Statement

    • Legal Disclaimer

    • Inclusions/Exclusions

    • Certificate of Insurance (COI)

    • Benefits, Limits and Excess

    • Cover Amount

    hashtag
    Making a Quote Request

    Making a POST request to the quotes endpoint returns one or several insurance products based on the request. The request to the quotes endpoint is a list (as shown below). At the top level of the request, include the common fields for the quotes like currency , customer_country , customer_language .

    Every Quote request should have the minimum required information to get a quote for the specific Product. For instance, in the case of Product Insurance - we need the category, price, name, description.

    The response has the insurance price and details about the policy in the requested currency for the supplied parameters. This information can be presented to the customer to move them to the Booking stage.

    The response has a top-level ID that is identified by a unique 13 letter alpha-numeric string ending with -INS suffix. There's also an individual ID assigned to each individual quote in the request. Both of these can be stored on the clients side to to cancel, modify and renew the policies during its lifecycle.

    The initial status after the Quote Request is RECEIVED

    circle-info

    For some integrations quote step can be skipped or quote responses can be cached, but we encourage all partners to implement price request via quote endpoint in order to enable dynamic product optimisations provided by BrightWrite platform.

    An example of quote request can be found below.

    hashtag
    Request a Quote

    POST https://api.xcover.com/x/partners/:partner_id/quotes/

    This API call will retrieve the most relevant policies available for distribution

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description
    circle-info

    In the request body, you can send multiple quote . This means that in the case of a 201, you will get back a quote for each request. You only need to make one API call to get many quotes. The next example demonstrates this.

    hashtag
    Multiple Quotes in Single Request

    hashtag
    Request Multiple Quotes

    POST https://api.xcover.com/x/partners/:partner_id/quotes/

    An example of requesting a QuotePackage with two policies for two separate products. The first element of the Request array is a Policy for a Laptop followed by a Mobile phone policy The response under quotes key in the body is zero-indexed based on the position in the request. The first element has an index of 0 in the response, the second element has an index of 1 and so on.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Retrieving Quote Information

    When you request a quote, we send you back a quote package ID (INS number) in the response body, which can be used to retrieve information about all the quotes in the quote package. This is useful incase you don't want to store the Quote response on your side.

    hashtag
    Retrieve a Quote

    GET https://api.xcover.com/x/partners/:partner_id/quotes/:quote_package_id

    The Quote Package ID is obtained during the Quote Request

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Update a Quote

    hashtag
    Update Quote in Quote Package

    PATCH https://api.xcover.com/x/partners/{partner_id}/quotes/{quote_package_id}/

    Use this endpoint to mutate an existing Quote in a Quote Package.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Add Quote

    hashtag
    Add Quote to Quote Package

    POST https://api.xcover.com/x/partners/{partner_id}/quotes/{quote_package_id}/

    The add endpoint can be used with an already generated INS (quote-package-id) to add new Quotes to an existing policy. For example: If the customer adds another Phone protection to their existing Product insurance policies, you could use this endpoint to add a new Quote to an existing Quote Package.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description
    circle-info

    The add method can only be used for Quotes in the RECEIEVED status.

    hashtag
    Remove Quote

    hashtag
    Add Quote to Quote Package

    POST https://api.xcover.com/x/partners/{partner_id}/quotes/{quote_package_id}/

    The add endpoint can be used with an already generated INS (quote-package-id) to delete a specific policy, we need the ID of the Quote from the original request. Simply putting that id in the request will delete the right policy. For example: If the customer remove a product with protection from their cart.

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description
    circle-info

    The remove method can only be used for Quotes in the RECEIEVED status.

    partner_id

    string

    Unique Partner Code

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api-Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api_Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api_Key

    string

    API Key

    partner_id

    string

    Unique Partner Code

    quote_package_id

    string

    Quote Package ID

    Content-Type

    string

    application/json

    Date

    string

    Current Datetime

    Authorization

    string

    HMAC Signature

    X-Api_Key

    string

    API Key

    requestsarrow-up-right
    {
      "id": "TLCC8-B6YWP-INS",
      "status": "RECEIVED",
      "currency": "AUD",
      "total_price": 360.71,
      "total_price_formatted": "A$ 360.71",
      "partner_transaction_id": "ABCD-EFGG-0000-0000",
      "created_at": "2020-02-06T00:12:31.013656Z",
      "updated_at": "2020-02-06T00:12:31.013670Z",
      "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS",
      "quotes": {
        "0": {
          "id": "ca5c9839-17b3-4810-b0b1-d5b693ecef86",
          "policy_start_date": "2020-02-06T13:00:00+00:00",
          "policy_end_date": "2021-02-06T13:00:00+00:00",
          "status": "RECEIVED",
          "price": 124.85,
          "price_formatted": "A$ 124.85",
          "policy": {
            "policy_type": "product_insurance",
            "policy_name": "Full Product Protection",
            "policy_code": "PFPO05CG",
            "policy_version": "7720b62b-3e84-446a-89d3-48c83cb39384",
            "category": "electronics-insurance",
            "content": {
              "title": "Full Product Cover For Life",
              "header": "Full Product Cover For Life",
              "description": "Theft, damage and expanded warranty that covers the product for life. Cancel anytime.",
              "optout_msg": "<p>.</p>",
              "inclusions": [
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                  "description": "Full replacement if the item can’t be repaired."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                  "description": "Cancel anytime."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                  "description": "Covers theft."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                  "description": "Covers repairs when your item is damaged."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                  "description": "Covers what the manufacturer's warranty doesn’t."
                },
                {
                  "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                  "description": "Extends warranty protection for the life of the policy."
                }
              ],
              "disclaimer": "<p>I am over 18 and agree to the terms of this policy. This cover is powered by XCover.com and underwritten by Pacific International Insurance Pty Ltd.</p>"
            },
            "underwriter": {
              "disclaimer": "This cover is powered by XCover and underwritten by Pacific International Insurance Pty. Ltd.",
              "name": "Pacific International Insurance Pty. Ltd."
            }
          },
          "insured": null,
          "tax": {
            "total_tax": 21.67,
            "total_amount_without_tax": 103.18,
            "total_tax_formatted": "A$ 21.67",
            "total_amount_without_tax_formatted": "A$ 103.18",
            "taxes": [
              {
                "tax_amount": 11.35,
                "tax_code": "SD",
                "tax_amount_formatted": "A$ 11.35"
              },
              {
                "tax_amount": 10.32,
                "tax_code": "GST",
                "tax_amount_formatted": "A$ 10.32"
              },
              {
                "tax_amount": 0.0,
                "tax_code": "ESL",
                "tax_amount_formatted": "A$ 0.00"
              }
            ]
          },
          "duration": "366 00:00:00",
          "benefits": [
            {
              "description": "Damage or Theft",
              "limit": 1349.76,
              "limit_policy_currency": 1349.76,
              "limit_formatted": "A$ 1349.76",
              "limit_policy_currency_formatted": "A$ 1349.76",
              "excess": 150.0,
              "excess_policy_currency": 150.0,
              "excess_formatted": "A$ 150.00",
              "excess_policy_currency_formatted": "A$ 150.00"
            },
            {
              "description": "Extended Warranty",
              "limit": 1349.76,
              "limit_policy_currency": 1349.76,
              "limit_formatted": "A$ 1349.76",
              "limit_policy_currency_formatted": "A$ 1349.76",
              "excess": 150.0,
              "excess_policy_currency": 150.0,
              "excess_formatted": "A$ 150.00",
              "excess_policy_currency_formatted": "A$ 150.00"
            }
          ],
          "commission": {
            "total_commission": 0.0,
            "total_commission_formatted": "A$ 0.00"
          },
          "created_at": "2020-02-06T00:12:30.974396Z",
          "confirmed_at": null,
          "updated_at": "2020-02-06T00:12:30.974411Z",
          "cancelled_at": null,
          "is_renewable": true,
          "cover_amount": 1349.0,
          "cover_amount_formatted": "A$ 1349.00",
          "pending_renewal": null,
          "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS?policy_type=product_insurance_v1",
          "discount_price": 124.85,
          "discount_price_formatted": "A$ 124.85",
          "discount_amount": 0.0,
          "discount_amount_formatted": "A$ 0.00"
        }
      },
      "bundle_code": null,
      "bundle_price": 360.71,
      "bundle_content": {},
      "bundle_price_formatted": "A$ 360.71",
      "bundle_discount_percent": 0.0,
      "bundle_discount_amount": 0.0,
      "bundle_discount_amount_formatted": "A$ 0.00"
    }
    
    {
        "currency": "AUD",
        "customer_country": "AU",
        "customer_language": "en",
        "partner_transaction_id": "1ef4472a-a50e-4c52-87e1-73b9ca988031",
        "request": [
            {
                "policy_type": "product_insurance",
                "policy_type_version": "2",
                "policy_start_date": "2021-01-14T18:30:00+00:00",
                "retail_value": 3799,
                "category": "Laptop",
                "title": "Apple MacBook Pro",
                "brand": "Apple",
                "model": "MacBook Pro",
                "description": "Apple Macbook Pro 16\" 2019 2.6 GHz w/ Touch Bar 512GB - Space Grey - Au Stock",
                "sku": "190199368477",
                "condition": "new"
            }
        ]
    }
    {
        "id": "TLCC8-B6YWP-INS",
        "status": "RECEIVED",
        "currency": "AUD",
        "total_price": 360.71,
        "total_price_formatted": "A$ 360.71",
        "partner_transaction_id": "ABCD-EFGG-0000-0000",
        "created_at": "2020-02-06T00:12:31.013656Z",
        "updated_at": "2020-02-06T00:12:31.013670Z",
        "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS",
        "quotes": {
            "0": {
                "id": "ca5c9839-17b3-4810-b0b1-d5b693ecef86",
                "policy_start_date": "2020-02-06T13:00:00+00:00",
                "policy_end_date": "2021-02-06T13:00:00+00:00",
                "status": "RECEIVED",
                "price": 124.85,
                "price_formatted": "A$ 124.85",
                "policy": {
                    "policy_type": "product_insurance",
                    "policy_name": "Full Product Protection",
                    "policy_code": "PFPO05CG",
                    "policy_version": "7720b62b-3e84-446a-89d3-48c83cb39384",
                    "category": "electronics-insurance",
                    "content": {
                        "title": "Full Product Cover For Life",
                        "header": "Full Product Cover For Life",
                        "description": "Theft, damage and expanded warranty that covers the product for life. Cancel anytime.",
                        "optout_msg": "<p>.</p>",
                        "inclusions": [
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                                "description": "Full replacement if the item can’t be repaired."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                                "description": "Cancel anytime."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                                "description": "Covers theft."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                                "description": "Covers repairs when your item is damaged."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                                "description": "Covers what the manufacturer's warranty doesn’t."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 124.85/year. Cancel anytime.",
                                "description": "Extends warranty protection for the life of the policy."
                            }
                        ],
                        "disclaimer": "<p>I am over 18 and agree to the terms of this policy. This cover is powered by XCover.com and underwritten by Pacific International Insurance Pty Ltd.</p>"
                    },
                    "underwriter": {
                        "disclaimer": "This cover is powered by XCover and underwritten by Pacific International Insurance Pty. Ltd.",
                        "name": "Pacific International Insurance Pty. Ltd."
                    }
                },
                "insured": null,
                "tax": {
                    "total_tax": 21.67,
                    "total_amount_without_tax": 103.18,
                    "total_tax_formatted": "A$ 21.67",
                    "total_amount_without_tax_formatted": "A$ 103.18",
                    "taxes": [
                        {
                            "tax_amount": 11.35,
                            "tax_code": "SD",
                            "tax_amount_formatted": "A$ 11.35"
                        },
                        {
                            "tax_amount": 10.32,
                            "tax_code": "GST",
                            "tax_amount_formatted": "A$ 10.32"
                        },
                        {
                            "tax_amount": 0.0,
                            "tax_code": "ESL",
                            "tax_amount_formatted": "A$ 0.00"
                        }
                    ]
                },
                "duration": "366 00:00:00",
                "benefits": [
                    {
                        "description": "Damage or Theft",
                        "limit": 1349.76,
                        "limit_policy_currency": 1349.76,
                        "limit_formatted": "A$ 1349.76",
                        "limit_policy_currency_formatted": "A$ 1349.76",
                        "excess": 150.0,
                        "excess_policy_currency": 150.0,
                        "excess_formatted": "A$ 150.00",
                        "excess_policy_currency_formatted": "A$ 150.00"
                    },
                    {
                        "description": "Extended Warranty",
                        "limit": 1349.76,
                        "limit_policy_currency": 1349.76,
                        "limit_formatted": "A$ 1349.76",
                        "limit_policy_currency_formatted": "A$ 1349.76",
                        "excess": 150.0,
                        "excess_policy_currency": 150.0,
                        "excess_formatted": "A$ 150.00",
                        "excess_policy_currency_formatted": "A$ 150.00"
                    }
                ],
                "commission": {
                    "total_commission": 0.0,
                    "total_commission_formatted": "A$ 0.00"
                },
                "created_at": "2020-02-06T00:12:30.974396Z",
                "confirmed_at": null,
                "updated_at": "2020-02-06T00:12:30.974411Z",
                "cancelled_at": null,
                "is_renewable": true,
                "cover_amount": 1349.0,
                "cover_amount_formatted": "A$ 1349.00",
                "pending_renewal": null,
                "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS?policy_type=product_insurance_v1",
                "discount_price": 124.85,
                "discount_price_formatted": "A$ 124.85",
                "discount_amount": 0.0,
                "discount_amount_formatted": "A$ 0.00"
            },
            "1": {
                "id": "063f9987-efae-4f29-8f85-9e6efa4299c1",
                "policy_start_date": "2020-02-06T13:00:00+00:00",
                "policy_end_date": "2021-02-06T13:00:00+00:00",
                "status": "RECEIVED",
                "price": 235.86,
                "price_formatted": "A$ 235.86",
                "policy": {
                    "policy_type": "product_insurance",
                    "policy_name": "Full Product Protection",
                    "policy_code": "PFPO05CG",
                    "policy_version": "7720b62b-3e84-446a-89d3-48c83cb39384",
                    "category": "electronics-insurance",
                    "content": {
                        "title": "Full Product Cover For Life",
                        "header": "Full Product Cover For Life",
                        "description": "Theft, damage and expanded warranty that covers the product for life. Cancel anytime.",
                        "optout_msg": "<p>.</p>",
                        "inclusions": [
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 235.86/year. Cancel anytime.",
                                "description": "Full replacement if the item can’t be repaired."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 235.86/year. Cancel anytime.",
                                "description": "Cancel anytime."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 235.86/year. Cancel anytime.",
                                "description": "Covers theft."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 235.86/year. Cancel anytime.",
                                "description": "Covers repairs when your item is damaged."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 235.86/year. Cancel anytime.",
                                "description": "Covers what the manufacturer's warranty doesn’t."
                            },
                            {
                                "title": "Get peace of mind with theft, damage and expanded warranty that covers the life of your product for only A$ 235.86/year. Cancel anytime.",
                                "description": "Extends warranty protection for the life of the policy."
                            }
                        ],
                        "disclaimer": "<p>I am over 18 and agree to the terms of this policy. This cover is powered by XCover.com and underwritten by Pacific International Insurance Pty Ltd.</p>"
                    },
                    "underwriter": {
                        "disclaimer": "This cover is powered by XCover and underwritten by Pacific International Insurance Pty. Ltd.",
                        "name": "Pacific International Insurance Pty. Ltd."
                    }
                },
                "insured": null,
                "tax": {
                    "total_tax": 40.93,
                    "total_amount_without_tax": 194.93,
                    "total_tax_formatted": "A$ 40.93",
                    "total_amount_without_tax_formatted": "A$ 194.93",
                    "taxes": [
                        {
                            "tax_amount": 21.44,
                            "tax_code": "SD",
                            "tax_amount_formatted": "A$ 21.44"
                        },
                        {
                            "tax_amount": 19.49,
                            "tax_code": "GST",
                            "tax_amount_formatted": "A$ 19.49"
                        },
                        {
                            "tax_amount": 0.0,
                            "tax_code": "ESL",
                            "tax_amount_formatted": "A$ 0.00"
                        }
                    ]
                },
                "duration": "366 00:00:00",
                "benefits": [
                    {
                        "description": "Damage or Theft",
                        "limit": 2549.87,
                        "limit_policy_currency": 2549.87,
                        "limit_formatted": "A$ 2549.87",
                        "limit_policy_currency_formatted": "A$ 2549.87",
                        "excess": 150.0,
                        "excess_policy_currency": 150.0,
                        "excess_formatted": "A$ 150.00",
                        "excess_policy_currency_formatted": "A$ 150.00"
                    },
                    {
                        "description": "Extended Warranty",
                        "limit": 2549.87,
                        "limit_policy_currency": 2549.87,
                        "limit_formatted": "A$ 2549.87",
                        "limit_policy_currency_formatted": "A$ 2549.87",
                        "excess": 150.0,
                        "excess_policy_currency": 150.0,
                        "excess_formatted": "A$ 150.00",
                        "excess_policy_currency_formatted": "A$ 150.00"
                    }
                ],
                "commission": {
                    "total_commission": 0.0,
                    "total_commission_formatted": "A$ 0.00"
                },
                "created_at": "2020-02-06T00:12:31.008203Z",
                "confirmed_at": null,
                "updated_at": "2020-02-06T00:12:31.008217Z",
                "cancelled_at": null,
                "is_renewable": true,
                "cover_amount": 2549.0,
                "cover_amount_formatted": "A$ 2549.00",
                "pending_renewal": null,
                "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS?policy_type=product_insurance_v1",
                "discount_price": 235.86,
                "discount_price_formatted": "A$ 235.86",
                "discount_amount": 0.0,
                "discount_amount_formatted": "A$ 0.00"
            }
        },
        "bundle_code": null,
        "bundle_price": 360.71,
        "bundle_content": {},
        "bundle_price_formatted": "A$ 360.71",
        "bundle_discount_percent": 0.0,
        "bundle_discount_amount": 0.0,
        "bundle_discount_amount_formatted": "A$ 0.00"
    }
    {
        "currency": "AUD",
        "customer_country": "AU",
        "customer_language": "en",
        "partner_transaction_id": "1ef4472a-a50e-4c52-87e1-73b9ca988031",
        "request": [
            {
                "policy_type": "product_insurance",
                "policy_type_version": "2",
                "policy_start_date": "2021-01-14T18:30:00+00:00",
                "retail_value": 3799,
                "category": "Laptop",
                "title": "Apple MacBook Pro",
                "brand": "Apple",
                "model": "MacBook Pro",
                "description": "Apple Macbook Pro 16\" 2019 2.6 GHz w/ Touch Bar 512GB - Space Grey - Au Stock",
                "sku": "190199368477",
                "condition": "new"
            },
            {
                "policy_type": "product_insurance",
                "policy_type_version": "2",
                "policy_start_date": "2021-01-14T18:30:00+00:00",
                "retail_value": 3799,
                "category": "Mobile",
                "title": "Apple iPhone 12 Pro Max",
                "brand": "Apple",
                "model": "iPhone 12 Pro Max",
                "sku": "190199368478",
                "condition": "new"
            }
        ]
    } 
    {
        "id": "MPM49-EKX9D-INS",
        "status": "RECEIVED",
        "currency": "GBP",
        "total_price": 244.82,
        "total_price_formatted": "£244.82",
        "partner_transaction_id": "3ab19ca8-1b81-469f-ace5-33d3ccf29c83",
        "created_at": "2021-01-05T08:34:09.323201Z",
        "updated_at": "2021-01-05T08:34:09.323215Z",
        "pds_url": "https://www.xcover.com/en/pds/MPM49-EKX9D-INS",
        "security_token": "HthL6-gpJ5M-nu7sT-x7VkK",
        "quotes": {
            "0": {
                "id": "02ed6b9f-4a9a-4d48-a7e9-128cba071cec",
                "policy_start_date": "2021-01-14T18:30:00+00:00",
                "policy_end_date": "2022-01-13T18:30:00+00:00",
                "status": "RECEIVED",
                "price": 244.82,
                "price_formatted": "£244.82",
                "policy": {
                    "policy_type": "product_insurance",
                    "policy_name": "Full Product Protection OnBuy",
                    "policy_code": "ONB01EL",
                    "policy_version": "7a51eb83-dcc6-4639-bf97-ae1cde554416",
                    "category": "electronics-insurance",
                    "content": {
                        "title": "Full Product Protection",
                        "in_path_disclaimer": "You confirm you are over 18 and have read and agree to the <a href=\"https://www.xcover.com/en/pds/MPM49-EKX9D-INS?policy_type=product_insurance_v3\" target=\"_blank\">Policy Terms</a> & <a href=\"https://static.xcover.com/media/pds/7a51eb83-dcc6-4639-bf97-ae1cde554416/OnBuy_IPID_OkVuyYh.pdf\" target=\"_blank\">IPID</a>. The policy is provided by XCover.com (trading name of Cover Genius Ltd) and underwritten by Fortegra Europe Insurance Company Limited. Onbuy.com (Visor Commerce Ltd) is an Appointed Representative of Cover Genius Ltd who is authorised and regulated by the Financial Conduct Authority (FCA) reference 750711. This can be checked on the financial services register held on the FCA’s website (www.fca.org.uk). Fortegra Europe Insurance Company Limited is authorised and regulated by the MFSA."
                    },
                    "underwriter": {
                        "disclaimer": "This plan is arranged by XCover and underwritten by Fortegra Europe Insurance Company Limited.",
                        "name": "Fortegra Europe Insurance Company Limited"
                    }
                },
                "insured": null,
                "tax": {
                    "total_tax": 26.23,
                    "total_amount_without_tax": 218.59,
                    "total_tax_formatted": "£26.23",
                    "total_amount_without_tax_formatted": "£218.59",
                    "taxes": [
                        {
                            "tax_amount": 26.23,
                            "tax_code": "IPT",
                            "tax_amount_formatted": "£26.23"
                        }
                    ]
                },
                "duration": "364 00:00:00",
                "benefits": [
                    {
                        "description": "Accidental Damage",
                        "limit": 1623.51,
                        "limit_policy_currency": 1623.51,
                        "limit_formatted": "£1623.51",
                        "limit_policy_currency_formatted": "£1623.51",
                        "limit_per_unit": 541.17,
                        "limit_per_unit_policy_currency": 541.17,
                        "limit_per_unit_formatted": "£541.17 per item",
                        "limit_per_unit_policy_currency_formatted": "£541.17 per item",
                        "excess": 81.18,
                        "excess_policy_currency": 81.1755,
                        "excess_formatted": "£81.18",
                        "excess_policy_currency_formatted": "£81.18"
                    },
                    {
                        "description": "Theft",
                        "limit": 1623.51,
                        "limit_policy_currency": 1623.51,
                        "limit_formatted": "£1623.51",
                        "limit_policy_currency_formatted": "£1623.51",
                        "limit_per_unit": 541.17,
                        "limit_per_unit_policy_currency": 541.17,
                        "limit_per_unit_formatted": "£541.17 per item",
                        "limit_per_unit_policy_currency_formatted": "£541.17 per item",
                        "excess": 81.18,
                        "excess_policy_currency": 81.1755,
                        "excess_formatted": "£81.18",
                        "excess_policy_currency_formatted": "£81.18"
                    },
                    {
                        "description": "Mechanical Breakdown (when the manufacturer's warranty expires)",
                        "limit": 1623.51,
                        "limit_policy_currency": 1623.51,
                        "limit_formatted": "£1623.51",
                        "limit_policy_currency_formatted": "£1623.51",
                        "limit_per_unit": 541.17,
                        "limit_per_unit_policy_currency": 541.17,
                        "limit_per_unit_formatted": "£541.17 per item",
                        "limit_per_unit_policy_currency_formatted": "£541.17 per item",
                        "excess": 81.18,
                        "excess_policy_currency": 81.1755,
                        "excess_formatted": "£81.18",
                        "excess_policy_currency_formatted": "£81.18"
                    }
                ],
                "commission": {
                    "total_commission": 45.0,
                    "total_commission_formatted": "£45.00"
                },
                "created_at": "2021-01-05T08:34:09.316598Z",
                "confirmed_at": null,
                "updated_at": "2021-01-05T08:34:09.316612Z",
                "cancelled_at": null,
                "is_renewable": false,
                "cover_amount": 541.0,
                "cover_amount_formatted": "£541.00 per item",
                "pds_url": "https://www.xcover.com/en/pds/MPM49-EKX9D-INS?policy_type=product_insurance_v3",
                "discount_price": 244.82,
                "discount_price_formatted": "£244.82",
                "discount_amount": 0.0,
                "discount_amount_formatted": "£0.00"
            }
        },
        "bundle_code": null,
        "bundle_price": 244.82,
        "bundle_content": {},
        "bundle_price_formatted": "£244.82",
        "bundle_discount_percent": 0.0,
        "bundle_discount_amount": 0.0,
        "bundle_discount_amount_formatted": "£0.00"
    }
    {
      "id": "TLCC8-B6YWP-INS",
      "status": "RECEIVED",
      "currency": "USD",
      "total_price": 360.71,
      "total_price_formatted": "US$ 360.71",
      "partner_transaction_id": "ABCD-EFGG-0000-0000",
      "created_at": "2020-02-06T00:12:31.013656Z",
      "updated_at": "2020-02-06T00:12:31.013670Z",
      "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS",
      "quotes": {
        "0": {
          "id": "ca5c9839-17b3-4810-b0b1-d5b693ecef86",
          "policy_start_date": "2020-02-06T13:00:00+00:00",
          "policy_end_date": "2021-02-06T13:00:00+00:00",
          "status": "RECEIVED",
          "price": 124.85,
          "price_formatted": "US$ 124.85",
          "policy": {
            "policy_type": "product_insurance",
            "policy_name": "Full Product Protection",
            "policy_code": "PFPO05CG",
            "policy_version": "7720b62b-3e84-446a-89d3-48c83cb39384",
            "category": "electronics-insurance"
          },
          "insured": [
            {
              "first_name": "Bart",
              "last_name": "Simpson",
              "email": "[email protected]"
            }
          ]
        }
      },
      "bundle_code": null,
      "bundle_price": 360.71,
      "bundle_content": {},
      "bundle_price_formatted": "US$ 360.71",
      "bundle_discount_percent": 0.0,
      "bundle_discount_amount": 0.0,
      "bundle_discount_amount_formatted": "US$ 0.00"
    }
    {
        "currency": "USD",
        "request": [
            {
                "quote_id": "ca5c9839-17b3-4810-b0b1-d5b693ecef86",
                "insured": [
                    {
                        "first_name": "Bart",
                        "last_name": "Simpson",
                        "email": "[email protected]"
                    }
                ]
            }
        ]
    }
    {
      "id": "TLCC8-B6YWP-INS",
      "status": "RECEIVED",
      "currency": "USD",
      "total_price": 360.71,
      "total_price_formatted": "US$ 360.71",
      "partner_transaction_id": "ABCD-EFGG-0000-0000",
      "created_at": "2020-02-06T00:12:31.013656Z",
      "updated_at": "2020-02-06T00:12:31.013670Z",
      "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS",
      "quotes": {
        "0": {
          "id": "ca5c9839-17b3-4810-b0b1-d5b693ecef86",
          "policy_start_date": "2020-02-06T13:00:00+00:00",
          "policy_end_date": "2021-02-06T13:00:00+00:00",
          "status": "RECEIVED",
          "price": 124.85,
          "price_formatted": "US$ 124.85",
          "policy": {
            "policy_type": "product_insurance",
            "policy_name": "Full Product Protection",
            "policy_code": "PFPO05CG",
            "policy_version": "7720b62b-3e84-446a-89d3-48c83cb39384",
            "category": "electronics-insurance"
          },
          "insured": [
            {
              "first_name": "Bart",
              "last_name": "Simpson",
              "email": "[email protected]"
            }
          ]
        }
      },
      "bundle_code": null,
      "bundle_price": 360.71,
      "bundle_content": {},
      "bundle_price_formatted": "US$ 360.71",
      "bundle_discount_percent": 0.0,
      "bundle_discount_amount": 0.0,
      "bundle_discount_amount_formatted": "US$ 0.00"
    }
    {
        "currency": "USD",
        "request": [
            {
                "policy_type": "product_insurance",
                "policy_type_version": "2",
                "policy_start_date": "2021-01-14T18:30:00+00:00",
                "retail_value": 450,
                "category": "Mobile",
                "title": "Samsung S8",
                "brand": "Samsung",
                "model": "S8",
                "sku": "1231231",
                "condition": "new"
            }
        ]
    }
    {
      "id": "TLCC8-B6YWP-INS",
      "status": "RECEIVED",
      "currency": "USD",
      "total_price": 360.71,
      "total_price_formatted": "US$ 360.71",
      "partner_transaction_id": "ABCD-EFGG-0000-0000",
      "created_at": "2020-02-06T00:12:31.013656Z",
      "updated_at": "2020-02-06T00:12:31.013670Z",
      "pds_url": "https://staging.xcover.com/en/pds/TLCC8-B6YWP-INS",
      "quotes": {
        "0": {
          "id": "ca5c9839-17b3-4810-b0b1-d5b693ecef86",
          "policy_start_date": "2020-02-06T13:00:00+00:00",
          "policy_end_date": "2021-02-06T13:00:00+00:00",
          "status": "RECEIVED",
          "price": 124.85,
          "price_formatted": "US$ 124.85",
          "policy": {
            "policy_type": "product_insurance",
            "policy_name": "Full Product Protection",
            "policy_code": "PFPO05CG",
            "policy_version": "7720b62b-3e84-446a-89d3-48c83cb39384",
            "category": "electronics-insurance"
          },
          "insured": [
            {
              "first_name": "Bart",
              "last_name": "Simpson",
              "email": "[email protected]"
            }
          ]
        }
      },
      "bundle_code": null,
      "bundle_price": 360.71,
      "bundle_content": {},
      "bundle_price_formatted": "US$ 360.71",
      "bundle_discount_percent": 0.0,
      "bundle_discount_amount": 0.0,
      "bundle_discount_amount_formatted": "US$ 0.00"
    }
    {
        "quotes": [
            {
                "id": "ca5c9839-17b3-4810-b0b1-d5b693ecef86"
            }
        ]
    }