# URQL GraphQL Client Documentation
# Source: https://raw.githubusercontent.com/urql-graphql/urql/main/docs/api/request-policy-exchange.md
# Path: docs/api/request-policy-exchange.md

---
title: '@urql/exchange-request-policy'
order: 9
---

# Request Policy Exchange

> **Note:** These API docs are deprecated as we now keep TSDocs in all published packages.
> You can view TSDocs while using these packages in your editor, as long as it supports the
> TypeScript Language Server.
> We're planning to replace these API docs with a separate web app soon.

The `@urql/exchange-request-policy` package contains an addon `requestPolicyExchange` for `urql`
that may be used to upgrade [Operations' Request Policies](./core.md#requestpolicy) on a
time-to-live basis.

[Read more about request policies on the "Document Caching" page.](../basics/document-caching.md#request-policies)

This exchange will conditionally upgrade `cache-first` and `cache-only` operations to use
`cache-and-network`, so that the client gets an opportunity to update its cached data, when the
operation hasn't been seen within the given `ttl` time. This is often preferable to setting the
default policy to `cache-and-network` to avoid an unnecessarily high amount of requests to be sent
to the API when switching pages.

## Installation and Setup

First install `@urql/exchange-request-policy` alongside `urql`:

```sh
yarn add @urql/exchange-request-policy
# or
npm install --save @urql/exchange-request-policy
```

Then add it to your `Client`, preferably in front of the `cacheExchange` and in front of any asynchronous
exchanges, like the `fetchExchange`:

```js
import { createClient, cacheExchange, fetchExchange } from 'urql';
import { requestPolicyExchange } from '@urql/exchange-request-policy';

const client = createClient({
  url: 'http://localhost:3000/graphql',
  exchanges: [
    requestPolicyExchange({
      /* config */
    }),
    cacheExchange,
    fetchExchange,
  ],
});
```

## Options

| Option          | Description                                                                                                                                                                                                                                                   |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ttl`           | The "time-to-live" until an `Operation` will be upgraded to the `cache-and-network` policy in milliseconds. By default 5 minutes is set.                                                                                                                      |
| `shouldUpgrade` | An optional function that receives an `Operation` as the only argument and may return `true` or `false` depending on whether an operation should be upgraded. This can be used to filter out operations that should never be upgraded to `cache-and-network`. |