Build your own eBay & Vinted sync with the Webhook API
We support 10+ marketplaces natively. eBay and Vinted aren't among them — but you don't need us to for a sale on StockX to yank the same pair off your eBay listing. The Webhook API turns "a sale happened" into an HTTP request to code you own, and from there any platform is fair game.
The gap: we don't do eBay or Vinted (and that's fine)
RestocksAIO drives 10+ marketplaces natively — StockX, Alias, WeTheNew, LimitedResell, POIZON and the rest. eBay and Vinted aren't on that list, and there's no hidden inbound integration that connects your accounts there. If someone tells you otherwise, they're guessing.
But plenty of resellers list the same stock on eBay or Vinted alongside the platforms we do support, and that creates the classic cross-listing risk: a pair sells on StockX, and the identical listing is still live on eBay until you remember to pull it. Remember late and you've oversold — now you're cancelling on a buyer, eating a defect, or scrambling to source a replacement. The customer question that prompted this guide was exactly that: "can I get a notification when something sells, and have it remove my listings on other platforms?" The answer is yes — as a DIY build on top of the Webhook API.
The idea: a webhook is an escape hatch to any platform
The Webhook API is a Premium/Lifetime feature that POSTs structured JSON to an HTTPS endpoint you control the moment a subscribed event fires. That single mechanism is what makes an unsupported marketplace reachable: RestocksAIO doesn't need to know what eBay or Vinted is. It just needs to tell your code that a specific pair sold — and your code does whatever it likes next, including calling eBay's or Vinted's own tooling to end the listing.
So the division of labour is clean. We own detecting the sale on the platforms we support and delivering that event reliably. You own the small piece of software that receives it and acts on the platforms we don't. It's DIY by design, and it's the same pattern for any system we'll never build a first-party integration for — a niche marketplace, your accounting stack, a private dashboard.
Related featureWebhook APIReal-time JSON events POSTed to your own HTTPS endpoint — the foundation this whole recipe stands on.What you need
Three things, and none of them exotic:
- A Premium or Lifetime plan — the Webhook API is gated to those tiers.
- An always-on HTTPS endpoint — somewhere your code runs and can receive a POST at any hour. A cheap VPS (you can rent one for under €10/month) is the honest answer for production; the webhook can fire at 3am whether or not your laptop is awake.
- A little code — enough to receive a JSON POST and call an API. Node, Python, PHP, anything.
localhost and expose it with a tunnel (Cloudflare Tunnel, ngrok) so RestocksAIO can reach it. For production, don't rely on localhost — a €10 always-on server means you never miss a sale that fires while your machine is asleep.Turn the webhook on
Enabling it takes under a minute in the desktop app:
- Open Settings → Webhook API (Premium).
- Enter your HTTPS endpoint URL.
- Toggle Enable Webhook API and switch on the event types you want — for this recipe, Sales is the one that matters.
Full setup and the complete event reference live in the Webhook API docs. From that point on, every subscribed event is POSTed to you as it happens — no polling, no export.
The payload you'll act on
The event that drives de-listing is sale.detected — it fires on a new sale or a sale status change on a supported platform. Every webhook shares the same envelope: an event name, a UTC timestamp, an event-specific data object and a meta block. Here's a real sale.detected body:
{
"event": "sale.detected",
"timestampUtc": "2025-01-01T12:00:00Z",
"data": {
"saleId": "12345",
"saleName": "Jordan 1 Retro",
"sku": "555088-105",
"site": "StockX",
"size": "10",
"payout": 245.50,
"status": "Detected a new sale!"
},
"meta": {
"appVersion": "3.x",
"subscription": "Premium",
"username": "your-login"
}
}The two fields that make cross-platform de-listing possible are sku (the style code — your join key across every platform) and size. Match those against your eBay/Vinted listings and you know exactly which listing to pull. site tells you where it sold, payout gives you the number for your own records, and saleId is the stable ID you'll use to avoid acting on the same event twice.
A minimal receiver
The receiver is deliberately small. Take the POST, check it's a sale, and hand the SKU and size to whatever de-lists on your other platforms. A Node/Express sketch:
app.post('/restocks-webhook', (req, res) => {
const { event, data } = req.body;
if (event === 'sale.detected') {
// Look up your eBay / Vinted listings by style code + size,
// then end them so you don't oversell.
delistEverywhereElse(data.sku, data.size, data.site);
}
res.sendStatus(200); // ack fast; do the slow work async
});That's the whole shape of it. RestocksAIO tells you Jordan 1 Retro, SKU 555088-105, size 10, sold on StockX; your delistEverywhereElse does the platform-specific part. Acknowledge with a 200 immediately and push the actual API calls onto a queue or background task — a webhook endpoint that blocks while it talks to eBay is an endpoint that times out.
The eBay and Vinted side (be honest about it)
This is the part you own, and the two platforms are not equal. eBay has official, documented APIs — you can end a fixed-price listing or set its quantity to zero programmatically, which is exactly what delistEverywhereElse should do for the matching SKU. That's a well-trodden, supported path.
Vinted does not offer an official public API. Any Vinted automation is unofficial, can break when they change their site, and is entirely yours to build and maintain. Plenty of resellers therefore automate only the eBay side and treat Vinted as a notify-and-do-it-manually step — the webhook pings their phone (via Telegram or a Discord message their receiver sends) and they pull the Vinted listing by hand. That's a perfectly good outcome: you've still killed the oversell risk, because you found out the instant it sold instead of hours later.
Whichever platform, keep a small mapping of sku + size → listing ID on your side so the receiver knows which listing to end. That table is the glue between our event and their platform.
More than sales: the other events you can hang logic on
De-listing on a sale is the headline use case, but the same endpoint can subscribe to more of the workflow. Beyond sale.detected, the API emits:
| Event | Fires when | DIY use |
|---|---|---|
bricker.item_sold | A Bricker-managed item sells | De-list elsewhere with fee-adjusted payout data attached. |
bricker.item_deleted | RestocksAIO deletes an item on a supported site | Mirror that deletion onto eBay/Vinted so both sides stay in step. |
offer.detected | An offer lands on a supported platform | Feed your own pricing or alerting logic. |
bricker.price_change | Bricker raises or lowers a price | Re-price the matching eBay listing to keep them aligned. |
One direction to keep in mind: this bridge is one-way. A sale that happens on eBay or Vinted never reaches RestocksAIO, because we don't read those accounts — so if you want the reverse (an eBay sale pulling your StockX listing), that logic lives entirely on your side too. For most resellers the one-way "supported platform sold → pull it everywhere else" flow is 90% of the value.
Making it production-safe
A webhook receiver you trust with your listings needs three safeguards, all standard:
- De-duplicate by
saleId. Delivery is at-least-once, so the same event can arrive twice. Record the IDs you've handled and ignore repeats — otherwise you might try to end an already-ended listing. - Verify the request is really from us. Requests are signed; check the signature before you act, so a random POST to your URL can't delete your listings.
- Acknowledge fast, work async. Return
200immediately and do the eBay/Vinted calls in the background. Slow endpoints get retried, which compounds into duplicate work.
Run that receiver on the €10 always-on server rather than your laptop, and you've got a small, reliable bridge that closes the oversell gap the moment a pair sells.
What this pattern really unlocks
Once you've wired one webhook, the mental model shifts: RestocksAIO stops being a closed set of supported marketplaces and becomes a source of real-time events you can point at anything. eBay and Vinted de-listing is the obvious first build, but the same sale.detected POST can update a private inventory sheet, push to your accountant's system, fire a Slack alert, or drive a marketplace we've never heard of.
If overselling across platforms is the problem you're solving, pair this with the in-app guardrails in how to avoid overselling across marketplaces — the webhook extends that same discipline out to the platforms we don't natively cover.
