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.

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).

Tokenize Card Details

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

This API call will tokenize the customers credit card details.

Headers

NameTypeDescription

Content-Type

string

application/json

Authorization

string

Bearer {{JWT}}

{
    "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"
   }
}

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.

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.

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

Path Parameters

NameTypeDescription

partner_id

string

Unique Partner Code

quote_package_id

string

Quote Package ID

Headers

NameTypeDescription

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"
}
{
    "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}}"
    }
}

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

Last updated