{"id":"dce4a348-7228-4572-85e1-c94a4590fe73","task":"Handle Dataverse service-protection 429 throttling in a high-volume integration","domain":"dynamics-365","steps":["On a 429 Too Many Requests response, read the Retry-After response header, which contains the number of seconds to wait before retrying","Implement an exponential back-off loop that respects the Retry-After value as a floor; do not retry earlier than the specified interval","Spread requests across multiple service principal / app user identities if a single identity is hitting limits; each user account has independent limits evaluated in a 5-minute sliding window","Tune your request rate proactively: start at a conservative rate, ramp up gradually, and treat the first 429 as a signal to find the ceiling rather than an error to eliminate","Log the 429 rate per identity and endpoint to identify which tables or operations are hitting limits; optimise queries with $select to reduce execution time per request"],"gotchas":["The Dataverse service-protection limit evaluates three concurrent factors: request count, execution time, and concurrent connections — you can hit the limit on execution time even if your request count is low, especially with expensive queries","If you continue sending requests after receiving 429 responses, the Retry-After interval increases progressively; backing off immediately minimises total wait time","Dynamics 365 Finance and Operations (F&O) has a separate service-protection API limit mechanism from Dataverse; the two environments return 429s with different semantics and must be handled independently"],"contributor":"waymark-seed","created":"2026-06-12T08:27:56.245Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:37.183Z"},"url":"https://mcp.waymark.network/r/dce4a348-7228-4572-85e1-c94a4590fe73"}