Build your own Vinted sync with the Webhook API
RestocksAIO now publishes to eBay and Shopify and lowers their quantity when a linked unit sells. Vinted isn't supported, and some sellers prefer to run their own eBay code. A sale on StockX can still pull the same pair off a listing we don't manage. The Webhook API turns "a sale happened" into an HTTP request to code you own, and that code can act on any platform.
The gap: platforms we don't support, such as Vinted
RestocksAIO works natively with 10+ marketplaces: StockX, Alias, WeTheNew, LimitedResell, POIZON and the rest. RestocksAIO also publishes to eBay and Shopify from the Marketplace tab, and it lowers their quantity when a linked unit sells. Vinted isn't on that list, and nothing connects your account there. This guide is for Vinted, for any other platform we don't connect to, and for sellers who want to run their own eBay code.
Plenty of resellers list the same stock on Vinted or another platform alongside the ones we support. That creates the classic cross-listing risk. A pair sells on StockX, and the identical listing stays live elsewhere until you remember to pull it. Remember late and you've oversold. Then you cancel on a buyer, take a defect, or scramble to source a replacement. A customer asked us exactly this: "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 lets your code reach any platform
The Webhook API is a Premium feature. It POSTs structured JSON to an HTTPS endpoint you control the moment a subscribed event fires. That is what makes an unsupported marketplace reachable. RestocksAIO doesn't need to know what eBay or Vinted is. It only needs to tell your code that a specific pair sold. Your code then does whatever it likes, including calling eBay's or Vinted's own tooling to end the listing.
The split is clear. We detect the sale on the platforms we support and deliver that event reliably. You own the small piece of software that receives it and acts on the platforms we don't support. It's DIY by design. The same pattern works 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. This recipe is built on it.What you need
You need three things:
- A Premium plan. The Webhook API is limited to those tiers.
- An always-on HTTPS endpoint. This is somewhere your code runs and can receive a POST at any hour. For production, use a cheap VPS (you can rent one for under €10/month). The webhook can fire at 3am whether or not your laptop is awake.
- A little code. You need 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. With a €10 always-on server 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 are in the Webhook API docs. From then on, every subscribed event is POSTed to you as it happens. You don't poll or 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"
}
}Two fields make cross-platform de-listing possible: 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. The site field tells you where it sold. The payout field gives you the number for your own records. Use saleId, the stable ID, to avoid acting on the same event twice.
A minimal receiver
The receiver is small on purpose. 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 all 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 will time out.
The eBay and Vinted side
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. That is what delistEverywhereElse should do for the matching SKU. It's a supported, widely used 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. So plenty of resellers automate only the eBay side and handle 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 reduced the oversell risk, because you found out soon after it sold and not 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 links our event to their platform.
More than sales: the other events you can act on
De-listing on a sale is the main 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. |
This bridge is one-way. A sale that happens on a platform we don't connect to, such as Vinted, never reaches RestocksAIO. Sales on eBay and Shopify do reach it when you connect those accounts in the app. If you want the reverse (an eBay sale pulling your StockX listing), that logic also lives entirely on your side. 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 standard safeguards:
- 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 creates duplicate work.
Run that receiver on the €10 always-on server, not your laptop. You then have a small, reliable bridge that narrows the oversell gap as soon as a sale is detected.
What else this pattern lets you build
Once you've wired one webhook, RestocksAIO is no longer a closed set of supported marketplaces. You have a source of real-time events you can point at anything. De-listing on eBay and Vinted is the obvious first build. The same sale.detected POST can also 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 the same protection to the platforms we don't natively cover.

