---
title: "List received mail"
method: GET
path: "/v1/inbound"
tags: ["Inbound"]
---

# List received mail

`GET /v1/inbound`

## Request

- Base URL: `https://api.volanea.com`
- URL: `https://api.volanea.com/v1/inbound`
- Auth: HTTP bearer

Received messages, newest first, cursor-paginated. Before this existed, inbound mail was reachable only as `GET /v1/emails?source=inbound`. Note that the recipient's local part preserves its case (RFC 5321 §2.4), so a `ticket+AbC123@…` routing token survives the round trip and can be matched against what `POST /v1/send` put in `replyTo`; only the domain is lowercased.

## Query parameters

- `cursor` string
- `limit` integer

## Response `200`

A page of received messages.

- object
  - `data` InboundMessage[], required
    - `emailId` string, required: Use with `GET /v1/emails/{id}` to read the stored body.
    - `contactId` string, nullable: The sender, upserted as a contact at ingest.
    - `to` string, required: The recipient exactly as stored. Only the domain is lowercased — the local part keeps its case, because a Reply-To routing address (`ticket+AbC123XyZ@…`) carries a case-sensitive token.
    - `subject` string, required
    - `fromEmail` string, email, required
    - `fromName` string, nullable
    - `status` 'received', required
    - `createdAt` string, date-time, required
  - `nextCursor` string, nullable, required: Opaque token. Pass back as `cursor` verbatim to fetch the next page; `null` when there are no more rows.

## Other responses

- `401`: Missing or invalid API key.
- `422`: Request validation failed (code `validation_error`, 422).

---

[API](https://skmtc.dev/volanea/apis/volanea-api.md) · [All operations](https://skmtc.dev/volanea/apis/volanea-api/llms.txt) · [OpenAPI document](https://skmtc.dev/volanea/apis/volanea-api/revisions/9e187ae84fda?raw)
