Nodes/OmniNodes/HTTP Request (WebAPI)
ComfyUI Node

HTTP Request (WebAPI)

The node that's just HTTP — no key, no AI, surprisingly handy

By TensorVizion·Created 3 months ago·Updated about 8 hours ago· 0
HTTP Request (WebAPI)
    • response_json
    • response_text
    • status_code
    • response_headers
    urlhttps://httpbin.org/get
    method
    headers{"Content-Type": "application/json"}
    body{}
    timeout10.00

    The name says "WebAPI" but the truth is simpler and honestly more useful: this node just makes an HTTP request. No model, no AI, no API key required by default - it sends a GET, POST, PUT, or DELETE to a URL and hands you back whatever came back. It's a plain web client inside your graph, and that's exactly the kind of plumbing that unlocks a surprising number of workflows: fetch a JSON config from a server, hit a status endpoint, submit a job to an external API, ping a webhook you control.

    The inputs are a REST client's honest basics: url, method (GET/POST/PUT/DELETE), headers and body as JSON text widgets (parsed as JSON if valid, ignored if not), and an optional timeout (default 10s). Outputs are response_json (parsed if the server sent JSON), response_text (the raw string - your fallback when it isn't JSON), status_code, and response_headers.

    The design detail that makes it workflow-safe: it catches exceptions internally. A refused connection, a timeout, a malformed response - instead of crashing your queue, it returns status_code = 0 with the error message in response_text. That's a deliberate choice, and it means you can wire status_code into a conditional gate downstream and branch on success vs. failure like any other logic. Not every request node does this; it's the reason this one is actually usable in a loop.

    Where it shines is composing with the rest of the pack's Web API corner. HTTP Request to submit a job → Endpoint Poller to wait on it → JSON Field Extractor to pull the result out → Response Saver to write it to disk. That's a complete async-job client built from four nodes, no code. The default url is https://httpbin.org/get, which is a free echo endpoint - fine for a first test, but you'll replace it with something real immediately.

    Two things to keep in view. First, the dependency: this node needs requests, which ComfyUI does not ship by default. The pack's requirements.txt declares it; install with pip install -r requirements.txt from the OmniNodes folder (or pip install requests into ComfyUI's Python). If it's missing, the node errors cleanly rather than crashing. Second, the security posture - this is a node that holds whatever you put in headers (tokens, API keys) and makes outbound calls by design. That's precisely the shape of node that has been abused in this ecosystem before. Keep secrets out of workflows you share, prefer HTTPS, and if a Web API node is too convenient - paste a key, it just works - be more suspicious, not less.

    One more honest note: as an HTTP client it's deliberately minimal. No retries, no redirect handling beyond what requests does by default, no automatic retry backoff. For a serious integration you'd want a real API wrapper pack with retry logic. For "I need to fetch a JSON file or submit a job from inside my graph," this is plenty, and it stays out of your way.

    Install

    Part of OmniNodes:

    cd ComfyUI/custom_nodes
    git clone https://github.com/TensorVizion/OmniNodes
    cd OmniNodes
    pip install -r requirements.txt
    

    Restart ComfyUI, or install "OmniNodes" via ComfyUI Manager and run pip install requests.

    Troubleshooting

    • status_code = 0, error text in response_text - the request never completed. Check the URL, your network, and that timeout isn't too small.
    • ModuleNotFoundError: requests - dependency missing; see above.
    • Server says 400/422 - check headers (Content-Type matters for JSON bodies) and that body parses as valid JSON.
    CategoryTensorVizion/Web API

    Inputs (5)

    NameTypeDefaultDescription
    urlSTRINGhttps://httpbin.org/get
    methodCOMBO4 options: GET, POST, PUT, DELETE
    headersSTRING{"Content-Type": "application/json"}
    bodySTRING{}
    timeoutoptFLOAT10.001–60

    Outputs (4)

    NameTypeDescription
    response_jsonJSON
    response_textSTRING
    status_codeINT
    response_headersJSON