Developers › Docs › API reference › Get an item
Get an item
Returns one product and all marketplace listings FLUF can currently see for it. This is what you poll after POST /items returns 202.
curl "https://fluf.io/wp-json/fc/api/v1/items/shopify_8123456789012_0" \
-H "Authorization: Bearer fluf_pat_your_token"const res = await fetch("https://fluf.io/wp-json/fc/api/v1/items/shopify_8123456789012_0", {
headers: {
"Authorization": "Bearer fluf_pat_your_token",
},
});
const data = await res.json();import requests
res = requests.get(
"https://fluf.io/wp-json/fc/api/v1/items/shopify_8123456789012_0",
headers={
"Authorization": "Bearer fluf_pat_your_token",
},
)
data = res.json()<?php
// composer require guzzlehttp/guzzle
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://fluf.io/wp-json/fc/api/v1/items/shopify_8123456789012_0', [
'headers' => [
'Authorization' => 'Bearer fluf_pat_your_token',
],
]);
$data = json_decode((string) $res->getBody(), true);{
"vid": "shopify_8123456789012_0",
"fluf_id": 326428506,
"title": "Vintage Levi's 501 jeans",
"sku": "LV-501-32",
"price": 42,
"listings": [
{
"channel": "ebay",
"account": "ebay:718",
"connection_id": 718,
"listing_id": "123456789",
"state": "live",
"listing_url": "https://www.ebay.co.uk/itm/123456789",
"price": 45,
"error": null,
"views": null,
"likes": null,
"sold": null,
"live_at": "2026-08-11T07:15:00Z",
"created_at": "2026-08-11T07:14:59Z",
"updated_at": "2026-08-11T07:15:00Z"
}
]
}Item fields
| Field | Notes |
|---|---|
vid | Product id to send back to POST /items |
fluf_id | FLUF internal product id; informational |
title | Product title when the product record is still available |
sku | Seller SKU when available |
price | Product's own price in FLUF, not a per-account override |
photos | The product's photo URLs, in order. GET /items/{vid} only, not the GET /items sweep |
listings | One listing object per marketplace account where this product has state |
Listing fields
| Field | Notes |
|---|---|
channel | Marketplace slug |
account | {channel}:{connection_id} target id |
connection_id | Numeric account connection id |
listing_id | Marketplace's own listing id |
state | Public listing state |
listing_url | Buyer-facing URL when the channel exposes one |
price | Price on this account; may differ from the product price |
error | Present when state is error |
views | Lifetime views, or null when unknown |
likes | Favourites, or null when unknown |
sold | Sale info when FLUF can attribute a sale |
live_at | When the listing went live on the channel, when known |
created_at | When FLUF recorded the listing |
updated_at | Last recorded listing update |
Listing states
| State | Meaning |
|---|---|
live | Visible to buyers |
delisted | Taken down |
sold | Sold on this channel |
not_visible | Draft, hidden, or paused |
out_of_stock | Listed but unavailable |
pending | Being published |
error | Channel refused or could not complete the listing |
unknown | FLUF has no reliable state |
On accounts flagged runs_in_browser, a fresh listing can sit pending until the seller has FLUF open — usually a few minutes (details). A pending listing has no listing_id yet ("") and connection_id may read 0 even on a multi-account seller — neither is known until the channel confirms. Poll again once it resolves to live or error.
When present, sold contains order_id, sold_at, price, and currency. A sold block can appear while state is live if the item sold once and was relisted.
Something missing? Email [email protected] — we prioritise by what people actually ask for.
