Returns every job Minion Agent knows about -- this is how you find a job's id before you can run it or do anything else that needs one. There's no filtering or paging built in; it always returns the full list, so find the one you want by name on your own side. Already know the exact name and just want its id? Get a Job by Name does that in one call instead.
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.
- Request the job list.
The call
GET /api/jobs
No route parameters, no query parameters, no request body.
Permission needed: Job.View.
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: Request the job list.
var jobs = await client.GetFromJsonAsync<JobSummary[]>("/api/jobs", jsonOptions);
var job = jobs!.FirstOrDefault(j => j.JobName == "Nightly ETL Load");
if (job is null)
{
Console.WriteLine("No job with that name.");
}
else
{
Console.WriteLine($"Job id: {job.JobID}");
}
record JobSummary(int JobID, string JobName, string? Description, int? FolderId, bool IsActive,
DateTime CreatedAt, DateTime? ModifiedAt, int? TargetServerId, string? TargetServerName,
string? WorkerName, bool IsGlobal, DateTime? DeletedAt);
Not on a domain machine? Swap in the app-account login from Calling the API From Your Own Code, same as every other page here.
PowerShell example
# Step 1: Authenticate to the API.
$headers = @{ "X-App-Name" = "MyIntegration" }
# Step 2: Request the job list. (-AllowUnencryptedAuthentication: PowerShell requires this for Windows auth over plain http to anything but localhost -- see "Network Access & Authentication Security".)
$jobs = Invoke-RestMethod -Uri "http://your-minion-agent-server:5443/api/jobs" -UseDefaultCredentials -AllowUnencryptedAuthentication -Headers $headers
$job = $jobs | Where-Object { $_.jobName -eq "Nightly ETL Load" }
if (-not $job) {
"No job with that name."
} else {
"Job id: $($job.jobID)"
}
What you get back
200 OK, with an array -- one entry per job:
[
{
"jobID": 42,
"jobName": "Nightly ETL Load",
"description": "Loads the warehouse tables from the OLTP source.",
"folderId": 3,
"isActive": true,
"createdAt": "2026-01-14T09:00:00Z",
"modifiedAt": "2026-08-30T14:22:11Z",
"targetServerId": 7,
"targetServerName": "SQLPROD01",
"workerName": null,
"isGlobal": false,
"deletedAt": null
}
]
jobID is what you pass to Run a Job and Check a Job Run's Status. deletedAt is always null here -- this call only ever returns active jobs, not trashed ones.
Codes this call can return
See API Response Codes for what each one means in general. For this specific call:
- 200 -- the list, even if it's empty.
- 403 -- you don't have
Job.Viewanywhere.
See also: Get a Job by Name, Run a Job, Check a Job Run's Status.