Skip to content

Pre-Request Scripts ​

Pre-request scripts are JavaScript code that runs before each request is sent. They let you dynamically modify requests, set environment variables, compute values, and prepare authentication — all without manual intervention.

You write pre-request scripts in the Pre-request section of the request panel (under the ⋯ menu). The script executes every time you send the request, including during Collection Runner execution.

The lp API ​

LitePost provides the lp object as the script runtime API. It gives you access to environment variables, variable substitution, and request modification.

Environment Access ​

Read and write environment variables from your scripts. Changes take effect immediately and persist in the active environment.

lp.environment.get(key) ​

Returns the value of an environment variable, or undefined if it does not exist.

javascript
const baseUrl = lp.environment.get("baseUrl");
// "https://api.example.com"

lp.environment.set(key, value) ​

Creates or updates an environment variable. The value is stored as a string.

javascript
lp.environment.set("timestamp", Date.now().toString());

lp.environment.has(key) ​

Returns true if the variable exists in the current environment, false otherwise.

javascript
if (!lp.environment.has("authToken")) {
  lp.environment.set("authToken", "default-dev-token");
}

lp.environment.unset(key) ​

Removes a variable from the current environment.

javascript
lp.environment.unset("tempValue");

Variable Substitution ​

lp.variables.replaceIn(text) ​

Substitutes placeholders in a string with their current environment values. This is the same substitution that LitePost applies to URLs and headers, but available for use in your script logic.

javascript
const url = lp.variables.replaceIn("{{baseUrl}}/api/{{version}}/users");
// "https://api.example.com/api/v2/users"

Request Modification ​

Read and modify properties of the outgoing request before it is sent.

Method and URL ​

lp.request.method and lp.request.url are readable and writable properties.

javascript
// Read the current method
const method = lp.request.method; // "GET"

// Change the method
lp.request.method = "POST";

// Read and modify the URL
const currentUrl = lp.request.url;
lp.request.url = currentUrl + "?debug=true";

Body ​

lp.request.body gets or sets the request body. For JSON APIs, parse and stringify as needed.

javascript
// Set a JSON body
lp.request.body = JSON.stringify({
  username: lp.environment.get("testUser"),
  timestamp: Date.now()
});

Headers ​

Manage request headers with three methods:

javascript
// Read a header value
const contentType = lp.request.header("Content-Type");

// Set or overwrite a header
lp.request.setHeader("Content-Type", "application/json");
lp.request.setHeader("X-Custom-Header", "my-value");

// Remove a header entirely
lp.request.removeHeader("X-Deprecated-Header");

Query Parameters ​

Add or overwrite query parameters on the request URL:

javascript
// Add a query parameter (appends even if key exists)
lp.request.addQueryParam("tag", "beta");

// Set a query parameter (replaces if key exists, adds if not)
lp.request.setQueryParam("page", "1");
lp.request.setQueryParam("limit", "50");

Use Cases ​

Dynamic Timestamps ​

Add a timestamp header to every request for logging or cache-busting:

javascript
lp.request.setHeader("X-Timestamp", Date.now().toString());
lp.request.setHeader("X-Request-Time", new Date().toISOString());

Token Chaining ​

Read a previously extracted token from the environment and apply it as an authorization header. This is commonly paired with response extraction rules that save tokens after a login request.

javascript
const token = lp.environment.get("authToken");

if (token) {
  lp.request.setHeader("Authorization", "Bearer " + token);
} else {
  // Fallback for development
  lp.request.setHeader("Authorization", "Bearer dev-placeholder");
}

Request Signing ​

Compute an HMAC signature or hash for APIs that require signed requests:

javascript
const secret = lp.environment.get("apiSecret");
const timestamp = Date.now().toString();
const body = lp.request.body || "";

// Build the string to sign
const stringToSign = lp.request.method + "\n" + timestamp + "\n" + body;

// Set signing headers
lp.request.setHeader("X-Timestamp", timestamp);
lp.request.setHeader("X-Signature", stringToSign);
lp.request.setHeader("X-Api-Key", lp.environment.get("apiKey"));

Custom Auth Preparation ​

Some APIs require rotating or computed credentials. Use a pre-request script to prepare them:

javascript
// Rotate between API keys for rate limit distribution
const keys = ["key-alpha", "key-bravo", "key-charlie"];
const index = Date.now() % keys.length;
lp.request.setHeader("X-Api-Key", keys[index]);

// Set a nonce for replay protection
const nonce = Math.random().toString(36).substring(2, 15);
lp.request.setHeader("X-Nonce", nonce);
lp.environment.set("lastNonce", nonce);

Conditional Request Modification ​

Modify the request based on environment configuration:

javascript
const env = lp.environment.get("environment");

if (env === "staging") {
  lp.request.url = lp.request.url.replace("api.example.com", "staging.example.com");
  lp.request.setHeader("X-Debug", "true");
}

if (lp.environment.has("mockMode")) {
  lp.request.setQueryParam("mock", "true");
}

TIP

Pre-request scripts run in the Collection Runner too. Define your auth and setup logic in pre-request scripts so that every request in the collection is properly configured without manual steps between requests.

Released under the AGPL-3.0 License.