Skip to content
flint

Free tool

Return policy generator

Pick your return window, fees, and what buyers get back, and copy a return and refund policy for your store as HTML, text, or Markdown. It includes what EU, UK, California, and New York rules require a policy to say, with the sources. Then let Flint enforce it on every return.

Skip to your policy
Returns
days

Final sale items

What buyers get

Buyers can choose

Shipping and fees

Return shipping

Refund timing
business days
Damaged or wrong items
days
Starting a return
Where you sell

Besides the US, you sell to buyers in

Store details
Where buyers start a return or cancel online.

Return and refund policy

You can return most items from [Store name] within 30 days of the day your order is delivered for a refund or an exchange. Here's how it works.

Return window

You have 30 days from the day your order is delivered to start a return. Requests after that can't be accepted, except for items that arrived damaged, defective, or wrong.

What can be returned

Items must be unused, in their original condition and packaging, with any tags still attached.

Include your order number or other proof of purchase with every return.

Final sale items

These items are final sale. They can't be returned or exchanged unless they arrive damaged, defective, or wrong:

  • Sale and clearance items
  • Gift cards

Refunds, exchanges, and store credit

When you start a return, choose what you'd like:

  • A refund to your original payment method.
  • An exchange for a different size, color, or item. If the new item costs more, we'll ask you to pay the difference. If it costs less, we'll refund the difference.

If your return meets this policy, it's approved as soon as you send the request.

Return shipping

You pay for return shipping. Use a tracked service: we can only refund a return that reaches us.

Original shipping charges aren't refunded. If the return is because of our mistake, we cover all shipping costs.

Damaged, defective, or wrong items

If an item arrives damaged or defective, or we sent the wrong item, email us at [support email] within 7 days of delivery with your order number and a photo of the problem. We'll send a replacement or a full refund, cover any return shipping, and charge no fees.

This doesn't limit any rights you have under the law for faulty goods.

How to start a return

  1. Go to [returns page link] and sign in with the email address you used to order.
  2. Choose the items you're returning, tell us why, and pick a refund or an exchange.
  3. If the items meet this policy, you'll get return instructions right away.
  4. Pack the items securely and send them to the address in your instructions.

When you'll get your money back

We issue your refund within 5 business days of receiving your return, and email you when it's on its way.

Refunds go back to your original payment method. Your bank or card issuer may take a few more days to show it.

Questions

Email us at [support email] with any question about a return. You can ask us for a written copy of this policy at any time.

This policy is effective as of [effective date].

Run it in Flint

Let this policy enforce itself

With Flint, the rules you just picked run on every return:

  • Counts the 30-day window from delivery, order by order.
  • Approves every request that fits the policy, without waiting on you.
  • Holds each resolution until the parcel arrives, and creates the exchange order once you pick the replacement. A buyer who owes a difference pays it through hosted checkout.
  • Refuses products in your final-sale category and tells the buyer why, before they send anything.
  • Gives buyers a hosted page where they start returns from their order.
  • Keeps each version of the policy, and the one every Return was decided under.

Free sandbox, no credit card. The sign-up link continues to return policies in the Dashboard, or create this one with the requests below.

Set it up from your terminal

setup-return-policy.sh
#!/usr/bin/env bash
# Sets up this return policy in Flint and stops at the first error.
# Flint won't activate two policies at the same priority, so it first
# checks that no active policy already holds the ones it uses.
# Needs bash, jq, and curl 7.76 or later.
set -euo pipefail

: "${FLINT_API_KEY:?Set FLINT_API_KEY to a sandbox API key}"
: "${RETURNS_LOCATION_ID:?Set RETURNS_LOCATION_ID to an active Location with a postal address}"
API="${FLINT_BASE_URL:-https://api.withflintpay.com}"
RUN="$(date +%s)"

# If a step fails after a policy was activated, says which to retire
# so the next run's check doesn't stop on it.
ACTIVATED=""
trap 'status=$?; [ "$status" -eq 0 ] || [ -z "$ACTIVATED" ] || echo "Recover: this run already activated$ACTIVATED. Retire each with DELETE /v1/return-policies/{id}, then run again." >&2' EXIT

# Prints the response body. On an HTTP error, prints it and stops.
flint() {
  local body
  if ! body=$(curl -sS --fail-with-body \
    -H "Authorization: Bearer $FLINT_API_KEY" \
    -H "Content-Type: application/json" "$@"); then
    echo "Flint returned an error: $body" >&2
    return 1
  fi
  printf '%s\n' "$body"
}

# Prints a field from a response, or stops if it's missing.
field() {
  local value
  value=$(jq -r "$2 // empty" <<<"$1")
  if [ -z "$value" ]; then
    echo "Stopped: $2 is missing from the response" >&2
    return 1
  fi
  printf '%s\n' "$value"
}

# 1. Stop before creating anything if activation would fail: an active
#    policy already has priority 200 or 100 (deactivate it, or change
#    "priority" below), or the returns Location isn't usable.
LOCATION=$(flint "$API/v1/locations/$RETURNS_LOCATION_ID")
if [ "$(jq -r '.data.status' <<<"$LOCATION")" != active ] || [ -z "$(jq -r '.data.address.line1 // empty' <<<"$LOCATION")" ]; then
  echo "Stopped: Location $RETURNS_LOCATION_ID must be active and have a postal address." >&2
  exit 1
fi
PAGE=""
while :; do
  ACTIVE=$(flint "$API/v1/return-policies?status=active&page_size=100${PAGE:+&page_token=$PAGE}")
  for ID in $(jq -r '.data[].return_policy_id' <<<"$ACTIVE"); do
    PRIORITY=$(flint "$API/v1/return-policies/$ID?expand=current_revision" | jq -r '.data.current_revision.priority')
    case "$PRIORITY" in
      200|100)
        echo "Stopped: active policy $ID already has priority $PRIORITY." >&2
        exit 1 ;;
    esac
  done
  PAGE=$(jq -r '.next_page_token // empty' <<<"$ACTIVE")
  [ -n "$PAGE" ] || break
done

# 2. The final-sale category, reused if you already have it. The
#    "Final sale" policy refuses products whose category_handles include it.
FOUND=$(flint "$API/v1/categories?handle=final-sale")
CATEGORY_ID=$(jq -r '.data[0].category_id // empty' <<<"$FOUND")
if [ -z "$CATEGORY_ID" ]; then
  CREATED=$(flint -X POST "$API/v1/categories" \
    -H "Idempotency-Key: final-sale-category-$RUN" \
    -d '{ "name": "Final sale", "handle": "final-sale" }')
  CATEGORY_ID=$(field "$CREATED" .data.category_id)
fi
echo "Category final-sale: $CATEGORY_ID"

# 3. Create "Final sale". New policies start inactive.
FINAL_SALE=$(flint -X POST "$API/v1/return-policies" \
  -H "Idempotency-Key: final-sale-$RUN" \
  -d @- <<JSON
{
  "name": "Final sale",
  "revision": {
    "priority": 200,
    "scope": {
      "match_type": "include",
      "category_handles": ["final-sale"]
    },
    "eligibility_result": "ineligible",
    "ineligibility_reason": "final_sale",
    "approval_mode": "manual",
    "is_merchandise_return_required": false
  }
}
JSON
)
FINAL_SALE_ID=$(field "$FINAL_SALE" .data.return_policy_id)
FINAL_SALE_VERSION=$(field "$FINAL_SALE" .data.version)

# Activate it so new Returns are matched against it.
flint -X PATCH "$API/v1/return-policies/$FINAL_SALE_ID" \
  -d "{ \"status\": \"active\", \"expected_version\": $FINAL_SALE_VERSION }" >/dev/null
echo "Activated Final sale: $FINAL_SALE_ID"
ACTIVATED="$ACTIVATED $FINAL_SALE_ID"

# 4. Create "Standard returns". New policies start inactive.
STANDARD_RETURNS=$(flint -X POST "$API/v1/return-policies" \
  -H "Idempotency-Key: standard-returns-$RUN" \
  -d @- <<JSON
{
  "name": "Standard returns",
  "revision": {
    "priority": 100,
    "scope": { "match_type": "all" },
    "eligibility_result": "eligible",
    "return_window": {
      "duration_seconds": 2592000,
      "starts_at_event": "delivered"
    },
    "allowed_resolution_types": ["refund", "exchange"],
    "approval_mode": "automatic",
    "resolution_mode": "manual",
    "completion_mode": "automatic",
    "release_timing": "after_receipt",
    "is_merchandise_return_required": true,
    "is_inspection_required": false,
    "receiving_location_id": "$RETURNS_LOCATION_ID",
    "return_shipping": { "payer": "buyer" }
  }
}
JSON
)
STANDARD_RETURNS_ID=$(field "$STANDARD_RETURNS" .data.return_policy_id)
STANDARD_RETURNS_VERSION=$(field "$STANDARD_RETURNS" .data.version)

# Activate it so new Returns are matched against it.
flint -X PATCH "$API/v1/return-policies/$STANDARD_RETURNS_ID" \
  -d "{ \"status\": \"active\", \"expected_version\": $STANDARD_RETURNS_VERSION }" >/dev/null
echo "Activated Standard returns: $STANDARD_RETURNS_ID"
ACTIVATED="$ACTIVATED $STANDARD_RETURNS_ID"

Set FLINT_API_KEY to a sandbox API key and RETURNS_LOCATION_ID to an active Location with a postal address. Before it creates anything, the script checks that Location and that no active policy already has the priorities it uses. It stops at the first error and prints Flint’s response. Needs curl 7.76 or later and jq.

Stays in the policy text only

  • Which products are final sale. The script creates the final-sale category if you don't have one; add final-sale to each final-sale product's category_handles with PATCH /v1/products/{product_id}. That list replaces the product's categories, so include the ones it already has.
  • The item condition rule. Flint has no condition field. Choose refunds after inspection to hold money until someone checks.
  • The 5-business-day promise. Flint releases the money at the moment you chose, so there's no delay to configure.
  • Damaged, defective, or wrong items. Flint's built-in damaged_on_arrival, defective, and wrong_item reasons ask the buyer for a note; photos travel by email.

Not legal advice. The policy follows the sources below as of 2026-10-25; have a lawyer review terms specific to your business.

After you publish it

Writing the policy is the easy part

Every return then needs someone to check the window, the item, the fee, and when the money moves. In Flint, the policy you just wrote makes those checks itself.

Is it inside the window? By hand, someone looks up when the order arrived. Flint counts the window from the delivery on the order itself.

return_window.starts_at_event: "delivered"

Is it final sale? By hand, someone has to remember which products. In Flint, a higher-priority policy refuses them, and the buyer sees “This item was sold as final sale” before sending anything.

ineligibility_reason: "final_sale"

Approve it? By hand, every request waits for a reply. Flint approves the ones that fit, and puts the rest in front of you with the policy’s answer worked out.

approval_mode: "automatic"

When does the money go back? Refund too early and the box may never arrive. Flint holds the refund until the buyer drops the return off, it arrives, or it passes inspection, and then releases it.

release_timing: "after_receipt"

What’s the fee? By hand, someone does the arithmetic on each return. Flint puts the restocking fee on the resolution as a deduction the buyer can see, never netted invisibly into the refund.

restocking_fee → financial_summary

Exchange or store credit? Flint creates the replacement order for an exchange and collects any difference through hosted checkout. Store credit goes out as new gift cards by email, so you keep the cash.

allowed_resolution_types

Which rules applied? Card networks judge a dispute by the policy shown at purchase. Every change in Flint is a new revision, and each Return keeps the one it was decided under.

current_return_policy_revision_id

Buyers start their own returns

  1. 01
    Customer accountsThe hosted page where buyers see orders and start returns.
  2. 02
    Buyer-initiated returnsYour policy in front of a buyer, step by step.
  3. 03
    Return resolutionsRefunds, exchanges, store credit, and where fees land.

no monthly fee · free sandbox · no credit card

What it covers

What a good return policy says

Eight things a buyer looks for before buying and again when something doesn't fit. Leave one out, and it's an email to answer for every return.

The window, and when it starts

How many days, and the event they count from. Delivery is what buyers assume; the order date is shorter than it sounds.

What condition items must be in

Unused with tags, unused, or lightly used. Say it plainly, and say what happens to a return that doesn't qualify.

What can't come back

List final-sale items by name. In New York, the policy has to say whether sale items can be returned at all.

What the buyer gets

Refund, exchange, or store credit, and who chooses. Store-credit-only policies have to say so, not imply a refund.

Who pays for shipping

Return labels, original shipping, and what changes when the mistake was yours. Every fee needs its amount.

Damaged and wrong items

A short reporting window, what proof you need, and that you cover the cost. It can't take away legal rights for faulty goods.

How to start a return

The link or address, what to include, and what happens next. Fewer steps mean fewer emails asking where to begin.

When the money arrives

The event that triggers the refund and how many days after it, plus the bank's time on top.

The rules

Laws that change what your policy says

Most US stores can set their own terms, as long as they disclose them. These are the rules that decide what the policy has to state, and where.

European Union

Buyers can cancel an online order within 14 days of receiving it, without a reason, and get everything back within 14 days of telling you, standard delivery included. You can wait for the goods or proof of sending. They pay return shipping only if you told them so beforehand. If you never tell them about the right, it runs 12 months longer.

Since June 19, 2026, EU countries’ rules also require a store that takes orders online to offer a function labeled “withdraw from contract here” throughout those 14 days, and a confirmation, such as an email, for each cancellation. Faulty goods have a separate 2-year legal guarantee.

United Kingdom

The same 14-day cancellation right, under the Consumer Contracts Regulations 2013. The refund can’t carry a fee, so a restocking fee doesn’t apply to these cancellations. Faulty goods can be rejected for a full refund within 30 days under the Consumer Rights Act 2015.

Card networks

Visa’s merchant guide asks online stores to show the policy before checkout with a click to accept, or near the place order button, and to keep every past version with the date it took effect. In a dispute, the policy that counts is the one shown at purchase.

California

A store that doesn’t give full cash refunds, credit, or equal exchanges for at least 7 days must display its policy: the remedy, the time limit, the goods covered, and the conditions. If it doesn’t, buyers can return for a refund within 30 days. Perishables, custom goods, and items marked final sale are exempt.

New York

Online retailers must post their refund policy near the item or before asking for billing details. It must say whether sale items, items without proof of purchase, and late returns are refundable, whether refunds are cash or store credit, every fee with its amount, and that a written copy is available on request. A store that doesn’t post it owes refunds or credit for 30 days.

Florida and federal law

Florida requires a no-refunds sign at the point of sale for stores that give no refunds or exchanges, or a 7-day refund for unused goods. No federal law requires a return policy. The FTC’s mail order rule covers shipping delays, and refunds within seven working days when an order is canceled, not returns after delivery.

last reviewed 2026-10-25 · corrections: Flint Help

FAQ

Return policy questions

Is this return policy generator free?

Yes. There's no sign-up and no limit, and the policy it writes is yours to use and edit. Copy it as HTML, plain text, or Markdown, or download it as a file.

Does my online store need a return policy?

No US federal law requires one, but several states do. In California, a store that doesn't give full refunds, credit, or exchanges for at least 7 days must display its policy, or buyers can return within 30 days. New York requires online retailers to post their refund policy near the item or before checkout. If you sell to the EU or UK, buyers can cancel within 14 days of delivery whatever your policy says.

How long should a return window be?

Long enough for a buyer to try the item, and short enough that it's still sellable when it comes back. The generator starts at 30 days from delivery. Counting from delivery rather than the order date means a slow shipment doesn't eat the buyer's window. EU and UK buyers get at least 14 days from delivery by law.

Can I charge a restocking fee?

In the US, yes, as long as the policy states it. New York requires the amount or percentage. In the EU and UK, you can't charge a fee on refunds for cancellations within the 14-day period, though you can deduct for loss in value from handling beyond what a buyer would do in a shop.

Where should I put my return policy?

Where buyers see it before they pay. Visa's merchant guide asks online stores to show it before checkout with a click to accept, or on the checkout page near the place order button, and New York accepts a link near the item or before billing details. A footer link alone isn't enough for either.

Can sale items be final sale?

In the US, yes, if the policy says so; New York requires stating whether sale items can be returned. EU and UK buyers can still cancel sale items within 14 days. The legal exceptions there are narrower: personalized items, goods that spoil quickly, and sealed hygiene items or media once unsealed.

What does the Flint request do?

It's a bash script that creates your policy in Flint and activates it, and stops at the first error. If you mark items final sale, it also creates a final-sale category; add your final-sale products to it to have them refused. From then on, Flint checks every return against the policy: the window, final-sale items, the restocking fee, when to release the refund, and whether to approve on its own. Buyers start returns from a hosted page on their order. Run it with a sandbox API key and the ID of a returns Location with a postal address.

Is the generated policy legal advice?

No. It's written against the laws and card network rules in the sources below, last reviewed 2026-10-25, and it covers common cases. Laws vary by state and country, so have a lawyer review it if your business has unusual terms.

Start

Put this policy to work

Create a sandbox, set the policy from the Dashboard or with the requests above, and every return after that is checked for you.

A policy page tells buyers the rules. Flint holds every return to them: the window from delivery, final-sale items refused with a reason, fees on the resolution, refunds released when the box arrives, and exchanges and store credit without a spreadsheet.

Buyers start returns themselves from a hosted page on their order, and every version of the policy stays on record for the day a dispute asks which one they agreed to.

Then read these

  1. 01
    Return policies and reasonsWindows, final sale, fees, and what decides itself.
  2. 02
    ReturnsThe Return model and which integration to build.
  3. 03
    RefundsRefunds by line item, with the tax that goes back.

no monthly fee · free sandbox · no credit card