After you run a job, this is how you find out what actually happened -- Worker executes runs asynchronously, so starting one only tells you it was queued, not how it went.
Having trouble reaching the API, or logging in from another machine? See Network Access & Authentication Security -- by default the Api only answers
localhost, and PowerShell needs an extra flag once it does answer elsewhere.
Order of Operations
- Authenticate to the API.
- Check the run's status, using the
jobIdandrunCorrelationIdRun a Job handed back.
The call
GET /api/jobs/{jobId}/manual-run-request/{runCorrelationId}
{jobId} is the same job id you started the run against. {runCorrelationId} is the value Run a Job handed back when you queued it.
Permission needed: Job.View on this job.
C# example
var jsonOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web);
// Step 1: Authenticate to the API.
using var handler = new HttpClientHandler { UseDefaultCredentials = true };
using var client = new HttpClient(handler) { BaseAddress = new Uri("http://your-minion-agent-server:5443") };
client.DefaultRequestHeaders.Add("X-App-Name", "MyIntegration");
// Step 2: Check the run's status.
var jobId = 42; // from Get a Job by Name / List Jobs
var runCorrelationId = Guid.Parse("3fa85f64-5717-4562-b3fc-2c963f66afa6"); // from Run a Job's response
var response = await client.GetAsync($"/api/jobs/{jobId}/manual-run-request/{runCorrelationId}");
if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
{
Console.WriteLine("Still queued or running -- nothing to report yet.");
}
else
{
response.EnsureSuccessStatusCode();
var status = await response.Content.ReadFromJsonAsync<RunStatus>(jsonOptions);
Console.WriteLine($"{status!.RunStatusName} (ended: {status.EndedAt?.ToString() ?? "not yet"})");
}
record RunStatus(long ManualJobRunId, byte RunStatusCode, string RunStatusName, DateTime StartedAt, DateTime? EndedAt);
Not on a domain machine? Swap in the app-account login from Calling the API From Your Own Code, same as Run a Job.
PowerShell example
# Step 1: Authenticate to the API.
$headers = @{ "X-App-Name" = "MyIntegration" }
# Step 2: Check the run's status. (-AllowUnencryptedAuthentication: PowerShell requires this for Windows auth over plain http to anything but localhost -- see "Network Access & Authentication Security".)
$jobId = 42 # from Get a Job by Name / List Jobs
$runCorrelationId = "3fa85f64-5717-4562-b3fc-2c963f66afa6" # from Run a Job's response
try {
$status = Invoke-RestMethod -Uri "http://your-minion-agent-server:5443/api/jobs/$jobId/manual-run-request/$runCorrelationId" `
-UseDefaultCredentials -AllowUnencryptedAuthentication -Headers $headers
"$($status.runStatusName) (ended: $($status.endedAt ?? 'not yet'))"
}
catch [Microsoft.PowerShell.Commands.HttpResponseException] {
if ($_.Exception.Response.StatusCode -eq 404) {
"Still queued or running -- nothing to report yet."
} else {
throw
}
}
What you get back
200 OK once a result exists:
{
"manualJobRunId": 8817,
"runStatusCode": 2,
"runStatusName": "Succeeded",
"startedAt": "2026-09-17T01:42:03Z",
"endedAt": "2026-09-17T01:42:19Z"
}
endedAt is null while the run is still in progress. A 404 (see below) is what you get before the run has started or produced any row at all -- that's the normal state right after queueing, not an error.
Codes this call can return
See API Response Codes for what each one means in general. For this specific call:
- 200 -- a status exists; check
endedAtto see if it's actually finished. - 403 -- you don't have
Job.Viewon this job. - 404 -- no result yet for this
runCorrelationId(still queued or running), or the id is wrong.
See also: Run a Job.