# E-mail campaigns

`GET https://api.tentary.com/v1/email/campaigns`

Source: https://tentary.com/en/help/api/list-email-campaigns/
Area: Emails
MCP tool: `list_email_campaigns`. Reads only. Changes nothing in the account.

---

The email campaigns (newsletters sent once), newest first by creation, not by send time. Each has its status, send time, recipients, emails sent and delivery problems: waiting, skipped by the cooldown, failed, bounces and spam complaints. The answer also has the number of newsletter subscribers.

- `recipients`: the audience when sending started, skipped contacts included.
- `emails_sent`: emails that went out, bounces included. Emails in progress or removed after an unsubscribe do not count. A campaign with status `sent` can have `emails_sent` 0.
- `sent_at`: when sending started.

Tentary has no open or click tracking. For automated email series, call [`GET /v1/email/automations`](https://tentary.com/en/help/api/list-email-automations/).

## Authorization

`Authorization: Bearer <API key>`

A personal API key (tnt_...). Create it in the Tentary app on the page AI & API.

## Query parameters

- `status` (string, query): Only campaigns with this status. Allowed values: `draft`, `scheduled`, `sending`, `sent`.
- `cursor` (string, query): next_cursor of the previous page. Send the same filters and limit again: the cursor does not keep them. Leave out for the first page.
- `limit` (integer, query): Items per page, default 25. Limits: min 1, max 50.

## Response

- `campaigns` (array of object): Newest first by creation.
  - `id` (integer): The ID.
  - `name` (string): The name.
  - `subject` (string): The subject line.
  - `status` (string): The status. Allowed values: `draft`, `scheduled`, `sending`, `sent`.
  - `created_at` (string<date-time>, can be null): UTC, like 2026-01-31T14:05:00Z.
  - `send_at` (string<date-time>, can be null): UTC, like 2026-01-31T14:05:00Z.
  - `sent_at` (string<date-time>, can be null): UTC, like 2026-01-31T14:05:00Z. When sending started.
  - `recipients` (integer, can be null): The audience when sending started.
  - `emails_sent` (integer, can be null): E-mails that went out, bounces included.
  - `delivery` (object, can be null): E-mails per delivery state. skipped = left out by the cooldown.
    - `waiting` (integer): Waiting to be sent.
    - `skipped` (integer): Left out by the cooldown.
    - `failed` (integer): Could not be sent.
    - `soft_bounces` (integer): Soft bounces (a temporary problem, like a full inbox).
    - `hard_bounces` (integer): Hard bounces (the address does not exist).
    - `spam_complaints` (integer): Marked as spam by the recipient.
  - `admin_url` (string<uri>): The page in the Tentary app.
- `next_cursor` (string, can be null): Send it as cursor for the next page, with the same filters and limit. null = this is the last page.
- `newsletter_subscribers` (integer): Contacts who subscribed to the newsletter.
- `links` (object): Pages in the Tentary app or on tentary.com.
  - `campaigns` (string<uri>): Page in the Tentary app.

## Example request

```bash
curl "https://api.tentary.com/v1/email/campaigns?limit=1" \
  -H "Authorization: Bearer $TENTARY_API_KEY"
```

## Example response

```json
{
  "campaigns": [
    {
      "id": 801,
      "name": "October newsletter",
      "subject": "New: Morning Yoga in 30 Days",
      "status": "sent",
      "created_at": "2026-10-18T10:00:00Z",
      "send_at": "2026-10-19T08:00:00Z",
      "sent_at": "2026-10-19T08:00:05Z",
      "recipients": 3,
      "emails_sent": 3,
      "delivery": {
        "waiting": 0,
        "skipped": 0,
        "failed": 0,
        "soft_bounces": 1,
        "hard_bounces": 0,
        "spam_complaints": 0
      },
      "admin_url": "https://app.tentary.com/emails/campaign/view/801"
    }
  ],
  "next_cursor": null,
  "newsletter_subscribers": 3,
  "links": {
    "campaigns": "https://app.tentary.com/emails/campaigns"
  }
}
```
