Skip to content

Get the status of a job

GET /api/jobs/{jobId}

Get the progress and outcome of a job that runs in the background. Actions that take time, such as restarting a VPS or changing nameservers in bulk, answer with operation.jobId and operation.pollUrl. Call this endpoint with that ID until data.status is completed or failed. When the job finishes, data.result holds what it returned. When it fails, data.error is set, most often to Job failed. data.progressText explains the failure when more is known. This endpoint is older than v2. The job is wrapped in data. Errors are plain JSON with code and message, not Problem Details. Domain availability checks (dcheck_… IDs) are polled at GET /api/v2/domains/availability/{jobId} instead. Web hosting backup restores are polled at the pollUrl their action returns.

Authentication: Any API key. About keys and scopes

Request

Path parameters

jobIdstringrequired
The job ID from the action response, operation.jobId (job_… or dbj_…). Letters, digits, _, - and : only.

Example

GET /api/jobs/{jobId}
curl "https://cloud.hostup.se/api/jobs/job_01hxa3b4c5d6e7f8g9h0j1k2m3" \
-H "Authorization: Bearer $HOSTUP_API_KEY"

Responses

200 The job’s current status.

{
"success": true,
"timestamp": "2026-11-02T10:15:20.000Z",
"requestId": "11111111-1111-1111-1111-111111111111",
"data": {
"jobId": "job_01hxa3b4c5d6e7f8g9h0j1k2m3",
"queueType": "vm",
"type": "restart",
"state": "active",
"status": "running",
"progress": 70,
"progressText": "Restarting VM...",
"statusKey": "instance.jobs.restarting_vm",
"progressDetailText": null,
"progressDetails": null,
"result": null,
"error": null,
"isCompleted": false,
"isFailed": false,
"isRunning": true,
"isWaiting": false,
"createdAt": "2026-11-02T10:15:02.000Z",
"finishedAt": null
}
}
Response fields
successboolean
Always true on a 200 response. One of true.
timestampstring
When the response was made.
requestIdstring
ID of this request. Quote it when you contact support.
dataobject
jobIdstring
The job ID you asked for.
queueTypestring or null
What kind of resource the job works on: vm for a VPS, domain or dns for domains and DNS, order for an order.
typestring or null
What the job does, for example restart, backup, rebuild or bulk_dns_add.
statestring or null
Detailed state, for example waiting, delayed, active, completed or failed. Branch on status instead.
statusstring
waiting: queued, not started. running: in progress. completed and failed are final; stop polling when you see one of them. One of waiting, running, completed, failed.
progressnumber
How far the job has come, in percent.
progressTextstring or null
Short English text about the current step, for example Restarting VM....
statusKeystring or null
Stable key for progressText, for clients that show their own translated text.
progressDetailTextstring or null
Extra detail about the current step, when the job reports one.
progressDetailsobject or null
Counters for jobs that work through a list, such as bulk domain changes. Orders and bulk domain renewals also give items, one row per order line or domain. null when the job reports none.
resultany
What the job returned. The shape depends on type. null until the job has finished. A job that finished with a warning still has status: completed; the warning is in result.warning.
errorstring or null
null, or a short message about an error. A failed job most often says Job failed.; ISO downloads say what went wrong with the link. A job that is retrying a step, or that completed after a retry, can show Job reported an error. Decide on status, not on error.
isCompletedboolean
true when status is completed.
isFailedboolean
true when status is failed.
isRunningboolean
true when status is running.
isWaitingboolean
true when status is waiting.
createdAtstring or null
When the job was created.
finishedAtstring or null
When the job finished. null while it runs.

Errors

Errors are Problem Details with a stable code. Branch on the code, not on the text.

400The job ID has characters other than letters, digits, _, - and :.
401No valid API key was sent.
403The job belongs to another account or to a service your key cannot see.
404No job has this ID. Finished jobs are kept only for a limited time. A completed job is kept for at most 24 hours. It goes sooner once it is no longer among the newest 100 completed jobs of its kind, counted over all accounts (20 to 50 for DNS jobs). On a busy day that can take minutes. A failed job is kept for up to 7 days. After a 404 for a job you saw running, check the resource itself. For a backup, list the backups. Web hosting backup restores and domain availability checks (dcheck_…) answer 404 here too. Poll them at the pollUrl their action returned.
429Too many requests. Two limits apply. They answer differently. The limit per IP address sends a Retry-After header and retryAfter in the body, without code. Wait that many seconds, then poll again. The API key’s own limit of 300 requests per five minutes answers with code API_KEY_RATE_LIMIT_EXCEEDED and the message Rate limit exceeded. It sends no Retry-After header and no retryAfter. Wait up to five minutes before you poll again.
500Something went wrong on our side. Poll again later.