status is what you should branch on. integrationStatus is for reconciling
against what the practice sees on their own calendar.
The vocabulary
Reference endpoint
GET /v4/appointments/statuses returns the table above plus every native→normalized
mapping, so you never have to hardcode it. It is static reference data — identical
for every organization and safe to cache indefinitely.
missed flag marks the statuses that mean the visit did not happen — the
reactivation set. Read the flag rather than hardcoding ["cancelled","no_show"],
so a future status joins your campaign automatically.
Targeting cancellations and no-shows
ModMed coverage note. Max AI’s ModMed sync once filtered the scheduler
query to the attended-lifecycle statuses, so cancelled and no-show appointments
were never written to the mirror at all. That filter was removed in MOV-2983 —
before the release that shipped this endpoint, not with it — and the query now
carries no status clause, so they come back on the same paginated pages as
everything else, with no separate unpaginated pass to truncate. One consequence
remains:
- Cancellations and no-shows appear going forward, and for the sync window the scheduler covers — not retroactively for history that was never captured. A gap before that release is permanent; do not read it as “no cancellations”.
