HTTP POST
Ping a URL when a workflow finishes — webhooks straight from the graph
- body
- status_code
HTTP POST is the node that lets a running ComfyUI graph reach out and touch the rest of your stack. Stick it at the end of a workflow and it fires a real POST request with a JSON body - to a Discord webhook, your own API, a notification service, whatever. If you've ever wanted the workflow itself to tell the outside world "I'm done, here's the result," this is that missing piece.
Why you'd reach for it
ComfyUI is increasingly run as a headless server on a box in the corner, and the workflow is just one stage in a bigger pipeline. This node is the glue for that. Send a completion ping, log generations to your own backend, trigger a next step in an automation chain. There are fancier solutions (the ComfyUI API itself, or workflow runner frameworks), but sometimes you just want the graph to make a web request when it's finished - no extra services, no keys.
How it works
Under the hood it's one call: requests.post(url, json=body). The node takes the body dict, serializes it to JSON, and ships it. The status_code it gets back comes out of the node, and it also prints the response to the ComfyUI console so you can watch what the server said.
Here's the part that makes it useful: the body input is typed DICT, and this pack exists to build dicts. Chain Empty Dict → Assoc Str → HTTP POST and you can assemble JSON fields like {"job_id": "abc", "prompt": "a cat"} inside the graph, no coding. The Assoc Img node even turns an image into a base64 data-URI string, so you can POST an actual picture plus its metadata in one shot.
The inputs that matter
- url (STRING) - where the POST goes. Required, no default.
- body (DICT) - the JSON payload. Build it with the pack's dict nodes; a bare Empty Dict gives you
{}. - status_code (INT, output) - the HTTP response code. It's an output node, so it runs at the end of the graph and marks the workflow complete.
Installing it
From ComfyUI Manager, search easy-comfy-nodes and install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/wmatson/easy-comfy-nodes
# restart ComfyUI
The pack pulls in requests, boto3, rembg, pillow-avif-plugin and pillow-heif on install. This node only really needs requests, but you get the whole bundle - that's normal for a pack, and it's worth knowing because the heavier deps are why the install can take a minute.
Where people get burned
- No timeout in the code. The
requests.postcall has notimeout=set, so a dead or hanging endpoint will stall your workflow until the OS gives up. Point it at something you control or at least something reliable. - No headers. You can't set auth headers directly - if your endpoint needs a token, you'll have to smuggle it in the URL or the body.
- It blocks. The node waits for the server's response before the graph moves on. Usually fine, but don't expect fire-and-forget.
- Security-wise, this is real network I/O from your machine. Same caution as any custom node: you're running the author's code and making requests from your box, so install packs from people you have reason to trust.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | — | |
| body | DICT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| status_code | INT | — |