EmailgisticsAPI
API referenceReports

Mailbox User Performance

Per-user reply and close performance for a mailbox and date range. Async, paginated, supports field groups.

Returns user-level reply and close performance for a mailbox, grouped by time period. Mirrors the User Performance and User Closed Performance reports in Emailgistics Admin.

POST/api/v1/reports/mailboxUserPerformance
Auth
Bearer API key — requires reporting scope
Async
Yes — see Result envelope and async polling
Pagination
Yes — see Pagination

Authorization

The API key must include the reporting scope and have the requested mailboxId in its mailbox allowlist. A missing scope returns 403; a mailboxId outside the allowlist returns 404.

Query parameters

fieldGroup?stringdefault replyData

Comma-separated list of field groups to include in the result. Defaults to replyData. See Field groups.

includeDetails?booleandefault false

When true, includes user display name, email, and active flag with each result row. See Field groups and includeDetails.

max?integerdefault 50

Maximum number of result rows per page. Capped at 500.

starting_after?string

Cursor — return rows whose id is greater than this. Mutually exclusive with ending_before.

ending_before?string

Cursor — return rows whose id is less than this. Mutually exclusive with starting_after.

Body parameters

mailboxIdstring

The mailbox to report on. Must be in the API key’s mailbox allowlist.

startstring (ISO 8601 datetime)

Start of the report range, in the mailbox’s time zone. Any time-zone specifier is ignored.

endstring (ISO 8601 datetime)

End of the report range, in the mailbox’s time zone.

period"hour" | "day" | "week" | "month"

Time period to group results by. Results always start with the period containing start and end with the period containing end.

users?string[]

Filter to specific users by ID. Users not in the mailbox are silently ignored. The reserved value "unknown" includes activity performed without an identifiable user (for example, when an Outlook user drags a message from the Inbox).

Only full periods are reported. With start = 2026-01-03T00:00:00, end = 2026-04-16T00:00:00, and period = month, you get four rows covering January through April.

Field groups

Two groups are supported. Request multiple by comma-separating: ?fieldGroup=replyData,closeData. Fields shared across groups appear once.

replyData (default)

Performance of replies sent by the user.

idstring

Cursor used by pagination.

startDateTimestring (ISO 8601 datetime)

Start of the period this row covers.

userIdstring

User identifier.

assignedinteger

Number of messages assigned to the user.

reassignedinteger

Number of messages reassigned away from the user.

initiatedinteger

Outgoing messages the user initiated (not replies).

initialRepliesinteger

Number of initial replies the user sent.

additionalRepliesinteger

Subsequent replies on the same conversation.

averageUserInitialReplyTimenumber

Average user reply time, in minutes.

averageMailboxInitialReplyTimenumber

Average mailbox reply time, in minutes.

averageElapsedInitialReplyTimenumber

Average elapsed reply time, in minutes.

replyConversationsinteger

Distinct conversations the user replied in.

activeConversationsinteger

Conversations the user touched (assigned, replied, or initiated).

closeData

Performance of message closes (archive, delete, junk, sent items).

idstring

Cursor used by pagination.

startDateTimestring (ISO 8601 datetime)

Start of the period this row covers.

userIdstring

User identifier.

assignedinteger

Number of messages assigned to the user.

reassignedinteger

Number of messages reassigned away from the user.

closedArchivedinteger

Messages closed by archiving.

closedDeletedinteger

Messages closed by deletion.

closedJunkinteger

Messages closed by being marked Junk.

closedSentItemsinteger

Messages closed by being moved to Sent Items.

averageUserCloseTimenumber

Average user close time, in minutes.

Detail fields (with includeDetails=true)

When includeDetails is true, each row also includes:

userName?string

User display name.

userEmail?string

User email address.

userActive?boolean

Whether the user is currently a member of the mailbox.

Request

curl -X POST 'https://c1.emailgistics.com/api/v1/reports/mailboxUserPerformance?fieldGroup=replyData,closeData&includeDetails=true&max=100' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "mailboxId": "af412a6c-657f-445b-892c-b6b1fa41ad1b",
    "start":     "2026-04-01T00:00:00",
    "end":       "2026-05-01T00:00:00",
    "period":    "week"
  }'
{
  "mailboxId": "af412a6c-657f-445b-892c-b6b1fa41ad1b",
  "start":     "2026-04-01T00:00:00",
  "end":       "2026-05-01T00:00:00",
  "period":    "week",
  "users":     ["3f4a5b60-774a-43f5-afb9-dfe54eaf6c3f", "unknown"]
}

Response

This endpoint is asynchronous. The first response often returns status: "running". Poll the URL in _links.self until status: "done". See Result envelope and async polling for the full lifecycle and recommended cadence.

Initial response — status: "running"

Returned immediately when the report is queued.

{
  "_links": {
    "self": {
      "href": "https://c1.emailgistics.com/api/v1/reports/results/64cbb039-15be-4c88-b3f2-59a17e2880e4?max=100",
      "method": "GET"
    },
    "origin": {
      "href": "https://c1.emailgistics.com/api/v1/reports/mailboxUserPerformance",
      "method": "POST",
      "body": { "parameters": { "mailboxId": "af412a6c-...", "start": "2026-04-01T00:00:00", "end": "2026-05-01T00:00:00", "period": "week" } }
    }
  },
  "status":   "running",
  "progress": 30,
  "result":   { "total": null, "data": [], "timeZone": "America/New_York" }
}

Poll _links.self

Use exponential backoff starting at 2 seconds, capped at 30 seconds. Result IDs expire 24 hours after creation; calls to expired result IDs return 404.

Final response — status: "done"

{
  "_links": {
    "self": { "href": "https://c1.emailgistics.com/api/v1/reports/results/64cbb039-...?max=100", "method": "GET" },
    "next": { "href": "https://c1.emailgistics.com/api/v1/reports/results/64cbb039-...?max=100&starting_after=10027", "method": "GET" },
    "origin": { "href": "https://c1.emailgistics.com/api/v1/reports/mailboxUserPerformance", "method": "POST", "body": { "parameters": { "mailboxId": "af412a6c-...", "start": "2026-04-01T00:00:00", "end": "2026-05-01T00:00:00", "period": "week" } } }
  },
  "status":   "done",
  "progress": 100,
  "result": {
    "total": 412,
    "dataCutoffTimestamp": "2026-05-01T08:14:00.0",
    "timeZone": "America/New_York",
    "data": [
      {
        "id":                             "10001",
        "startDateTime":                  "2026-04-01T00:00:00",
        "userId":                         "3f4a5b60-774a-43f5-afb9-dfe54eaf6c3f",
        "userName":                       "Emily Johnson",
        "userEmail":                      "emilyjohnson@company.com",
        "userActive":                     true,
        "assigned":                       128,
        "reassigned":                     12,
        "initialReplies":                 64,
        "additionalReplies":              31,
        "averageUserInitialReplyTime":    42.7,
        "averageMailboxInitialReplyTime": 71.3,
        "closedArchived":                 51,
        "closedDeleted":                  4
      }
    ]
  }
}

More examples

Filter to specific users, closeData only, fetching the next page

Asks for close performance for two named users — plus the reserved unknown user — over April, week-grouped, and advances past the first page using a starting_after cursor returned in a previous call. includeDetails is omitted, so the response carries IDs only.

curl -X POST 'https://c1.emailgistics.com/api/v1/reports/mailboxUserPerformance?fieldGroup=closeData&max=50&starting_after=10027' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "mailboxId": "af412a6c-657f-445b-892c-b6b1fa41ad1b",
    "start":     "2026-04-01T00:00:00",
    "end":       "2026-05-01T00:00:00",
    "period":    "week",
    "users":     [
      "3f4a5b60-774a-43f5-afb9-dfe54eaf6c3f",
      "e142c23e-6800-4d9b-af7e-4078c0ff6e2a",
      "unknown"
    ]
  }'
{
  "_links": {
    "self": { "href": "https://c1.emailgistics.com/api/v1/reports/results/9b21f4a3-...?max=50&starting_after=10027", "method": "GET" },
    "prev": { "href": "https://c1.emailgistics.com/api/v1/reports/results/9b21f4a3-...?max=50&ending_before=10028", "method": "GET" },
    "next": { "href": "https://c1.emailgistics.com/api/v1/reports/results/9b21f4a3-...?max=50&starting_after=10077", "method": "GET" },
    "origin": {
      "href": "https://c1.emailgistics.com/api/v1/reports/mailboxUserPerformance",
      "method": "POST",
      "body": { "parameters": { "mailboxId": "af412a6c-...", "start": "2026-04-01T00:00:00", "end": "2026-05-01T00:00:00", "period": "week", "users": ["3f4a5b60-...", "e142c23e-...", "unknown"] } }
    }
  },
  "status":   "done",
  "progress": 100,
  "result": {
    "total": 12,
    "dataCutoffTimestamp": "2026-05-01T08:14:00.0",
    "timeZone": "America/New_York",
    "data": [
      {
        "id":              "10028",
        "startDateTime":   "2026-04-15T00:00:00",
        "userId":          "3f4a5b60-774a-43f5-afb9-dfe54eaf6c3f",
        "assigned":        41,
        "reassigned":      2,
        "closedArchived":  18,
        "closedDeleted":   1,
        "closedJunk":      0,
        "closedSentItems": 22,
        "averageUserCloseTime": 33.4
      }
    ]
  }
}

Pagination

If the result set spans multiple pages, the response includes _links.next and/or _links.prev. Follow them to retrieve adjacent pages — see Pagination for cursor semantics.

Errors

StatusWhen
400Body fails validation — missing required field, invalid period, or start after end.
401API key missing, malformed, or expired.
403Key is missing the reporting scope.
404mailboxId is not in the key’s mailbox allowlist (or doesn’t exist — the two cases are indistinguishable).
429Rate limit exceeded — see Rate limits.
5xxTransient server error.

Error bodies follow the standard shape — see Errors.

On this page