LogoLogo
API Specification
  • Introduction
  • Integration Checklist
  • Common Use Cases
    • Events / Tickets
    • Travel / Accomodation
    • Property / Renters
    • Parcel / Shipping
    • Product / Retail
  • API Authentication
  • Idempotency Keys
  • Rate Limits
  • Purchase Workflow Overview
    • Quote Request for Policies
      • Fast Quote (Optional)
      • Displaying the Quote
      • JS based offer display
    • Payment Process
      • Single Payment
      • Dual Payment
    • Booking
      • Instant Booking
    • Insurance Opt-Out
  • Cancellation Workflow
  • Modification Workflow
  • Renewal Workflow
  • Instalments Workflow
  • Claim
  • Policy Management
  • XCover Quote Package State
  • API Responses
    • Quote/Policy Status
    • Error Management
    • Error Types
  • Data Formats
  • Webhooks
  • Apple Private Relay
  • FAQs
    • Events / Tickets FAQs
Powered by GitBook
On this page
  • Sending Payment Details
  • Tokenize Card Details
  • Making a Booking
  • Make a Booking

Was this helpful?

Export as PDF
  1. Purchase Workflow Overview
  2. Payment Process

Dual Payment

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

PreviousSingle PaymentNextBooking

Last updated 4 years ago

Was this helpful?

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

Name
Type
Description

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

Name
Type
Description

partner_id

string

Unique Partner Code

quote_package_id

string

Quote Package ID

Headers

Name
Type
Description

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.