---
title: Modify requests and responses
slug: latest-atomic-modify-requests-responses
canonical_url: https://docs.coveo.com/en/atomic/latest/usage/atomic-modify-requests-responses/
collection: atomic
source_format: adoc
---
# Modify requests and responses
For advanced use cases, such as modifying request bodies with custom parameters or logging data to third parties, you may want to modify requests before [Atomic](https://docs.coveo.com/en/lcdf0264/) sends them to the Coveo APIs.
You may also want to modify responses before [Atomic](https://docs.coveo.com/en/lcdf0264/) components use them.
This article explains how you can do so [using Headless engine](https://docs.coveo.com/en/headless/latest/usage/headless-modify-requests-responses/) configuration methods.
## Modify requests
To modify requests sent to the Coveo Search API or the Usage Analytics Write API, use the `preprocessRequest` method of the [search engine configuration](https://docs.coveo.com/en/headless/latest/reference/interfaces/Search.SearchEngineConfiguration.html) when [initializing your interface](https://docs.coveo.com/en/atomic/latest/reference/components/atomic-search-interface#initialize).
> **Important**
>
> The `preprocessRequest` method is a powerful tool, and it can be leveraged to do things that should be done in a different manner.
> For example, you can use it to set [`aq`](https://docs.coveo.com/en/175/), but you should use the [Headless](https://docs.coveo.com/en/lcdf0493/) [`AdvancedSearchQuery`](https://docs.coveo.com/en/headless/latest/reference/interfaces/Search.AdvancedSearchQueryActionCreators.html) action instead.
> You can [use them in Atomic](https://docs.coveo.com/en/atomic/latest/usage/headless-through-atomic/) as well.
>
> If you have to use `preprocessRequest`, you should code defensively.
> For example, you can implement [`try...catch`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try%2E%2E%2Ecatch) to prevent errors.
```html
```
<1> Initialize the function with its parameters:
* `request`: The HTTP request sent to Coveo. See [`preprocess-request.ts`](https://github.com/coveo/ui-kit/blob/master/packages/headless/src/api/preprocess-request.ts).
* `clientOrigin`: The origin of the request. See [`preprocess-request.ts`](https://github.com/coveo/ui-kit/blob/master/packages/headless/src/api/preprocess-request.ts).
* `metadata`: Optional metadata consisting of two properties:
--
** `method`: The method called on the client.
** `origin`: The origin of the client that helps to distinguish between features while using the same method.
--
See [`search-metadata.ts`](https://github.com/coveo/ui-kit/blob/master/packages/headless/src/api/search/search-metadata.ts).
## Modify responses
You can also leverage the [search configuration options](https://docs.coveo.com/en/headless/latest/reference/interfaces/Search.SearchConfigurationOptions.html) to modify Search API responses before [Headless](https://docs.coveo.com/en/lcdf0493/) controllers use them.
Use the `preprocessSearchResponseMiddleware`, `preprocessFacetSearchMiddleware` or `preprocessQuerySuggestResponseMiddleware` method, depending on the target endpoint.
```html
```