Skip to content
Hoody.com

The HTTP Request Execution surface lets you invoke libcurl against any target URL, optionally as a background job, and stream lifecycle events back to your client. This page documents the synchronous GET and POST execution endpoints, the SSE and WebSocket event streams, and the multiplexed WebSocket execution channel.

Execute a single HTTP request whose configuration is fully encoded in the URL query string. This form is intended for simple GETs and quick testing; for advanced configuration (retry policy, scheduling, proxies, session cookies) use the POST variant.

NameInTypeRequiredDescription
urlquerystringYesTarget URL (required)
methodquerystringNoHTTP method (default: GET)
responsequerystringNoResponse mode: transparent or json (default: json)
modequerystringNoExecution mode: sync or async (default: sync)
session_idquerystringNoSession ID for cookie persistence
follow_redirectsquerybooleanNoFollow redirects (default: true)
timeoutqueryintegerNoTimeout in seconds
user_agentquerystringNoUser-Agent header
refererquerystringNoReferer header
bearer_tokenquerystringNoBearer token
savequerybooleanNoSave to storage
save_pathquerystringNoCustom save path, relative to downloads/by-job/{job_id} (no absolute paths or ..)
insecurequerybooleanNoAllow insecure SSL
compressedquerybooleanNoRequest compressed
job_namequerystringNoJob name for async
dataquerystringNoRaw request body (curl --data); alias body; presence upgrades default method to POST
jsonquerystringNoJSON request body, sent with Content-Type: application/json (curl --json); upgrades default method to POST
headerqueryarrayNoCustom header as Name: Value. Repeatable — supply once per header
data_base64querystringNoBase64 request body (binary-safe; standard or URL-safe); alias body_base64. Takes precedence over data/json; upgrades default method to POST
Terminal window
curl -G "https://proj-abc123-cnt-xyz789-curl-1.us-east-1.containers.hoody.icu/api/v1/curl/request" \
--data-urlencode "url=https://api.github.com/zen" \
--data-urlencode "method=GET" \
--data-urlencode "response=json" \
--data-urlencode "timeout=30" \
--data-urlencode "header=Accept: application/json" \
--data-urlencode "header=X-Trace-Id: req-7f3a"

Execute an HTTP request using libcurl with full configuration. Supports both sync (immediate response) and async (background job) execution modes, plus transparent and json response modes.

Common use cases include API integrations with automatic retry, large file downloads with progress tracking, multi-step authentication flows with session cookies, and scheduled recurring requests via cron expressions.

This endpoint takes no parameters.

Pass the request configuration as a JSON body. The body is validated against the cURL request schema; unknown fields are rejected.

Terminal window
curl -X POST "https://proj-abc123-cnt-xyz789-curl-1.us-east-1.containers.hoody.icu/api/v1/curl/request" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/v1/orders",
"method": "POST",
"headers": {
"Accept": "application/json",
"X-Trace-Id": "ord-7f3a"
},
"bearer_token": "eyJhbGciOi...",
"json": {
"sku": "HOODY-001",
"qty": 2
},
"response": "json",
"mode": "sync",
"follow_redirects": true,
"timeout": 30,
"retry_count": 3,
"retry_delay": 1000
}'

These endpoints stream lifecycle events for asynchronous jobs. Use them to track progress without polling.

Establish a Server-Sent Events connection. Each lifecycle event is delivered as a standard SSE frame with event: set to the message type and data: containing the JSON payload.

Events emitted:

  • jobstarted — data {job_id, name}
  • jobprogress — data {job_id, progress}
  • jobcompleted — data {job_id, status}
  • error — data {message}
  • lagged — data {missed}; emitted if the broadcast subscriber falls behind

Pass ?job_id= to filter the stream to a single job. The Last-Event-Id header is accepted for spec compliance but ignored (no replay buffer is maintained). The connection counts against a global SSE concurrency cap; when exhausted the server returns 503 with Retry-After: 5.

NameInTypeRequiredDescription
job_idquerystringNoOptional job ID filter
Terminal window
curl -N "https://proj-abc123-cnt-xyz789-curl-1.us-east-1.containers.hoody.icu/api/v1/curl/sse?job_id=01HMZ8X9K2QF3N5P7R8T6V4WYD"

Establish a WebSocket connection that receives job lifecycle events as JSON messages.

Messages:

  • jobstarted{job_id, name}
  • jobprogress{job_id, progress} (progress is a 0..=1 fraction)
  • jobcompleted{job_id, status}
  • error{message}

Pass the job_id query parameter to filter events to a single job. Use the job snapshot endpoint (getJob) for point-in-time state, and this WebSocket for live updates.

NameInTypeRequiredDescription
job_idquerystringNoOptional job ID filter
Terminal window
curl --include \
--no-buffer \
--header "Connection: Upgrade" \
--header "Upgrade: websocket" \
--header "Sec-WebSocket-Version: 13" \
--header "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
"https://proj-abc123-cnt-xyz789-curl-1.us-east-1.containers.hoody.icu/api/v1/curl/ws?job_id=01HMZ8X9K2QF3N5P7R8T6V4WYD"

Establish a persistent WebSocket connection for multiplexed, validated CurlRequest execution. Each upstream response is fully buffered by hoody-curl before response body chunks are emitted as WebSocket frames.

Query parameters configure per-connection limits. The connection counts against the global SSE/WebSocket concurrency budget.

NameInTypeRequiredDescription
max_concurrentqueryintegerNoAlias for max concurrent streams on this channel connection
max_concurrent_streamsqueryintegerNoMaximum concurrently executing streams on this channel connection
max_poolqueryintegerNoAlias for max_concurrent; does not configure outbound libcurl connection pooling
max_queuequeryintegerNoMaximum queued streams waiting for a per-connection execution slot
max_frame_bytesqueryintegerNoMaximum inbound WebSocket text frame size in bytes
max_request_bytesqueryintegerNoMaximum assembled request JSON size in bytes
chunk_bytesqueryintegerNoMaximum upstream response bytes encoded into one channel body frame
stream_timeout_secsqueryintegerNoPer-stream execution timeout in seconds
idle_timeout_secsqueryintegerNoIdle channel timeout in seconds
max_outbound_messagesqueryintegerNoMaximum queued outbound channel messages
Terminal window
curl --include \
--no-buffer \
--header "Connection: Upgrade" \
--header "Upgrade: websocket" \
--header "Sec-WebSocket-Version: 13" \
--header "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
"https://proj-abc123-cnt-xyz789-curl-1.us-east-1.containers.hoody.icu/api/v1/curl/channel?max_concurrent_streams=4&max_queue=16&max_frame_bytes=262144&chunk_bytes=65536&stream_timeout_secs=30&idle_timeout_secs=120"