Quester Studio

http

Perform an HTTP request and capture status, body, headers, and timing

Sends an HTTP request. URL, headers, and body support templates.

The previous node’s JSON is available as execute input but is not sent unless you template it into url / headers / body. Typical teaching chain: start → input → http → extract (How flows work).

Header merge order (later wins, header names compared case-insensitively):

  1. Workspace / flow settings.http.defaultHeaders
  2. In-run auth vars from bearer / basicAuth / apiKey (httpAuthHeaders) — applied on every HTTP hop after the helper until overwritten, unless this node sets skipInheritedAuth: true
  3. This node’s headers

Query: httpAuthQuery is applied to the resolved URL; query keys already on the URL win. Auth helpers do not copy the previous node’s headers (HTTP responses also have headers).

subflow runs start with empty vars, so parent-flow auth is not inherited.

Need in this nodeUse
Run panel / --input field{{input.username}}
Field from an earlier named node{{nodes.login.body.token}}
In a later extract/json on this responseJMESPath body.id (wire root)
in ×1 http out ×1
Wire in unused unless templated into the request. Multiple outgoing edges (fan-out) share the same output.

Data

FieldTypeDefaultDescription
labelstringOptional UI label
methodenum"GET"GET · POST · PUT · PATCH · DELETE · HEAD · OPTIONS
urlstringrequiredMust resolve to http: or https:
headersobject{}Header name → string (templated)
skipInheritedAuthbooleanfalseIf true, do not apply helper auth headers/query on this request. Later HTTP hops still inherit. Workspace default headers still apply.
bodystring | objectOmitted for GET/HEAD at send time

Input / output

Value
Execute inputPrevious node output (not sent unless you template it)
OutputSee below

Output shape

{
  status: number;
  statusText: string;
  headers: Record<string, string>;
  body: unknown;       // parsed JSON, or raw text if not JSON
  text: string;        // raw response body
  request: {
    method: string;
    url: string;
    headers: Record<string, string>;
    body?: string;
  };
  timing: {
    startedAt: number;
    endedAt: number;
    durationMs: number;
  };
  size: number;        // response body byte length
}

Common template paths:

  • {{nodes.login.status}}
  • {{nodes.login.body.id}}
  • {{nodes.login.body.token}}

Examples

GET with env base URL

{
  "id": "profile",
  "type": "http",
  "data": {
    "label": "Profile",
    "method": "GET",
    "url": "{{env.API_BASE}}/users/{{nodes.userId}}",
    "headers": {}
  }
}

POST JSON body

{
  "id": "login",
  "type": "http",
  "data": {
    "label": "Login",
    "method": "POST",
    "url": "{{env.API_BASE}}/users",
    "headers": { "Content-Type": "application/json" },
    "body": "{\"username\": \"{{input.username}}\", \"email\": \"{{input.email}}\"}"
  }
}

Bearer token from secrets

{
  "id": "secure",
  "type": "http",
  "data": {
    "method": "GET",
    "url": "{{env.API_BASE}}/me",
    "headers": {
      "Authorization": "Bearer {{secrets.API_TOKEN}}"
    }
  }
}

Skip inherited helper auth

Use after a bearer (or other helper) when this hop should be unauthenticated. Later HTTP nodes still inherit unless they also skip.

{
  "id": "listProducts",
  "type": "http",
  "data": {
    "method": "GET",
    "url": "{{env.API_BASE}}/products?limit=3",
    "headers": {},
    "skipInheritedAuth": true
  }
}

Object body (templated after stringify)

{
  "method": "POST",
  "url": "{{env.API_BASE}}/items",
  "headers": { "Content-Type": "application/json" },
  "body": {
    "name": "{{input.name}}",
    "owner": "{{input.username}}"
  }
}

Errors

  • Non-http/https URLs throw at execute time.
  • Network failures throw with a request snapshot attached.

Standalone request files use a similar shape — see Collections & requests.