Skip to content
Hoody.com

Create async background jobs for candidate searches and poll their status. Use these endpoints when a search or sync operation may take longer than a synchronous request can wait — submit a job, receive a handle, then poll until completion.

POST /api/v1/run/search/jobs

Queue a candidate search in the background and return a job handle that can be polled through the jobs endpoint.

This endpoint takes no parameters.

The body is a run_Selector object describing the candidate search. Only app is required; the remaining fields narrow or shape the result.

{
"app": "firefox",
"os": "linux",
"kind": "gui",
"source": ["nix", "appimage"],
"limit": 25,
"pick": "first"
}
{
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "search-resolve",
"status": "queued",
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z"
}
const { data: job } = await client.run.jobs.createSearchJob({
app: "firefox",
os: "linux",
kind: "gui"
});
console.log(job.job_id);
Terminal window
curl -X POST "https://proj-abc123-cont-xyz789-run-1.us-east-1.containers.hoody.icu/api/v1/run/search/jobs" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"app": "firefox",
"os": "linux",
"kind": "gui"
}'

GET /api/v1/run/jobs/{job_id}

Retrieve the current status of an async background job. Supports long-polling with wait=done to block until the job completes or a timeout is reached.

NameInTypeRequiredDescription
job_idpathstringYesJob identifier (UUID)
waitquerystringNoSet to done to long-poll until job completes
timeout_msqueryintegerNoLong-poll timeout in milliseconds (default 0, max 120000)
{
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"kind": "search-resolve",
"status": "done",
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:05Z",
"result_type": "search-response",
"result": {
"candidates": []
}
}
// Simple poll
const { data: status } = await client.run.jobs.getJobStatus(
"550e8400-e29b-41d4-a716-446655440000"
);
// Long-poll until the job completes (or 30s timeout)
const { data: done } = await client.run.jobs.getJobStatus(
"550e8400-e29b-41d4-a716-446655440000",
{ wait: "done", timeout_ms: 30000 }
);
Terminal window
curl "https://proj-abc123-cont-xyz789-run-1.us-east-1.containers.hoody.icu/api/v1/run/jobs/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer <token>"
Terminal window
# Long-poll until the job completes or 30s elapses
curl "https://proj-abc123-cont-xyz789-run-1.us-east-1.containers.hoody.icu/api/v1/run/jobs/550e8400-e29b-41d4-a716-446655440000?wait=done&timeout_ms=30000" \
-H "Authorization: Bearer <token>"