Skip to content
Latchkey

GitHub Actions "cache service responded with 429" - Throttled Cache

The Actions cache service returned HTTP 429 (Too Many Requests), throttling a save or restore. This is a transient backend limit, not a workflow error - the job should not fail because of it.

What this error means

An actions/cache step logs "cache service responded with 429" during restore or save, often when many concurrent jobs hammer the cache. The dependency work itself is unaffected if caching is non-fatal.

Actions log
Warning: Failed to restore: cache service responded with 429 (Too Many Requests)

Common causes

Too many concurrent cache requests

A large matrix or many parallel jobs hitting the cache at once can trip the service rate limit, returning 429 to some of them.

Transient backend throttling

The cache backend may briefly throttle requests independent of your volume. It clears on its own shortly after.

How to fix it

Make caching non-fatal

actions/cache already warns rather than fails by default; ensure a 429 does not break the job and the real install still runs.

.github/workflows/ci.yml
- uses: actions/cache@v4
  continue-on-error: true
  with:
    path: ~/.npm
    key: npm-${{ hashFiles('package-lock.json') }}
- run: npm ci   # still runs on a cache miss/throttle

Reduce concurrent cache pressure

  1. Re-run the job; 429s are transient and usually clear.
  2. Stagger or reduce parallelism in very large matrices.
  3. Share one cache key across legs where the content is identical instead of N near-duplicate caches.

How to prevent it

  • Keep caching non-fatal so a 429 never fails the job.
  • Avoid generating many near-duplicate caches across a wide matrix.
  • Retry transient cache throttling rather than treating it as an error.

Frequently asked questions

What causes ""cache service 429""?
A large matrix or many parallel jobs hitting the cache at once can trip the service rate limit, returning 429 to some of them.
How do I fix "cache service 429"?
actions/cache already warns rather than fails by default; ensure a 429 does not break the job and the real install still runs.
Can Latchkey fix this automatically?
Yes. Latchkey runs your GitHub Actions on managed runners that detect this failure, apply the fix, and retry the job automatically - self-healing is on by default.

Related guides

References

Latchkey auto-heals failures like this one - detected, fixed, and retried without you. Start free → 30-day trial · No credit card