Skip to main content
Build a comparison table that keeps supplier offers, brand targets, quantity bands, and currencies separate. /quotes returns the Quotes shown in Amber. Each Quote has revisions, each revision has items, and each item can have multiple price bands. Before you start, set your API key and brand and save amber-client.mjs. The example requires Node.js 22 or later. Set PRODUCT_ID from a product lookup.
1

Choose a Quote

Pick a returned id, then read /quotes/{id} for the supplier, Parent Product, and source header under details. Save the ID as QUOTE_ID. quoteNumber is a display number, not the ID used in URLs.The header’s targetPrice and quantity summarize one revision and one band. They are not the complete supplier price history.
2

Follow the three levels

Each URL names its parent explicitly:Use each returned record’s id in the next URL. A visible parent with no children returns an empty page. An unavailable parent returns 404.
3

Export every visible revision and band

compare-quotes.mjs
The output has one row per band. No output means no visible bands, which can also mean a revision has no items or an item has no bands. Read the corresponding collection’s totalItems when diagnosing an empty result.

Compare like-for-like offers

Keep isBrandQuote, status, and submission time so you do not treat a brand target as a submitted supplier offer. Supplier-private drafts and canceled revisions are excluded from the public read surface; brand drafts can appear. Compare matching SKU or product-version requirements at the same quantity and currency, with compatible incoterms. unitPrice and targetUnitCost are decimal strings or null; preserve precision and treat null as unknown, not zero. The collection is not sorted newest-first. Use revision metadata to select a round rather than taking the first row. For supplier comparisons, filter /quotes?productId={productId} and optionally add supplierId, status, or quoteNumber. Filters combine with AND. List rows include supplierId, productId, and productVersionId, so you can group results without an extra detail request per Quote. Keep different product versions and sourcing groups separate when comparing offers. For brand-wide analytics, page /quote-revisions, /quote-items, and /quote-price-bands once each and join locally. This avoids one request per parent in a large export. See Entity relationships for discussions and attachments.