officemax.ro
Office Max B2B
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 6 · Act 1 · Transact 0 · Score: Not yet scored
Tool inspector
search_products
Search the Office Max B2B catalog by text and/or category, with attribute, brand, price, availability and quantity filters. Returns product summaries with one key set (null = does not apply): id (sku), gtin, name, brand_id, category_id, url, representation_url, price, price_note, stock and dispatch term. Every row carries source: "erp" (our catalog) or "extended" (special-order supplier stock, found only by exact mpn/gtin - free text does not search it). Prices are the generic list price in RON (meta.price_basis generic_list), never a negotiated price. Read-only.
Page: /
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
q |
string | no | Free-text search term (name, brand, code), max 200 characters. Omit to browse. |
category |
integer | no | Category id (from get_categories). Required when facets are used. |
sort |
string | no | name, price_asc, price_desc, or dispatch (needs qty; ranks by who can cover that quantity soonest). Omitted: relevance on a text search, catalog order otherwise. |
facets |
object | no | {facet_key: [value, ...]} using the EXACT keys and values from get_category_facets. Values OR-ed within a key, keys AND-ed. Needs category. |
brand_ids |
array | no | Brand ids to restrict to (OR-ed), from get_category_facets. |
price_min |
number | no | Lowest acceptable unit price in RON, inclusive. Net unless vat_included is true. |
price_max |
number | no | Highest acceptable unit price in RON, inclusive. A budget quoted with VAT MUST set vat_included true. |
vat_included |
boolean | no | true when price_min/price_max are VAT-inclusive. Default false (net, the B2B convention). |
sourcing |
string | no | The stock filter. any_stock = orderable now, from any stock, in both catalogs (Office Max rows with stock and extended offers, never no-stock listings); no_stock = no stock. For speed read fastest_lead_days, or pass qty with within_days (term_days). NOT the row field stock.availability, which says whether you can get it. |
qty |
integer | no | Units the buyer needs. Each row then says if that quantity is coverable and its dispatch term (term_days is authoritative). Needed for sort=dispatch. |
min_qty |
integer | no | Only products with at least this many units in stock, any dispatch term (extended offers: the band's lower bound). |
within_days |
integer | no | Dispatch window in WORKING DAYS (carrier hand-off, transit excluded). Needs qty. On its own a window only reports (can_fulfill_within); to act on it add fulfillable_only=true (drop) or sort=dispatch (rank). For «delivered within N days» use arrive_within_days instead (not both). |
arrive_within_days |
integer | no | The buyer's ARRIVAL window in WORKING DAYS (delivered within N days). Needs qty; use either this or within_days, not both. Converted server-side to a dispatch window with the published transit estimate: within_days = arrive_within_days - transit days_max (meta.filters echoes both). An estimate, never a guaranteed date. On its own a window only reports (can_fulfill_within); to act on it add fulfillable_only=true (drop) or sort=dispatch (rank). |
fulfillable_only |
boolean | no | Return ONLY rows that can actually cover qty - inside within_days if given, otherwise at all. Needs qty. Without it qty/within_days only RANK, and only under sort=dispatch: with sort=price_asc the cheapest rows lead even when they hold 2 of the 5 units asked for. Leave it off to keep near-misses visible with their real terms. |
mpn |
string | no | Manufacturer part number, exact, case-insensitive. Filters our catalog by code and looks it up in the EXTENDED catalog (which then ignores q). |
gtin |
string | no | Barcode (EAN/UPC/GTIN), 8-14 digits, exact; pass it as a STRING so leading zeros survive. Filters our catalog and the extended one. |
brand_name |
string | no | Brand NAME as text (e.g. "Philips"), exact, case-insensitive; narrows BOTH catalogs. Different from brand_ids, which filters by id. |
catalog_scope |
string | no | Which source to search: all (default), erp (our catalog only) or extended (supplier stock only). meta.extended says what was searched and why not. |
page |
integer | no | 1-based page number. |
per_page |
integer | no | Products per page, 1-20 (default 5). Ask for more pages rather than a bigger page. |
Raw JSON schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Free-text search term (name, brand, code), max 200 characters. Omit to browse."
},
"category": {
"type": "integer",
"minimum": 1,
"description": "Category id (from get_categories). Required when facets are used."
},
"sort": {
"type": "string",
"enum": [
"name",
"price_asc",
"price_desc",
"dispatch"
],
"description": "name, price_asc, price_desc, or dispatch (needs qty; ranks by who can cover that quantity soonest). Omitted: relevance on a text search, catalog order otherwise."
},
"facets": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "{facet_key: [value, ...]} using the EXACT keys and values from get_category_facets. Values OR-ed within a key, keys AND-ed. Needs category."
},
"brand_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"description": "Brand ids to restrict to (OR-ed), from get_category_facets."
},
"price_min": {
"type": "number",
"minimum": 0,
"description": "Lowest acceptable unit price in RON, inclusive. Net unless vat_included is true."
},
"price_max": {
"type": "number",
"minimum": 0,
"description": "Highest acceptable unit price in RON, inclusive. A budget quoted with VAT MUST set vat_included true."
},
"vat_included": {
"type": "boolean",
"default": false,
"description": "true when price_min/price_max are VAT-inclusive. Default false (net, the B2B convention)."
},
"sourcing": {
"type": "string",
"enum": [
"any_stock",
"no_stock"
],
"description": "The stock filter. any_stock = orderable now, from any stock, in both catalogs (Office Max rows with stock and extended offers, never no-stock listings); no_stock = no stock. For speed read fastest_lead_days, or pass qty with within_days (term_days). NOT the row field stock.availability, which says whether you can get it."
},
"qty": {
"type": "integer",
"minimum": 1,
"description": "Units the buyer needs. Each row then says if that quantity is coverable and its dispatch term (term_days is authoritative). Needed for sort=dispatch."
},
"min_qty": {
"type": "integer",
"minimum": 1,
"description": "Only products with at least this many units in stock, any dispatch term (extended offers: the band's lower bound)."
},
"within_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Dispatch window in WORKING DAYS (carrier hand-off, transit excluded). Needs qty. On its own a window only reports (can_fulfill_within); to act on it add fulfillable_only=true (drop) or sort=dispatch (rank). For «delivered within N days» use arrive_within_days instead (not both)."
},
"arrive_within_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "The buyer's ARRIVAL window in WORKING DAYS (delivered within N days). Needs qty; use either this or within_days, not both. Converted server-side to a dispatch window with the published transit estimate: within_days = arrive_within_days - transit days_max (meta.filters echoes both). An estimate, never a guaranteed date. On its own a window only reports (can_fulfill_within); to act on it add fulfillable_only=true (drop) or sort=dispatch (rank)."
},
"fulfillable_only": {
"type": "boolean",
"default": false,
"description": "Return ONLY rows that can actually cover qty - inside within_days if given, otherwise at all. Needs qty. Without it qty/within_days only RANK, and only under sort=dispatch: with sort=price_asc the cheapest rows lead even when they hold 2 of the 5 units asked for. Leave it off to keep near-misses visible with their real terms."
},
"mpn": {
"type": "string",
"maxLength": 40,
"description": "Manufacturer part number, exact, case-insensitive. Filters our catalog by code and looks it up in the EXTENDED catalog (which then ignores q)."
},
"gtin": {
"type": "string",
"description": "Barcode (EAN/UPC/GTIN), 8-14 digits, exact; pass it as a STRING so leading zeros survive. Filters our catalog and the extended one."
},
"brand_name": {
"type": "string",
"maxLength": 100,
"description": "Brand NAME as text (e.g. \"Philips\"), exact, case-insensitive; narrows BOTH catalogs. Different from brand_ids, which filters by id."
},
"catalog_scope": {
"type": "string",
"enum": [
"erp",
"all",
"extended"
],
"description": "Which source to search: all (default), erp (our catalog only) or extended (supplier stock only). meta.extended says what was searched and why not."
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "1-based page number."
},
"per_page": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 5,
"description": "Products per page, 1-20 (default 5). Ask for more pages rather than a bigger page."
}
}
}
Similar websites
cleardose-webmcp-demo.netlify.app
See the ClearDose WebMCP use case, shared Vue and Pinia architecture, demo workflow, source repository, and submission readiness.
4over4.com
4OVER4.COM prints 1,000+ custom products on 60+ paper stocks in Queens, with same-day shipping on most orders and 150,000+ businesses served since 1999.
camdentools.com
Construction tools and equipment
autolab.run
Super intelligence for car lovers. A WebMCP vehicle configurator, an agentic owner's guide with a live digital twin, and the 3D creation engine that measures th…