Skip to content

Execute HTTP requests with full libcurl configuration, manage asynchronous background jobs, and subscribe to real-time job lifecycle events over WebSocket. The execution API supports both synchronous (immediate response) and asynchronous (background job) modes, with options for response wrapping, cookie sessions, retries, proxy configuration, and automatic response storage.


Simplified interface for executing HTTP requests using URL query parameters. Best suited for simple GET requests and quick testing. For advanced features, use the POST variant.

NameInTypeRequiredDescription
urlquerystringYesTarget URL
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
headerquerystringNoCustom 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 -X GET "https://api.hoody.com/api/v1/curl/request?url=https%3A%2F%2Fapi.example.com%2Fdata&method=GET&response=json&timeout=30"

Execute an HTTP request using libcurl with comprehensive configuration options. Supports both synchronous (immediate response) and asynchronous (background job) execution modes. Includes advanced features like retry logic, cookie sessions, proxy configuration, and automatic response storage.

Execution Modes:

  • sync (default): Blocks until completion, returns immediate response
  • async: Returns job ID immediately, executes in background

Response Modes:

  • transparent (default): Returns raw response with original headers
  • json: Wraps response in JSON with timing metrics and metadata

Example Use Cases:

  • API integration with automatic retry
  • Large file downloads with progress tracking
  • Multi-step authentication flows with session cookies
  • Scheduled recurring requests with cron expressions

This endpoint takes no query, path, or header parameters.

The request body uses the curl_CurlRequest schema. url is the only required field; all other fields are optional. Unknown fields are rejected.

Terminal window
curl -X POST "https://api.hoody.com/api/v1/curl/request" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/v1/orders",
"method": "POST",
"mode": "sync",
"response": "json",
"headers": {
"Content-Type": "application/json",
"X-Request-ID": "req-7f3a9b"
},
"json": {
"sku": "WDG-001",
"quantity": 2
},
"bearer_token": "eyJhbGciOiJIUzI1NiIs...",
"timeout": 30,
"retry_count": 3,
"retry_delay": 5,
"follow_redirects": true
}'

Establish a WebSocket connection that receives job lifecycle events in JSON.

Messages:

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

Filtering:

  • Pass the job_id query parameter to only receive events for a single job.
NameInTypeRequiredDescription
job_idquerystringNoOptional job ID filter
const ws = new WebSocket("wss://api.hoody.com/api/v1/curl/ws?job_id=01HMZ8X9K2QF3N5P7R8T6V4WYD");
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
switch (msg.event) {
case "jobstarted":
console.log(`Job ${msg.job_id} started: ${msg.name}`);
break;
case "jobprogress":
console.log(`Job ${msg.job_id} progress: ${(msg.progress * 100).toFixed(1)}%`);
break;
case "jobcompleted":
console.log(`Job ${msg.job_id} finished: ${msg.status}`);
break;
case "error":
console.error(`Error: ${msg.message}`);
break;
}
};