Developers

Connect FLUF to Your System

Your spreadsheet, your admin tool, your accountant's system — or an AI assistant. Know the second something sells, anywhere you sell it, without writing a single marketplace integration.

Create an API token Read the docs

Webhooks

A signed POST to your server the moment an item sells on any connected marketplace.

REST API

Read your inventory and orders, and list items to marketplaces, over plain HTTPS.

MCP server

Let Claude, Cursor or any MCP client run your shop in plain language.

One integration instead of fifteen

Every marketplace has its own idea of what a product is — different categories, size systems, brands, condition values and photo rules. Several have no public API at all. FLUF already speaks all of them, so you integrate once and reach every channel your account is connected to.

You never touch marketplace credentials, and you don't redo the work every time a channel changes something.

Know the second something sells

Point FLUF at a URL and it'll POST there as sales come in:

curl -X POST "https://fluf.io/wp-json/fc/api/v1/webhooks" \
  -H "Authorization: Bearer fluf_pat_your_token" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://yourapp.example.com/hooks/fluf","events":["new_sale"]}'

Every sale arrives like this:

{
  "event": "new_sale",
  "sku": "T-001",
  "channel": "depop",
  "price": 45.00,
  "currency": "GBP",
  "sold_at": "2026-07-28T14:03:11+00:00",
  "title": "Vintage Levi's 501 jeans",
  "order_id": "abc-123-def"
}

sku is your reference code, read from the item in FLUF — so it already matches whatever your own system calls it. No lookup table, no guessing which listing sold.

Deliveries are signed so you can prove they came from us, retried if your server is down, and every attempt is logged — so you can always check whether one fired. Full webhook documentation →

What you can listen for

EventFires when
new_saleAn item sold on any connected marketplace
new_listingA product was created in FLUF
listing_crosslistedA product went live on a marketplace
crosslisting_errorA listing attempt failed
listing_sold_outA product is no longer live anywhere
oos_alertStock hit zero
crosslisting_job_completedA bulk listing run finished

Finer-grained events

Each one names the marketplace and the account it happened on, so a business with several accounts on the same marketplace can tell them apart.

EventFires when
listing.createdA listing went up, with the price it was listed at
listing.liveThe listing is visible to buyers, with its public link
listing.updatedA change reached the marketplace
listing.rejectedA marketplace refused the listing — the item needs fixing
listing.errorThe attempt failed for a reason unrelated to the item
listing.delistedA listing came down, and why
listing.soldAn item sold, with the price and order id
listing.likedSomeone liked an item
message.receivedA buyer sent you a message
offer.receivedA buyer made an offer
offer.acceptedAn offer was accepted — the item sold at that price
offer.declinedAn offer was declined or expired
account.followerAn account gained followers

Not every event reaches every marketplace — it depends what each one exposes. listing.rejected and listing.error split the same failure on purpose: rejected means an item needs editing before it will go up, error means nothing is wrong with the item and it's worth trying again later.

Specifications

Two OpenAPI documents, both public — you don't need a token to read them. Point your generator at either one.

Endpoints

What you call: publish, reprice, reconcile, list accounts.

openapi.yaml

Events

What we send: every event body, and the delivery rules a consumer needs.

events.yaml

Live catalogue

Every event with a sample payload, generated from the running code.

GET /events

Deliveries are at-least-once, so deduplicate on event_id — it identifies the event and stays the same across every retry. Delivery order isn't guaranteed, so each event also carries a seq: keep the highest you've applied for an item and ignore anything lower.

Let an AI assistant run your shop

FLUF ships a Model Context Protocol server, so any MCP-compatible assistant can work your account directly. Add it to Claude, Cursor, Cline or anything else that speaks MCP:

{
  "mcpServers": {
    "fluf": {
      "command": "npx",
      "args": ["-y", "fluf-mcp"],
      "env": { "FLUF_API_TOKEN": "fluf_pat_your_token" }
    }
  }
}

Then just ask it:

  • “What's in stock that isn't on eBay yet? List the ten cheapest.”
  • “What sold last week, and on which channel?”
  • “List these forty items on Vinted and Depop.”

It can also reach Intesa, the assistant built into FLUF, for the open-ended questions — “why did my last five listings fail?” — so your assistant gets FLUF's own answer rather than a guess.

Source is open on GitHub under the MIT licence.

Get started in two minutes

  1. Open More → Developers in FLUF Connect.
  2. Create an API token. It's shown once and starts with fluf_pat_.
  3. Send it as Authorization: Bearer <token>.

Included with any paid FLUF plan — there's no separate developer tier.

Need something we haven't built yet? Email [email protected] — we prioritise by what people actually ask for.

Scroll to Top