banshee/services-collection/services/veeam/https/
jobs
The last result, state and age of the last success of each job of a Veeam Backup & Replication 12 or later, by its REST API.
by banshee1 installation2 versions
v2Latest
Published on October 28, 2026. One naming convention across collections; documentation completed.
Veeam Backup & Replication jobs, by its API
Returns, for each job of a Veeam Backup & Replication server, the result of its last run, its state, and the age of its last run that succeeded, read through its REST API. A job that fails says it at once; a job that no longer runs says it by the age of its last success, which grows. Four watches are offered, each one set on the probe.
Versions
Veeam Backup & Replication 12 and later, whose REST API serves the jobs and the sessions; the collector asks for the revision of the API 1.1-rev0, that of 12.0.0.1420, in which the routes and filters it reads already exist. Veeam's table of revisions gives it as served by 12.x, and as deprecated from 13.0: still served, but expected to become unsupported in a later version. Generic: no folder of version. Version 11 (revisions 1.0, now unsupported) has no route for the job states.
How it works
POST https://<host:address>:9419/api/oauth2/token, with the headerx-api-version: 1.1-rev0and the formgrant_type=password&username=…&password=…: an access token, kept ten minutes in the probe's cache, encrypted on the poller. A token Veeam no longer knows answers 401, and the collector logs in again, once.GET https://<host:address>:9419/api/v1/jobs/states?limit=200&skip=…, with the token asAuthorization: Bearer, page after page:
{"data": [{"id": "6d0b8c6e-…", "name": "Daily VMs", "type": "Backup", "status": "inactive", "lastResult": "Success", "lastRun": "2026-10-26T01:00:03.123+01:00", "nextRun": "…"}], "pagination": {"total": 12, "count": 12, "skip": 0, "limit": 200}} - For each job that is not disabled,
GET https://<host:address>:9419/api/v1/sessions?jobIdFilter=<id>&limit=1&orderAsc=false&orderColumn=CreationTime&resultFilter=Success, and the same withresultFilter=Warning: the newest session that ended in each.
- A job is named by its name; two jobs of one name each keep their own, the second carrying its id.
resultislastResultin lower case:success,warning,failed, ornonefor a job never run.stateisrunning,inactiveordisabled.success-ageis the time since the end (endTime) of the newer of the two sessions, in hours, against the poller's clock: a run that ended in Warning made its restore points, and counts as a success. It is not returned for a disabled job, nor for a job without any successful session in the history Veeam keeps.- A code 400, 401 or 403 on the login stops the collector
misconfigured(the account refused), a code 403 on a list too; any other code but 200 stops itunreachable.
The password comes from protocol:http:password, a secret variable: it goes in the body of the login only, to https:// only. The token is a secret too, kept in the cache and sent in a header. The lists are not secret.
Prerequisites
- The address of the backup server as the host's address, reachable from the poller in HTTPS on port 9419, or the port set in the variable
veeam:port. The REST service presents the certificate made at install, self-signed by default: trust it by its pinned fingerprint inprotocol:http:fingerprint, by its authority underprotocol:tls:authorities, or by the first fingerprint trusted in the tab "Security". - An account of the backup server's domain or machine in
protocol:http:user(DOMAIN\monitoring, ormonitoring@domain.example) and its password inprotocol:http:password, given the role Veeam Backup Viewer, read-only, in the console (Users and Roles).
Variables
| Name | Label | Says | Default |
|---|---|---|---|
veeam:port | API port | the port of the REST API | 9419 |
Outputs
| Name | Label | Unit | Per instance |
|---|---|---|---|
result | Last result | — | yes, per job |
state | State | — | yes, per job |
success-age | Age of the last success | h | yes, per job |
Watches
| Name | Title | Kind | Defaults | Checked by default |
|---|---|---|---|---|
failed | Job failed | state to avoid, on result | warning on warning, critical on failed | yes |
old | Last success too old | above a threshold, on success-age | warning above 30 h, critical above 54 h: a daily job missed once, then twice | yes |
disabled | Job disabled | state to avoid, on state | warning on disabled | no |
missing | Job missing | expected instances, on result | no name given: it raises nothing until names are set on the probe | no |
A job that runs weekly needs its own probe, with "Last success too old" raised above a week; leave it out of the others by their selection (Jobs: All except Weekly*).
Limits
- Two requests per job at each run, besides the list: a server of a few hundred jobs makes as many requests.
- Every kind of job the API lists is judged (backup, replication, backup copy, agent); the jobs of the Veeam Agent managed alone, and of Veeam for Microsoft 365, are not in this API.
- The address is written into the URL as is: an IPv6 address must be given as a name.
- A version of Veeam that stops serving the revision
1.1-rev0will refuse the requests: the collector stopsunreachablewith the code it answers, and needs a version written for a newer revision. - Not checked against a Veeam Backup & Replication: the routes, parameters, fields and revisions are those of the REST API reference of Veeam Backup & Replication (helpcenter.veeam.com: "Jobs", "Sessions" and the table of revisions, read in revision
1.1-rev0); the role Veeam Backup Viewer reading them is not checked.