{"id":"ERC-5507","name":"Refundable Tokens","status":"Final","chain":"both","category":{"id":"security","name":"Security & Trust","description":"Helping users verify, control, and protect their assets"},"journeyStages":[{"id":"management","name":"Asset Management","description":"Managing assets over time"}],"uxImpact":"NFT/token purchases include refund windows like traditional e-commerce — buyers can return within deadline. Design implications: show 'Refundable until [date]' badge on listings, add 'Request Refund' button in owned items, display refund countdown timer. Design decisions: whether refund status affects resale UI — should refundable items show different on marketplaces, how to handle partial refund eligibility.","hasDetailedContent":true,"content":{"id":"ERC-5507","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-5507","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"NFT/token purchases include refund windows like traditional e-commerce — buyers can return within deadline.","designerTakeaways":["You can show Refundable until [date] badges on every listing before purchase.","Your owned-items view can offer a one-tap Request Refund while the window is open.","You can differentiate refundable inventory from final-sale items in wallet and marketplace grids."],"applicability":{"whenToUse":["Primary sales include buyer protection or regulatory cooling-off periods.","Your marketplace sells high-ticket NFTs where purchase regret is common.","Refund eligibility is enforced on-chain and your UI must mirror it."],"whenToAvoid":["Secondary market trades where refunds are not part of the contract.","Low-value drops where refund UX adds friction without legal need.","Contracts do not implement ERC-5507 refund hooks."]},"prototypeFirst":[{"screen":"Listing with refund badge","why":"Buyers decide with refund terms visible before they connect a wallet.","covers":["Refund deadline","Final sale vs refundable"],"include":["Refundable until date chip","Tooltip explaining window","Price and CTA"]},{"screen":"Owned item refund request","why":"The return moment must feel as clear as requesting a refund on Amazon.","covers":["Eligible","Expired","Pending refund"],"include":["Countdown timer","Request Refund CTA","What happens next copy"]},{"screen":"Refund confirmation","why":"Users need certainty about what they lose and regain.","covers":["Success","Reverted","Partial eligibility"],"include":["Item preview","Refund amount","Irreversible warning"]},{"screen":"Marketplace resale with active refund","why":"Resale while refundable creates confusion about who can still return.","covers":["Refundable badge on listing","Transfer during window"],"include":["Refund transfers with item note","Disabled refund for new owner if applicable"]}],"mentalModel":[{"label":"Purchase moment","description":"The clock starts when the buyer receives the token — that timestamp anchors every refund decision."},{"label":"Refund window","description":"A fixed period where return is allowed; after it closes, ownership is final like any other NFT."},{"label":"Refund action","description":"Returning the token triggers contract rules — burn, escrow release, or seller clawback depending on implementation."},{"label":"Resale overlap","description":"Selling during the refund window may transfer refund rights or end them; the UI must say which."},{"label":"Marketplace mirror","description":"Aggregators must read the same on-chain eligibility — badges should match the primary sale site."}],"statesToDesign":[{"state":"Refundable — window open","trigger":"User owns token within refund period.","userNeed":"Know how long they have and how to return.","designResponse":"Show countdown and prominent Request Refund on item detail."},{"state":"Refund pending","trigger":"User submitted refund transaction.","userNeed":"Track progress like an order return.","designResponse":"Status strip: submitted, confirmed, completed with explorer link."},{"state":"Refund window expired","trigger":"Deadline passed.","userNeed":"Understand ownership is now final.","designResponse":"Replace refund CTA with Final sale badge; enable normal transfer/sell."},{"state":"Non-refundable listing","trigger":"Token or sale type excludes refunds.","userNeed":"Not discover refund option at checkout.","designResponse":"Final sale badge before purchase; no refund CTA in owned view."},{"state":"Refund rejected","trigger":"Contract reverts refund attempt.","userNeed":"Know why return failed.","designResponse":"Plain-language reason: expired, already used, or not eligible."}],"designDecisions":[{"question":"Should refundable items look different on secondary marketplaces?","recommendation":"Show a subtle Refundable until badge on listings; hide refund CTA for buyers who did not purchase from primary.","rationale":"Secondary buyers may not have refund rights — confusing badges cause support tickets."},{"question":"How prominent should the countdown be?","recommendation":"Show deadline on listing and owned-item header, not buried in terms.","rationale":"Refund windows are a purchase factor; hiding them feels deceptive."},{"question":"What happens to refund UI after a resale?","recommendation":"Re-query eligibility for the new owner; default to no refund unless contract grants it.","rationale":"Ownership change resets buyer relationship with the primary seller."}],"problemsSolved":[{"problem":"NFT purchases feel irreversible and risky","oldWay":"Buyers hesitate on expensive mints with no recourse","newWay":"On-chain refund window mirrors e-commerce buyer protection","impact":"high"},{"problem":"Refund rules buried in fine print","oldWay":"Users discover no returns after connecting wallet","newWay":"Badges and countdowns surface policy before payment","impact":"high"},{"problem":"Marketplaces show identical UI for final-sale items","oldWay":"All listings look equally permanent","newWay":"Refundable vs final-sale visual treatment sets expectations","impact":"medium"}],"uxPatterns":[{"name":"Refund Window Badge","description":"Listing chip showing deadline before purchase.","mockup":"concept/nft-gallery","components":["RefundBadge","DeadlineTooltip","ListingCard"],"userFlow":["User browses","Sees Refundable until date","Reads policy","Purchases informed"]},{"name":"Return Request Flow","description":"Owned-item refund with countdown and confirmation.","mockup":"concept/verify-safety","components":["CountdownTimer","RefundButton","ConfirmModal"],"userFlow":["User opens owned item","Timer shows days left","Taps Request Refund","Confirms","Token returned"]}],"seenInTheWild":[{"app":"OpenSea","url":"https://opensea.io/","note":"Marketplace listing patterns inform how refund badges should appear alongside price."},{"app":"Zora","url":"https://zora.co/","note":"Creator primary sales set expectations for purchase protection copy."},{"app":"Nifty Gateway","url":"https://www.niftygateway.com/","note":"High-ticket drops benefit from clear buyer protection messaging."},{"app":"Shopify","url":"https://www.shopify.com/","note":"Return window UX is the mental model users already understand."}],"antiPatterns":[{"pattern":"Showing Refund button after window expired","why":"Users waste gas on doomed transactions","instead":"Disable CTA and show Final sale with expired date","severity":"high"},{"pattern":"Hiding refund terms until after mint","why":"Feels like bait-and-switch at checkout","instead":"Badge on listing and confirm step before signature","severity":"critical"},{"pattern":"Identical cards for refundable and final-sale items","why":"Users cannot compare purchase risk","instead":"Distinct badge treatment in grid and detail views","severity":"medium"}],"vocabulary":[{"use":"Return by [date]","avoid":"Refund window epoch","why":"Deadline language matches shopping habits."},{"use":"Final sale","avoid":"Non-refundable token state","why":"Plain commerce terms over protocol jargon."},{"use":"Request return","avoid":"Execute refund()","why":"Action language users recognize from retail."}],"onMonad":[{"aspect":"Confirmation speed","ethereum":"Refund status may take minutes to confirm","monad":"Sub-second finality makes return confirmation feel instant","designImplication":"Use inline success states instead of long pending modals."},{"aspect":"Transaction cost","ethereum":"Refund attempts cost meaningful gas","monad":"Lower fees reduce friction for trying returns","designImplication":"Safe to show retry on failed refund without heavy cost anxiety."}],"technicalNotes":"ERC-5507 adds refund windows to token purchases; always re-query eligibility after transfers.","relatedStandards":[{"id":"ERC-5528","relationship":"Fungible token escrow refunds complement NFT returns"},{"id":"ERC-721","relationship":"Base NFT standard extended with refund hooks"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-5507","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-5507","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-5507","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5507","markdown":"https://www.eipsfordesigners.com/standards/ERC-5507/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5507/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5507","official":"https://eips.ethereum.org/EIPS/erc-5507","discussion":"https://ethereum-magicians.org/search?q=ERC-5507"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}