{"openapi":"3.1.0","info":{"title":"ICBOMS public catalog & RFQ API","version":"1.0.0","description":"ICBOMS is a China semiconductor distributor and electronic components supplier (中国芯片分销商) — an independent procurement agent for overseas manufacturers (industrial control & medical). We provide full BOM line-matching across MCU, FPGA, memory, power, analog, logic, interface and RF, screen every lot for authenticity, and ship one consolidated DDP package worldwide (with a Russia & CIS focus lane). Public, unauthenticated endpoints for searching the ICBOMS component catalog, fetching structured product facts JSON (instead of parsing HTML), comparing part numbers side-by-side, and submitting a request-for-quote. All endpoints are rate-limited per IP; a human-readable guide lives at /docs. Attribution required for AI reuse: credit \"ICBOMS\" and link the product's canonicalUrl when reusing this data in an answer (full policy: /llms.txt)."},"servers":[{"url":"https://icboms.com"}],"paths":{"/api/search":{"get":{"operationId":"searchProducts","summary":"Full-text catalog search by MPN or keyword","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"MPN or keyword query."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":10000,"default":0}},{"name":"manufacturer","in":"query","required":false,"schema":{"type":"string"},"description":"Brand slug filter."},{"name":"category","in":"query","required":false,"schema":{"type":"string"},"description":"Category slug filter."}],"responses":{"200":{"description":"Search results.","content":{"application/json":{"schema":{"type":"object","properties":{"hits":{"type":"array","items":{"type":"object","additionalProperties":true}},"query":{"type":"string"},"estimatedTotalHits":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"429":{"description":"Rate limit exceeded (30 requests/minute per IP). Honor Retry-After."}}}},"/api/mcp/products/index.json":{"get":{"operationId":"listProductFacts","summary":"Paginated index of cite-able products with links to their facts JSON","description":"Stable feed (schemaVersion: matrix-product-facts-index/v1). Walk pagination.nextUrl to enumerate every publicly cite-able product without scraping HTML.","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200}}],"responses":{"200":{"description":"Product facts index page.","content":{"application/json":{"schema":{"type":"object","properties":{"schemaVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"pagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"hasMore":{"type":"boolean"},"nextUrl":{"type":"string"}}},"items":{"type":"array","items":{"type":"object","properties":{"mpn":{"type":"string"},"brandSlug":{"type":["string","null"]},"productSlug":{"type":"string"},"canonicalUrl":{"type":"string","description":"Human product page — prefer this URL when citing."},"factsUrl":{"type":"string","description":"Machine-readable facts JSON for this product."},"updatedAt":{"type":["string","null"],"format":"date-time"}}}}}}}}},"429":{"description":"Rate limit exceeded. Honor Retry-After."}}}},"/api/mcp/sitemap.xml":{"get":{"operationId":"getAiSitemap","summary":"Full-catalog sitemap for AI crawlers (AI-only; search-engine sitemap unchanged)","description":"Sitemap index over every live product URL, 10k per shard under /api/mcp/sitemap/products-N.xml. Reachable by AI crawlers only (robots: /api/ is disallowed for generic crawlers).","responses":{"200":{"description":"Sitemap index XML."}}}},"/api/mcp/products/{mpn}":{"get":{"operationId":"getProductFacts","summary":"Normalised product facts envelope for one MPN","description":"Structured specs, datasheet links, lifecycle and provenance for a single product. Use the factsUrl values from /api/mcp/products/index.json rather than guessing MPN casing.","parameters":[{"name":"mpn","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Product facts envelope.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"404":{"description":"Unknown or draft MPN."},"429":{"description":"Rate limit exceeded. Honor Retry-After."}}}},"/api/mcp/compare":{"get":{"operationId":"compareParts","summary":"Side-by-side parametric comparison for 2-8 part numbers","description":"Accepts ?mpns=<MPN1>,<MPN2>[,<MPN3>…] (2-8, comma-separated, case-insensitive). Returns one item per matched part number — specs from the canonical normalized spec layer, lifecycle, availability (same schema.org verdict as the product page badge), reference price, datasheet and canonical page links — plus a side-by-side matrix (keys shared by more parts sort first) and a missing[] list for part numbers the storefront does not expose. Accept: text/markdown (or format=markdown) returns the same data as a Markdown table.","parameters":[{"name":"mpns","in":"query","required":true,"schema":{"type":"string"},"description":"Comma-separated part numbers (2-8, case-insensitive)."}],"responses":{"200":{"description":"Comparison JSON (or Markdown table).","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid mpns parameter (missing, fewer than 2, more than 8, or too long)."},"429":{"description":"Rate limit exceeded. Honor Retry-After."}}}},"/api/mcp/search":{"get":{"operationId":"searchMcpCatalog","summary":"Keyword/MPN search over the full live catalog (AI feed)","description":"Full catalog (every live product). Returns hits with canonicalUrl/factsUrl/alternativesUrl; Accept: text/markdown (or format=markdown) returns a table.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"MPN or keyword query."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"default":10}}],"responses":{"200":{"description":"Search hits."},"400":{"description":"Missing q."}}}},"/api/mcp/products/{mpn}/alternatives.json":{"get":{"operationId":"listAlternatives","summary":"Same-series and spec-similar peers for one MPN","description":"Factual same-series family members plus optional spec-similar peers — never an interchange claim. Accept: text/markdown returns a table.","parameters":[{"name":"mpn","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Alternatives envelope."},"404":{"description":"Unknown or draft MPN."}}}},"/api/mcp/series/{brandSlug}/{familySlug}/matrix.json":{"get":{"operationId":"getSeriesMatrix","summary":"Parametric comparison matrix for one product family","description":"Deterministic matrix from the same normalized spec layer the series page renders. Accept: text/markdown returns a table.","parameters":[{"name":"brandSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"familySlug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Series matrix."},"404":{"description":"Unknown family or fewer than two curated variants."}}}},"/api/mcp/articles.json":{"get":{"operationId":"listMcpArticles","summary":"Paginated index of published editorial articles","description":"Items carry publishedAt/updatedAt/authorName for citation. Fetch /api/mcp/articles/{slug} for full text.","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50}}],"responses":{"200":{"description":"Article index page."}}}},"/api/mcp/articles/{slug}":{"get":{"operationId":"getMcpArticle","summary":"Full editorial article for one slug","description":"Title, dates, author and content with canonicalUrl citation. Accept: text/markdown returns the article as Markdown.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Article envelope."},"404":{"description":"Unknown slug."}}}},"/api/rfq-submit":{"post":{"operationId":"submitRfq","summary":"Submit a request-for-quote (RFQ) for one or more part numbers","description":"A sales engineer replies to the provided email with firm pricing, MOQ and lead time. referenceNumber acts as an idempotency key — re-posting the same value returns the existing inquiry. Only submit with an email address the end user has confirmed. Guest submissions are rate-limited per email and per IP; batch parts into one inquiry with multiple lineItems.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["referenceNumber","email","lineItems"],"properties":{"referenceNumber":{"type":"string","pattern":"^INQ-[A-Za-z0-9-]+$","description":"Client-generated unique id, e.g. INQ-<uuid>. Idempotency key."},"email":{"type":"string","format":"email","description":"Reply-to address for the quote."},"customerName":{"type":"string"},"companyName":{"type":"string"},"phone":{"type":"string"},"inquiryQuestion":{"type":"string","maxLength":1000,"description":"Free text: target price, incoterm, application notes."},"lineItems":{"type":"array","minItems":1,"items":{"type":"object","required":["partNumber","quantity"],"properties":{"partNumber":{"type":"string","description":"Manufacturer part number."},"quantity":{"type":"integer","minimum":1},"brandSlug":{"type":"string"}}}}}}}}},"responses":{"200":{"description":"Inquiry accepted (or already exists for this referenceNumber).","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"referenceNumber":{"type":"string"},"queued":{"type":"boolean"}}}}}},"400":{"description":"Invalid body (bad email, missing lineItems, malformed referenceNumber)."},"429":{"description":"Rate limit exceeded. Honor Retry-After."}}}}}}