> ## Documentation Index
> Fetch the complete documentation index at: https://developer.mailbeast.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# List emails

> List emails across your mailboxes, newest first. Results carry a `snippet` preview but never the message body; fetch a single email to read it. Filter by mailbox, campaign, conversation, lead, read state, direction, folder, date, or full-text search.

Requires one of the following scopes: `emails:read`, `emails:all`, `all:read`, `all:all`.



## OpenAPI

````yaml /openapi.json get /v1/emails
openapi: 3.0.0
info:
  title: MailBeast Public API
  description: >-
    Task-shaped REST API for campaigns, leads, deliverability, verification and
    lead discovery. Authenticate with an API key (`Authorization: Bearer
    mb_live_…`); the workspace is resolved from the key.
  version: '1'
  contact: {}
servers:
  - url: https://api.mailbeast.ai
security: []
tags:
  - name: API Keys
    description: Create, list and revoke API keys programmatically.
  - name: Campaigns
    description: Create, configure, launch and monitor email campaigns.
  - name: Leads
    description: Add, read, update and bulk-manage a campaign’s leads.
  - name: Workspace
    description: Read usage, subscription and workspace identity.
  - name: Email Accounts
    description: >-
      Connect and manage the sending mailboxes your campaigns send from
      (SMTP/IMAP or native OAuth).
  - name: Analytics
    description: Engagement reporting – per campaign, over time, and across the workspace.
  - name: Lead Finder
    description: >-
      Discover new companies and leads. List past searches and poll a running
      search’s progress.
paths:
  /v1/emails:
    get:
      tags:
        - Emails
      summary: List emails
      description: >-
        List emails across your mailboxes, newest first. Results carry a
        `snippet` preview but never the message body; fetch a single email to
        read it. Filter by mailbox, campaign, conversation, lead, read state,
        direction, folder, date, or full-text search.


        Requires one of the following scopes: `emails:read`, `emails:all`,
        `all:read`, `all:all`.
      operationId: emails_list
      parameters:
        - name: cursor
          required: false
          in: query
          description: Opaque cursor from a previous response’s `meta.nextCursor`.
          schema:
            type: string
        - name: limit
          required: false
          in: query
          schema:
            minimum: 1
            maximum: 100
            default: 50
            example: 50
            type: number
        - name: mailbox
          required: false
          in: query
          description: >-
            Filter by mailbox address, comma-separated. Addresses you do not own
            are ignored.
          schema:
            example: jane@acme.com,sales@acme.com
            type: string
        - name: campaignId
          required: false
          in: query
          schema:
            example: c1f3b0a2-6d4e-4f8b-9a1c-2e5d7f0a3b6c
            type: string
        - name: threadId
          required: false
          in: query
          description: >-
            Return only emails in this conversation. Pass a `threadId` exactly
            as returned - it is opaque.
          schema:
            type: string
            example: 13a265fd-f0f2-b1d1-d6fc-154e483183e7
        - name: leadId
          required: false
          in: query
          schema:
            example: 9d4e2f10-5b6a-4c73-8e19-0f2a7c4d8b31
            type: string
        - name: isUnread
          required: false
          in: query
          description: >-
            Filter by read state. Emails that are not part of a conversation
            have no read state and match neither `true` nor `false`.
          schema:
            type: boolean
            example: true
        - name: type
          required: false
          in: query
          schema:
            type: string
            enum:
              - sent
              - received
            example: received
        - name: folder
          required: false
          in: query
          description: >-
            Return only emails whose conversation is in this folder - the same
            folders your team sees in the dashboard. `inbox`: campaign
            conversations someone replied to. `untracked`: conversations outside
            any campaign. `important`, `snoozed`, `archived`: as flagged in the
            dashboard - `important` spans the other folders. An email that
            belongs to no conversation is in no folder and matches none of
            these.
          schema:
            example: inbox
            type: string
            enum:
              - inbox
              - untracked
              - important
              - snoozed
              - archived
        - name: search
          required: false
          in: query
          description: >-
            Full-text search over subject, preview text and sender address.
            Supports quoted phrases, `OR` and `-exclude`.
          schema:
            example: pricing question
            type: string
        - name: latestOfThread
          required: false
          in: query
          description: >-
            Return one email per conversation: the most recent one that matches
            the rest of your filters. A cheap conversation-style view without
            fetching whole threads.


            The filters are applied first, then the newest survivor of each
            conversation is kept – so `latestOfThread=true&type=received` gives
            you the last email each contact sent you, even in conversations you
            have already replied to. An email that belongs to no conversation is
            a conversation of one and is always kept.
          schema:
            type: boolean
            example: true
        - name: since
          required: false
          in: query
          schema:
            example: '2026-07-01T00:00:00.000Z'
            type: string
        - name: until
          required: false
          in: query
          schema:
            example: '2026-07-14T00:00:00.000Z'
            type: string
        - name: sortOrder
          required: false
          in: query
          description: Order by received date. Defaults to newest first.
          schema:
            default: desc
            type: string
            enum:
              - asc
              - desc
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailListApiResponseDto'
        '400':
          description: The request body or parameters failed validation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorDto'
              example:
                error:
                  type: invalid_request_error
                  code: validation_failed
                  message: One or more fields are invalid.
                  status: 400
                  requestId: e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f
                  details:
                    - name should not be empty
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorDto'
              example:
                error:
                  type: authentication_error
                  code: unauthenticated
                  message: Missing or invalid API key.
                  status: 401
                  requestId: e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f
        '403':
          description: >-
            The key lacks a required scope, or the plan does not include API
            access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorDto'
              example:
                error:
                  type: authorization_error
                  code: permission_denied
                  message: This API key is missing the required scope.
                  status: 403
                  requestId: e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f
        '429':
          description: >-
            Rate limit exceeded - retry after the interval in the Retry-After
            header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorDto'
              example:
                error:
                  type: rate_limit_error
                  code: rate_limited
                  message: >-
                    Too many requests. Retry after the interval in the
                    Retry-After header.
                  status: 429
                  requestId: e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f
                  retryAfter: 30
      security:
        - ApiKey: []
components:
  schemas:
    EmailListApiResponseDto:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/EmailApiDto'
        meta:
          $ref: '#/components/schemas/EmailListMetaDto'
      required:
        - data
        - meta
    ApiErrorDto:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/ApiErrorBodyDto'
      required:
        - error
    EmailApiDto:
      type: object
      properties:
        id:
          type: string
          example: 8c5a1e07-2b93-4d6f-a0e8-7c4b9d1f2a36
        threadId:
          type: string
          nullable: true
          example: 13a265fd-f0f2-b1d1-d6fc-154e483183e7
          description: >-
            Conversation this email belongs to. `null` when the email is not
            part of a conversation. An opaque identifier: pass it back as-is, do
            not parse or construct it.
        messageId:
          type: string
          nullable: true
          example: <CAF=abc123@mail.gmail.com>
          description: RFC 5322 Message-ID as set by the sending server.
        mailbox:
          nullable: true
          description: The mailbox of yours that sent or received this email.
          type: object
          allOf:
            - $ref: '#/components/schemas/EmailMailboxDto'
        from:
          $ref: '#/components/schemas/EmailParticipantDto'
        to:
          example:
            - jane@acme.com
          type: array
          items:
            type: string
        cc:
          example: []
          type: array
          items:
            type: string
        bcc:
          example: []
          type: array
          items:
            type: string
        subject:
          type: string
          example: 'Re: Pricing question'
        snippet:
          type: string
          nullable: true
          example: Thanks for the details, this works for us.
          description: Short preview of the message. Always present in list results.
        isUnread:
          type: boolean
          nullable: true
          example: true
          description: >-
            Read state. `null` when the email is not part of a conversation and
            therefore has no read state, which is not the same as read.
        type:
          type: string
          enum:
            - sent
            - received
          example: received
        campaignId:
          type: string
          nullable: true
          example: c1f3b0a2-6d4e-4f8b-9a1c-2e5d7f0a3b6c
        leadId:
          type: string
          nullable: true
          example: 9d4e2f10-5b6a-4c73-8e19-0f2a7c4d8b31
        hasAttachments:
          type: boolean
          example: false
        receivedAt:
          type: string
          format: date-time
          example: '2026-07-13T09:24:11.000Z'
        sentAt:
          type: string
          format: date-time
          nullable: true
          example: '2026-07-13T09:24:09.000Z'
      required:
        - id
        - threadId
        - messageId
        - mailbox
        - from
        - to
        - cc
        - bcc
        - subject
        - snippet
        - isUnread
        - type
        - campaignId
        - leadId
        - hasAttachments
        - receivedAt
        - sentAt
    EmailListMetaDto:
      type: object
      properties:
        hasMore:
          type: boolean
          example: true
        nextCursor:
          type: string
          nullable: true
          description: Pass as `?cursor=` for the next page; `null` on the last page.
          example: >-
            eyJ0cyI6IjIwMjYtMDctMDJUMDA6MDA6MDAuMDAwWiIsImlkIjoiM2YxYzJiN2UtOWE0ZC00ZTE4LWIyYzEtNmQ4ZjVhMGU3YzkzIn0
      required:
        - hasMore
        - nextCursor
    ApiErrorBodyDto:
      type: object
      properties:
        type:
          type: string
          example: authorization_error
          description: Broad error class.
        code:
          type: string
          example: permission_denied
          description: Stable machine-readable code to switch on.
        message:
          type: string
          example: This API key is missing the required scope.
        status:
          type: number
          example: 403
        requestId:
          type: string
          example: e4f1c0b2-6a3d-4b8e-9f21-0a1b2c3d4e5f
          description: Correlation id - quote it in support requests.
        details:
          description: Field-level validation messages (present on validation errors).
          example:
            - name should not be empty
          type: array
          items:
            type: string
        retryAfter:
          type: number
          description: Seconds to wait before retrying (present on 429 responses).
          example: 30
      required:
        - type
        - code
        - message
        - status
        - requestId
    EmailMailboxDto:
      type: object
      properties:
        id:
          type: string
          example: 3f1c2b7e-9a4d-4c8e-b1f6-5d2a7e0c3b94
        email:
          type: string
          example: jane@acme.com
      required:
        - id
        - email
    EmailParticipantDto:
      type: object
      properties:
        email:
          type: string
          example: john@prospect.io
        name:
          type: string
          nullable: true
          example: John Carter
      required:
        - email
        - name
  securitySchemes:
    ApiKey:
      scheme: bearer
      bearerFormat: mb_live_…
      type: http

````

## Related topics

- [Emails](/emails.md)
- [List mailboxes](/api-reference/email-accounts/list-mailboxes.md)
- [List campaign leads](/api-reference/leads/list-campaign-leads.md)
- [List campaigns](/api-reference/campaigns/list-campaigns.md)
- [Email Accounts](/accounts.md)
