# Advanced Usage

This page covers the configuration of specific features and advanced functionalities for Next.js.

## <mark style="color:red;">Configuring 3D Payment Based on Country​</mark> <a href="#configuring-3d-payment-based-on-country" id="configuring-3d-payment-based-on-country"></a>

To enable or disable 3D Payment selectively for different countries, set the `use_three_d` parameter to `false` in the `useCompleteCreditCardPaymentMutation` as provided below:

```
const [completeCreditCardPayment] = useCompleteCreditCardPaymentMutation();

const response = await completeCreditCardPayment({
  ...data,
  use_three_d: false
}).unwrap();
```

## <mark style="color:red;">Removing Experimental or Other Options from Next Config​</mark> <a href="#removing-experimental-or-other-options-from-next-config" id="removing-experimental-or-other-options-from-next-config"></a>

To remove experimental flags from your `next.config.js` file, use the following code:

```
const enhancedConfig = withPzConfig(nextConfig);

// ...

delete enhancedConfig.experimental.serverActions;
```

## <mark style="color:red;">Customizing Response in Middleware.ts​</mark> <a href="#customizing-response-in-middlewarets" id="customizing-response-in-middlewarets"></a>

If you use a custom response such as NextResponse.json(), make sure to set the `pz-override-response` header to `true`, as provided below. Otherwise, you will get a 404 error.

```
const middleware: NextMiddleware = (
  req: PzNextRequest,
  event: NextFetchEvent
) => {
  if (myCondition) {
    return NextResponse.json({ status: 'ok' }, { headers: { 'pz-override-response': 'true' } });
  }

  return NextResponse.next();
};
```
