# List services that aren't running

`GET https://api.mailmasker.org/api/v1/admin/agent/status/mismatches`

Only the services whose running state doesn't match what their node declares.

- Who can use it: Site admins
- Area: Fleet and status
- Answers 200 OK when it works
- Page: https://developer.mailmasker.org/admin-service-problems

The rows of the service list where `expected` and `actual` differ. Agents report only the services their node declares, so in practice each row is a service that should be running and isn't. An empty list means everything declared is running.

## Good to know

- Yes-or-no fields come back as 1 or 0.
- A node that has gone quiet keeps its last report, so its services don't show up here; look for it in the node list or on the fleet map.

## Examples

cURL:

```bash
curl -s 'https://api.mailmasker.org/api/v1/admin/agent/status/mismatches' \
  -H "Authorization: Bearer $TOKEN"
```

Perl:

```perl
use Mojo::Base -strict;
use Mojo::UserAgent;

my $ua  = Mojo::UserAgent->new;
my $res = $ua->get('https://api.mailmasker.org/api/v1/admin/agent/status/mismatches',
    { Authorization => "Bearer $ENV{TOKEN}" })->result;
die $res->code, ' ', ($res->json('/error') // $res->message), "\n" unless $res->is_success;
print $res->body, "\n";
```

homelab-cli:

```bash
homelab-cli admin fleet drift
```

## Response

200 OK:

```json
[
  {
    "hostname": "prod-homelab13",
    "service_name": "drive",
    "package_name": "homelab-drive",
    "kind": "http_service",
    "expected": 1,
    "actual": 0,
    "description": "File storage web app + JSON API, serves /api/v1/drive/*",
    "fronts": null,
    "checked_at": "2026-11-03 21:41:47.880315-06"
  }
]
```
