Skip to main content
The rq.request object provides access to all details of the API request in your Requestly scripts. You can use these properties and methods in both pre-request and post-response scripts to read data.

Properties and Methods

rq.request.method

Use this property to get the Request’s method. The HTTP method of the request (e.g. GET, POST, PUT, OPTION, DELETE, PATCH, HEAD). Example:

rq.request.headers

An object that holds the request headers. Read them with rq.request.headers.get(name), rq.request.headers.has(name), or rq.request.headers.all(), which returns a plain { name: value } object. JSON.stringify(rq.request.headers) returns {} because the object exposes only methods (which JSON.stringify omits), so use .all() when you want to serialize the headers. Example:
You can also modify request headers from a pre-request script. The methods below change the headers that are sent with the request. Use them in pre-request scripts; in post-response scripts the request has already been sent, so header changes have no effect. Header changes apply to HTTP and GraphQL requests.

rq.request.headers.add(header)

Adds a header. If a header with the same name already exists, this adds a second one (it does not replace the existing header). Parameters:
  • header (object): { key, value } - the header name and value.
Example:

rq.request.headers.upsert(header)

Adds a header, or replaces it if a header with the same name already exists. Header names are matched case-insensitively. Parameters:
  • header (object): { key, value } - the header name and value.
Example:

rq.request.headers.remove(name)

Removes every header with the given name (case-insensitive). Parameters:
  • name (string): The header name to remove.
Example:

rq.request.headers.clear()

Removes all request headers. Parameters: none. Any argument passed is ignored. clear() always removes every header, so to remove a single header use remove(name) instead. Example:
The same operations are available directly on rq.request as rq.request.addHeader({ key, value }), rq.request.upsertHeader({ key, value }), and rq.request.removeHeader(name).

rq.request.body

The body of the request, accessible as a string. It is always a string, or undefined when the request has no body. Example:

rq.request.url

The request URL as a Url object, the same shape as Postman’s pm.request.url. It converts to a string wherever one is expected ("Sending to " + rq.request.url, `${rq.request.url}`, new URL(String(rq.request.url))), and exposes the URL’s parts: Example:
rq.request.url.query is a list of query parameters with the same API as Postman’s:
  • Read: get(name), has(name), one(name), count(), idx(i), indexOf(...), all(), each(fn), map(fn), filter(fn), find(fn), reduce(fn, initial), toString(). toObject() returns { name: value }; a repeated name becomes an array of values.
  • Change: add(param), insert(param, before), insertAfter(param, after), prepend(param), append(param), upsert(param), remove(name | fn), clear(), populate(list), repopulate(list), assimilate(list, prune). A param is { key, value } or a "key=value" string. rq.request.url.addQueryParams(...) and removeQueryParams(...) do the same in bulk.
rq.request.url.variables is the list of the request’s path variables (:id in the URL) with the same list API, plus replace("{{id}}"), substitute(object), syncFromObject(object), syncToObject(). You can also edit the URL parts directly: rq.request.url.path.push("v2"), rq.request.url.host = ["api", "example", "com"], rq.request.url.port = "8443", or rq.request.url.update("https://...") to replace the whole URL. In a pre-request script every one of these changes applies to the request that is sent, as in Postman. In a post-response script the request has already been sent.
JSON.stringify(rq.request.url) returns the URL’s parts, the same shape Postman uses: { protocol, host: [...], port, path: [...], hash, query: [{ key, value }], variable: [...] }. Use rq.request.url.toString() when you want the URL as a string.
rq.request.url is an object, not a string, exactly as in Postman. typeof rq.request.url is "object", a strict comparison such as rq.request.url === "https://..." is false, and string methods like .split() or .includes() are not available on it. Call rq.request.url.toString() first: rq.request.url.toString().split("?"), rq.expect(rq.request.url.toString()).to.equal(...). Scripts written before this change that called a string method directly on rq.request.url need that one edit.

rq.request.queryParams

A read-only object mapping each query parameter name to its value ({ name: value }). Iterate it with Object.entries(). Example:

Common Use Cases

Logging Request Details

Conditional Logic Based on Request Method

Accessing Query Parameters

Adding an Authentication Header