Skip to main content

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 returns 429 Too Many Requests:
Use the X-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-Remaining to throttle proactively before hitting the limit