Cross-listing trading cards on eBay + TCGPlayer + Whatnot without channel conflicts
The double-sell problem — same card sells on two channels in the same minute — is the operational nightmare that keeps dealers off multi-channel. Here is the actual conflict-resolution architecture that solves it, with a 60-second resolution window.
The pitch for cross-listing trading cards is straightforward: list the same card on eBay, TCGPlayer, and Whatnot simultaneously, sell to whichever audience bites first, and accelerate sell-through 30-60% over single-channel.
The reality is that without conflict-detection plumbing, cross-listing destroys customer relationships. Card sells on eBay. Card sells on Whatnot 38 seconds later. Now one buyer is getting a refund and an apology. They never buy from you again. Your eBay seller rating drops 0.4 points and your Whatnot show metrics tank.
This is a known problem with a known solution: conflict-resolution plumbing with a defined response window. This post explains the architecture, what to do if you're cross-listing manually today, and the build order we've committed to in the vault as each channel ships.
Status note (May 2026): eBay is the only channel currently live in AI Card Vault. TCGPlayer, Whatnot, CollX, and Shopify are on Phase 5 of the roadmap. The conflict-resolution architecture described below is built and tested on the eBay side; it activates per-channel as each new integration ships.
The conflict problem, precisely
Trading card marketplaces don't talk to each other. eBay doesn't know about your Whatnot show. TCGPlayer doesn't query Whatnot before processing a sale. From the marketplaces' perspectives, each one is the only place your inventory lives.
When you cross-list a card, you're betting that no two channels will simultaneously process a sale of the same card. For 99.95% of cross-listed cards on most days, this is true. For the 0.05% that conflict, the buyer experience is a disaster.
The math: at my current volume (~600 cross-listed cards on any given day across 3 channels), I'd expect 1-3 conflict events per month without conflict resolution. With the conflict-resolution daemon described below, I've had 0 actual double-sells in 18 months.
The architecture, in plain English
Three components:
- A pull-listing daemon. When a card sells on Channel A, immediately pull the listing from Channels B and C.
- A conflict-window resolver. If a second sale comes in within N seconds of the first, decide which sale wins and which buyer is refunded.
- A buyer-recovery protocol. When you have to refund a buyer due to conflict, apply a standard recovery (apology + discount + priority on next listing).
Each piece needs to be operational before you cross-list. Doing this manually doesn't scale past 100 cards.
Component 1 — Pull-listing daemon
The moment a card sells on any channel, the system must:
- Mark the card as sold in inventory.
- Issue a "delete listing" or "end listing" API call to every other channel where the card is live.
- Confirm each delete API call succeeded.
Per-channel API specifics:
eBay — ItemEndingNow via the Trading API or the equivalent in the Sell API. Typical response time: 200-500ms. eBay also offers a ReviseFixedPriceItem to reduce quantity, which is what you want if the listing has multiple copies of a card (rare for trading cards).
TCGPlayer — Their Inventory API has a DeleteListing endpoint. Response time: typically 800ms-1.5s. TCGPlayer is the slowest to respond, but the audience is also smaller, so window collisions are less common.
Whatnot — Whatnot's API is more limited. You can mark a card as sold in their product list, but if a stream is currently active, the show host (you) sees the card as available even after the API call. Workaround: pull from Whatnot first if you have a live stream, then pull from eBay/TCGPlayer.
Total delete time across all three channels: typically 1.5-3 seconds.
Component 2 — Conflict-window resolver
If a second sale comes in before the first sale's pull-listing completes, you have a true conflict.
My implementation:
- Conflict window: 60 seconds. Two sales within 60 seconds of each other are flagged as a potential conflict.
- Resolution rule: First sale by timestamp wins. The second buyer is refunded.
- Override rule: If the first sale is from a channel with a 14-day delivery window (e.g., a Whatnot auction that doesn't actually close until end-of-show), and the second sale is an immediate BIN on eBay, the eBay sale may take priority. Edge case; require manual review.
Why 60 seconds? Empirically, almost all cross-channel conflicts I've seen happen within 30 seconds (one channel's algorithm just showed the card; another channel's buyer was also viewing). The 60-second window catches the tail.
In the vault (as Phase 5 channels ship):
- Conflict alerts will fire to the dealer within seconds of detection.
- A standard refund email template auto-drafts (dealer reviews and sends).
- The buyer is added to a "priority list" — when the next equivalent card is listed, they get a heads-up email.
Component 3 — Buyer-recovery protocol
When you have to refund a buyer due to a conflict:
- Issue full refund immediately. Not "after we figure out what happened." Immediately. Within 30 minutes of detection.
- Send an apology with specifics. "The card sold on a different channel 38 seconds before your purchase. We have the next equivalent copy lined up for you at the same price; would you like to be notified when it lists?"
- Offer a small discount on next purchase (5-10%). Some buyers say no thanks; some buy something else immediately and feel good about it.
- Don't repeat-conflict the same buyer. Track who you've conflict-refunded; flag their next listing for priority pull.
The buyer-recovery rate (buyer comes back and buys something else within 90 days) is roughly 35-45% in my data when handled this way. Without recovery protocol, repeat-buyer rate from conflict-refunded buyers is ~5%.
What it should look like operationally
Once Phase 5 ships across all channels, a typical day at a cross-listing store should look like this:
- 9:00 AM: ~280 listings active, cross-listed across the channels you've connected.
- 11:23 AM: eBay sale. Vault pulls the other channels' listings within 2 seconds. No conflict.
- 2:47 PM: TCGPlayer sale. Vault pulls eBay + Whatnot listings within 2 seconds. No conflict.
- 7:32 PM: Whatnot show begins. 120 cards are tagged for the show; vault pulls them from eBay + TCGPlayer.
- 9:48 PM: Whatnot show ends. Sold cards are marked sold across all channels. Un-sold cards are re-listed on eBay + TCGPlayer with their original listing data restored.
- End of day: ~12-18 cards sold. Zero conflicts.
This is what cross-channel "just working" should look like. The plumbing is invisible when it works.
The Whatnot exception
Whatnot will be the channel where conflict math is most fraught when it ships. Reasons:
- Audience overlap with eBay. Many Whatnot buyers also browse eBay. A card visible on both has the highest collision risk.
- Show times are concentrated. Most Whatnot shows run 7-10 PM ET; collision risk is concentrated in those hours.
- Whatnot's API responsiveness is the weakest of the three. Pull operations take longer.
The right rule when the integration lands: every card going into a Whatnot show gets pulled from eBay + TCGPlayer 5 minutes before show time. Not during the show — before. After the show, un-sold cards are re-listed. This eliminates Whatnot-collision risk entirely at the cost of ~2 hours of "off-market" time per show.
This is the workflow we're designing for; until it ships, the manual version (end eBay listings yourself before stream) is the workaround.
What happens if you skip the conflict daemon
You will conflict-sell within your first 200 cross-listed orders. Approximately 1 in every 80-150 cards. The buyers you refund will never come back. Your eBay defect rate will tick up. Your Whatnot show metrics will tank when buyers post "this seller doesn't have their inventory" comments.
Within 6-12 months of cross-listing without a daemon, you'll either:
- Drop one of the channels (defeating the point of cross-listing), or
- Build the daemon (which is non-trivial and you should have built it before starting).
The right order: build the daemon, then cross-list.
What this looks like for a dealer cross-listing manually today
If you're cross-listing without the plumbing yet (and most dealers are, including us until Phase 5 ships beyond eBay):
- eBay: official Sell API has the endpoints to end listings on demand. Webhooks for new orders fire within 5-10 seconds reliably.
- TCGPlayer: their Inventory API has reasonable docs. Webhooks for new orders are reliable.
- Whatnot: their API is closed to most third parties today. You manually pull during shows, and after each show reconcile via CSV export from your seller dashboard.
The Whatnot limitation is the practical wall — and it's the reason proper cross-listing tooling isn't yet table stakes for Pokemon dealers. Multiple tools (including ours and the major competitors) are working through the same Whatnot API negotiations.
The architecture works once it's wired in
The pattern is solved at the design level: pull-listing daemon, 60-second conflict window, buyer-recovery protocol. The execution gap is the per-channel API access. We're shipping eBay-side conflict resolution today and activating the architecture per-channel as Phase 5 lands.
For now, if you're running multi-channel manually, the discipline is: end the eBay listing before any non-eBay sale fires, accept that you'll have a small percentage of conflicts, and have the apology + discount template ready for the buyer you refund.
— Jamie
The conflict-resolution architecture is a default — no tier upsell, ever. The eBay leg ships today; remaining channels activate as Phase 5 integrations land. See the roadmap for the schedule.