The APIRequestContext class provides methods to make HTTP API requests independently of browser pages. It’s useful for API testing, authentication setup, and backend operations.
Creation
const request = await playwright.request.newContext({
baseURL: 'https://api.example.com',
extraHTTPHeaders: {
'Authorization': 'Bearer token'
}
});
Methods
fetch
Makes an HTTP request.
const response = await request.fetch('https://api.example.com/users');
const response = await request.fetch('https://api.example.com/users', {
method: 'POST',
data: { name: 'John' }
});
Request URL. Can be relative if baseURL was set.
HTTP method. Defaults to ‘GET’.
options.params
Object | URLSearchParams | string
Query parameters to append to URL.
Request body. Objects will be serialized to JSON.
Form-encoded data. Sets content-type to application/x-www-form-urlencoded.
Multipart form data. Sets content-type to multipart/form-data.
Request timeout in milliseconds.
Whether to throw on non-2xx status codes. Defaults to false.
options.ignoreHTTPSErrors
Whether to ignore HTTPS errors. Defaults to false.
Maximum number of redirects to follow. Defaults to 20.
Maximum number of retries. Defaults to 0.
Returns: Promise<APIResponse>
get
Makes a GET request.
const response = await request.get('https://api.example.com/users');
const response = await request.get('users', {
params: { page: 1, limit: 10 }
});
Same options as fetch() except method
Returns: Promise<APIResponse>
post
Makes a POST request.
const response = await request.post('https://api.example.com/users', {
data: { name: 'John', email: '[email protected]' }
});
Same options as fetch() except method
Returns: Promise<APIResponse>
put
Makes a PUT request.
const response = await request.put('https://api.example.com/users/1', {
data: { name: 'John Doe' }
});
Same options as fetch() except method
Returns: Promise<APIResponse>
patch
Makes a PATCH request.
const response = await request.patch('https://api.example.com/users/1', {
data: { email: '[email protected]' }
});
Same options as fetch() except method
Returns: Promise<APIResponse>
delete
Makes a DELETE request.
const response = await request.delete('https://api.example.com/users/1');
Same options as fetch() except method
Returns: Promise<APIResponse>
head
Makes a HEAD request.
const response = await request.head('https://api.example.com/users');
Same options as fetch() except method
Returns: Promise<APIResponse>
storageState
Returns storage state for this context.
const state = await request.storageState();
await request.storageState({ path: 'storage.json' });
File path to save storage state to.
Whether to include IndexedDB data. Defaults to false.
Returns: Promise<Object>
dispose
Disposes the request context and closes all resources.
await request.dispose();
await request.dispose({ reason: 'Test completed' });
Optional reason for disposal.
Example Usage
Create Context with Authentication
const request = await playwright.request.newContext({
baseURL: 'https://api.example.com',
extraHTTPHeaders: {
'Authorization': 'Bearer token123'
}
});
Make API Request
const response = await request.get('/users');
const users = await response.json();
console.log(users);
POST with JSON Data
const response = await request.post('/users', {
data: {
name: 'John Doe',
email: '[email protected]'
}
});
if (response.ok()) {
const user = await response.json();
console.log('Created user:', user);
}
Upload File
const response = await request.post('/upload', {
multipart: {
file: {
name: 'image.png',
mimeType: 'image/png',
buffer: fs.readFileSync('image.png')
}
}
});
Handle Query Parameters
const response = await request.get('/search', {
params: {
q: 'playwright',
page: 1,
limit: 20
}
});
Setup Authentication Before Tests
const request = await playwright.request.newContext();
const response = await request.post('https://api.example.com/login', {
data: {
username: 'user',
password: 'pass'
}
});
const token = (await response.json()).token;
// Use token in browser context
const context = await browser.newContext({
extraHTTPHeaders: {
'Authorization': `Bearer ${token}`
}
});
Save and Restore Storage State
// Save storage state
const request = await playwright.request.newContext();
await request.post('/login', { data: credentials });
await request.storageState({ path: 'auth.json' });
// Restore storage state
const request2 = await playwright.request.newContext({
storageState: 'auth.json'
});