> Reverse Contact API documentation. This is the Markdown copy of https://docs.reversecontact.com/sdk/javascript/timeouts
> Every page is listed at https://docs.reversecontact.com/llms.txt, every endpoint with its credit cost and status at https://docs.reversecontact.com/catalog.json

# Timeouts and cancellation

> Set per-attempt HTTP timeouts, bound asynchronous job waits, and cancel local requests with AbortSignal in the Reverse Contact TypeScript SDK.

- Last verified: 2026-11-04

Use request timeouts for individual HTTP attempts and a wait deadline for the full polling loop.

## Request timeouts and cancellation

Each HTTP attempt times out after 90 seconds by default, since some enrichments take more than 60 seconds. Pass request options as the last argument of any API method: `timeout` (milliseconds per attempt), `maxRetries`, `headers` and `signal`.

Use an `AbortSignal` to cancel a request, the wait between retries, or `job.wait()`. A cancelled call raises `APIConnectionError`. Cancellation stops your code from waiting, without cancelling the job on the server.

**Timeout and cancellation**

```typescript [TypeScript SDK]
import ReverseContact from "@reverse-contact/sdk";

const client = new ReverseContact({ apiKey: process.env.RC_API_KEY });

const usage = await client.usage.retrieve({
  timeout: 10_000,
  maxRetries: 1,
  signal: AbortSignal.timeout(30_000)
});
console.log("Credits left:", usage.quotas?.workspace.credits.left);
```

## Wait options

`job.wait()`, `client.jobs.wait()`, `client.bulk.wait()` and `client.lists.operations.wait()` accept `WaitOptions<T>`:

| Option | Type | Description |
| ------ | ---- | ----------- |
| `timeout` | `number` | Overall deadline in milliseconds, 1,800,000 by default (30 minutes). Must be positive and finite. |
| `pollWait` | `number` | How long each poll waits, in seconds. An integer from 0 to 20 that defaults to 20. |
| `onPoll` | `(snapshot: Result<T>) => void \| Promise<void>` | Called with each response envelope. Read progress in `snapshot.data`. |
| `headers` | `RequestInit["headers"]` | Headers for polling requests. |
| `signal` | `AbortSignal` | Cancels the local wait. |

`WaitOptions` has no `maxRetries`. Each poll uses 4 retries within the overall deadline. Polling reads allow at least `wait + 15` seconds for an HTTP attempt, but `wait()` remains bound by the overall deadline.

When the wait deadline passes, the SDK raises `JobTimeoutError` with `jobId` and `lastStatus`. The server job may continue. See [Async jobs](https://docs.reversecontact.com/sdk/javascript/async-jobs) to resume waiting. To request a server-side stop for a Bulk job or List operation, use [client.bulk.cancel()](https://docs.reversecontact.com/sdk/javascript/bulk) or [client.lists.operations.cancel()](https://docs.reversecontact.com/sdk/javascript/lists).

Return to the [TypeScript SDK overview](https://docs.reversecontact.com/sdk/javascript).

## FAQ

### What is the default HTTP timeout in the TypeScript SDK?

Each HTTP attempt times out after 90 seconds by default. Set the request or client `timeout` in milliseconds to change that deadline.

### Does AbortSignal cancel a job on the server?

`AbortSignal` stops the SDK request or local polling loop and raises `APIConnectionError`. The server job can continue. Bulk and List operations have separate cancel methods.

### How do I change the deadline for job.wait?

Pass `timeout` in milliseconds to `job.wait()`. The wait deadline defaults to 30 minutes and raises `JobTimeoutError` when exceeded.
