# Freshness credits

URL: https://docs.healthcare.dev/freshness-credits

Every dataset has a freshness target: how soon after the source publishes a release we publish
it (24 hours for FDA's daily NDC file, for example). The targets and each dataset's current lag
are on the [status page](/status). When a dataset misses its target, every account that called
it on a paid plan that month gets a credit. You don't need to ask.

## When a dataset is late

A dataset is late from the moment a source release is older than the target and we haven't yet
published that release or a newer one. It stops being late when we publish. Missed hours are
the hours a dataset was late during the month (UTC), to a tenth of an hour.

- The source publish time is the one shown on the status page and in
  [`/v1/datasets/{dataset}/releases`](/reference/datasets/releases-and-what-changed) (`source_published_at`), and our publish
  time is `published_at`.
- A release a quality gate holds back stays late until we publish it or a newer release, even
  if the source has published another one since.
- We never count time before we started tracking a dataset.

## How much

For each dataset that was late during a month, per account:

```text
credit = plan price × (missed hours ÷ hours in the month) × (your calls to the dataset ÷ all your calls)
```

- **Plan price** is the monthly price of the plan your calls were made on (a twelfth of the
  annual price on annual billing). If you changed plans during the month, it's averaged over your
  calls: with three quarters of them on Builder and a quarter on Pro, it's
  0.75 × $49 + 0.25 × $149 = $74.
  Overage charges aren't part of it.
- **Calls** are billable calls made with live keys on a paid plan during the month, REST and MCP
  alike, counted the way they're billed (a batch of 20 codes is 20). Calls made on Free, test
  keys, free endpoints and calls refused with an error don't count. An account that downgraded or
  cancelled since still gets the credit for the month it was on a paid plan.
- **A call counts toward a dataset** when it returns that dataset's records: an NDC lookup counts
  for NDC, a code lookup for its code system, a drug search for RxNorm and NDC, a search by
  meaning for each code system and drug dataset it actually searched. Records only linked from a
  response (an NDC product's RxNorm concepts, for example) don't count.
- **Cap:** a month's credits add up to at most 50% of the plan price. Above it, every credit that
  month is scaled down by the same factor.
- Amounts are rounded to the cent; a credit under a cent isn't issued.

### Example

On Pro ($149 a month), October has 744 hours. NDC was late for 30 hours, and 6,000 of the
20,000 billable calls you made that month were NDC lookups:

```text
$149 × (30 ÷ 744) × (6,000 ÷ 20,000) = $1.80
```

## On your invoice

Credits are worked out once a month has ended (UTC) and added to the invoice for that month as a
line such as "Freshness credit, October 2026: ndc was over its 24 h target for 30 h". Annual
plans get that invoice too, for the month's calls.

If that invoice has already been finalized, or there isn't one (for example, the plan was
cancelled), the credit is added to your account's credit balance instead, with the same
description, and comes off your next invoice. Your billing page in the
[dashboard](https://app.healthcare.dev/billing) lists every credit, the hours and calls it was
worked out from, and where it was applied.

Accounts that only used Free don't receive credits.
