---
title: "Report a Refund as Paid"
method: POST
path: "/refunds"
tags: ["Refunds"]
---

# Report a Refund as Paid

`POST /refunds`

This endpoint allows merchants to report a contract refund as paid to the customer using the Extend Line Item ID, Extend Contract ID, Extend Refund ID, or Line Item Transaction ID (the merchant’s unique identifier for the order line item). When requesting a contract refund, there are three statuses that can occur:

*   **Refund\_quoted**
    *   A refund quote has been requested.
    *   Attempt to report the refund as paid to the customer has not been made.
*   **Refund\_paid**
    *   A refund has been successfully approved for the Extend contract.
    *   A refund has successfully been paid from the merchant to the customer.
*   **refund\_denied**
    *   A refund request has been denied for the Extend contract.
    *   This is typically due to an approved claim on the customer’s contract or the contract is in a status which is not eligible for a refund.

With shipping protection contracts, reporting refunds as paid will be rejected if at least one covered product on the contract has shipped.

Contract refunds must be reported to Extend successfully to ensure a credit is received by the merchant in the normal monthly invoicing cycle. If an attempt to report a refund leads to an unexpected result or status, please reach out to your merchant success manager to resolve the discrepancy.

Refund quotes can also be requested by using the quote query parameter set as true. In scenarios where the customer is not eligible for a refund, the quote will return $0, causes/use cases/ reasons:

*   The contract has already been refunded
*   There is an approved claim on the customer’s contract
*   The shipping protection contract contains at least one product that has shipped

If an attempt to retrieve a refund quote leads to an unexpected result or amount, please reach out to your merchant success manager to resolve the discrepancy.

## Query parameters

- `quote` string

## Request body

- union
  - object
    - `productsRemoved` object[] — Array of product reference IDs and quantities that will be removed from contract coverage. This should be used if a contract was created covering products that will no longer be shipped or covered by the contract and the premium must be adjusted to reflect the remaining products that will be covered.
      - `referenceId` string, required — This is the unique identifier for the product in the merchant’s Extend product catalog. Note - When partially refunding contract covering a custom bundle product, the product reference ID for the components of the bundle should be used.
      - `quantity` number, required — The quantity of the product reference ID that should be removed from contract coverage. Note - When partially refunding contract covering a custom bundle product, the quantity for the components of the bundle should be used.
    - `reason` string
    - `newContractId` string — We can provide our own contract ID for partial refunds instead of creating a new one.
    - `deletedAt` number
    - `contractId` string, required
  - object
    - `productsRemoved` object[] — Array of product reference IDs and quantities that will be removed from contract coverage. This should be used if a contract was created covering products that will no longer be shipped or covered by the contract and the premium must be adjusted to reflect the remaining products that will be covered.
      - `referenceId` string, required — This is the unique identifier for the product in the merchant’s Extend product catalog. Note - When partially refunding contract covering a custom bundle product, the product reference ID for the components of the bundle should be used.
      - `quantity` number, required — The quantity of the product reference ID that should be removed from contract coverage. Note - When partially refunding contract covering a custom bundle product, the quantity for the components of the bundle should be used.
    - `reason` string
    - `newContractId` string — We can provide our own contract ID for partial refunds instead of creating a new one.
    - `deletedAt` number
    - `refundId` string, required
  - object
    - `productsRemoved` object[] — Array of product reference IDs and quantities that will be removed from contract coverage. This should be used if a contract was created covering products that will no longer be shipped or covered by the contract and the premium must be adjusted to reflect the remaining products that will be covered.
      - `referenceId` string, required — This is the unique identifier for the product in the merchant’s Extend product catalog. Note - When partially refunding contract covering a custom bundle product, the product reference ID for the components of the bundle should be used.
      - `quantity` number, required — The quantity of the product reference ID that should be removed from contract coverage. Note - When partially refunding contract covering a custom bundle product, the quantity for the components of the bundle should be used.
    - `reason` string
    - `newContractId` string — We can provide our own contract ID for partial refunds instead of creating a new one.
    - `deletedAt` number
    - `lineItemId` string, required
  - object
    - `productsRemoved` object[] — Array of product reference IDs and quantities that will be removed from contract coverage. This should be used if a contract was created covering products that will no longer be shipped or covered by the contract and the premium must be adjusted to reflect the remaining products that will be covered.
      - `referenceId` string, required — This is the unique identifier for the product in the merchant’s Extend product catalog. Note - When partially refunding contract covering a custom bundle product, the product reference ID for the components of the bundle should be used.
      - `quantity` number, required — The quantity of the product reference ID that should be removed from contract coverage. Note - When partially refunding contract covering a custom bundle product, the quantity for the components of the bundle should be used.
    - `reason` string
    - `newContractId` string — We can provide our own contract ID for partial refunds instead of creating a new one.
    - `deletedAt` number
    - `orderId` string, required
  - object
    - `productsRemoved` object[] — Array of product reference IDs and quantities that will be removed from contract coverage. This should be used if a contract was created covering products that will no longer be shipped or covered by the contract and the premium must be adjusted to reflect the remaining products that will be covered.
      - `referenceId` string, required — This is the unique identifier for the product in the merchant’s Extend product catalog. Note - When partially refunding contract covering a custom bundle product, the product reference ID for the components of the bundle should be used.
      - `quantity` number, required — The quantity of the product reference ID that should be removed from contract coverage. Note - When partially refunding contract covering a custom bundle product, the quantity for the components of the bundle should be used.
    - `reason` string
    - `newContractId` string — We can provide our own contract ID for partial refunds instead of creating a new one.
    - `deletedAt` number
    - `orderTransactionId` string, required
  - object
    - `productsRemoved` object[] — Array of product reference IDs and quantities that will be removed from contract coverage. This should be used if a contract was created covering products that will no longer be shipped or covered by the contract and the premium must be adjusted to reflect the remaining products that will be covered.
      - `referenceId` string, required — This is the unique identifier for the product in the merchant’s Extend product catalog. Note - When partially refunding contract covering a custom bundle product, the product reference ID for the components of the bundle should be used.
      - `quantity` number, required — The quantity of the product reference ID that should be removed from contract coverage. Note - When partially refunding contract covering a custom bundle product, the quantity for the components of the bundle should be used.
    - `reason` string
    - `newContractId` string — We can provide our own contract ID for partial refunds instead of creating a new one.
    - `deletedAt` number
    - `lineItemTransactionId` string, required

## Response `200`

Returns refund information including refund paid timestamp

- union
  - object
    - `createdAt` number, required — The timestamp for when the Refund object was created (generated by Extend)
    - `contractCoverageStartDate` number — Start date of coverage for the Extend contract
    - `contractCoverageEndDate` number — End date of coverage for the Extend contract
    - `contractId` string, required — The ID of the Contract (generated by Extend)
    - `contractPurchaseDate` number — Date provided by merchant that is associated to the transaction where the Extend contract was sold
    - `contractCurrency` string — The ISO 4217 currency code for the contract (e.g., USD, EUR, GBP)
    - `id` string, required — The unique Extend ID for the Refund (generated by Extend)
    - `expiresAt` number — The timestamp for when the Refund object will expire (generated by Extend). Refund objects live for 20 minutes, after which a new Refund object will be created the next time you request a Refund Quote or report a Refund as Paid
    - `newContractId` string — The new ID of the Contract (generated by Extend) in the case of a partial refund.
    - `newPremium` number — The new premium of the contract (generated by Extend) in the case of a partial refund.
    - `lineItemId` string — Unique line item ID associated with the Contract (generated by Extend)
    - `productsRemoved` object[]
      - `referenceId` string
      - `quantity` string
    - `sellerId` string, required — Unique ID representing the seller provided by Extend
    - `status` 'refund_quoted' | 'refund_paid' | 'refund_denied', required — Represents the current status of the Refund <ul> <li><b>refund_quoted</b>: Refund amounts have been previewed via Get a Refund Quote at least once, but you have not reported that you have refunded the customer yet</li> <li><b>refund_paid</b>: You have reported the Refund as paid and the associated Contract has been canceled. Extend will credit you in the next invoicing period</li> <li><b>refund_denied</b>: The end customer is not eligible for a Refund because they have consumed all entitlements associated with the Contract.</li> </ul>
    - `spQuoteId` string — Quote id when a valid shipping protection quote is created.
    - `originalPremium` number — The original premium of the contract before a partial refund adjustment due to shipped products.
    - `shippedProductsQuoteId` string — Quote id for the shipped or delivered products when partially refunding a shipping protection contract.
    - `nonRefundableProducts` object[] — Products that are not eligible for refund because they have already been shipped or delivered.
      - `referenceId` string, required — The unique identifier for the product.
      - `quantity` number, required — The quantity of the product that has been shipped.
      - `status` 'shipped' | 'delivered', required — The shipping status of the product.
    - `reason` string — Reason for refund, defined when refund is created.
    - `refundAmounts` object, required
      - `customer` number, required — The amount that you should refund your end customer, equal to amount the customer paid for the plan.
      - `merchant` number — The amount refunded to merchant.
      - `obligor` number — The amount refunded to obligor.
    - `note` 'coverage_expired' | 'claim_active' | 'claim_applied' | 'claim_cost_exceeded' | 'refund_amount_not_owed' | 'unknown_error' — Captures additional notes about the refund <ul> <li><b>coverage_expired</b>: contract coverage date expired</li> <li><b>claim_active</b>: one or more claim(s) are active</li> <li><b>claim_applied</b>: at least one claim was applied against the contract</li><li><b>claim_cost_exceeded</b>: claim cost exceeded contract limit of liability</li><li><b>refund_amount_not_owed</b>: refund amount zero</li> </ul>
  - object[]
    - `createdAt` number, required — The timestamp for when the Refund object was created (generated by Extend)
    - `contractCoverageStartDate` number — Start date of coverage for the Extend contract
    - `contractCoverageEndDate` number — End date of coverage for the Extend contract
    - `contractId` string, required — The ID of the Contract (generated by Extend)
    - `contractPurchaseDate` number — Date provided by merchant that is associated to the transaction where the Extend contract was sold
    - `contractCurrency` string — The ISO 4217 currency code for the contract (e.g., USD, EUR, GBP)
    - `id` string, required — The unique Extend ID for the Refund (generated by Extend)
    - `expiresAt` number — The timestamp for when the Refund object will expire (generated by Extend). Refund objects live for 20 minutes, after which a new Refund object will be created the next time you request a Refund Quote or report a Refund as Paid
    - `newContractId` string — The new ID of the Contract (generated by Extend) in the case of a partial refund.
    - `newPremium` number — The new premium of the contract (generated by Extend) in the case of a partial refund.
    - `lineItemId` string — Unique line item ID associated with the Contract (generated by Extend)
    - `productsRemoved` object[]
      - `referenceId` string
      - `quantity` string
    - `sellerId` string, required — Unique ID representing the seller provided by Extend
    - `status` 'refund_quoted' | 'refund_paid' | 'refund_denied', required — Represents the current status of the Refund <ul> <li><b>refund_quoted</b>: Refund amounts have been previewed via Get a Refund Quote at least once, but you have not reported that you have refunded the customer yet</li> <li><b>refund_paid</b>: You have reported the Refund as paid and the associated Contract has been canceled. Extend will credit you in the next invoicing period</li> <li><b>refund_denied</b>: The end customer is not eligible for a Refund because they have consumed all entitlements associated with the Contract.</li> </ul>
    - `spQuoteId` string — Quote id when a valid shipping protection quote is created.
    - `originalPremium` number — The original premium of the contract before a partial refund adjustment due to shipped products.
    - `shippedProductsQuoteId` string — Quote id for the shipped or delivered products when partially refunding a shipping protection contract.
    - `nonRefundableProducts` object[] — Products that are not eligible for refund because they have already been shipped or delivered.
      - `referenceId` string, required — The unique identifier for the product.
      - `quantity` number, required — The quantity of the product that has been shipped.
      - `status` 'shipped' | 'delivered', required — The shipping status of the product.
    - `reason` string — Reason for refund, defined when refund is created.
    - `refundAmounts` object, required
      - `customer` number, required — The amount that you should refund your end customer, equal to amount the customer paid for the plan.
      - `merchant` number — The amount refunded to merchant.
      - `obligor` number — The amount refunded to obligor.
    - `note` 'coverage_expired' | 'claim_active' | 'claim_applied' | 'claim_cost_exceeded' | 'refund_amount_not_owed' | 'unknown_error' — Captures additional notes about the refund <ul> <li><b>coverage_expired</b>: contract coverage date expired</li> <li><b>claim_active</b>: one or more claim(s) are active</li> <li><b>claim_applied</b>: at least one claim was applied against the contract</li><li><b>claim_cost_exceeded</b>: claim cost exceeded contract limit of liability</li><li><b>refund_amount_not_owed</b>: refund amount zero</li> </ul>

## Other responses

- `404` — The specified resource was not found
- `500` — Internal server error

---

[API](https://skmtc.dev/extend/apis/leads-api.md) · [All operations](https://skmtc.dev/extend/apis/leads-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/extend/leads-api/revisions/76403e33d7d6/schema)
