Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Dafiti API page →
E-commerce & Marketplaces

Dafiti API & Scraper

The Dafiti API turns Latin America's largest fashion marketplace into clean JSON in four actions.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

search takes a keyword and returns rows with sku, title, brand, colour, url, image, both prices, the struck-through list price, the discount, the category path, whether the tile was a paid placement and whether Dafiti itself is the seller; category walks a whole department by its URL path with the same filters; product returns one garment in full, adding the rating and review count, the attribute table, the images, the other colourways and the full size list; availability is the one built for clothing, returning size-level stock for up to 10 products in a single call, where each size carries its own variant code, whether it is buyable, how many units remain when Dafiti publishes that, and who ships it. Clothing is not one stock number: a shoe listed in 12 sizes is 12 separately buyable variants, and this API returns them one row per size instead of a single in-stock flag. Brazilian shops quote two prices side by side and this API keeps them apart: price_pix_brl is the cash price the storefront headlines and price_card_brl is what the same item costs on a card, exactly 10 percent higher wherever the cash discount applies, with list_price_brl holding the struck-through original and discount_pct computed from them. Those fields were checked against an independent read of the product page on 20 products: the selling price matched 20 of 20, the card price 14 of 14, the list price 14 of 14, and the size list and which sizes were buyable matched 14 of 14. Filters bite and the numbers are published: on tenis, 34,678 results unfiltered, 857 for Nike, 9,763 for the colour Preto, 14,135 in size 40, 4,615 sold by Dafiti itself, 9,783 with free shipping, 6,743 between 100 and 200 BRL, and combining Nike with Preto and size 40 narrows it to 104. Two storefronts are live, Brazil in BRL and Colombia in COP, and they differ in what they publish, which is documented rather than papered over. No Dafiti account needed - one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

What each storefront publishes

Dafiti's Brazilian and Colombian storefronts are not the same site in two languages, and they do not publish the same fields. This is the measured difference, so you can decide before you build.

FieldBrazil (br)Colombia (co)
CurrencyBRLCOP
Size-level availabilityYes - every size with its own variant code and buyable flagNot published anywhere
Units remaining per sizeYes, up to 11; above that stock_at_least: 11Not published
Cash price vs card priceBoth, in separate fieldsOne price
List price and discountYes, when the item is discountedYes, on 184 of 189 rows
Colour on search rows100% of rowsNot published (0 of 189)
Seller on search rowssold_by_dafiti on every rowNot published (0 of 189)
Result total and last pageYes - 34,678 results, 723 pages for tenisNeither; page until a page is empty
Rating and review countYes, on productNot published
availability actionYes, up to 10 products per callRefused, and says why

Argentina and Chile are not options. Measured 2026-09-23: dafiti.com.ar now serves a fashion blog with no catalogue and dafiti.cl a farewell page announcing the store's closure, so country=ar and country=cl are rejected with that reason rather than returning an empty or irrelevant result.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/dafiti/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "tenis",
    "country": "br"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "dafiti",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1684,
    "record_count": 59,
    "bytes": 983218,
    "cache_hit": false,
    "stop_reason": "limit_reached",
    "total_results": 34603,
    "last_page": 721,
    "country": "br",
    "sponsored_count": 12,
    "charged_credits": 3,
    "version": "1.0.0"
  },
  "data": {
    "products": [
      {
        "sku": "VI618SHF15ETK",
        "title": "Tênis Feminino Vizzano Cadarço Branco",
        "brand": "Vizzano",
        "color": "Branco",
        "sold_by_dafiti": true,
        "seller": "Dafiti",
        "seller_registered_name": "Dafiti",
        "url": "https://www.dafiti.com.br/Tenis-Feminino-Vizzano-Cadarco-Branco-14960384.html",
        "image": "https://static.dafiti.com.br/p/vizzano-tenis-feminino-vizzano-cadarco-branco-4710-48306941-still-product.jpg",
        "price_pix_brl": 119.99,
        "price_card_brl": 133.32,
        "list_price_brl": 179.9,
        "discount_pct": 33,
        "discount_pct_source": 33,
        "installments": "2x",
        "category_path": [
          "Calçados",
          "Calçados Femininos",
          "Tênis"
        ],
        "sponsored": true,
        "currency": "BRL"
      },
      {
        "sku": "VI618SHF82LZD",
        "title": "Tênis Feminino Vizzano Detalhe Metalizado Branco",
        "brand": "Vizzano",
        "color": "Branco",
        "sold_by_dafiti": true,
        "seller": "Dafiti",
        "seller_registered_name": "Dafiti",
        "url": "https://www.dafiti.com.br/Tenis-Feminino-Vizzano-Detalhe-Metalizado-Branco-15000417.html",
        "image": "https://static.dafiti.com.br/p/vizzano-tenis-feminino-vizzano-detalhe-metalizado-branco-2022-71400051-still-product.jpg",
        "price_pix_brl": 145.99,
        "price_card_brl": 162.21,
        "list_price_brl": 219.9,
        "discount_pct": 34,
        "discount_pct_source": 34,
        "installments": "2x",
        "category_path": [
          "Calçados",
          "Calçados Femininos",
          "Tênis"
        ],
        "sponsored": true,
        "currency": "BRL"
      },
      {
        "sku": "VI618SHF85EMW",
        "title": "Tênis Feminino Vizzano Casual Bege",
        "brand": "Vizzano",
        "color": "Bege",
        "sold_by_dafiti": true,
        "seller": "Dafiti",
        "seller_registered_name": "Dafiti",
        "url": "https://www.dafiti.com.br/Tenis-Feminino-Vizzano-Casual-Bege-14960214.html",
        "image": "https://static.dafiti.com.br/p/vizzano-tenis-feminino-vizzano-casual-bege-0503-41206941-still-product.jpg",
        "price_pix_brl": 144.99,
        "price_card_brl": 161.1,
        "list_price_brl": 219.9,
        "discount_pct": 34,
        "discount_pct_source": 34,
        "installments": "2x",
        "category_path": [
          "Calçados",
          "Calçados Femininos",
          "Tênis"
        ],
        "sponsored": true,
        "currency": "BRL"
      }
    ],
    "total_results": 34603,
    "page": 1,
    "last_page": 721,
    "country": "br",
    "currency": "BRL",
    "facets": {
      "genders": [
        "Feminino",
        "Masculino",
        "Menina"
      ],
      "categories": [
        "Bolsas e Acessórios",
        "Calçados",
        "Esporte"
      ],
      "sizes": [
        "10",
        "12",
        "13"
      ],
      "brands": [
        "!ou",
        "Acostamento",
        "Acostamento Essentials"
      ],
      "colors": [
        "Amarelo",
        "Azul",
        "Azul Marinho"
      ],
      "sellers": [
        "10K Sports",
        "Abreus Jeans",
        "Acostamento Oficial"
      ]
    },
    "sponsored_count": 12,
    "no_match": false,
    "query": "tenis"
  }
}
Actions

What the Dafiti API does

ActionDescriptionConcrete use caseKey params
searchSearch Dafiti's fashion catalogue by keyword. Every row carries the brand, the colour, the seller, the cash price AND the struck-through list price, the discount, and whether the tile was a paid placement. A query that matches nothing returns an honest empty result rather than the padded grid the site shows in its place.Pricing teams call search to search Dafiti's fashion catalogue by keyword.query, country, page, sort, brand, ...
categoryBrowse a Dafiti category page (e.g. 'roupas-femininas/vestidos') with the same row shape and the same filters as search. Use it to walk a catalogue rather than guess keywords.Marketplace operators call category to get browse a Dafiti category page (e.g.category_path, country, page, sort, brand, ...
productOne product in full: prices (cash and card), the struck-through list price, the discount, brand, colour, marketplace seller, rating and review count, the attribute table, the images, the other colourways — and on br the full size list with a remaining-stock integer per size.Catalog enrichment teams call product to get one product in full.sku, country
availabilitySIZE-LEVEL STOCK for up to 10 products in ONE call, from the storefront's own 3.7 KB JSON: per size, the variant SKU, whether it is buyable, how many units remain, and who ships it. Brazil only — the Colombian storefront publishes no stock anywhere. This is the cheap call: use it to re-check stock, and `product` only when you need the full record.Retail analysts call availability to get sIZE-LEVEL STOCK for up to 10 products in ONE call, from the storefront's own 3.7 KB JSON.skus, country
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/dafiti/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"tenis","country":"br"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.dafiti.search with {"query":"tenis","country":"br"}.
Use cases

Who uses this API and why

  • Fashion price trackers store the cash price and the card price as separate series, so a card number never overwrites the headline price a shopper actually sees.
  • Brands check size availability per colourway with availability, ten SKUs at a time, and see which sizes have sold out rather than whether the style is merely in stock.
  • Marketplace sellers reprice against Dafiti and read sold_by_dafiti to tell Dafiti's own stock from a third party's before matching a price.
  • Discount monitors watch list_price_brl against price_pix_brl to catch a real markdown, and ignore rows where the struck-through price equals the selling price.
  • Apparel dataset builders walk categories in both Brazil and Colombia and get brand, colour, category path and images on every Brazilian row.
FAQ

Questions developers ask before integrating

Does this really return stock per size, or just whether the product is in stock?

Per size. A shoe listed in 12 sizes comes back as 12 rows, each with its own variant code (for example KO992SHF67UFS-53 for size 35), an in_stock flag, the delivery type and the seller who ships it. sizes_in_stock and sizes_total sit next to the list, so on the sample product 5 of 7 sizes were buyable. The size names and which sizes were buyable were checked against the product page itself on 14 products and matched on 14 of 14. This is Brazil only; the Colombian storefront does not publish size names or stock at all, and says so instead of guessing.

Why is stock_qty sometimes null when the size is in stock?

Because Dafiti stops counting at 11. Measured across 478 size-variants on 59 products, every quantity it publishes is between 0 and 11 and 250 of them are exactly 11, so 11 means 'eleven or more', not eleven. When that happens you get stock_qty: null, stock_at_least: 11 and stock_capped: true; when Dafiti really does publish an exact figure, 0 through 10, it is in stock_qty. For the same reason stock_total is null whenever any size is capped and stock_total_at_least carries the lower bound - summing a ceiling would invent a number Dafiti never published.

Why are there two prices on every Brazilian product?

Because Brazilian shops quote two. price_pix_brl is the cash price the storefront headlines, price_card_brl is what the same item costs on a card, and wherever the cash discount applies the card price is exactly 10 percent higher - 144.43 against 129.99 on the sample product. list_price_brl holds the struck-through original (199.99) and discount_pct is computed from the prices, with the site's own badge kept separately in discount_pct_source so you can see if they ever disagree. Where a product has no cash discount the two prices are equal. All three were verified against the product page's own machine-readable values on 20 products with no mismatches.

Do the filters and sorts really apply?

Yes, and only the ones Dafiti applies are offered. Measured on tenis on 2026-09-23: 34,678 results unfiltered, 857 for Nike, 9,763 for the colour Preto, 14,135 in size 40, 4,615 sold by Dafiti itself, 9,783 with free shipping, 6,743 between 100 and 200 BRL, and combining Nike with Preto gives 219 and adding size 40 gives 104. Five sorts are offered - relevance, price_asc, price_desc, discount and newest - and each returns a different first row and a different price ladder. Dafiti also accepts a popularity order and then ignores it, returning the identical 20 products in the identical positions as the default, so that one is deliberately not offered here. Every search response also carries a facets block listing the brands, colours, sizes and sellers this particular query accepts, spelled the way the filter wants them, so you never have to guess.

What happens if my keyword matches nothing?

You get an empty result with no_match: true, not a page of unrelated products. This matters because Dafiti answers a keyword that matches nothing with a normal-looking page of 48 products it picked for you, and reports a result total for them. A search for a nonsense string returns zero rows here, and a real search is never mistaken for one.

Which countries can I query?

Brazil (br, BRL) and Colombia (co, COP). Those are the two storefronts that still trade. Dafiti is often listed as a four-country marketplace, but as of 2026-09-23 dafiti.com.ar serves a fashion blog with no catalogue and dafiti.cl serves a page announcing the Chilean store's closure, so country=ar and country=cl are rejected with that explanation. The two live storefronts publish different fields and the difference is documented in the table above rather than hidden behind an average.

Does the API tell me when Dafiti is not the seller?

Yes. Every Brazilian row carries sold_by_dafiti as a boolean, and product and availability return the seller Dafiti's own page credits for the item, such as adidas or Olympikus. Where an item is listed by an individual trader rather than a company, that person's registered personal name is withheld - Dafiti does not show it on the product page either - and you still get sold_by_dafiti: false so you know it is not first-party stock.

What does Dafiti NOT publish?

No review texts, only an average and a count, and only in Brazil. No seller ratings and no seller ids. No price or stock history. No size-level stock, no size names, no colour and no seller on search rows in Colombia, and no result total or last page there either. Sponsored placements are not hidden: they are returned as normal rows flagged sponsored, 13 of 58 on one tenis search, so you can drop them yourself if a ranking study needs to.

What is the Dafiti API?

Dafiti API is a ReefAPI endpoint group for latin america's biggest fashion marketplace: size-by-size availability, brand, colour, the discount against the list price and the marketplace seller. It returns live JSON through POST requests under /dafiti/v1.

Is the Dafiti API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Dafiti calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Dafiti login or account?

No login to Dafiti 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 Dafiti 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 Dafiti API use?

Dafiti actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Dafiti from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call dafiti actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / dafiti

Dafiti

Latin America's biggest fashion marketplace: size-by-size availability, brand, colour, the discount against the list price and the marketplace seller.

base /dafiti/v14 endpoints
post/dafiti/v1/category3 credits

Browse a Dafiti category page (e.g. 'roupas-femininas/vestidos') with the same row shape and the same filters as search. Use it to walk a catalogue rather than guess keywords.

ParameterAllowed / rangeDescription
category_pathrequiredThe category path exactly as it appears in a Dafiti URL, without the host and without leading or trailing slashes. A path the site does not have returns NOT_FOUND, not an empty page.
country = broptionalbr · coWhich Dafiti storefront to read. Only two of the four historical storefronts are still shops: br (dafiti.com.br, prices in BRL) and co (dafiti.com.co, prices in COP). They are different front-ends with different field coverage — size-level stock exists on br only.
sort = relevanceoptionalrelevance · price_asc · price_desc · discount · newestResult order. Only the orders Dafiti actually applies are accepted — it also takes a 'popularity' order and then ignores it (measured: identical to the default), so that one is deliberately not offered.
page = 1optional1–500Result page. br serves ~58 products per page, co ~48. The source stops paging at its own last page, reported as meta.extra.last_page.
limitoptional1–60Cap the rows returned from the page (1-60). The source's page size is fixed, so this trims rather than fetching fewer.
brandoptionalFilter to one brand, spelled as `facets.brands` spells it (e.g. 'nike', 'adidas'). br only.
coloroptionalFilter to one colour, spelled as `facets.colors` spells it ('Preto', 'Branco', 'Azul'). br only.
sizeoptionalFilter to products available in one size, as `facets.sizes` spells it ('40', 'M', 'PP'). br only.
selleroptionalFilter to one marketplace seller, as `facets.sellers` spells it. 'Dafiti' means Dafiti's own stock. br only.
price_minoptional0–Lowest price to include, in the storefront's own currency.
price_maxoptional0–Highest price to include, in the storefront's own currency.
free_shippingoptionalOnly products Dafiti ships free. Measured to bite: 'tenis' goes from 34 667 to 9 779 results. br only.
Try in playground →
post/dafiti/v1/product3 credits

One product in full: prices (cash and card), the struck-through list price, the discount, brand, colour, marketplace seller, rating and review count, the attribute table, the images, the other colourways — and on br the full size list with a remaining-stock integer per size.

ParameterAllowed / rangeDescription
skurequiredThe Dafiti config SKU from a search row ('KO992SHF67UFS'). A variant SKU ending in '-53' is accepted and resolved to its parent.
country = broptionalbr · coWhich Dafiti storefront to read. Only two of the four historical storefronts are still shops: br (dafiti.com.br, prices in BRL) and co (dafiti.com.co, prices in COP). They are different front-ends with different field coverage — size-level stock exists on br only.
Try in playground →
post/dafiti/v1/availability1 credit

SIZE-LEVEL STOCK for up to 10 products in ONE call, from the storefront's own 3.7 KB JSON: per size, the variant SKU, whether it is buyable, how many units remain, and who ships it. Brazil only — the Colombian storefront publishes no stock anywhere. This is the cheap call: use it to re-check stock, and `product` only when you need the full record.

ParameterAllowed / rangeDescription
skusrequired1-10 Dafiti config SKUs. Ten SKUs in one call cost one credit, where ten `product` calls would cost more and move 78x the bytes.
country = broptionalbrBrazil only: the Colombian storefront has no stock endpoint and no published size names.
Try in playground →