Utilities & AI

Barcode Lookup API API

The Barcode Lookup API resolves UPC, EAN and GTIN codes as clean JSON.

7 actionsLive JSON1,000 free 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.

The primary lookup endpoint returns a product by barcode with GTIN, check-digit validity, issuing country, title, brand and category, and you can batch, search, look up by brand, prefix or MPN, and validate a code. It is built for retail, inventory and catalog-enrichment tools that need product identity from a barcode. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/barcode/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "nutella"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "barcode",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 16018.7,
    "record_count": 5,
    "bytes": 20424,
    "cache_hit": false,
    "method": "open_data_multi_source (off+upcitemdb-web-scrape)",
    "query": "nutella",
    "source": "upcitemdb",
    "page": 1,
    "page_size": 20,
    "has_more": true,
    "count": 2673,
    "next_page": 2
  },
  "data": {
    "products": [
      {
        "barcode": "[redacted-phone]",
        "ean": "[redacted-phone]",
        "upc": "[redacted-phone]",
        "isbn": null,
        "title": "Nutella & Go! Breadstick  1.9 Oz  (Pack of 12)",
        "brand": "Nutella",
        "model": "80314",
        "mpn": "80314",
        "category": "Snack Foods",
        "category_path": "Food, Beverages & Tobacco > Food Items > Snack Foods",
        "description": "Nutella s uniquely delicious  one-of-a-kind hazelnut and cocoa taste  now with complementary breadstick snacks.",
        "image": "http://pics.drugstore.com/prodimg/484398/450.jpg",
        "images": [
          "http://pics.drugstore.com/prodimg/484398/450.jpg",
          "http://c.shld.net/rpx/i/s/pi/mp/4143/[redacted-phone]?src=http%3A%2F%2Ficdn.tonzof.com%2F3%2F5%2F4%2F[redacted-phone]%2F175757.JPG&d=6f2ba53db11e4672325d38285d44aa1e95268711",
          "http://pics2.ds-static.com/prodimg/484398/300.JPG"
        ],
        "color": "Black",
        "size": null,
        "dimension": "9.6 X 6.8 X 8 inches",
        "weight": "1.4 Pounds",
        "offers": [
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          },
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          },
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          }
        ],
        "store_count": 24,
        "price_lowest": 8.89,
        "price_highest": 63.04,
        "currency": null,
        "upcitemdb_url": "https://www.upcitemdb.com/upc/[redacted-phone]",
        "source": "upcitemdb"
      },
      {
        "barcode": "[redacted-phone]",
        "ean": "[redacted-phone]",
        "upc": "[redacted-phone]",
        "isbn": null,
        "title": "Nutella B-Ready - 6ct/6oz",
        "brand": "Nutella",
        "model": "87880865",
        "mpn": "87880865",
        "category": null,
        "category_path": "",
        "description": "Ready to love Nutella in a whole new way? Meet Nutella B-ready, the deliciously convenient snack that combines a crisp wafer shell and the original and tasty Nutella in one treat. The Nutella B-ready bars features a delicate crunchy wafer shell filled with creamy Nutella and sprinkled with puffed wheat crisps for a satisfying multi-texture experience. It?s the ready-to-enjoy Nutella you know and love, now as the perfect snack for your busiest days. For more than 50 years, Nutella has been delighting chocolate lovers worldwide with its signature creamy texture and authentic hazelnut and cocoa f",
        "image": "https://pics.walgreens.com/prodimg/666724/450.jpg",
        "images": [
          "https://pics.walgreens.com/prodimg/666724/450.jpg",
          "https://target.scene7.com/is/image/Target/GUEST_22b1967e-645b-42b3-b309-04d014fe25b7?wid=1000&hei=1000",
          "https://i5.walmartimages.com/asr/811a8d43-e[redacted-phone]-ae1b3a3439d4.968ad745d15e0a9b483c407a4607c3fa.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff"
        ],
        "color": null,
        "size": null,
        "dimension": null,
        "weight": "0.3",
        "offers": [
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          },
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          },
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          }
        ],
        "store_count": 4,
        "price_lowest": 3.49,
        "price_highest": 13.99,
        "currency": null,
        "upcitemdb_url": "https://www.upcitemdb.com/upc/[redacted-phone]",
        "source": "upcitemdb"
      },
      {
        "barcode": "[redacted-phone]",
        "ean": "[redacted-phone]",
        "upc": "[redacted-phone]",
        "isbn": null,
        "title": "Nutella B-Ready Crispy Wafers 0.7 Ounce (Pack of 36)",
        "brand": "Nutella",
        "model": "1694269",
        "mpn": "1694269",
        "category": null,
        "category_path": "",
        "description": "Nutella B-Ready Crispy Wafers 0.7 Ounce (Pack of 36) A crispy wafer baked to perfection filled with delicious Nutella and sprinkled with wheat crisps. Its soft crispy and convenient. B-Ready is the perfect way to bring a smile to your mid-morning break. Individually wrapped and all for less than 120 calories. Ingredients: HAZELNUT Spread with cocoa 81.5% (sugar palm oil hazelnuts (13%) fat reduced cocoa (7.4%) skimmed milk powder (6.6%) whey powder (milk) emulsifier: lecithin (soy) vanillin wheat flour bakers yeast powdered BARLEY malt extract salt skimmed milk powder emulsifier: lecithin (soy",
        "image": "https://i5.walmartimages.com/asr/60404d26-d[redacted-phone]c6f-cf53bb8bb543.3f637c95bff284229edbc733bd026e38.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff",
        "images": [
          "https://i5.walmartimages.com/asr/60404d26-d[redacted-phone]c6f-cf53bb8bb543.3f637c95bff284229edbc733bd026e38.jpeg?odnHeight=450&odnWidth=450&odnBg=ffffff",
          "http://site.unbeatablesale.com/SCTP1281.JPG",
          "https://cdn3.ykso.co/images/2023/04/14/19/6439e326a7fcf[redacted-phone]a8-transformed.jpeg"
        ],
        "color": "Black",
        "size": "0.7 oz",
        "dimension": null,
        "weight": "4 lb",
        "offers": [
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          },
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          },
          {
            "merchant": "[trimmed-depth]",
            "domain": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "price": "[trimmed-depth]",
            "list_price": "[trimmed-depth]",
            "shipping": "[trimmed-depth]",
            "condition": "[trimmed-depth]",
            "currency": "[trimmed-depth]",
            "availability": "[trimmed-depth]",
            "link": "[trimmed-depth]",
            "updated_t": "[trimmed-depth]"
          }
        ],
        "store_count": 5,
        "price_lowest": 23.37,
        "price_highest": 52.99,
        "currency": null,
        "upcitemdb_url": "https://www.upcitemdb.com/upc/[redacted-phone]",
        "source": "upcitemdb"
      }
    ],
    "query": "nutella",
    "page": 1,
    "page_size": 20,
    "has_more": true,
    "count": 2673,
    "next_page": 2
  }
}
Actions

What the Barcode Lookup API API does

ActionDescriptionConcrete use caseKey params
lookupBarcode → one merged product: title/brand/category/image/description + dimensions/model + retailer offers&prices (UPCitemdb) + nutrition/ingredients/allergens if food (OFF). Includes check-digit validation, GTIN-13 normalization and issuing-country. source=auto merges both.Ops teams call lookup to get barcode → one merged product.barcode, source, off_db
batchUp to 20 barcodes in one call → array of merged products (input order preserved), each with its own source/validation. The competitor caps at 10.Developer tools call batch to get up to 20 barcodes in one call → array of merged products (input order preserved), each with i….barcodes, source, off_db
searchFree-text product-name search across the open databases → product cards with pagination. Optional category scope. (Competitor: keyword/title/category search.)Validation workflows call search to get free-text product-name search across the open databases → product cards with pagination.query, category, off_db, source, page, ...
by_brandAll products for a brand/manufacturer → product cards with pagination. (Competitor: brand + manufacturer search.)Data-quality teams call by_brand to get all products for a brand/manufacturer → product cards with pagination.brand, category, off_db, page, page_size
by_prefixGS1 company-prefix (partial-barcode) search → products whose barcode starts with the given 6+ digits, plus the decoded issuing country. (Competitor: `491234*` partial method.)Ops teams call by_prefix to get gS1 company-prefix (partial-barcode) search → products whose barcode starts with the given 6+….prefix, off_db, page, page_size
by_mpnManufacturer-Part-Number / model lookup → products with that MPN/model (UPCitemdb keyword index over the MPN). Exact model/mpn matches are surfaced first. Closes the competitor's mpn query-method (the proprietary mpn= DB-index isn't on the open tier, but the keyword index resolves real MPNs — Logitech 910-005565, Sony WH-1000XM4, Canon 2727C002 all verified).Developer tools call by_mpn to get manufacturer-Part-Number / model lookup → products with that MPN/model (UPCitemdb keyword ind….mpn, page, page_size
validateValidate + decode a barcode WITHOUT a network call: mod-10 check digit, GTIN type, GTIN-13 normalization, GS1 issuing country, ISBN/Bookland detection. (We EXCEED the competitor here — it has no standalone validate.)Validation workflows call validate to validate + decode a barcode WITHOUT a network call.barcode
Code samples

Call search from your stack

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

Who uses this API and why

  • Inventory apps call lookup to resolve a scanned barcode to a product.
  • Catalog enrichment uses by_brand and by_mpn to match products.
  • Retail systems use validate to check a GTIN's check digit.
FAQ

Questions developers ask before integrating

What is the Barcode Lookup API API?

Barcode Lookup API API is a ReefAPI endpoint group for barcode lookup api It returns live JSON through POST requests under /barcode/v1.

Is the Barcode Lookup API API free to try?

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

Do I need a Barcode Lookup API login or account?

No login to Barcode Lookup API 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 Barcode Lookup API data?

The page example is captured from a live lookup call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Barcode Lookup API API use?

Barcode Lookup API 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 Barcode Lookup API from an AI assistant or MCP client?

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

Is the Barcode Lookup API API a Barcode Lookup API scraper?

It is the managed alternative to a DIY Barcode Lookup API scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same barcode lookup api back as clean JSON.

Why does my Barcode Lookup API scraper keep getting blocked?

Most Barcode Lookup API scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / barcode

Barcode Lookup API

Barcode Lookup API

base /barcode/v17 endpoints
post/barcode/v1/lookup1 credit

Barcode → one merged product: title/brand/category/image/description + dimensions/model + retailer offers&prices (UPCitemdb) + nutrition/ingredients/allergens if food (OFF). Includes check-digit validation, GTIN-13 normalization and issuing-country. source=auto merges both.

ParameterAllowed / rangeDescription
barcoderequiredThe barcode to look up: UPC-A (12), EAN-13 (13), EAN-8 (8), GTIN-14, or ISBN-13 (978/979…). Spaces/dashes are stripped; check digit is validated (mod-10). Aliases: upc, ean, gtin, isbn, code.
source = autooptionalauto · off · upcitemdbWhich open source(s) to query for lookup/batch. 'auto' merges both.
off_db = foodoptionalfood · beauty · petfood · productsWhich Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.
Try in playground →
post/barcode/v1/batch1 credit

Up to 20 barcodes in one call → array of merged products (input order preserved), each with its own source/validation. The competitor caps at 10.

ParameterAllowed / rangeDescription
barcodesrequiredUp to 20 barcodes — a JSON array or a comma-separated string (competitor caps batch at 10; we allow 20). Each is normalized + validated; results preserve input order with per-item source.
source = autooptionalauto · off · upcitemdbWhich open source(s) to query for lookup/batch. 'auto' merges both.
off_db = foodoptionalfood · beauty · petfood · productsWhich Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.
Try in playground →
post/barcode/v1/by_brand1 credit

All products for a brand/manufacturer → product cards with pagination. (Competitor: brand + manufacturer search.)

ParameterAllowed / rangeDescription
brandrequiredBrand or manufacturer name → that brand's products. Aliases: manufacturer, brand_name.
categoryoptionalOptional Open-Food-Facts category tag to scope a search/brand query (e.g. 'sodas', 'chocolate-spreads', 'biscuits').
off_db = foodoptionalfood · beauty · petfood · productsWhich Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.
page = 1optional1–10001-based page number (clamped 1-1000). Page forward with meta.next_page. Note: Open Food Facts throttles deep pages per-IP; the engine retries on a fresh proxy.
page_size = 20optional1–50Results per page (1-50, default 20); out-of-range values are clamped.
Try in playground →
post/barcode/v1/by_prefix1 credit

GS1 company-prefix (partial-barcode) search → products whose barcode starts with the given 6+ digits, plus the decoded issuing country. (Competitor: `491234*` partial method.)

ParameterAllowed / rangeDescription
prefixrequiredA GS1 company prefix — the first 6+ digits of a barcode (the competitor's `491234*` partial-barcode method). Returns products whose barcode starts with these digits + the decoded issuing country.
off_db = foodoptionalfood · beauty · petfood · productsWhich Open-*-Facts sibling DB to search/lookup against when source=off. lookup auto-falls-back food→products when source=auto.
page = 1optional1–10001-based page number (clamped 1-1000). Page forward with meta.next_page. Note: Open Food Facts throttles deep pages per-IP; the engine retries on a fresh proxy.
page_size = 20optional1–50Results per page (1-50, default 20); out-of-range values are clamped.
Try in playground →
post/barcode/v1/by_mpn1 credit

Manufacturer-Part-Number / model lookup → products with that MPN/model (UPCitemdb keyword index over the MPN). Exact model/mpn matches are surfaced first. Closes the competitor's mpn query-method (the proprietary mpn= DB-index isn't on the open tier, but the keyword index resolves real MPNs — Logitech 910-005565, Sony WH-1000XM4, Canon 2727C002 all verified).

ParameterAllowed / rangeDescription
mpnrequiredManufacturer Part Number / model number → matching products. Aliases: model, model_number, part_number. Results whose model/mpn field equals the query are surfaced first (exact_match=true).
page = 1optional1–10001-based page number (clamped 1-1000). Page forward with meta.next_page. Note: Open Food Facts throttles deep pages per-IP; the engine retries on a fresh proxy.
page_size = 20optional1–50Results per page (1-50, default 20); out-of-range values are clamped.
Try in playground →
post/barcode/v1/validatefree

Validate + decode a barcode WITHOUT a network call: mod-10 check digit, GTIN type, GTIN-13 normalization, GS1 issuing country, ISBN/Bookland detection. (We EXCEED the competitor here — it has no standalone validate.)

ParameterAllowed / rangeDescription
barcoderequiredThe barcode to look up: UPC-A (12), EAN-13 (13), EAN-8 (8), GTIN-14, or ISBN-13 (978/979…). Spaces/dashes are stripped; check digit is validated (mod-10). Aliases: upc, ean, gtin, isbn, code.
Try in playground →