Receiving dock console for inspecting and restocking Loop returns
Work one return at a time at the dock: grade each item, pick a disposition, restock what is resellable, and process or flag it without leaving the screen.
Build me an app my warehouse team opens at the receiving dock to inspect and dispose of Loop returns. The people using it are reverse logistics staff who stand at this screen all shift with a box in front of them, so it has to be fast, keyboard driven, and focused on one return at a time. Optimize for throughput over prettiness: big hit targets, no modal mazes, and every common action reachable without the mouse.
Main screen is a two pane layout. The left pane is the inbound queue: returns pulled from Loop's Detailed Returns List for a configurable recent window, defaulting to the last three days. Pass an explicit from and to on every call, because that endpoint defaults to only the previous 24 hours when no range is given, and the from to range caps at 120 days. Use paginate=true with pageSize (default 100, max 750) and follow nextPageUrl until it comes back null so a busy dock never sees a truncated queue. Each row shows order name, return ID, item count, and how long the return has been sitting. Above the queue put a search box that jumps straight to a single return by order name or return ID using Get Return Details. That endpoint selects by exactly one of return_id, order_id, or order_name, so detect which the inspector typed and send only that one parameter, never two.
The right pane is the detail panel for the selected return. It shows the return's line items with product title, variant, SKU, quantity, and return reason, plus the existing notes from Get Return Notes and the parcel details from Get Shipment Information so the inspector can confirm the box in their hands matches the record. Get Shipment Information needs the Happy Returns Shipments read scope rather than the Returns scope, so degrade gracefully and hide that section with a short explanation if the key lacks it instead of erroring the whole panel. Monetary values from Loop arrive as a MoneySet with an integer amount in minor units plus a currency code, so convert and format them properly rather than printing raw cents.
For each line item the inspector picks a condition grade and a disposition. Grades are a fixed scale, A through D, with short criteria text visible next to each option so grading stays consistent between inspectors. Write grades with Grade Items and dispositions with Assess Dispositions. Let the inspector grade every item on the return and submit them together rather than firing a call on each click, both to keep the screen responsive and to respect Loop's limit of 300 requests per minute per API key. Number keys should set the grade for the focused item and arrow keys should move between items.
The inspector can leave a note on the return with Create Return Note, and after inspecting they take one of three exits: Process Return to complete it, Flag Return to send it to a supervisor for review, or Close Return to close it without fulfilling any outcome. Process Return only queues the return in the background, so the confirmation must say queued for processing rather than done, and the return should stay visible in a recently actioned list where a refresh can show the outcome once Loop finishes. Flag Return and Close Return are effectively terminal from this screen, so confirm before either. If the inspector marks an item as missing from the box, offer Remove Line Items, but warn clearly that this both removes the item and processes the return, and that it only works for items tied to a refund or store credit outcome.
When an item is graded resellable, show a Restock button on that line. Restocking needs Shopify identifiers, so resolve them rather than assuming: take the variant on the Loop line item, call Shopify's Get Variant to get its inventory_item_id, then call Shopify's List Inventory Levels filtered to that inventory item to show the current stock and the locations it is stocked at. Build the location picker from those rows so every option is a real Shopify location ID, and use Loop's List Locations to supply friendly warehouse names and the dock's default location. Committing calls Shopify's Adjust Inventory Level with the inventory item, the chosen location, and a relative quantity, so a returned unit is a plus one. Always show the current count before the change and the new count after. Offer Set Inventory Level as a secondary correction path when someone needs to type an absolute count instead of an adjustment.
Add a Second opinion button on any line item that kicks off a background agent. The agent pulls recent return history for that same product variant using Detailed Returns List over a longer lookback, staying inside the 120 day cap, and filtering to returns containing that variant. It enriches with Loop's Get Product and Get Product Variant for product context, then decides whether the item should be restocked, refurbished, or pulled from sale, with a short reason citing what it saw, for example a return rate spike or a repeated defect reason. Its recommendation writes back into the app so it appears inline on that line item, and it also posts the recommendation as a note on the return with Create Return Note so it is visible to anyone looking at the return in Loop. Show a pending state on the item while the agent runs, since the inspector should be able to keep working other items or other returns in the meantime.
Persist inspection state in the app: per item grade, disposition, restock result, agent recommendation, who inspected it, and when. That history is what lets a supervisor see why an item was routed the way it was. Keep an always visible keyboard shortcut legend, and make the flow of open return, grade items, note, exit action work end to end from the keyboard. Handle Loop errors by their code rather than showing raw failures: 422 UNPROCESSABLE_RETURN or UNPROCESSABLE_FLAGGED_RETURN means the return is not in an actionable state and the inspector needs a supervisor, and a 429 means slow down and retry shortly.
What does this prompt do?
- Shows a live queue of returns that have arrived in the last few days, with a search box to jump straight to one by order name or return ID
- Opens each return in a detail panel with its line items, the notes already on file, and the shipment it came back on
- Lets the inspector grade every item's condition, choose what happens to it, and leave a note, then process, flag, or close the return
- Adds resellable items back to your Shopify stock at the location you choose, showing the current count before you commit
- Includes a Second opinion button that sends an assistant to review that product's recent return history and recommend restock, refurbish, or pull from sale
What do I need to use this?
- A Loop Returns account and an API key that can read and act on returns
- Happy Returns shipment access on that same key if you want to see how each parcel arrived
- A Shopify store connection with permission to read and update inventory
- The warehouse locations you receive returns into set up in Loop
- A shared grading scale your team agrees on, for example A through D by condition
How can I customize it?
- Change how many days of inbound returns the queue covers, from today only up to a longer catch-up window
- Rename the condition grades and the disposition choices to match the labels your warehouse already uses
- Set a default receiving location so the Restock button is one keystroke instead of a dropdown
- Decide whether Restock adds to the existing count or overwrites it with a number you type
- Adjust the keyboard shortcuts so grading a full return never needs the mouse
FAQs
Do inspectors need a Loop login to use this?
Why does the return say queued for processing instead of finished?
Will restocking an item change my storefront stock right away?
What does the Second opinion button actually do?
Can two inspectors work the dock at the same time?
How far back can the queue go?
Related templates
Type an order or return number and get status, refund outcome, tracking, notes, and the customer's helpdesk thread on one screen.
On the third of every month, your influencer channel gets last month's creators ranked by the store revenue their discount codes actually brought in.
Pick any date range up to 120 days and see return volume, refund versus exchange mix, and the products behind every number, recalculated each time you open it.
Open one board each morning, drop today's orders onto the right drivers, and send out every route with the stops already in the fastest order.
Type a customer's email, phone or name and see their Shopify order history next to their Manychat profile, then reply without leaving the screen.
Open one board each morning that ranks the high value customers waiting on a reply by the revenue sitting behind their silence.
Stop grading returns on a clipboard.
Give your receiving dock one screen that grades, dispositions, restocks, and closes out every inbound return.