Return policies are versioned merchant rules for eligibility, deadlines, allowed resolutions, approval mode, refund timing, inspection, destination, completion, shipping, and restocking fees. Publishing creates an immutable version. A Return freezes the version and evaluated result it used so later policy changes do not rewrite history. The Return policies guide shows a policy end to end.
The policy carries identity: name, status, and current version. Rules live on versions. PATCH /v1/return-policies/{return_policy_id} changes identity only; changing a window, fee, or scope means publishing a new version.
Matching#
Policies match by scope and resolve by priority. match_type is all, the catch-all where every other selector must be empty, or include, which names what it covers through product_ids, variant_ids, categories, location_ids, or channel_types.
Final sale is a high-priority include policy with eligibility_result: "ineligible" and an ineligibility_reason, layered over a low-priority all policy that permits returns.
An ineligible version commits no resolution behavior: it must omit allowed_resolution_types, resolution_mode, refund_timing, and completion_mode, and is rejected if it sets any of them. Every other version rule below applies only to eligible and review_required versions.
When no policy matches, API-created requests remain possible and route to explicit merchant review, and deciding one needs no override reason. Buyer self-service is enabled only by an active policy that permits it.
Windows#
return_window is a duration_seconds plus the event it counts from.
starts_at_event | Counts from |
|---|---|
fulfilled | The fulfillment completing |
delivered | The carrier delivering |
picked_up | The buyer collecting in person |
service_completed | The work being finished |
Modes#
approval_mode decides whether Flint approves the Return itself. resolution_mode decides whether it also creates and confirms the outcome. Both are automatic or manual.
Automatic resolution can construct refunds and no-monetary-action outcomes. Exchange and replacement outcomes require a manual resolution because they need explicit replacement merchandise.
resolution_selection_mode decides who picks: policy_default uses automatic_resolution_type without asking, and buyer_requested waits for the buyer to choose from allowed_resolution_types. completion_mode decides whether Flint completes the Return when the last blocker clears (automatic) or waits for a /complete call (manual).
Fees#
return_shipping.payer is merchant or buyer. It states policy rather than charging anything: Flint does not buy labels, so no amount lives here. Where a fee is charged it lands as a return_shipping_fee adjustment on the resolution.
restocking_fee is calculation_type: "flat" with flat_money, or calculation_type: "percent" with a whole-number percent (10 means 10 percent). It surfaces as a restocking_fee adjustment and appears in the Return's financial_summary as a deduction.
