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

# Get Message

> Retrieves a single inbound email message by its ID, including full text/HTML bodies, headers, attachments metadata, threading information, and verdicts.

<Note>
  This endpoint uses a standard **project API key** (`AS_` prefix). The message must belong to the project the key is scoped to.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url https://api.autosend.com/v1/inbound/messages/60d5ec49f1b2c72d9c8b1234 \
    --header 'Authorization: Bearer as_your-api-key'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.autosend.com/v1/inbound/messages/60d5ec49f1b2c72d9c8b1234"

  headers = {
      "Authorization": "Bearer as_your-api-key"
  }

  response = requests.get(url, headers=headers)
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  fetch('https://api.autosend.com/v1/inbound/messages/60d5ec49f1b2c72d9c8b1234', {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer as_your-api-key'
    }
  })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
  ```

  ```php PHP theme={null}
  <?php

  $messageId = '60d5ec49f1b2c72d9c8b1234';
  $url = "https://api.autosend.com/v1/inbound/messages/{$messageId}";

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Authorization: Bearer as_your-api-key'
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  echo $response;
  ?>
  ```

  ```go Go theme={null}
  package main

  import (
      "fmt"
      "io"
      "net/http"
  )

  func main() {
      url := "https://api.autosend.com/v1/inbound/messages/60d5ec49f1b2c72d9c8b1234"

      req, _ := http.NewRequest("GET", url, nil)
      req.Header.Set("Authorization", "Bearer as_your-api-key")

      client := &http.Client{}
      resp, err := client.Do(req)
      if err != nil {
          fmt.Println("Error:", err)
          return
      }
      defer resp.Body.Close()

      body, _ := io.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```

  ```java Java theme={null}
  import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.net.HttpURLConnection;
  import java.net.URL;

  public class GetMessage {
      public static void main(String[] args) {
          try {
              URL url = new URL("https://api.autosend.com/v1/inbound/messages/60d5ec49f1b2c72d9c8b1234");
              HttpURLConnection con = (HttpURLConnection) url.openConnection();

              con.setRequestMethod("GET");
              con.setRequestProperty("Authorization", "Bearer as_your-api-key");

              BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
              String inputLine;
              StringBuilder content = new StringBuilder();
              while ((inputLine = in.readLine()) != null) {
                  content.append(inputLine);
              }
              in.close();
              con.disconnect();

              System.out.println(content.toString());
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  ```

  ```ruby Ruby theme={null}
  require 'net/http'
  require 'uri'

  uri = URI('https://api.autosend.com/v1/inbound/messages/60d5ec49f1b2c72d9c8b1234')

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Get.new(uri)
  request['Authorization'] = 'Bearer as_your-api-key'

  response = http.request(request)
  puts response.body
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "success": true,
    "data": {
      "id": "60d5ec49f1b2c72d9c8b1234",
      "messageId": "<CADxyz@mail.gmail.com>",
      "domainName": "support.example.com",
      "from": {
        "email": "customer@gmail.com",
        "name": "Jane Customer"
      },
      "to": [
        {
          "email": "help@support.example.com",
          "name": null
        }
      ],
      "cc": [],
      "bcc": [],
      "replyTo": [],
      "subject": "Question about my order",
      "text": "Hi, I wanted to check on the status of order #4821.",
      "html": "<p>Hi, I wanted to check on the status of order #4821.</p>",
      "attachments": [
        {
          "attachmentId": "att_60d5ec49f1b2c72d9c8b9999",
          "filename": "receipt.pdf",
          "contentType": "application/pdf",
          "size": 20480,
          "index": 0
        }
      ],
      "headers": {
        "from": "Jane Customer <customer@gmail.com>",
        "to": "help@support.example.com",
        "subject": "Question about my order"
      },
      "spamVerdict": "PASS",
      "virusVerdict": "PASS",
      "spfVerdict": "PASS",
      "dkimVerdict": "PASS",
      "dmarcVerdict": "PASS",
      "status": "PROCESSED",
      "threadId": "60d5ec49f1b2c72d9c8b1234",
      "inReplyTo": null,
      "inReplyToEmailActivityId": null,
      "inReplyToInboundEmailId": null,
      "receivedAt": "2026-06-20T10:15:30.000Z"
    }
  }
  ```
</ResponseExample>

***

#### Authorizations

<ParamField path="Authorizations" type="string | header" required>
  Project API key header of the form Bearer `as_<key>`. You can also pass the key via the `x-api-key` header.
</ParamField>

### Path Parameters

<ParamField path="id" type="string" required>
  The unique identifier of the inbound message. The message must belong to the authenticated project.

  Example: `"60d5ec49f1b2c72d9c8b1234"`
</ParamField>

#### Response

<span className="text-sm">Message retrieved successfully</span>

<ResponseField name="success" type="boolean">
  Indicates if the request was successful

  Example: `true`
</ResponseField>

<ResponseField name="data" type="object">
  The full inbound message object

  <Expandable title="child attributes">
    <ResponseField name="data.id" type="string">
      Unique inbound message identifier (MongoDB ID). This is the same value sent as `inboundEmailId` in the `email.received` webhook event - use it as the `{id}` path parameter to fetch this message.
    </ResponseField>

    <ResponseField name="data.messageId" type="string">
      RFC 5322 `Message-ID` header from the original email
    </ResponseField>

    <ResponseField name="data.domainName" type="string">
      Domain the message was received on
    </ResponseField>

    <ResponseField name="data.from" type="object">
      Sender address (`email`, `name`)
    </ResponseField>

    <ResponseField name="data.to" type="object[]">
      Recipient addresses (`email`, `name`)
    </ResponseField>

    <ResponseField name="data.cc" type="object[]">
      CC addresses (`email`, `name`)
    </ResponseField>

    <ResponseField name="data.bcc" type="object[]">
      BCC addresses (`email`, `name`)
    </ResponseField>

    <ResponseField name="data.replyTo" type="object[]">
      Reply-To addresses (`email`, `name`)
    </ResponseField>

    <ResponseField name="data.subject" type="string">
      Message subject
    </ResponseField>

    <ResponseField name="data.text" type="string">
      Plain-text body (truncated; raw MIME in storage is the source of truth)
    </ResponseField>

    <ResponseField name="data.html" type="string">
      HTML body (truncated; raw MIME in storage is the source of truth)
    </ResponseField>

    <ResponseField name="data.attachments" type="object[]">
      Attachment metadata. Each entry includes `attachmentId`, `filename`, `contentType`, `size`, and a zero-based `index` used to download the attachment.
    </ResponseField>

    <ResponseField name="data.headers" type="object">
      Map of raw email headers (header name → string value)
    </ResponseField>

    <ResponseField name="data.spamVerdict" type="string">
      Spam verdict (e.g. `PASS`, `FAIL`)
    </ResponseField>

    <ResponseField name="data.virusVerdict" type="string">
      Virus verdict
    </ResponseField>

    <ResponseField name="data.spfVerdict" type="string">
      SPF verdict
    </ResponseField>

    <ResponseField name="data.dkimVerdict" type="string">
      DKIM verdict
    </ResponseField>

    <ResponseField name="data.dmarcVerdict" type="string">
      DMARC verdict
    </ResponseField>

    <ResponseField name="data.status" type="string">
      Message status: `PROCESSED`, `PROCESSING`, `FAILED`, `BLOCKED_UNVERIFIED`, or `BLOCKED_UNROUTED`
    </ResponseField>

    <ResponseField name="data.threadId" type="string">
      Identifier of the conversation thread this message belongs to
    </ResponseField>

    <ResponseField name="data.inReplyTo" type="string | null">
      Raw `In-Reply-To` header value from the original email
    </ResponseField>

    <ResponseField name="data.inReplyToEmailActivityId" type="string | null">
      ID of the outbound email this message is a reply to, if matched
    </ResponseField>

    <ResponseField name="data.inReplyToInboundEmailId" type="string | null">
      ID of a previously received inbound message this message is a reply to, if matched
    </ResponseField>

    <ResponseField name="data.receivedAt" type="string">
      Timestamp the message was received (ISO 8601)
    </ResponseField>
  </Expandable>
</ResponseField>

#### Error Responses

<ResponseField name="400 - Invalid message ID" type="object">
  Returned when the `id` parameter is not valid.

  ```json theme={null}
  {
    "success": false,
    "error": {
        "message": "Invalid value",
      }
    
  }
  ```
</ResponseField>

<ResponseField name="404 - Message not found" type="object">
  Returned when the message does not exist or does not belong to the authenticated project.

  ```json theme={null}
  {
    "success": false,
    "error": {
      "message": "Inbound email not found"
    }
  }
  ```
</ResponseField>


## OpenAPI

````yaml GET /inbound/messages/{id}
openapi: 3.1.0
info:
  title: AutoSend API
  description: >-
    AutoSend REST API for reading and replying to inbound emails received on a
    project's inbound-enabled domains. These endpoints use a standard project
    API key (AS_ prefix).
  version: 1.0.0
servers:
  - url: https://api.autosend.com/v1
security:
  - bearerAuth: []
paths:
  /inbound/messages/{id}:
    get:
      summary: Get Message
      description: >-
        Retrieves a single inbound email message by its ID, including full
        text/HTML bodies, headers, attachments metadata, threading information,
        and verdicts.
components: {}

````