RestocksAIO
Home/Blog/Build your own Vinted sync with the Webhook API
Multi-platform selling

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 vs a serverFor testing, you can run the receiver on 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:

  1. Open Settings → Webhook API (Premium).
  2. Enter your HTTPS endpoint URL.
  3. 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.

Reality checkThis is a DIY integration. RestocksAIO supports the webhook, meaning the delivery of the event, but not your eBay/Vinted code. If that side breaks, it's yours to fix. The upside is you're never blocked waiting for us to build an integration we may never build.

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:

EventFires whenDIY use
bricker.item_soldA Bricker-managed item sellsDe-list elsewhere with fee-adjusted payout data attached.
bricker.item_deletedRestocksAIO deletes an item on a supported siteMirror that deletion onto eBay/Vinted so both sides stay in step.
offer.detectedAn offer lands on a supported platformFeed your own pricing or alerting logic.
bricker.price_changeBricker raises or lowers a priceRe-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 200 immediately 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.

FAQ

Does RestocksAIO support eBay or Vinted?

eBay: yes. RestocksAIO publishes to eBay and Shopify and lowers their quantity when a linked unit sells. Vinted: no. Nothing reads your Vinted account. For Vinted, use the Premium Webhook API as a DIY bridge. A sale on a supported platform POSTs to your own endpoint, and your code ends the matching listing.

Which event tells me something sold?

sale.detected fires on a new sale or a sale status change and carries the saleId, SKU, site, size and payout. For items managed by Bricker Mode you'll also get bricker.item_sold, which adds fee-adjusted payout fields. Subscribe to Sales in the Webhook API settings to receive them.

Can I run the receiver on my own computer?

For testing, yes. Run it on localhost and expose it with a tunnel like Cloudflare Tunnel or ngrok. For production, use an always-on HTTPS endpoint: a VPS you can rent for under €10/month. A sale that fires while your machine is off then still gets handled.

Is the eBay/Vinted automation officially supported?

No. RestocksAIO supports the webhook, meaning it delivers the event to your endpoint. The downstream code that talks to eBay or Vinted is yours to build and maintain. Official eBay APIs exist for ending listings. Vinted has no official public API, so that side is unofficial. If you'd rather not maintain it, treat Vinted as notify-and-remove-manually.

Keep building

FeatureWebhook APIReal-time JSON events POSTed to your own HTTPS endpoint on Premium. The base for any DIY integration.FeatureInventory & ListingsOne owned-unit model across every supported marketplace. Your webhook logic keeps that stock in sync elsewhere.

Related reading

All articles

Ready to run it like an operation?

7-day Standard trial, or a 3-day Premium setup sprint. Pricing, inventory, listings, documents and analytics in one pane.