---
title: "Billing email send counts"
description: "delivered counts messages a real relay accepted (smtp/esp); not_delivered counts messages marked sent that the console sink carried, or that predate the transport column."
canonical_url: "https://twominutebilling.com/help/developers/api-reference/webhooks/billing-email-send-counts"
---
# Billing email send counts

> delivered counts messages a real relay accepted (smtp/esp); not_delivered counts messages marked sent that the console sink carried, or that predate the transport column.

<api-operation method="GET" path="/v1/businesses/{biz}/emails/activity">
<template v-slot:docs="">

`delivered` counts messages a real relay accepted (smtp/esp); `not_delivered` counts messages marked `sent` that the console sink carried, or that predate the `transport` column. They are reported separately and must not be summed — `status: "sent"` alone is not a delivery claim.

## Path parameters

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        biz
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <strong>
        yes
      </strong>
    </td>
    
    <td>
      Business id (biz_…)
    </td>
  </tr>
</tbody>
</table>

## Query parameters

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        window_days
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      no
    </td>
    
    <td>
      How many days back to count.
    </td>
  </tr>
</tbody>
</table>

## Response

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        object
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      The object type; always <code>
        email_activity
      </code>
      
      . One of <code>
        email_activity
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        window_days
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      How many days back the counts cover.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        delivered
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      Number of emails delivered in the window.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        not_delivered
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      Number of emails that were not delivered in the window.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        pending
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      Number of emails still waiting to be sent.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        failed
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      Gave up after the retry budget on an inconclusive error (relay down, timeout) — usually a problem at our end.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        bounced
      </code>
    </td>
    
    <td>
      <code>
        integer
      </code>
    </td>
    
    <td>
      The relay permanently refused the address (SMTP 5xx). Terminal on the first attempt, never retried — a bad-address problem, which is why it is not folded into <code>
        failed
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        last_sent_at
      </code>
    </td>
    
    <td>
      <code>
        string · ISO-8601
      </code>
    </td>
    
    <td>
      When the last email was sent (ISO-8601 UTC), or null.
    </td>
  </tr>
</tbody>
</table>

## Status codes

<table>
<thead>
  <tr>
    <th>
      Status
    </th>
    
    <th>
      Meaning
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        200
      </code>
    </td>
    
    <td>
      Success
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        404
      </code>
    </td>
    
    <td>
      No such business
    </td>
  </tr>
</tbody>
</table>
</template>

<template v-slot:request="">

```bash [Request]
curl "$TMBILLING_URL/v1/businesses/biz_XXXXXXXXXXXX01/emails/activity" \
  -H "Authorization: Bearer $TMBILLING_API_KEY"
```

</template>

<template v-slot:response="">
<code-group>

```json [200 OK]
{
  "object": "email_activity",
  "window_days": 14,
  "delivered": 1,
  "not_delivered": 1,
  "pending": 1,
  "failed": 1,
  "bounced": 1,
  "last_sent_at": "2026-03-14T09:30:00Z"
}
```

```json [404 Not Found]
{
  "error": {
    "type": "invalid_request_error",
    "message": "No such business"
  }
}
```

</code-group>
</template>
</api-operation>


## Sitemap

See the full [sitemap](https://twominutebilling.com/sitemap.md) for all pages.
