Payments
We support a number of ways to handle payments when purchasing policies. You can always send card PAN data directly to our purchase endpoints, which we handle in a PCI-compliant manner.
Overview
We also support a number of payment processors. The general model for supporting a payment provider is onboarding Vertical Insure as a sub-merchant within your payment provider account. We will need a way to validate payments in the form of an API key to the sub merchant account, or a way to process the payment directly from our system (e.g. capture vs authorize and capture). With certain payment providers, we also support shared vault solutions or payment method forwarding solutions as we are PCI compliant. An example of a forwarding solution is TokenEx. Ask your Vertical Insure partner representative about a payment processor that is not mentioned on this page - we probably support it!
JustiFi
Currencies: USD
For platforms utilizing JustiFi for processing payments, you can take advantage of their Bind Insurance API which was developed in direct partnership with Vertical Insure and makes it easy to process payments for insurance purchases while continuing to process your customer payments.
At this time, we only accept payments in USD with Justifi.
Stripe Connect
Currencies: USD
, CAD
In order to utilize Stripe Connect, you will need to onboard Vertical Insure to your Stripe platform account as a standard connect account. In order to share payment methods across Stripe Connect accounts, the customer and payment methods need to be created within the platform account. These payments will be designated as direct charges, which ensures the transaction fees associated with the payment are passed to Vertical Insure and not the platform.
If you're using Stripe already, your payments flow can operate in a similar fashion but you will need to create an additional PaymentIntent for the policy purchase.
-
Once your payment for the customer is completed, you can utilize Stripe Connect to clone the payment method into the Vertical Insure connect account.
curl https://api.stripe.com/v1/payment_methods \
-d customer="\{\{CUSTOMER_ID\}\}" \
-d payment_method="\{\{PAYMENT_METHOD_ID\}\}" \
-H "Stripe-Account: \{\{VERTICAL_INSURE_CONNECTED_ACCOUNT_ID\}\}" -
Create a second PaymentIntent with the cloned PaymentMethod for the price of the policy premium on behalf of the Vertical Insure connect account.
curl https://api.stripe.com/v1/payment_intents \
-d amount=\{\{INSURANCE_TOTAL\}\} \
-d currency=usd \
-d confirm=true \
-d payment_method="\{\{PAYMEMT_METHOD_ID\}\}" \
-d "metadata[quote_id]"=\{\{QUOTE_ID\}\}
-H "Stripe-Account: \{\{VERTICAL_INSURE_CONNECTED_ACCOUNT_ID\}\}" -
Call the Vertical Insure Purchase API
curl -L -X POST 'https://api.verticalinsure.com/v1/purchase/event-participation-cancellation-insurance' \
-H 'Content-Type: application/json' \
--data-raw '{
"quote_id": "string",
"payment_method": {
"token": "stripe:<payment_intent_id>"
}
}'
Stripe Connect with Subscription Payments
For products that support subscription payments we will need to be able to charge the payment method on a recurring basis. In order to support this, you must setup the cloned payment method for future, off session use.
The steps are similar to the approach outlined above. When creating the payment intent, you simply need to supply to the Stripe setup_future_usage
attribute.
curl https://api.stripe.com/v1/payment_intents \
-d amount=\{\{INSURANCE_TOTAL\}\} \
-d currency=usd \
-d confirm=true \
-d payment_method="\{\{PAYMEMT_METHOD_ID\}\}" \
-d setup_future_usage="off_session"
-d "metadata[quote_id]"=\{\{QUOTE_ID\}\}
-H "Stripe-Account: \{\{VERTICAL_INSURE_CONNECTED_ACCOUNT_ID\}\}"
At this time, we support payments in USD or CAD when a Stripe Payment Intent is passed into the purchase API. Stripe also happens to be the only supported platform for CAD--when the price of a policy is offered in CAD, the only valid payment for the purchase is in CAD by passing in a Stripe Payment Intent (or charge ID).
Troubleshooting Stripe
No such payment_intent errors
If you are recieving the error No such payment_intent: py_XXXXXXXXXXXXX
then you should ensure your payment intents are getting created as direct charges on our Stripe account. For various SDK references on how to accomplish this, please see the Stripe Connected Accounts documentation for using the Stripe-Account
header. Ask your Vertical Insure partner representative for the appropriate account id value.
CardConnect (CardPointe)
Currencies: USD
In order to utilize CardConnect services for payments, you will need to use CardConnect Copilot to onboard Vertical Insure as a merchant within your platform account. Once, you've obtained a MID for Vertical Insure, you can submit payments utilizing tokens across all of your merchants for insurance.
-
Create a payment authorization:
curl -L -X PUT 'https://{site}.cardconnect.com/cardconnect/rest/auth' \
-H 'Content-Type: application/json' \
--data '{
"merchid": "{{VERTICAL_INSURE_MERCHANT_ID}}",
"account": "{{CARD_TOKEN}}",
"expiry": "{{CARD_EXPIRATION}}",
"amount": "{{INSURANCE_TOTAL}},
"name": "{{CARDHOLDER_NAME}}"
}' -
capture the payment:
curl -L -X PUT 'https://{site}.cardconnect.com/cardconnect/rest/capture' \
-H 'Content-Type: application/json' \
--data '{
"retref":"{{RETREF_FROM_AUTH_REQUEST}}",
"merchid":"{{VERTICAL_INSURE_MERCHANT_ID}}"
}' -
Call the Vertical Insure Purchase API
curl -L -X POST 'https://api.verticalinsure.com/v1/purchase/event-participation-cancellation-insurance' \
-H 'Content-Type: application/json' \
--data-raw '{
"quote_id": "string",
"payment_method": {
"token": "card_connect:<retref>"
}
}'
Note: If you are utilizing CardConnect profiles in order to allow your customers to re-use a saved payment method, you will need to retrieve the payment token on file related to a profile.
Subscriptions
For certain products, we offer the choice of a monthly subscription. When this choice is available,
the subscription_premium
field will be present on the quote response. The value of the field will be a JSON object with payment_amount
, the
amount of money charged per month, and payments_required
, or the number of times amount needs to be paid before the subscription has been paid
in full. If the customer opts for the subscription for a quote where a subscription is offered, it can be chosen by including the field
subscription
with the value true
in the Purchase API request.
When a subscription is purchased, the customer will be charged the payment_amount
once immediately, and then once again on the same date every month for the next
payments_required - 1
months. There are some exceptions to this: for example, if the subscription is billed on the 31st of the month, and the month is February,
the subscription will be charged on the last day of the month instead.
There is no auto-renewal for subscriptions at this time. Once all of the payments have been made, no further payments will be charged, and the policy will lapse on its expiration date. Customers who want a new policy will have to purchase a new one.
Subscriptions are currently only supported for the payment processors Justifi and Stripe. If your purchase request indicates that the customer wants a subscription, but the supplied payment method is for a payment processor that does not support subscriptions, then a payment error will be returned.