{"openapi":"3.1.0","info":{"title":"Blueberry Price Check — public cash-price estimates","version":"1.0.0","description":"Read-only, no authentication. Search then explicitly select an NDC; never treat fuzzy matches as equivalent drugs. Quotes are cash estimates, not orders, insurance, stock guarantees, or clinical recommendations. Always retain freshness, membership acquisition costs and exclusions when citing prices. Limit 240 requests/minute per network peer plus 1200/minute per process. Proxy peers can group clients."},"servers":[{"url":"https://price.blueberrypharmacy.com"}],"externalDocs":{"url":"https://price.blueberrypharmacy.com/agents"},"paths":{"/api/v1/medications":{"get":{"operationId":"searchMedications","summary":"Search by name or exact NDC","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":120}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":25,"default":10}}],"responses":{"200":{"description":"Bounded candidates, including zero matches. All nonempty searches require explicit selection.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"Invalid input, mixed/wrong quantity mode, or safety limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Unapproved browser origin. Use a server-side integration."},"413":{"description":"JSON body exceeds 32 KB."},"429":{"description":"Rate limited; obey Retry-After."}}}},"/api/v1/quotes":{"post":{"operationId":"estimateMedicationPrice","summary":"Quote a selected medication","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteInput"}}}},"responses":{"200":{"description":"USD cash estimate for both membership states; stale prices are marked in body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"400":{"description":"Invalid input, mixed/wrong quantity mode, or safety limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Unapproved browser origin. Use a server-side integration."},"404":{"description":"Unknown NDC; no quote or zero price is supplied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"JSON body exceeds 32 KB."},"429":{"description":"Rate limited; obey Retry-After."}}}},"/api/v1/quotes/batch":{"post":{"operationId":"estimateMedicationList","summary":"Quote 1–20 medications, retaining per-item failures","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["items"],"additionalProperties":false,"properties":{"items":{"type":"array","minItems":1,"maxItems":20,"items":{},"description":"Each item should follow QuoteInput; invalid items produce individual errors, not silent omission."}}}}}},"responses":{"200":{"description":"Batch, possibly incomplete. A failed item makes totals null; successfulItemsSubtotal is not a full-list price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResult"}}}},"400":{"description":"Invalid input, mixed/wrong quantity mode, or safety limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Unapproved browser origin. Use a server-side integration."},"413":{"description":"JSON body exceeds 32 KB."},"429":{"description":"Rate limited; obey Retry-After."}}}}},"components":{"schemas":{"QuoteInput":{"type":"object","additionalProperties":false,"required":["ndc"],"properties":{"ndc":{"type":"string","pattern":"^(?:[0-9]{11}|[0-9]{5}-[0-9]{4}-[0-9]{2})$","description":"Explicit NDC returned by search, not a medication name."},"quantity":{"type":"number","minimum":1,"maximum":10000},"dailyDose":{"type":"number","minimum":0.001,"maximum":1000,"description":"Patient/prescription-supplied units per day for fee calculation. Never infer or prescribe. Maximum 3650 computed fee days."},"packages":{"type":"integer","minimum":1,"maximum":100}},"oneOf":[{"required":["quantity","dailyDose"],"not":{"required":["packages"]}},{"required":["packages"],"not":{"anyOf":[{"required":["quantity"]},{"required":["dailyDose"]}]}}]},"Freshness":{"type":"object","required":["refreshedAt","isStale","source","refreshInProgress","timestampMeaning","warning"],"properties":{"refreshedAt":{"type":["string","null"],"format":"date-time","description":"Actual last successful retrieval of the source feed. Unknown for bundled fallback, never replaced with response time."},"isStale":{"type":"boolean"},"source":{"type":"string","enum":["upstream","persistent","bundled"]},"refreshInProgress":{"type":"boolean"},"timestampMeaning":{"type":"string"},"warning":{"type":["string","null"]}}},"Medication":{"type":"object","required":["id","ndc","ndc11","name","strength","form","packageSize","dispensingUnit","pricingPageUrl","identityNote"],"properties":{"id":{"type":"string"},"ndc":{"type":"string"},"ndc11":{"type":"string"},"name":{"type":"string"},"strength":{"type":["string","null"]},"form":{"type":["string","null"]},"packageSize":{"type":"number"},"dispensingUnit":{"type":"string","enum":["ea","gm","ml"]},"pricingPageUrl":{"type":"string","format":"uri"},"identityNote":{"type":"string"}}},"Membership":{"type":"object","properties":{"required":{"const":false},"quarterlyUsd":{"const":18},"annualUsd":{"const":60},"excludedFromMedicationEstimates":{"const":true},"sourceUrl":{"type":"string","format":"uri"}}},"PriceBreakdown":{"type":"object","required":["total","medicationAndMarkup","includedFillAndSupplyFees","numberOfFills"],"properties":{"total":{"type":"number"},"medicationAndMarkup":{"type":"number"},"includedFillAndSupplyFees":{"type":"number"},"numberOfFills":{"type":"integer"}}},"Error":{"type":"object","required":["error","freshness","disclaimer"],"properties":{"apiVersion":{"const":"1"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}},"freshness":{"$ref":"#/components/schemas/Freshness"},"disclaimer":{"type":"string"}}},"SearchResult":{"type":"object","required":["candidates","totalMatches","truncated","selectionRequired","ambiguous","notFound","freshness"],"properties":{"apiVersion":{"const":"1"},"candidates":{"type":"array","maxItems":25,"items":{"$ref":"#/components/schemas/Medication"}},"totalMatches":{"type":"integer"},"truncated":{"type":"boolean"},"selectionRequired":{"type":"boolean"},"ambiguous":{"type":"boolean"},"notFound":{"type":"boolean"},"requestMedicationUrl":{"type":"string","format":"uri"},"matchPolicy":{"type":"string"},"freshness":{"$ref":"#/components/schemas/Freshness"},"disclaimer":{"type":"string"}}},"Quote":{"type":"object","required":["medication","inputs","prices","membership","freshness","verification","exclusions","warnings","disclaimer","feeAssumptions"],"properties":{"apiVersion":{"const":"1"},"kind":{"const":"cash_price_estimate"},"currency":{"const":"USD"},"medication":{"$ref":"#/components/schemas/Medication"},"inputs":{"$ref":"#/components/schemas/QuoteInput"},"effectiveQuantity":{"type":"number"},"feeAssumptions":{"type":"object","properties":{"feeDays":{"type":"number"},"isClinicalDaysSupply":{"const":false},"explanation":{"type":"string"},"medicationMarkupPercent":{"const":8},"feeSchedule":{"type":"string"}}},"prices":{"type":"object","properties":{"nonMember":{"$ref":"#/components/schemas/PriceBreakdown"},"member":{"$ref":"#/components/schemas/PriceBreakdown"}}},"membership":{"$ref":"#/components/schemas/Membership"},"freshness":{"$ref":"#/components/schemas/Freshness"},"exclusions":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"disclaimer":{"type":"string"},"verification":{"type":"object","properties":{"nonMemberCalculatorUrl":{"type":"string","format":"uri"},"memberCalculatorUrl":{"type":"string","format":"uri"},"pricingPageUrl":{"type":"string","format":"uri"}}}}},"BatchResult":{"type":"object","required":["complete","items","totals","successfulItemsSubtotal","freshness","exclusions"],"properties":{"apiVersion":{"const":"1"},"currency":{"const":"USD"},"complete":{"type":"boolean"},"requestedCount":{"type":"integer"},"quotedCount":{"type":"integer"},"items":{"type":"array","maxItems":20,"items":{"type":"object","required":["index","status","body"],"properties":{"index":{"type":"integer"},"status":{"type":"integer"},"body":{"oneOf":[{"$ref":"#/components/schemas/Quote"},{"$ref":"#/components/schemas/Error"}]}}}},"totals":{"oneOf":[{"type":"object","required":["nonMember","member"],"properties":{"nonMember":{"type":"number"},"member":{"type":"number"}}},{"type":"null"}]},"successfulItemsSubtotal":{"oneOf":[{"type":"object","required":["nonMember","member"],"properties":{"nonMember":{"type":"number"},"member":{"type":"number"}}},{"type":"null"}]},"totalNote":{"type":"string"},"membership":{"$ref":"#/components/schemas/Membership"},"exclusions":{"type":"array","items":{"type":"string"}},"disclaimer":{"type":"string"},"freshness":{"$ref":"#/components/schemas/Freshness"}}}}}}