The size row tells you how many pairs are left
The FLO API returns product data from the Turkish footwear retailer FLO as clean JSON.
3 active endpoints. Every call is 1 credit.
- POST/flo/v1/search
- POST/flo/v1/category/products
- POST/flo/v1/product/detail
What FLO endpoints does ReefAPI ship?
3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
FLO API
3 of 3 endpoints, ready to run
FLO cards for a keyword — id, title, brand, price and special price, the sizes with per-size stock, the colours, the image, the URL and whether FLO or a marketplace seller is behind it.
{ "ok": true, "meta": { "api": "flo", "endpoint": "search", "mode": "live", "latency_ms": 2258, "record_count": 24, "cache_hit": false }, "data": { "products": [ { "product_id": "102233056", "title": "Y NK ELMNTL BKPK SHOEBOX Siyah Unisex Çocuk Sırt Çantası", "brand": "Nike", "url": "https://www.flo.com.tr/urun/nike-y-nk-elmntl-bkpk-shoebox-siyah-unisex-cocuk-sirt-cantasi-102233056", "price": 2099, "special_price": null, "original_price": null, "discount_rate": null, "currency": "TRY", "in_stock": false, "image": "https://floimages.mncdn.com/media/catalog/product/25-01/13/102233056_d1.jpg", "sizes": [ { "size": "STD", "dimension": "beden", "in_stock": true, "qty": 10, "sku": "102233056001", "barcode": "197602778526" } ], "colors": [ { "name": "Siyah", "sku": "102233056", "url": "https://www.flo.com.tr/urun/nike-y-nk-elmntl-bkpk-shoebox-siyah-unisex-cocuk-sirt-cantasi-102233056", "image": "https://floimages.mncdn.com/media/catalog/product/25-01/13/102233056_d1.jpg", "in_stock": true, "qty": 10, "barcode": "197602778526" } ], "seller_id": 10000, "seller_type": "flo", "category": [ "Çanta", "Sırt Çantası" ] }, { "product_id": "102050226", "title": "-Siyah Siyah Unisex Sırt Çantası", "brand": "Nike", "url": "https://www.flo.com.tr/urun/nike-nike-siyah-siyah-unisex-sirt-cantasi-102050226", "price": 2099, "special_price": null, "original_price": null, "discount_rate": null, "currency": "TRY", "in_stock": false, "image": "https://floimages.mncdn.com/media/catalog/product/25-05/27/102050226_m1-1748355465.jpg", "sizes": [ { "size": "STD", "dimension": "beden", "in_stock": true, "qty": 32, "sku": "102050226001", "barcode": "194958681234" } ], "colors": [ { "name": "Siyah", "sku": "102050226", "url": "https://www.flo.com.tr/urun/nike-nike-siyah-siyah-unisex-sirt-cantasi-102050226", "image": "https://floimages.mncdn.com/media/catalog/product/25-05/27/102050226_m1-1748355465.jpg", "in_stock": true, "qty": 32, "barcode": "194958681234" } ], "seller_id": 10000, "seller_type": "flo", "category": [ "Çanta", "Sırt Çantası" ] }, { "product_id": "101792764", "title": "COURT BOROUGH LOW RECRAFT Beyaz Unisex Sneaker", "brand": "Nike", "url": "https://www.flo.com.tr/urun/nike-court-borough-low-recraft-beyaz-unisex-sneaker-101792764", "price": 3699, "special_price": null, "original_price": null, "discount_rate": null, "currency": "TRY", "in_stock": false, "image": "https://floimages.mncdn.com/media/catalog/product/23-10/27/101853780_d2-1698423356.jpg", "sizes": [ { "size": "35.5", "dimension": "beden", "in_stock": true, "qty": 284, "sku": "101792764008", "barcode": "196968173464" }, { "size": "36", "dimension": "beden", "in_stock": true, "qty": 171, "sku": "101792764007", "barcode": "196968173471" }, { "size": "36.5", "dimension": "beden", "in_stock": true, "qty": 8, "sku": "101792764001", "barcode": "196968173488" } ], "colors": [ { "name": "Beyaz", "sku": "101853780", "url": "https://www.flo.com.tr/urun/nike-court-borough-low-recraft-beyaz-unisex-sneaker-101853780", "image": "https://floimages.mncdn.com/media/catalog/product/23-10/27/101853780_d2-1698423356.jpg", "in_stock": true, "qty": 778, "barcode": "196968173587" }, { "name": "Beyaz", "sku": "101792764", "url": "https://www.flo.com.tr/urun/nike-court-borough-low-recraft-beyaz-unisex-sneaker-101792764", "image": "https://floimages.mncdn.com/media/catalog/product/23-06/22/101792764_d2.jpeg", "in_stock": true, "qty": 3746, "barcode": "196968173532" }, { "name": "Beyaz", "sku": "101792825", "url": "https://www.flo.com.tr/urun/nike-court-borough-low-recraft-beyaz-unisex-sneaker-101792825", "image": "https://floimages.mncdn.com/media/catalog/product/23-10/27/101792825_d2-1698423352.jpg", "in_stock": true, "qty": 2668, "barcode": "196968173686" } ], "seller_id": 10000, "seller_type": "flo", "category": [ "Ayakkabı", "Sneaker", "Klasik Sneaker" ] } ], "count": 24, "total": 767, "page": 1 } }
How the FLO API works
FLO is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 184 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Finding what is actually left in a size
For footwear the question is never 'is it in stock', it is 'is it in stock in a 42'. FLO answers that on the listing row, before you open anything.
{"category": "spor-ayakkabi", "cinsiyet": "erkek"}Cards already carry the size list with each size's stock, so you can filter a whole category to the sizes you care about without a product call per row.
{"url": "https://www.flo.com.tr/urun/nike-court-borough-low-recraft-beyaz-unisex-sneaker-101792825"}Then the product for the barcode on each size, the coupons, the badges and the gallery.
A size-level view of a footwear catalogue from listing calls, with a product call only for the rows that survived the filter.
curl -X POST https://api.reefapi.com/flo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike"}'{
"ok": true,
"data": { … },
"meta": {
"api": "flo",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}FLO ids: the product id, the size sku, the colorway sibling and the seller
FLO reuses one number in several shapes, and the trap is assuming a size sku and a product id live in the same space. They do not, and neither do colorways, which FLO models as separate products rather than as variants of one. Everything below was read off live search, category and detail responses on 2026-08-27.
| Identifier | Where it comes from | Measured shape |
|---|---|---|
| product_id | the digits at the end of /urun/<slug>-<id> | "101792825" - 9 digits, returned as a string |
| sizes[].sku | one per size | the product id with a 3-digit size index appended: 101792825001 through 101792825008 |
| sizes[].barcode | one per size | 12-digit UPC-A, e.g. 196968173624 for EU 35.5 |
| colors[].sku | the other colorways of the same shoe | a different product id with its own /urun/ URL: 101853780, 101792764 |
| entity_id | product/detail only | "36310805520", 11 digits - FLO's internal record id, unrelated to product_id |
| seller_id / seller_type | who ships it | 10000 with seller_type "flo" is FLO's own stock; marketplace sellers are 5 digits. On 'canta' 14 of 24 rows were FLO and 10 were marketplace across 10152, 10179, 10243, 10410, 10476, 10719 and 10779 |
| price / original_price / discount_rate | search and category cards | JSON numbers in TRY: 3499.9 from 4999.9 with discount_rate 30 |
| stock_message | product/detail only | "1.000 adetten az" - FLO's own Turkish string, where the dot is a thousands separator, so this means fewer than one thousand |
seller_id is an integer on search and category/products but a string inside the seller{} object on product/detail. Product ids also retire: 101465072, which still appears in older FLO links, now returns NOT_FOUND because flo.com.tr answers 404 for it.
What addresses a product here, and what a size row carries
Measured on a search, a category browse, a product opened by URL, a product asked for by id and a category slug that does not exist.
This one cost us a defect. product/detail used to accept the product id and could never resolve it: the shop routes on the full page slug, the trailing digits are not an address on their own, and the shop's own search does not index them either. The id was the one input guaranteed to fail. The URL is now the required parameter — and every search and category row already carries it, so nothing is lost but the trap.
Opening one trainer returned sizes ranging from a single pair left to well over a thousand, each with its own barcode. That is the difference between 'available' and 'available enough to build on'.
Search and category cards come back with the size list and its stock attached, which is unusual — most shops make you open the product for it. It is what makes enumerating a footwear category by size affordable here.
Every card says whether FLO itself or a marketplace merchant is behind the listing, so first-party stock can be isolated before any price comparison.
Browsing needs FLO's own category slug and there is no endpoint that lists them; a slug that does not exist returns a not-found rather than an empty page. Take the slug out of a category URL. It is a small gap and worth knowing before you write the loop.
What people build with FLO
The jobs this data is most often used for.
endpoints
credit per call
Pricing teams call search to track FLO shoe prices and campaigns.
Catalog-enrichment tools use product/detail to fill listings with images and options.
Market analysts use category/products to monitor a footwear segment.
What FLO data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 184 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/flo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nike"}'import requests
r = requests.post(
"https://api.reefapi.com/flo/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "nike"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up FLO.
Get a free key →Why does product/detail return NOT_FOUND for a FLO id that looks valid?▾
Because FLO retires product ids when a colorway is discontinued, and the page then 404s. A measured lookup on 101465072, an id that appears in older Nike Revolution links, returned NOT_FOUND with the message that flo.com.tr answered 404. The reliable pattern is to take the url straight off a live search or category row and pass that, which resolved on the first try.
How does a FLO size sku relate to the product id?▾
The size sku is the product id with a 3-digit size index appended. Product 101792825 has skus 101792825001 through 101792825008 covering EU 35.5 to 40. The index order does not follow size order, so read the size field rather than inferring it from the suffix. Each size also carries its own 12-digit barcode.
Are FLO prices Turkish-formatted?▾
The prices are not. price, special_price, original_price and discount_rate are plain JSON numbers with currency "TRY", so 3499.9 is what it looks like. The one Turkish-formatted value in the payload is stock_message on product/detail: "1.000 adetten az" means fewer than one thousand units, because the dot there is a thousands separator, not a decimal point.
Are different colors of the same shoe variants or separate products?▾
Separate products. colors[] gives you the sibling colorways, and each one has its own sku, its own /urun/ URL and its own stock - the measured Nike Court Borough had 8 of them. If you are deduplicating a catalogue, colors[] is the join key; there is no single parent id sitting above them.
How do I tell FLO's own stock from a marketplace seller?▾
seller_type is "flo" or "marketplace", and seller_id 10000 is FLO itself. Marketplace sellers get 5-digit ids. The mix varies sharply by category: footwear queries came back entirely FLO-owned across 48 rows, while 'canta' returned 10 marketplace rows out of 24 spread across seven different sellers.
Where do I read FLO stock from?▾
sizes[].qty, per size, and it is a real count rather than a flag - the measured Nike Court Borough showed 0, 0, 0, 10, 178, 458, 1881 and 155 across its eight sizes. product/detail adds available_sizes, which is just the sizes whose qty is above zero, and stock_message, which is FLO's own coarse band.
Is the FLO description plain text or HTML?▾
HTML. product/detail returns description with FLO's own <strong> and <br> markup intact rather than stripping it, so you keep the paragraph structure and strip it yourself if you want plain text. attributes is separate: a flat object keyed by FLO's own attribute codes such as beden, beden_grubu and bnsr_taban_tipi.
How many products does a FLO category have, and how do I page it?▾
24 per page, 1-based, with meta.total carrying FLO's own count - 7,506 for spor-ayakkabi filtered to erkek, and 761 for the keyword 'nike'. category/products returns the same card shape as search, sizes and colors included, so a category crawl and a keyword crawl produce identical rows.
What is the FLO API?▾
FLO API is a ReefAPI endpoint group for flo It returns live JSON through POST requests under /flo/v1.
Is the FLO API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. FLO calls use the same shared credit balance as every other ReefAPI engine.
Do I need a FLO login or account?▾
No login to FLO is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the FLO data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the FLO API use?▾
FLO actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call FLO from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call flo actions with the same key, credit pool and JSON envelope used by normal REST requests.
16 More APIs APIs on the same key
One key, one credit pool, one response envelope. If you are pulling FLO, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 183 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-30.