Keep prices current
Try it on a test key
curl -s "https://api.wellwardhealth.com/v1/prices/changes?since=2026-09-01T00:00:00Z&test_scenario=withdrawn_since" \
-H "Authorization: Bearer $WELLWARD_KEY"
Caching
You may cache responses for up to 24 hours to serve your own users (API Terms §4), storing each price's as_of with it. What you must not do is keep showing a price we have withdrawn.
Why prices are withdrawn
A price is withdrawn when it stops being valid: a person rejected it (reason: rejected), it aged past our freshness window (expired), the form of the service it was quoted for was retired from our catalog (superseded), the practice could no longer be placed (provider_removed), or it was removed by hand (manual). A newer quote for the same price does not withdraw it: the price keeps its id and you get price.updated.
A withdrawn price's id does not disappear — while withdrawn it answers 410 price_withdrawn with withdrawn_at, and replacement_price_id when we know the price that replaced it (usually null).
Two ways to hear about it
We tell you about withdrawals and updates for prices your account retrieved in the last 30 days. Honour them within 24 hours.
Poll the changes feed
curl -s "https://api.wellwardhealth.com/v1/prices/changes?since=2026-09-01T00:00:00Z" \
-H "Authorization: Bearer $WELLWARD_KEY"
{ "data": {
"events": [
{ "type": "price.withdrawn", "price_id": "…", "occurred_at": "…", "replacement_price_id": null, "reason": "rejected" }
],
"next_since": "…", "has_more": false, "retention_days": 30, "truncated": false
} }
Store next_since and pass it back as since next time. A page always ends on a whole timestamp, so nothing is skipped between pages. The feed keeps 30 days. It is free.
The feed covers prices you were served by /v1/prices, /v1/prices/{id} and the MCP price tools, and prices you reported an update on.
Or subscribe to the webhook — price.withdrawn and price.updated — see Webhooks.
What to do with an event
price.withdrawn→ remove the price from your cache and stop showing it. Ifreplacement_price_idis set, fetch that instead.price.updated→ re-fetch the price (GET /v1/prices/{id}) and replace what you hold. A live re-fetch is a Read.
When a provider quoted something different
If one of your users was quoted a different price, tell us: POST /v1/prices/{id}/updates with what they were quoted and when. A person reviews it and may re-check, correct, retire or keep the price; the report is tied to your org, and if the price changes you hear through the feed and webhooks above. To send us a price we don't have at all, use POST /v1/observations. Neither changes a published price automatically.
API reference · Dashboard · Questions: hello@wellwardhealth.com