Patient-authorized EHR integration
Freshness, partial and stale records
Use the snapshot metadata to tell how current a record is, what's missing, and whether a source failed.
Health systems don't always return everything, and syncs fail. Every snapshot and category page carries meta so you can say what you have.
Read the metadata
| Field | Meaning |
|---|---|
syncStatus |
complete, partial, or not_started. |
dataAsOf |
The oldest source watermark among the sources in this response. |
lastSuccessfulSyncAt |
The latest finish time among each source's most recent complete or partial sync. |
availableCategories |
Categories where at least one source returned data in its last usable sync. |
missingCategories |
Categories FinchNode couldn't read. |
warnings |
Source- or category-level problems, each with a code and message. |
A category counts as available when any of its resource types came back, so a partly read category may not appear in missingCategories. Check warnings too.
Before you say "no records"
An empty category means "none on file" only when:
syncStatusiscomplete,- the category is in
availableCategories, and - no warning names it.
Otherwise say it couldn't be loaded. A source that hasn't synced yet returns empty data with no warnings and syncStatus: "not_started".
When a source fails
If a source synced before and its latest sync failed, syncStatus is partial and warnings includes something like this (synthetic):
{
"code": "source_unavailable",
"source": "northstar-health",
"message": "The latest sync from this source did not complete. Records shown are from its last successful sync.",
"retryable": true
}
Show those records with their age, from dataAsOf. A sync that failed partway may still have applied some changes before it stopped.
Continuous sync
With continuous sync, FinchNode re-imports every 6 hours by default. A share gets it only when all three hold:
- Your application is set to continuous.
- The patient opted in on the consent screen.
- The health system allows ongoing access.
Otherwise it's one-time. The receipt's syncMode says which you got.
Sync webhooks
These arrive only for continuous shares, after a scheduled re-import. The first import doesn't send them; consent.granted covers it.
| Event | When |
|---|---|
sync.completed |
A re-import finished with everything it asked for. |
sync.partial |
A re-import finished with something missing. |
sync.failed |
A re-import failed. data.code and data.retryable say why and whether it will try again. |
records.updated |
A re-import changed or deleted records. |
If a failed refresh needs the patient to sign in again, they reconnect from their FinchNode account.