---
title: "My On-Call Status"
description: "Your own on-call duty across all teams: whether you are on call now, upcoming shifts, overrides, and your on-call hours."
---

`GET /api/im/me/on-call` · `GET /api/im/me/on-call-stats`

The personal view of on-call: whether **you** are on call right now, in which teams, what is coming up, and how many hours you were on call. To see who is on call in general, use [Who Is On Call](/api/incident-management/on-call).

## Authentication

Any IM-eligible role (`admin`, `editor`, `responder`) with a **user session**. Incident Management must be enabled for the organization. These endpoints describe a person, so an organization-wide API token receives `403` (`imUserSessionRequired`): a token has no shift and no pager.

## My current duty

`GET /api/im/me/on-call`

Resolved the same way the paging engine resolves it, including team-level overrides. `upcomingShifts` looks two weeks ahead.

### Example (cURL)

```bash
curl -X GET "$BASE_URL/api/im/me/on-call" \
  -b "$SESSION_COOKIE" \
  -H "Accept: application/json"
```

### Response

```json
{
  "currentlyOnCall": true,
  "currentTeams": [
    { "teamId": 7, "teamName": "Platform", "tierOrder": 1 }
  ],
  "currentShift": {
    "teamId": 7,
    "teamName": "Platform",
    "tierOrder": 1,
    "startsAt": "2026-10-10T07:00:00.000Z",
    "endsAt": "2026-10-11T07:00:00.000Z",
    "scheduleName": "Platform primary"
  },
  "upcomingShifts": [
    {
      "teamId": 7,
      "teamName": "Platform",
      "scheduleId": 12,
      "scheduleName": "Platform primary",
      "startsAt": "2026-10-17T07:00:00.000Z",
      "endsAt": "2026-10-18T07:00:00.000Z",
      "isOverride": false
    }
  ],
  "myOverrides": [
    {
      "id": 91,
      "teamId": 7,
      "teamName": "Platform",
      "scheduleId": 12,
      "type": "offline",
      "startsAt": "2026-10-12T18:00:00.000Z",
      "endsAt": "2026-10-12T22:00:00.000Z",
      "coveredBy": [{ "userId": "u_8f2", "name": "Mara" }]
    }
  ],
  "degraded": false
}
```

| Field | Description |
|-------|-------------|
| `currentlyOnCall` | Whether you are paged for new incidents right now in at least one team. |
| `currentTeams` | Teams you are on call in now. `tierOrder` is the lowest tier you are in, the one that is paged first. |
| `currentShift` | The running duty with its real start and end, across back-to-back shifts and overrides. When you are on call in several teams, the one that runs longest. `startsAt` is `null` when the duty began more than two weeks ago, `endsAt` is `null` when it does not end within two weeks. `scheduleName` is `null` when the duty comes only from a team-level override. `null` when you are not on call. |
| `upcomingShifts` | Your shifts starting within the next two weeks. `isOverride` marks shifts that come from an override. |
| `myOverrides` | Your own overrides that are running or still ahead (`type` `online` = you take duty, `offline` = you hand it off). For an offline override, `coveredBy` lists who holds the pager meanwhile, the last entry is the one paged; it is empty for online overrides and for an offline override left as a gap. |
| `degraded` | `true` when the status of at least one team could not be resolved. `currentlyOnCall` is then a lower bound: treat it as "status incomplete", not as "off duty". |

## My on-call hours

`GET /api/im/me/on-call-stats`

Your on-call time this week, this month and in the last 30 days, each with the previous period of the same kind.

### Query parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `tz` | string | No | IANA time zone, e.g. `Europe/Berlin`. Decides where a week (Monday 00:00) and a month (1st, 00:00) begin. Unknown or missing: `UTC`. |

### Example (cURL)

```bash
curl -X GET "$BASE_URL/api/im/me/on-call-stats?tz=Europe/Berlin" \
  -b "$SESSION_COOKIE" \
  -H "Accept: application/json"
```

### Response

```json
{
  "timeZone": "Europe/Berlin",
  "week": { "seconds": 25200, "previousSeconds": 23700 },
  "month": { "seconds": 90000, "previousSeconds": 0 },
  "last30": { "seconds": 309600, "previousSeconds": 174600 }
}
```

Current periods run up to now, previous periods are the whole period before. `timeZone` is the zone actually used.

## Common errors

- `401 Unauthorized` when not authenticated
- `403 Forbidden` (`customerScopedTokenForbidden`) when using a customer-scoped token
- `403 Forbidden` (`imUserSessionRequired`) when calling with an organization-wide API token
- `403 Forbidden` (`imAccessDenied`) when the caller has no IM-eligible role or no organization
- `403 Forbidden` (`imNotEnabled`) when Incident Management is not enabled for the organization
