# Retries with backoff
> Learn how to configure automatic retries with exponential backoff in Fern SDKs. Control retry limits and customize retryable status codes.
This feature is available only for the [Pro and Enterprise plans](https://buildwithfern.com/pricing). To get started, reach out to [support@buildwithfern.com](mailto:support@buildwithfern.com).
Fern SDKs will automatically retry failed requests with exponential backoff. A request will be retried as
long as the request is deemed retryable and the number of retry attempts has
not grown larger than the configured retry limit.
### Retryable status codes
A request is deemed retryable when any of the following HTTP status codes is returned:
* [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout)
* [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests)
* [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors)
Note that you can configure the list of retryable status codes as well. For example,
if you want to remove the `429` status code from the list of retryable status codes, you can do so.
### Overriding the retry limit
By default, the SDK will retry a failed request up to 2 times. SDK users can override the global
default retry limit when instantiating the client.
```ts {4}
import { ImdbClient } from "imdb";
const client = new ImdbClient({
maxRetries: 1 // overrides the default retry limit to 1
});
```
```python {4, 8}
from imdb.client import Imdb, AsyncImdb
client = Imdb({
max_retries: 1 # overrides the default retry limit to 1
})
async_client = AsyncImdb({
max_retries: 1 # overrides the default retry limit to 1
})
```
```java {4}
import com.imdb.ImdbClient;
ImdbClient client = new ImdbClient.Builder()
.maxRetries(1) // overrides the default retry limit to 1
.build();
```
```go {7}
import (
imdbclient "github.com/fern-workos/workos-go/client"
"github.com/fern-workos/workos-go/option"
)
client := imdbclient.NewClient(
option.WithMaxAttempts(1), // overrides the default retry limit to 1
)
```
```csharp {4}
using Imdb;
var client = new ImdbClient(new ClientOptions {
MaxRetries = 1 // overrides the default retry limit to 1
});
```
```swift {5}
import Imdb
let client = ImdbClient(
baseURL: "https://api.imdb.com",
maxRetries: 1 // overrides the default retry limit to 1
)
```
```php {4}
use Imdb\ImdbClient;
$client = new ImdbClient([
"maxRetries" => 1 // overrides the default retry limit to 1
]);
```
It's also possible to override the retry limit on a per-request basis.
```ts {2}
client.movie.get("tt0111161", {
maxRetries: 3 // overrides the default retry limit to 3
});
```
```python {2}
client.movie.get("tt0111161", {
max_retries: 3 // overrides the default retry limit to 3
})
```
```java {2}
client.movie().get("tt0111161", RequestOptions.builder()
.maxRetries(3) // overrides the default retry limit to 3
.build());
```
```go {4}
response, err := client.Movies.Get(
ctx,
"tt0111161",
option.WithMaxAttempts(1),
)
```
```csharp {2}
var movie = await client.Movie.GetAsync("tt0111161", new RequestOptions {
MaxRetries = 3 // overrides the default retry limit to 3
});
```
```swift {2}
let movie = try await client.movie.get("tt0111161", requestOptions: RequestOptions(
maxRetries: 3 // overrides the default retry limit to 3
))
```
```php {2}
$movie = $client->movie->get("tt0111161", [
"maxRetries" => 3 // overrides the default retry limit to 3
]);
```