Summary
Allow a tipper to request a refund for a recent tip (creator approval required).
Requirements
- POST { tip_id, tipper_id, reason } -> { request_id, status: pending }
- POST /resolve { request_id, decision: approve|deny, creator_id, note? }
- Reject tips older than 24h with 400
- Tests cover request, approval, denial, expiry
Scope Constraint - READ BEFORE STARTING
All files for this task must live inside app/api/routes-f/. This includes the route handler, helpers/utilities, types, and tests. Do NOT modify, import from, or add files to lib/, utils/, types/, components/, or anywhere else outside app/api/routes-f/. If you need shared logic, duplicate it inside your subfolder. Keeping everything scoped to this folder is intentional - it keeps these tasks independent and mergeable in any order.
Product Context
StreamFi is a blockchain-powered live streaming platform. Streamers broadcast via Mux, viewers tip in Stellar XLM/USDC, creators have stream privacy modes (public/unlisted/subscribers-only). Build these issues as practice implementations - use realistic data shapes that match the platform domain, but do not import from the real app code.
Summary
Allow a tipper to request a refund for a recent tip (creator approval required).
Requirements
Scope Constraint - READ BEFORE STARTING
All files for this task must live inside app/api/routes-f/. This includes the route handler, helpers/utilities, types, and tests. Do NOT modify, import from, or add files to lib/, utils/, types/, components/, or anywhere else outside app/api/routes-f/. If you need shared logic, duplicate it inside your subfolder. Keeping everything scoped to this folder is intentional - it keeps these tasks independent and mergeable in any order.
Product Context
StreamFi is a blockchain-powered live streaming platform. Streamers broadcast via Mux, viewers tip in Stellar XLM/USDC, creators have stream privacy modes (public/unlisted/subscribers-only). Build these issues as practice implementations - use realistic data shapes that match the platform domain, but do not import from the real app code.