Skip to content
Current/ Help Center

PSA rate limits and dead-letter jobs

6 min read · Updated Jul 21, 2026

Both PSAs protect themselves from heavy callers, in different ways. Autotask enforces an hourly request budget on your Autotask database — roughly 10,000 API calls an hour — shared by every integration talking to it, not just Current; it also deliberately slows callers down as the budget fills (about half a second of extra latency per call past 50% utilization, a full second past 75%). ConnectWise publishes no fixed quota at all — it throttles bursts as they happen, answering with a 429 and a Retry-After. Current is built to stay well inside both without your attention. Here's what it does, and what to do when a job still dies.

Built-in protection

  • PSA requests ride out transient failures: on a 429 (rate limited) or any 5xx, Current retries with exponential backoff plus jitter, and honors the Retry-After header when the PSA sends one. On Autotask, reads retry up to four times, writes up to three, cheap count calls up to two; the ConnectWise client follows the same pattern, and additionally keeps only a small number of requests in flight at once. The jitter matters — it stops several concurrent pulls from retrying in lockstep and re-triggering the limit.
  • Every individual request also carries a hard network timeout (on Autotask, ConnectWise, and HaloPSA alike), so a PSA call that simply hangs can never eat the whole sync cycle — the run moves on and the slow entity resumes on the next cycle.
  • CRM records (companies, contacts, opportunities, notes, charges, tickets) get a reserved slice of every sync cycle, and both workspaces and record types are scheduled stalest-first — whatever has waited longest syncs next — so nothing can be starved indefinitely behind a heavy project pull.
  • On Autotask, before each 5-minute change poll, Current reads your live usage and simply defers the run when the budget is 80% or more spent, rather than piling on and eating the latency penalty. (ConnectWise has no readable budget — pacing there is reactive, driven by its throttle responses.)
  • Large pulls pause rather than fail. When the PSA throttles — or the run's own time budget runs out mid-pull — the run is reported as partial and picks up on the following cycle. Core entities report “Synced N records so far — large workspace, run Sync again to finish the rest,” and each per-entity row on the sync health page records the specific reason it paused (for example, which record failed to save, or that the request budget ran out) rather than a generic message.
  • Failed jobs retry on a growing delay, up to 5 attempts, before dead-lettering — and a job that failed specifically because of a rate limit waits roughly twice as long each round as an ordinary failure.
  • Every call Current makes is counted and attributed to your workspace, which is what feeds the usage readout on the sync health page.

Watch your usage

Go to Integrations → your PSA's card → Sync details. The Live telemetry card shows Current's own calls this hour. On Autotask it's drawn against the shared ceiling, and the bar turns amber around 7,000 calls with a plain note that Current may pace its syncs to stay under the limit — if that bar is high and you know Current isn't doing anything heavy, another tool is spending your budget (see the warning below). On ConnectWise there's no ceiling to draw, so the readout is a plain counter; sustained throttling shows up as retrying jobs instead.

How the retry schedule actually works

Each failure re-queues the job further out. The clock doubles every attempt, and rate-limit failures back off harder — on Autotask because the budget is hourly, on ConnectWise because a burst that just got throttled will get throttled again. Hammering it sooner just fails again.

FailureNext attempt (ordinary error)Next attempt (rate limited)
1st~2 minutes later~4 minutes later
2nd~4 minutes~8 minutes
3rd~8 minutes~16 minutes
4th~16 minutes~32 minutes
5thDead letter — parked for an adminDead letter — parked for an admin
Note
Dead letter is a decision, not a bug
After five failed attempts Current stops trying. A job that has failed five times is almost never a job that will succeed on the sixth — it's a job whose cause needs a human. Parking it also protects the request budget for the work that can succeed.

Retrying a dead-lettered job

  1. 1
    Read the error first
    Integrations → your PSA's card → Sync details → Recent jobs. Each row shows the attempt count as attempts/max (for example 3/5) and the last error message, stored as its first 500 characters — hover the error to read the stored text. An auth failure needs a credential fix, not a retry — retrying it just burns five more attempts and more of your request budget.
  2. 2
    Fix the cause
    Expired secret, a disabled API user, or a revoked key pair → re-enter the credentials on your PSA's card and press Test connection. Deleted PSA record → archive the Current side (the “Removed in your PSA” panel lists these). Throttling → just wait; Autotask's limit is hourly and refills on its own, and ConnectWise's burst throttle clears within moments.
  3. 3
    Press Retry
    The job re-enters the queue immediately with its attempt counter reset to zero, and the next drain cycle picks it up within 5 minutes. Re-running a pull is safe — records are matched on their PSA id and updated in place rather than duplicated.
  4. 4
    Confirm it cleared
    The Failed / dead-letter tile at the top of the page should fall back to zero, and the entity's row in Per-entity sync should show a fresh last-success time.

Symptom → cause

What you seeMost likely causeWhat to do
Syncs feel slow but nothing failsAutotask is injecting latency because the shared hourly budget is over 50% used (Autotask only)Check the usage gauge. If it's high and Current is idle, find the other integration spending it.
An entity reports a partial run for several cyclesThrottling or wall-clock truncation on a large workspaceExpected — it resumes each cycle. The CRM refresh (companies, contacts, opportunities, notes, charges) now serves whichever record type is most out of date first, so a lagging one catches up on its own within a few cycles. Press Sync now to continue immediately.
Change polls appear to skipCurrent deferred the poll — Autotask's budget was 80%+ spentNothing to fix. It resumes once the hour rolls over.
A job dead-lettered with an authentication errorCredentials changed, or the PSA API user lost a permissionFix the credentials, then Retry. Retrying alone will not help.
A job dead-lettered with a 404 or “not found”The PSA record was deleted — or, on ConnectWise, it's outside the API Member's security-role scope (ConnectWise answers both the same way)Retry will keep failing. On ConnectWise, check the security role before concluding the record is gone; otherwise archive or delete the Current side.
Repeated 429s all dayAnother tool shares the same API identity, or an import is runningGive Current its own API user or API Member and stagger heavy imports.
The usage gauge reads zero but sync is stalledThis isn't a rate-limit problem — the worker isn't runningCheck the background-job heartbeats on the same Live telemetry card. See “Reading the sync health dashboard (and fixing a stale sync).”
Heads up
Sharing an API identity
If another tool uses the same Autotask API user or the same ConnectWise API Member, its traffic counts against the same throttling — and Autotask's hourly ceiling is shared at the database level regardless. Give Current a dedicated API identity: it keeps sync latency predictable, and it makes it obvious in your PSA whose calls are whose when things run hot. On ConnectWise it also keeps echo suppression accurate — Current recognizes its own writes by the API Member that made them.
Tip
Don't fight the limit — schedule around it
If you're running a large one-time import alongside Current, run it outside your busiest hour. Current will already back off when the PSA pushes back, so the two won't collide — but a full re-pull will simply take longer while the limit is contended.

Related reading: “How often does Current sync? Every schedule, in one table” for what runs when, “Connect Autotask and choose what syncs” or “Connect ConnectWise PSA and choose what syncs” for the credential and permission setup that causes most auth-related dead letters, and “Fix a sync conflict between Current and your PSA” for failures that are about your data rather than throttling.

Was this helpful?