Skip to main content

Returns reconciliation reference

A compact reference for how SKU.io reconciles return receipts against RMAs, what each disposition does to inventory and the ledger, and how each marketplace channel behaves. For the narrative version, see How returns reconciliation works.

Receipt reconciliation states

Every return receipt carries a reconciliation state that says whether — and how confidently — it's tied to an RMA.

StateMeaning
MatchedThe receipt is linked to an RMA. Any receipt that gets an RMA is forced to this state.
UnmatchedA blind receipt (no RMA) that hasn't been linked yet.
Needs reviewMore than one plausible RMA/receipt match was found, so SKU.io refused to auto-link. A human must resolve it.

Disposition → inventory & accounting effect

The disposition chosen at receive time is what determines both the inventory movement and whether an accounting journal posts.

DispositionInventoryAccounting journal
Add to StockRestocks the original SKU as a new FIFO layer. Returned units restock as owned, even if the original stock was consignment.Posts Dr Inventory / Cr COGS.
New Blemished SKURestocks a separate blemished SKU as a new FIFO layer.Posts no journal line.
DiscardAdds nothing back.No journal line.
Seam: New Blemished SKU lands inventory but posts no ledger entry

New Blemished SKU puts units back on the shelf (a new FIFO layer on the blemished SKU) but does not post an accounting entry. Only Add to Stock posts to the ledger (Dr Inventory / Cr COGS). If you reconcile inventory value against the ledger, blemished restocks will show as inventory with no corresponding journal.

Which reconciliation engine runs

When a blind receipt meets a marketplace RMA, one of two engines links them. Which one depends on whether the RMA already has line items.

SituationPathWhat it does
A marketplace refund already created an RMA with lines, then a blind receipt arrivesMatching against expected linesMaps the receipt lines onto the existing RMA lines and records quantity. Adds no new movement.
A header-only marketplace RMA (no lines) + a matching blind receiptHealing a header-only RMAMirrors the receipt's lines into new RMA lines.

Both paths claim a receipt atomically, so two processes can't both attach the same receipt, and both work within a 30-day lookback. They differ on which RMA statuses they'll touch:

  • Matching against expected lines (lined RMAs) only considers receivable RMAs — Approved, In Transit, or Partially Received (never Draft) — so it won't link out from under a draft a human is still editing.
  • Healing a header-only RMA heals any non-terminal RMA, including Draft. This is deliberate: the Returns Inbox matcher creates a Draft header-only RMA and immediately heals it from the blind receipt.

Marketplace channel behavior

How each channel turns a marketplace return into an RMA, and whether that RMA surfaces in the Returns Inbox.

ChannelHow returns become RMAsIn the Returns Inbox?
ShopifyA refund with restock_type=return, or a Shopify Return object → RMA. Can auto-receive if the instance's auto-receive-refunded-returns setting is on (default on).Yes
Amazon MFNSKU.io builds the RMA directly from Amazon's return data.No
Amazon FBAOne RMA per order, created already Closed (restocked at Amazon; no physical receipt). Only sellable dispositions create RMAs.No
WalmartPersisted, then linked by the shared matcher.Yes
TrackstarPersisted, then linked by the shared matcher.Yes
TikTok ShopThe translator creates the RMA directly.No

Behavior when no default returns warehouse is set

If no Default Returns Warehouse is configured, channels diverge — some stop with an error, others create an RMA with no warehouse. Set one before you rely on channel-created returns.

ChannelIf no default returns warehouse is set
ShopifyHard stop — no RMA is created.
TikTokNo RMAs created.
Amazon MFNRMA created with a null warehouse. (FBA is unaffected — it resolves the Amazon fulfillment-center warehouse, not the default returns warehouse.)
WalmartReturn-center step degrades silently.
tip

Always set a Default Returns Warehouse under Settings → Returns so no channel silently drops or half-creates a return.

Idempotency keys

Re-syncing a channel never duplicates an RMA, but the key that guarantees this differs per channel.

Channel / pathIdempotency key
Shopify / TikTokThe channel return id stored on the RMA.
Amazon MFNThe return's linked RMA.
Amazon FBAOne RMA per order.
Inbox matcher (Shopify / Walmart / Trackstar)The external source + external return id.
Last verified: