Limits
Rate limits are enforced per app using a sliding window counter. Every response includes rate limit headers so you can track your usage in real time.EHR rate share
Requests that reach the practice’s EHR (live reads under/v4/ehr, re-syncs, document pulls, fax and
prescription sends, eligibility checks, payer creation) also draw from your app’s share of the practice’s
EHR login rate. Apps share one third of each EHR login’s rate; the rest is kept for the background
syncs that keep the practice’s data current. For example:
When the share is used up, live reads (
/v4/ehr/* and the live schedule reads) answer
429 Too Many Requests with Retry-After. Other requests that reach the EHR fail with their usual
EHR error (502/503 ehr_unavailable) instead, so a write whose outcome is unknown is never told
to retry; retry those with backoff, and with the same idempotencyKey where the endpoint takes one. There are no
daily caps: a loop is slowed to the share, not stopped for the day, so guard against loops in your app,
especially for sends that act in the real world (faxes, prescriptions, paid eligibility checks).
Sending a verified X-Session-Token makes EZDerm reads run on the signed-in
user’s own login, at the personal rate.
Rate Limit Headers
Rate-limited API responses include these headers:Handling Rate Limits
When you exceed the limit, the API returns429 Too Many Requests:
Recommended Approach
Use theX-RateLimit-Reset header to wait until the window resets before retrying. Fall back to exponential backoff with jitter if the header is missing:
Best Practices
- Batch requests where possible instead of making many individual calls
- Cache responses for data that doesn’t change frequently (providers, facilities)
- Use pagination with larger page sizes to reduce the number of requests
- Monitor headers — check
X-RateLimit-Remainingto throttle proactively before hitting the limit
