Last updated on October 23, 2026
Retries and time limits
Which calls are tried again, how long the SDK waits between tries, and how long one attempt may take.
When a call is tried again
A call is tried again only when trying again is safe: the API could not be reached, it answered with a server error (5xx), or it said to slow down (429). A 400, 401, 403, 404, 409 or 410 is never tried again, because the same call would be refused the same way. By default a call is made up to three times.
Calls that are never tried again
These are made once:
| Call | Why |
|---|---|
connections.createLink | Every call makes a new link. A repeat after a lost answer would leave a working link nobody saw. |
run | It is your own function, and only you know whether running it twice is harmless. |
actions.run (TypeScript only) | Made once, the same as run. |
request with any method other than GET | Only you know whether repeating it is harmless. |
If one of these fails, decide in your code whether to call again.
The wait between tries
The SDK waits as long as the server's Retry-After header says, when it sent one. Otherwise it waits half a second, then a second, with a little random spread so many clients do not try again in the same instant.
A Retry-After longer than the longest wait you allow is not waited for. The call fails at once with a rate limit error that carries the wait, so your code decides what to do with half a minute rather than sitting through it. That limit is the maxRetryWaitMs setting, max_retry_wait_ms in Ruby and Python.
Time limits
Every attempt has a time limit, 30 seconds by default. An attempt that runs out of time counts as a network failure and is tried again like one.
Each call can set its own limit. In TypeScript a call can also be cancelled with an AbortSignal. A cancel stops the call at once and is never tried again.
const controller = new AbortController();
setTimeout(() => controller.abort(), 5000);
const page = await appnigma.pull(
{ endCustomerId: "lawfirm-123", platform: "hubspot", object: "contact", limit: 1 },
{ timeoutMs: 10_000, signal: controller.signal },
);
console.log("one record:", page.records.length);page = client.pull(end_customer_id: "lawfirm-123", platform: "hubspot", object: "contact", limit: 1, timeout_ms: 10_000)
puts "one record: #{page[:records].size}"page = client.pull(end_customer_id="lawfirm-123", platform="hubspot", object="contact", limit=1, timeout_ms=10_000)
print("one record:", len(page["records"]))