automation // REST APILAB

429 + Retry-After Exponential Backoff

Back off when SFMC rate-limits a route instead of hammering it with immediate retries.

api429retry-afterbackoff
Context Pack →Open Workspace →
Trust & provenanceLAB
Evidence tierLABOfficial sources1Other sources0Last verified2026-10-05

Evidence tier describes my hands-on relationship with the content. Official sources describe platform contracts/documentation. Production observations should not automatically be treated as official limits.

EvidenceLAB
Difficultyintermediate
Verified2026-10-05
Use when

External integrations calling REST endpoints at meaningful volume.

async function callWithBackoff(request, maxRetries = 5) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const res = await request();
    if (res.status !== 429) return res;

    const retryAfter = Number(res.headers.get('retry-after'));
    const delayMs = Number.isFinite(retryAfter)
      ? retryAfter * 1000
      : Math.min(30_000, 1000 * (2 ** attempt));

    await new Promise(r => setTimeout(r, delayMs));
  }
  throw new Error('Rate limit retry budget exhausted');
}
Why it works

Salesforce recommends honoring HTTP 429 and Retry-After while applying exponential backoff.

Operational notes

Add jitter in distributed systems so many workers do not retry on the same boundary.

Prefer batch routes when available.

Sources / verification