---
title: "Read activity with a contact"
description: "The numbers behind the Activity tab on a contact in the app, over a window that ends now: messages received from the address and sent to it per bucket, the threads that moved, the threads waiting on a reply from the mailbox, when each side last wrote, and the median time each side takes to answer."
url: "https://openemail.uk/docs/api/contacts/activity"
area: "API"
category: "Mailbox"
---

# Read activity with a contact

The numbers behind the Activity tab on a contact in the app, over a window that ends now: messages received from the address and sent to it per bucket, the threads that moved, the threads waiting on a reply from the mailbox, when each side last wrote, and the median time each side takes to answer.

`GET /contacts/{email}/activity`

## GET /contacts/{email}/activity

The numbers behind the Activity tab on a contact in the app, over a window that ends now: messages received from the address and sent to it per bucket, the threads that moved, the threads waiting on a reply from the mailbox, when each side last wrote, and the median time each side takes to answer.

## Example

Needs `threads:read`. `minutes` sets how far back the window reaches and defaults to 90 days; `grain` is `minute`, `hour` or `day`; `offsetMinutes` is the reader's offset from UTC.

**curl**

```
curl "$OE/contacts/ada%40example.com/activity?minutes=43200&grain=day&offsetMinutes=120" -H "$AUTH"
```

**Response**

```
{
  "object": "contact_activity",
  "email": "ada@example.com",
  "since": "2026-08-24T22:00:00.000Z",
  "until": "2026-09-23T10:30:00.000Z",
  "grain": "day",
  "buckets": [
    { "bucket": "2026-09-21", "received": 2, "sent": 1 },
    { "bucket": "2026-09-22", "received": 1, "sent": 0 }
  ],
  "totals": {
    "received": 3,
    "sent": 1,
    "threads": 2,
    "waiting": 1,
    "lastReceivedAt": "2026-09-22T16:04:11.000Z",
    "lastSentAt": "2026-09-21T09:40:00.000Z"
  },
  "replyTime": { "yours": 5400000, "theirs": 12600000 }
}
```

> `buckets` holds only the buckets with mail in them, oldest first, keyed in the reader's time, so a chart fills the gaps. `waiting` counts the threads whose newest message is from this address.

> `replyTime` is the median in milliseconds, `yours` for the mailbox answering them and `theirs` for them answering the mailbox, and null when there is no reply to measure. Mail in the bin or in spam is left out.
