---
title: "Inbound email replies, newest first (order=asc for syncing), cursor-paged"
method: GET
path: "/replies"
tags: ["Replies"]
---

# Inbound email replies, newest first (order=asc for syncing), cursor-paged

`GET /replies`

## Request

- Base URL: `https://mcp.senders.ai/api/v1`
- URL: `https://mcp.senders.ai/api/v1/replies`
- Auth: HTTP bearer

Scope: replies:read

## Query parameters

- `limit` integer
- `cursor` string
- `order` 'desc' | 'asc'
- `since` string
- `campaign_id` integer
- `sentiment` 'positive' | 'negative' | 'neutral' | 'auto_reply'

## Response `200`

OK

- ReplyPage
  - `data` Reply[], required
    - `id` integer, required
    - `thread_id` integer, required
    - `channel` 'email', required
    - `received_at` string, date-time, nullable, required: ISO 8601, UTC
    - `sentiment` 'positive' | 'negative' | 'neutral' | 'auto_reply' | 'null', nullable
    - `subject` string, nullable
    - `body` string: Plain text of the new message, quoted history removed. Taken from the stored text part, else the HTML part, else the text saved on the original send. If removing quoted history would leave nothing, the whole message is returned instead. Empty only when no text was stored at all. Byte order marks and leading blank lines are removed.
    - `body_html` string, nullable: Sanitized HTML of the new message (allowlisted tags, scripts and remote images removed, quoted chain dropped). Null when the reply had no HTML part or it could not be sanitized.
    - `lead` object, required
      - `prospect_id` integer, nullable
      - `name` string, nullable
      - `email` string, nullable
      - `title` string, nullable
      - `organization` string, nullable
      - `linkedin_url` string, nullable
      - `status` string, nullable
      - `lead_status` string, nullable
    - `campaign` object, nullable
      - `id` integer
      - `name` string, nullable
  - `has_more` boolean, required
  - `next_cursor` string, nullable, required: Cursor after the last item. Save it to resume; null only when the page is empty and no cursor was sent.

## Other responses

- `400`: Invalid parameter (bad_request)
- `401`: Missing, wrong or revoked token (unauthorized)
- `403`: Missing scope (forbidden), paused account (account_inactive) or plan without the API (feature_not_enabled)
- `429`: Rate limited (rate_limited, daily_limit). Wait Retry-After seconds.

---

[API](https://skmtc.dev/senders/apis/senders-rest-api.md) · [All operations](https://skmtc.dev/senders/apis/senders-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/senders/apis/senders-rest-api/revisions/3cd9960bc0af?raw)
