# Automatic Dispute Response

Billing.js automatically sets a webhook on your incoming disputes to allow you to autofill the response and submit it directly if you prefer.&#x20;

This will save you time and energy by contesting every incoming disputes with proof of your refund/cancellation policy in place as well as a clear description of your product.

## Set up your product to automatically contest incoming disputes

#### 1. Go on your products page from the [Stripe Dashboard](https://dashboard.stripe.com/products?active=true)

#### 2. Select the product you want to automatically contest disputes from

#### 3. Add the following metadatas

* `billing_auto_submit_dispute` = `true`  (default to false)

this will automatically submit the dispute response so you don't have to submit it manually from the dashboard

* `cancellationPolicyDisclosure` = An explanation of how and when the customer was shown your refund policy prior to purchase. Has a maximum character count of 20,000.

> **Example:** *The customer is presented with the cancellation policy on the payment page (<https://gpt.space/pricing>) (see the attached screenshot) And on the Terms of service page (<https://gpt.space/terms-of-service>) which is always accessible from the footer of all the website pages. (See the attached screenshot)*

* `cancellationPolicyFileUrl` = the downloadable url of a screenshot of your cancellation policy. We recommend uploading it to a Google Drive and set it to public access.

> **Example:** [*https://drive.google.com/uc?id=1b0aoM0DDId5Fu2eXBesnFYATziaBkY8r\&export=download*](https://drive.google.com/uc?id=1b0aoM0DDId5Fu2eXBesnFYATziaBkY8r\&export=download)

{% hint style="warning" %}
Make sure that clicking on the link directly downloads the image and don't open it in a preview page or the file won't be correctly sent to Stripe and will likely **cause the dispute to be lost**
{% endhint %}

* `cancellationRebuttal` = A justification for why the customer’s subscription was not canceled. Has a maximum character count of 20,000.

> **Example:** *The customer did not send us any emails to ask for a cancellation of the subscription. He neither canceled the subscription manually from the subscription management page.*

* `productDescription` = A description of the product or service that was sold. Has a maximum character count of 20,000.

> **Example:** *gpt.space is an addon that allows users to use AI features in Google Workspace and other websites. We have a free tier plan with limited usage per day and an unlimited usage Paid plan.*

* `refundPolicyDisclosure` = Documentation demonstrating that the customer was shown your refund policy prior to purchase. Has a maximum character count of 20,000.

> **Example:** *The customer is presented with the refund policy on the payment page (<https://gpt.space/pricing>) (see the attached screenshot) And on the Terms of service page (<https://gpt.space/terms-of-service>) which is always accessible from the footer of all the website pages. (see the attached screenshot)*

* `refundPolicyFileUrl` = the downloadable url of a screenshot of your refund policy. We recommend uploading it to a Google Drive and set it to public access.

{% hint style="warning" %}
Make sure that clicking on the link directly downloads the image and don't open it in a preview page or the file won't be correctly sent to Stripe and will likely **cause the dispute to be lost**
{% endhint %}

> **Example:** [\
> *https://drive.google.com/uc?id=1WAoZDyGBUXvZa8bZaf1nZisDkDfh1HR\_\&export=downloa*](https://drive.google.com/uc?id=1WAoZDyGBUXvZa8bZaf1nZisDkDfh1HR_\&export=downloa)

* `refundRefusalExplanation` = A justification for why the customer is not entitled to a refund. Has a maximum character count of 20,000.

> **Example:** The refund details are “To receive a refund from a paid subscription you must request the refund within 30 days of subscribing at this email address:[contact@gpt.space”](mailto:contact@gpt.space%E2%80%9D)
