---
title: "waitForResponse(urlPattern[, options]) | Grafana k6 documentation"
description: "Browser module: page.waitForResponse(urlPattern[, options]) method"
---

# waitForResponse(urlPattern\[, options])

Waits for an HTTP response that matches the specified URL pattern. This method is particularly useful for waiting for responses from AJAX/fetch requests, API calls, or specific resources to be loaded before proceeding with the test.

Expand table

| Parameter       | Type             | Default | Description                                                                                                                                                                                                                                                       |
|-----------------|------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| urlPattern      | string \| RegExp | \-      | Required. URL or URL pattern to match against responses. Can be an exact URL string, a regular expression, or an empty string to match any response.                                                                                                              |
| options         | object           | `null`  |                                                                                                                                                                                                                                                                   |
| options.timeout | number           | `30000` | Maximum time in milliseconds. Pass `0` to disable the timeout. Default is overridden by the `setDefaultTimeout` option on [BrowserContext](/docs/k6/latest/javascript-api/k6-browser/browsercontext/) or [Page](/docs/k6/latest/javascript-api/k6-browser/page/). |

### Returns

Expand table

| Type                                                                            | Description                                                                                                                                              |
|---------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| Promise&lt; [Response](/docs/k6/latest/javascript-api/k6-browser/response/)&gt; | A Promise that fulfills with the [Response](/docs/k6/latest/javascript-api/k6-browser/response/) object when a URL matches and the response is received. |

### Examples

#### Wait for API response

JavaScript ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```javascript
import { browser } from 'k6/browser';
import { check } from 'k6';

export const options = {
  scenarios: {
    ui: {
      executor: 'shared-iterations',
      options: {
        browser: {
          type: 'chromium',
        },
      },
    },
  },
};

export default async function () {
  const page = await browser.newPage();

  try {
    await page.goto('https://quickpizza.grafana.com/');

    // Test waitForResponse with user interaction
    const pizzaResponsePromise = page.waitForResponse('https://quickpizza.grafana.com/api/pizza');

    await page.getByRole('button', { name: /pizza/i }).click();

    const pizzaResponse = await pizzaResponsePromise;

    // Check that the pizza API call was successful
    check(pizzaResponse, {
      'pizza API status is 200': (r) => r.status() === 200,
      'pizza API URL is correct': (r) => r.url() === 'https://quickpizza.grafana.com/api/pizza',
    });
  } finally {
    await page.close();
  }
}
```

### Best practices

1. **Use appropriate patterns**: Choose the right matching method based on your needs:
   
   - Exact strings for known, static API endpoints
   - RegExp for pattern-based matching and dynamic URLs
2. **Set up promise before trigger**: Always set up the `waitForResponse` promise before triggering the action that causes the request:

JavaScript ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```javascript
// Correct
const responsePromise = page.waitForResponse('/api/data');
await page.click('#submit');
const response = await responsePromise;

// Incorrect - may miss the response
await page.click('#submit');
const response = await page.waitForResponse('/api/data');
```

1. **Verify response content**: After waiting for the response, verify that the response status and content match your expectations.

### Related

- [page.on()](/docs/k6/latest/javascript-api/k6-browser/page/on/) - Subscribe to page events
- [page.waitForEvent()](/docs/k6/latest/javascript-api/k6-browser/page/waitforevent/) - Wait for page events with predicate functions
- [page.waitForLoadState()](/docs/k6/latest/javascript-api/k6-browser/page/waitforloadstate/) - Wait for load states
- [page.waitForNavigation()](/docs/k6/latest/javascript-api/k6-browser/page/waitfornavigation/) - Wait for navigation events
- [page.waitForRequest()](/docs/k6/latest/javascript-api/k6-browser/page/waitforrequest/) - Wait for HTTP requests
- [page.waitForURL()](/docs/k6/latest/javascript-api/k6-browser/page/waitforurl/) - Wait for URL changes
- [Response](/docs/k6/latest/javascript-api/k6-browser/response/) - Response object methods and properties
