A return is a signal, not a cost.
The same brain that measures the return recommends the next size. Exchange-first resolutions, EU-ready withdrawal, and a live fit-graph — across whatever powers your checkout.
legal_basis: withdrawal · FIT_TOO_SMALL_SHOULDER · outcome=EXCHANGE_FIRST
Returns overview
Last 12 weeks · all stores
In this edition
The product — not stock photos
Returns overview
Last 12 weeks · all stores
Find your order
order #2048 · maria@mail.com- 2
Confirm withdrawal
No reason required — by law.
Two steps · login-free · legally compliant
Merino Crew Knit
Stone · Size M · €89
Why are you returning?
Label scanned
Carrier first-scan
09:41
€58 credit issued
Instant, risk-checked
09:41
Re-shopped
Spent €72 in store
09:46
Data sourced from live Shopify + Ticimax installs
A refund is a sale you already lost.
Most returns tools optimize for fast refunds. That is the wrong goal — every refund hands cash back, ends the relationship, and drops the reason into a free-text box nobody reads.
ResReturn treats a return as the highest-quality signal a store gets — resolved as an exchange or credit, with the reason captured as a structured machine code. The architecture is the argument.
Explore the platformSee it the way your customer does.
No video, no sales call — return a real garment yourself and watch the exchange-first ladder, the fit body-map, and the captured signal work end to end.
- Pick a reason, then pinpoint the fit issue on the body-map
- Resolve with exchange, bonus store credit, or a discount code
- Every choice becomes a structured fit-signal — not free text
Every resolution that keeps the sale ranks above the one that loses it — refund is the last rung, by design.
REFUND ranked last · EXCHANGE_SAME · EXCHANGE_ADVANCED · KEEP_ITEM
Merino Crew Knit
Stone · Size M · €89
Why are you returning?
Exchange-first outcome ladder
Resolutions surface in revenue-protecting order: right size, swap variant, swap product, store credit with bonus, refund last. Each rung is configurable per policy, product, and legal basis.
Exchange-same & exchange-advanced
EXCHANGE_SAME swaps to another variant of the same style; EXCHANGE_ADVANCED swaps for a different product. Both feed the bracketing signal rather than counting as a plain return.
Store credit + bonus & combined
Credit can carry a bonus to nudge keep-the-value outcomes, and pair with a customer-locked code so the two together equal the purchase value.
Discount code (customer-locked)
A code bound to the specific customer, delivered by mail with one-tap apply. Live on Shopify; Ticimax maps it to HediyeCekiOlustur.
Keep-it / returnless (KEEP_ITEM)
For low-value or high-cost-to-ship orders the shopper keeps the item. The fit signal is captured at submit, not at received — so nothing is lost when the parcel never comes back.
Shop-nowPlanned
SHOP_NOW lets the shopper spend recovered credit before the parcel is even back in the warehouse.
The system that measures the return and the system that recommends the size are the same brain — every outcome (kept, returned, changed) is its label.
T2_LABELED_ERROR weight 0.95 > T1_CONFIRMED weight 0.70 · 5 returns → meaningful deviation
Returns overview
Last 12 weeks · all stores
Tiered fit-signal capture (T0–T4)
Every signal is scored on body-side certainty × outcome-label clarity into T2+, T2 (labeled error — highest learning), T1, T0, T3, T4 or EXCLUDE, each with its own model weight from 1.00 down to 0.
Live fit-graph (core IP)
Each garment holds a body-area 'true measurement + ease' distribution, so output is a per-area fit-probability profile — 'shoulder 85% ideal, waist may run 60% tight' — not a single size.
Hierarchical pooling cold-start
A global → brand → category → fit-block → style → size hierarchy lets a new product borrow a prior from its tech pack, then update as signals arrive — meaningful deviation from as few as 5 returns.
Beta-Binomial posterior engine (v0)
A conjugate Beta-Binomial posterior per node × size × body_area × direction, in pure TypeScript behind a port; v1 extracts it to a Python hierarchical-Bayes service with no interface change.
Audience-focused fit layerPlanned
A TR audience fits a garment differently than an EU one, so each node keeps a separate posterior per audience segment, falling back up the pool when a segment is sparse.
T3 → T2 promotion loopPlanned
An anonymous returner is offered '30 seconds to enter your measurements' in the portal; accepting upgrades the record to T2 and creates a new user — a growth channel folded into the return flow.
Merino Crew Knit
Stone · Size M · €89
Why are you returning?
The shopper starts a return
A branded, login-light portal. They tap an item and a reason — and ResReturn captures it as a structured signal, not a free-text blob.
Merino Crew Knit
Stone · Size M · €89
Why are you returning?
ResReturn resolves it
The outcome ladder steers toward an exchange or store credit. Instant credit can fire the moment the parcel is scanned.
Label scanned
Carrier first-scan
09:41
€58 credit issued
Instant, risk-checked
09:41
Re-shopped
Spent €72 in store
09:46
Revenue stays in
An exchange keeps the sale. Bonus credit and Shop-Now turn a refund request into another order — automatically.
Your store learns
Every outcome flows into analytics, surfacing the products and reasons that quietly drain margin — so the next order is better.
The EU withdrawal button is mandatory from 19 June 2026 — we ship it as a standalone free SKU, no reason asked, exactly as the law requires.
Dir. 2023/2673 · effective 2026-06-19 · legal_basis: withdrawal | goodwill | warranty | recall
Find your order
order #2048 · maria@mail.com- 2
Confirm withdrawal
No reason required — by law.
Two steps · login-free · legally compliant
EU withdrawal button (Dir. 2023/2673)Planned
A login-free, two-step withdrawal function, mandatory for every online seller into the EU from 19 June 2026, shipped as a free SKU plus a drop-in site snippet. No reason asked.
legal_basis routingPlanned
Every return carries a legal_basis of withdrawal, goodwill, warranty, or recall, and the policy engine applies a different rule set per basis — final-sale rules can't override the legal right.
Grading & disposition (ESPR)Planned
Under the ESPR destruction ban (19 July 2026), grading and disposition become a compliance surface; the disclosure report ships in the Compliance & Reporting module.
DPP-ready garment provenancePlanned
The Digital Product Passport (~2028) is targeted as a legitimacy source for fit-graph cold-start priors from garment data.
PII consent & retention for fit data
Body measurements are special-category PII: explicit consent, a retention period, and a deletion path under KVKK/GDPR. The fit-graph stores only aggregates — never a personal measurement on a node.
Analytics points at the product that drives returns; fraud-flagged returns are auto-excluded from the fit-graph so they can't poison it.
fraud_flagged → EXCLUDE from fit-graph · FRR ↓10–20% · size-exchange >95% · other <10%
Returns analytics read-model
FRR, size-exchange success, body-area hotspots, and recommendation accuracy as a clean read-model — return-rate and recovered-revenue dashboards, reason hotspots by product, cohort breakdowns, not a CSV.
Fraud v0 + signal protectionPlanned
A rule-based score over velocity, amount, and pattern with auto / instant-credit-off / flagged thresholds. Critically, flagged returns are auto-EXCLUDED from the fit-graph to prevent poisoning.
Instant credit on first scanPlanned
The moment a carrier scans the label, store credit can release so the shopper re-spends immediately — threshold-gated with automatic clawback if the parcel never arrives. Cites 76% consumer preference.
Recommendation-accuracy tracking
The return-free rate of shoppers who took the recommended size, tracked as a direct measure of model quality.
Pre-purchase bracketing nudgePlanned
When a cart holds the same SKU in 2+ sizes, a 'you're 92% an M' intervention fires, measured by a bracketing_prevented ROI metric.
A new platform is a new adapter — the CommercePort core never changes.
CommercePort · OutcomePort · CarrierPort · tenant→adapter registry
graph
CommercePort adapter core
A platform-blind CommercePort (lookupOrder, availableSizes, variantIdForSize, restock, listProducts) means a new platform is a new adapter and the core never changes.
Shopify integration
A public unlisted Shopify app with OAuth install, a customer-account UI extension, ~2,000 historical orders backfilled, and live returns/* webhooks feeding T3 fit signals.
Ticimax adapter (SOAP)
A from-scratch SOAP 1.1 adapter implementing CommercePort + OutcomePort; a live smoke pulled 23 order statuses and injected a storefront button on the real account.
OutcomePort abstraction
One OutcomePort contract lets return-closing, store-credit, discount, and exchange write-backs work across Shopify and Ticimax.
CarrierPort for labels & trackingPlanned
A platform-independent CarrierPort (createLabel, tracking) so carrier integrations are written once and used by every commerce adapter; Shipink primary.
ikas / WooCommerce / T-Soft / customPlanned
Additional platforms sit behind the same internal port; ikas and WooCommerce are next, with T-Soft and a generic webhook + script-tag adapter for headless commerce.
Modular monolit
One deployable, schema-per-module Postgres — eight schema-isolated modules talking only through ports + an in-process event bus, fed externally from a transactional outbox.
Idempotent HMAC webhooks
An outbox dispatcher with HMAC signing, retry + DLQ, and idempotency keys keeps returns, inventory, and credit in lockstep with no manual reconciliation.
Clean REST API + typed SDK
A REST API with idempotency keys, an OpenAPI spec, and a typed SDK — POST /v1/portal/returns returns revenue_kept. Build a fully custom flow on the headless core.
Returns shouldn't be where commerce leaks. The whole industry optimized for the wrong thing — fast refunds — when the return is the most honest signal a store ever gets.
Make your returns work for you.
Connect your store, drop in the portal, turn refunds into retained revenue. The EU withdrawal button is free for everyone, forever. No card, no lock-in.
Launch Edition 01 · Set in Fraunces & Hanken Grotesk · EU 2023/2673 ready