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

# Post email reply



## OpenAPI

````yaml /openapi.json post /email/{id}/reply
openapi: 3.1.1
info:
  title: Anima API
  version: 0.1.0
  description: >-
    The Anima API provides programmatic access to unified infrastructure for AI
    agents: create and manage agents; send and receive email; place phone calls
    and send/receive SMS and voice; store and retrieve vault credentials; manage
    agent identity; and configure webhooks for real-time events. Authenticate
    using a Bearer token or an API key passed via the X-API-Key header.
  contact:
    name: Anima Labs
    url: https://useanima.sh
    email: support@useanima.sh
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://api.useanima.sh/v1
    description: Production
security:
  - BearerAuth: []
  - ApiKeyAuth: []
paths:
  /email/{id}/reply:
    post:
      operationId: email.reply
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            pattern: ^[cC][^\s-]{8,}$
            description: ID of the email being replied to
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                agentId:
                  type: string
                  pattern: ^[cC][^\s-]{8,}$
                  description: >-
                    Agent to send as. Required with a master key; resolved
                    automatically from an agent key.
                body:
                  type: string
                  description: >-
                    Plain-text body of your reply (the quoted original is
                    appended)
                bodyHtml:
                  type: string
                  description: HTML body of your reply
                replyAll:
                  default: false
                  type: boolean
                  description: >-
                    Reply to every correspondent on the original (its To and Cc)
                    rather than just the sender. Your own addresses are always
                    excluded, so you never reply to yourself. Bcc recipients of
                    your own sent mail are never resurfaced — that would
                    disclose them to the whole thread.
                cc:
                  type: array
                  items:
                    type: string
                    format: email
                  description: Extra Cc recipients, added to any computed by replyAll
                bcc:
                  type: array
                  items:
                    type: string
                    format: email
                  description: Bcc recipients for this reply
                attachments:
                  type: array
                  items:
                    type: object
                    properties:
                      filename:
                        type: string
                      contentId:
                        type: string
                      contentType:
                        type: string
                      content:
                        type: string
                      url:
                        type: string
                  description: Attachments to include on the reply
                metadata:
                  type: object
                  additionalProperties: {}
                  description: Arbitrary metadata to store
                quoteOriginal:
                  default: true
                  type: boolean
                  description: >-
                    Append the original message as a quoted block, the way a
                    human mail client does. Default true. Set false to send only
                    your own text — the recipient then sees no context, so only
                    do this when the thread is already established.
              required:
                - body
              description: Request body for replying to an email in-thread
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    pattern: ^[cC][^\s-]{8,}$
                    description: Unique identifier of the message
                  agentId:
                    type: string
                    pattern: ^[cC][^\s-]{8,}$
                    description: ID of the agent that sent or received the message
                  inboxId:
                    anyOf:
                      - type: string
                        pattern: ^[cC][^\s-]{8,}$
                      - type: 'null'
                    description: >-
                      ID of the inbox this message belongs to — the inbox it was
                      delivered to (inbound) or sent from (outbound). Null when
                      no inbox backs the address: SMS/MMS/voice messages, and
                      email sent from an email identity that has no inbox (such
                      as a custom-domain identity added to an agent). Pass it to
                      GET /messages?inboxId= to list one inbox's mail.
                  channel:
                    enum:
                      - EMAIL
                      - SMS
                      - MMS
                      - VOICE
                    type: string
                    description: Communication channel used
                  direction:
                    enum:
                      - INBOUND
                      - OUTBOUND
                    type: string
                    description: Whether the message was inbound or outbound
                  status:
                    enum:
                      - QUEUED
                      - SENT
                      - DELIVERED
                      - FAILED
                      - BOUNCED
                      - BLOCKED
                      - PENDING_APPROVAL
                    type: string
                    description: Current delivery status
                  fromAddress:
                    type: string
                    description: Sender address (email or phone number)
                  toAddress:
                    type: string
                    description: Recipient address (email or phone number)
                  subject:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      Message subject line, or null for channels that do not
                      support subjects
                  body:
                    type: string
                    description: Plain-text content of the message
                  bodyHtml:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: HTML content of the message, or null if not available
                  extractedText:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      Plain-text body with the quoted reply chain and signature
                      stripped — just what this sender actually wrote. Read this
                      instead of `body` to avoid re-reading (and paying for) the
                      whole thread on every message. Null when nothing was
                      extracted: non-email channels, messages your agent sent,
                      and mail received before this field existed — so
                      `extractedText ?? body` is always correct. Best-effort and
                      heuristic; `body` remains the verbatim source of truth.
                      Known weak cases: forwards and bottom-posted replies have
                      no separable 'new' part, so this returns the full body
                      rather than nothing.
                  extractedHtml:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      HTML body with quoted reply chains removed. Same semantics
                      as `extractedText`; `bodyHtml` stays verbatim. Quoting
                      styles that mark the chain with a sibling element rather
                      than wrapping it (Outlook) are not stripped here —
                      `extractedText` still is.
                  headers:
                    anyOf:
                      - type: object
                        additionalProperties: {}
                      - type: 'null'
                    description: Raw message headers as key-value pairs, or null
                  metadata:
                    anyOf:
                      - type: object
                        additionalProperties: {}
                      - type: 'null'
                    description: Arbitrary metadata attached to the message, or null
                  threadId:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: Thread identifier for conversation grouping, or null
                  labels:
                    type: array
                    items:
                      type: string
                    description: >-
                      Workflow labels on this message. Always contains exactly
                      one of the system labels `unread` or `read`; may also
                      contain `archived`, `spam` (the inbound spam verdict — see
                      `includeSpam` on list/search), and any labels you add
                      yourself. Stored lowercase, deduped, and sorted. Change
                      them with PATCH /messages/{id}/labels.
                  inReplyTo:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: Message ID this message is replying to, or null
                  externalId:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      External identifier, or null. For email: the RFC 5322
                      Message-ID (bare, no angle brackets) — pass it as
                      inReplyTo to reply in-thread. For SMS: the
                      provider-assigned message id.
                  deletedAt:
                    anyOf:
                      - type: string
                        format: date-time
                      - type: 'null'
                    description: >-
                      When this message was moved to Trash, or null if it is
                      live. Deleted messages are hidden from listings unless
                      `deleted` is set to `include` or `only`, and can be
                      brought back with POST /messages/{id}/restore. Nothing
                      purges them.
                  sentAt:
                    anyOf:
                      - type: string
                        format: date-time
                      - type: 'null'
                    description: >-
                      Timestamp when the message was sent, or null if not yet
                      sent
                  receivedAt:
                    anyOf:
                      - type: string
                        format: date-time
                      - type: 'null'
                    description: >-
                      Timestamp when the message was received, or null for
                      outbound messages
                  attachments:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          pattern: ^[cC][^\s-]{8,}$
                          description: Unique identifier of the attachment
                        filename:
                          type: string
                          description: Original filename of the attachment
                        mimeType:
                          type: string
                          description: MIME type of the attachment (e.g. application/pdf)
                        sizeBytes:
                          type: integer
                          minimum: 0
                          description: File size in bytes
                        storageKey:
                          type: string
                          description: Internal storage key for retrieving the file
                        url:
                          anyOf:
                            - type: string
                              format: uri
                            - type: 'null'
                          description: >-
                            Pre-signed download URL, or null if not yet
                            generated
                        createdAt:
                          type: string
                          format: date-time
                          description: Timestamp when the attachment was created
                        scanStatus:
                          enum:
                            - PENDING
                            - CLEAN
                            - FLAGGED
                            - BLOCKED
                          type: string
                          description: >-
                            Content-scan verdict. BLOCKED attachments cannot be
                            downloaded — inspect before fetching bytes.
                        detectedMimeType:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: >-
                            MIME type inferred from magic bytes; may differ from
                            the declared mimeType
                      required:
                        - id
                        - filename
                        - mimeType
                        - sizeBytes
                        - storageKey
                        - url
                        - createdAt
                        - scanStatus
                        - detectedMimeType
                      description: File attachment associated with a message
                    description: File attachments associated with this message
                  createdAt:
                    type: string
                    format: date-time
                    description: Timestamp when the message record was created
                  updatedAt:
                    type: string
                    format: date-time
                    description: Timestamp when the message record was last updated
                required:
                  - id
                  - agentId
                  - inboxId
                  - channel
                  - direction
                  - status
                  - fromAddress
                  - toAddress
                  - subject
                  - body
                  - bodyHtml
                  - extractedText
                  - extractedHtml
                  - headers
                  - metadata
                  - threadId
                  - labels
                  - inReplyTo
                  - externalId
                  - deletedAt
                  - sentAt
                  - receivedAt
                  - attachments
                  - createdAt
                  - updatedAt
                description: Full message resource representation
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        JWT Bearer token obtained from authentication. Pass as: Authorization:
        Bearer <token>
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: 'API key for programmatic access. Pass as: X-API-Key: <your-key>'

````