{"openapi":"3.1.0","info":{"title":"Ready Imprint configuration quotes","version":"1.0.0","description":"Read-only estimates in USD. No orders, payments, proof generation or artwork approvals are created. Use MCP discovery at /mcp for current product identifiers and guided quote templates."},"servers":[{"url":"https://readyimprint.com"}],"paths":{"/api/quotes":{"post":{"operationId":"requestQuote","summary":"Calculate a configuration-specific estimate","description":"Send at most 32768 bytes. Preserve the returned session cookie where supported. Quotes share session, network and global limits. A successful HTTP status does not guarantee a price: check result.error and result.unit_cents. Delivery, tax and order-level charges are handled separately in the ordering workflow. MCP request_quote adds live-product and guided-field validation; this REST endpoint retains advanced storefront metadata support.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}}},"responses":{"200":{"description":"Calculated result, or an unresolved configuration with null unit_cents and an error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"400":{"description":"Invalid JSON, metadata or configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Body exceeds 32768 bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; wait for Retry-After.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Pricing temporarily unavailable; retry with backoff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"QuoteRequest":{"type":"object","required":["category","quantity","metadata"],"properties":{"category":{"type":"string","description":"Use the category from discovery. Not every category or configuration is enabled on every storefront."},"quantity":{"type":"integer","minimum":1,"maximum":1000000,"description":"Input bounds only; supported quantities depend on the configuration."},"variant_id":{"type":"string","maxLength":200,"description":"Required for lanyards and accessories; use the live variant identifier."},"metadata":{"type":"object","maxProperties":200,"additionalProperties":true,"description":"Category-specific pricing selections from get_product_options.quote_template. Its customization.fields describes guided values. Proof flags must be booleans. Auxiliary qty/quantity fields are null or integers 0–1000000. Arrays at most100 entries; nesting at most8. Do not send artwork, contact details or payment data."}},"allOf":[{"if":{"properties":{"category":{"enum":["lanyards","accessories"]}}},"then":{"required":["variant_id"]}}]},"QuoteResponse":{"type":"object","required":["result","ladder","proofPriceCents"],"properties":{"result":{"type":"object","required":["unit_cents","base_cents","flat_fees_cents","breakdown","resolved","error"],"properties":{"unit_cents":{"type":["integer","null"],"minimum":0,"description":"Selected configuration unit price, US cents. Null means unavailable and must not be interpreted as zero. A resolved price may legitimately be zero."},"base_cents":{"type":["integer","null"],"minimum":0},"flat_fees_cents":{"type":"integer","minimum":0,"description":"Flat charges including the selected proof where applicable. Do not add proofPriceCents again."},"error":{"type":["string","null"]},"resolved":{"type":["object","null"],"description":"Resolved product and variant identifiers when pricing is available.","required":["product","variant"],"properties":{"product":{"type":"object","required":["id","handle","title","category"],"properties":{"id":{"type":"string"},"handle":{"type":"string"},"title":{"type":"string"},"category":{"type":"string"}}},"variant":{"type":"object","required":["id","title"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"sku":{"type":["string","null"]}}}}},"breakdown":{"type":["object","null"],"description":"Customer-facing components; currency amounts here are USD dollars.","required":["components","flat_fees","unit_sell","qty","line_total","captured_at"],"properties":{"components":{"type":"array","items":{"type":"object","required":["label","sell"],"properties":{"label":{"type":"string"},"sell":{"type":"number"}}}},"flat_fees":{"type":"array","items":{"type":"object","required":["label","amount"],"properties":{"label":{"type":"string"},"amount":{"type":"number"}}}},"unit_sell":{"type":"number"},"qty":{"type":"integer"},"line_total":{"type":"number"},"captured_at":{"type":"string"}}}}},"ladder":{"type":"array","maxItems":6,"items":{"type":"object","required":["min_qty","max_qty","per","save","active"],"properties":{"min_qty":{"type":"integer"},"max_qty":{"type":["integer","null"]},"per":{"type":["integer","null"],"minimum":0,"description":"Unit cents at this comparison quantity; flat fees separate."},"save":{"type":"integer","description":"Rounded percentage savings relative to the highest unit price among the returned comparison rows, not a retail list price or the complete catalog ladder."},"active":{"type":"boolean"}}}},"proofPriceCents":{"type":"integer","minimum":0,"description":"Configured digital-proof fee in US cents. Requesting a proof is not artwork approval or proof generation."}}},"Error":{"type":"object","required":["message"],"properties":{"message":{"type":"string"}}}}}}