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

# Read attachment text

> Read or poll a requested extraction. Returns 404 after cache expiry or source removal. Current access and source availability are checked even with If-None-Match. This request does not start a conversion.



## OpenAPI

````yaml /openapi-app.json get /mailbox/messages/{message_id}/attachments/{attachment_id}/text
openapi: 3.1.0
info:
  description: Programmatic access to your Sendmux email infrastructure.
  title: Sendmux API
  version: 1.0.0
servers:
  - description: API v1
    url: https://app.sendmux.ai/api/v1
security:
  - bearerAuth: []
  - oauth2: []
paths:
  /mailbox/messages/{message_id}/attachments/{attachment_id}/text:
    get:
      tags:
        - Mailbox API
      summary: Read attachment text
      description: >-
        Read or poll a requested extraction. Returns 404 after cache expiry or
        source removal. Current access and source availability are checked even
        with If-None-Match. This request does not start a conversion.
      operationId: mailboxGetAttachmentText
      parameters:
        - description: Message ID in the selected mailbox.
          in: path
          name: message_id
          required: true
          schema:
            description: Message ID in the selected mailbox.
            type: string
        - description: Attachment ID from that message.
          in: path
          name: attachment_id
          required: true
          schema:
            description: Attachment ID from that message.
            type: string
        - description: >-
            Maximum UTF-8 text bytes returned. Default 262144; maximum 1048576.
            Applies to cached results too.
          in: query
          name: max_bytes
          required: false
          schema:
            description: >-
              Maximum UTF-8 text bytes returned. Default 262144; maximum
              1048576. Applies to cached results too.
            maximum: 1048576
            minimum: 1
            type: integer
        - description: Return 304 when the authorised response is unchanged.
          in: header
          name: If-None-Match
          required: false
          schema:
            description: Return 304 when the authorised response is unchanged.
            type: string
        - description: >-
            Mailbox public ID to target when the credential grants access to
            more than one mailbox. Omit when the credential is scoped to exactly
            one mailbox.
          in: query
          name: mailbox_id
          required: false
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              examples:
                ready:
                  value:
                    data:
                      expires_at: '2026-09-30T00:00:00.000Z'
                      format: markdown
                      id: ext_example
                      outcome: ready
                      status: complete
                      text: |-
                        # Invoice
                        Amount: $25
                      truncated: false
                    meta:
                      request_id: req_example
                    ok: true
                unsupported:
                  value:
                    data:
                      expires_at: '2026-09-30T00:00:00.000Z'
                      format: markdown
                      id: ext_example
                      outcome: unsupported
                      status: complete
                      text: ''
                      truncated: false
                    meta:
                      request_id: req_example
                    ok: true
              schema:
                $ref: '#/components/schemas/MailboxAttachmentTextResponse'
          description: >-
            Conversion completed. Check outcome before using text; original
            attachment downloads remain available.
          headers:
            ETag:
              description: Current response validator, returned by GET.
              schema:
                type: string
        '202':
          content:
            application/json:
              example:
                data:
                  expires_at: '2026-09-30T00:00:00.000Z'
                  format: markdown
                  id: ext_example
                  outcome: null
                  status: pending
                  text: null
                  truncated: false
                meta:
                  request_id: req_example
                ok: true
              schema:
                $ref: '#/components/schemas/MailboxAttachmentTextResponse'
          description: Extraction is pending or running. Poll GET on this same URL.
          headers:
            ETag:
              description: Current response validator, returned by GET.
              schema:
                type: string
        '304':
          description: Extraction response has not changed.
          headers:
            ETag:
              description: Current response validator, returned by GET.
              schema:
                type: string
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Request could not be completed.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Request could not be completed.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Request could not be completed.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Source attachment or unexpired extraction not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Request could not be completed.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Request could not be completed.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Request could not be completed.
      security:
        - bearerAuth: []
        - oauth2:
            - mailbox.read
components:
  schemas:
    MailboxAttachmentTextResponse:
      allOf:
        - $ref: '#/components/schemas/SuccessEnvelope'
        - properties:
            data:
              $ref: '#/components/schemas/MailboxAttachmentText'
            meta:
              $ref: '#/components/schemas/ResponseMeta'
          required:
            - data
          type: object
      unevaluatedProperties: false
    ApiError:
      additionalProperties: false
      properties:
        error:
          additionalProperties: false
          properties:
            code:
              description: Machine-readable error code
              enum:
                - invalid_parameter
                - missing_parameter
                - authentication_required
                - insufficient_permissions
                - not_found
                - conflict
                - limit_exceeded
                - idempotency_conflict
                - payload_too_large
                - validation_error
                - rate_limit_exceeded
                - service_unavailable
                - internal_error
              example: invalid_parameter
              type: string
            doc_url:
              description: Link to relevant documentation
              type: string
            errors:
              description: >-
                Accumulated per-field issues for validation errors. Only present
                on 400/422 responses.
              items:
                $ref: '#/components/schemas/ApiErrorDetail'
              type: array
            message:
              description: Human-readable error description
              type: string
            param:
              description: The parameter that caused the error
              type: string
            retryable:
              description: >-
                Whether the caller may safely retry this request. 4xx are
                typically false (except 429); 5xx are typically true.
              example: false
              type: boolean
          required:
            - code
            - message
            - retryable
          type: object
        meta:
          additionalProperties: false
          properties:
            request_id:
              example: req_clxxxxxxxxxxxxxxxxxxxxxxxxx
              type: string
          required:
            - request_id
          type: object
        ok:
          enum:
            - false
          type: boolean
      required:
        - ok
        - error
        - meta
      type: object
    SuccessEnvelope:
      properties:
        meta:
          additionalProperties: {}
          properties: {}
          type: object
        ok:
          enum:
            - true
          type: boolean
      required:
        - ok
        - meta
      type: object
    MailboxAttachmentText:
      additionalProperties: false
      properties:
        expires_at:
          description: Cache expiry. A new POST is needed after expiry.
          format: date-time
          type: string
        format:
          description: Extracted text format.
          enum:
            - markdown
          type: string
        id:
          description: Extraction ID.
          example: ext_example
          type: string
        outcome:
          anyOf:
            - enum:
                - ready
                - unsupported
                - encrypted
                - malformed
                - ocr_required
                - resource_limit
                - source_unavailable
                - failed
              type: string
            - type: 'null'
          description: >-
            Null while pending or running. Only ready contains extracted text;
            other outcomes contain an empty string.
        status:
          description: Poll until complete to read the outcome.
          enum:
            - pending
            - running
            - complete
          type: string
        text:
          description: >-
            Markdown text, or null until complete. Limited to max_bytes in
            UTF-8.
          type:
            - string
            - 'null'
        truncated:
          description: True when conversion or the requested output bound omitted text.
          type: boolean
      required:
        - id
        - status
        - outcome
        - text
        - format
        - truncated
        - expires_at
      type: object
    ResponseMeta:
      additionalProperties: false
      properties:
        request_id:
          example: req_clxxxxxxxxxxxxxxxxxxxxxxxxx
          type: string
      required:
        - request_id
      type: object
    ApiErrorDetail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Machine-readable issue code from the validator (e.g. zod issue
            code).
          example: invalid_string
          type: string
        field:
          description: Dot-path of the offending request field.
          example: recipient.email
          type: string
        message:
          description: Human-readable issue description.
          type: string
      required:
        - field
        - code
        - message
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: API Key
      description: >-
        Sendmux API key. Use a root API key for Management API routes, or a
        mailbox credential for Mailbox API routes. Obtain keys from the
        dashboard under API Keys.
      scheme: bearer
      type: http
    oauth2:
      description: >-
        Use the authorisation-code flow with S256 PKCE and
        resource=https://sendmux.ai/api. The user selects the team, API access
        and mailboxes during consent. OAuth access tokens authenticate HTTP API
        requests; use separate credentials for SMTP and IMAP.
      flows:
        authorizationCode:
          authorizationUrl: https://app.sendmux.ai/oauth/authorize
          refreshUrl: https://app.sendmux.ai/oauth/token
          scopes:
            analytics.*: All analytics operations
            analytics.read: View key usage analytics and verification logs
            billing.*: All billing operations
            billing.auto_topup: Configure auto top-up settings
            billing.read: View balance, transactions, invoices
            billing.topup: Purchase balance top-ups
            domain.*: All domain operations
            domain.create: Add sending domains
            domain.delete: Remove domains
            domain.read: List/view domains and DNS status
            domain.verify: Trigger domain verification
            email.receive: Authorise email reception
            email.send: Send email through the HTTP API
            key.*: All key management operations
            key.create: Create new API keys (both root and mailbox)
            key.read: List/view API keys and their metadata
            key.revoke: Revoke API keys
            key.rotate: Rotate API keys
            logs.*: All log operations
            logs.read: View delivery logs
            mailbox.admin.*: All mailbox admin operations
            mailbox.admin.create: Create mailboxes (admin-level)
            mailbox.admin.delete: Delete mailboxes (admin-level)
            mailbox.admin.manage: Manage all mailbox settings
            mailbox.admin.read: List/view mailboxes (admin-level)
            mailbox.drafts.write: Create and edit saved mailbox drafts
            mailbox.read: Read mailbox contents (folders, messages)
            mailbox.settings.update: Update own mailbox settings (signature, auto-reply)
            provider.*: All provider operations
            provider.create: Add email provider accounts (Google, Microsoft, SMTP)
            provider.delete: Remove provider accounts
            provider.read: List/view provider accounts and connection status
            provider.update: Update provider settings, refresh tokens
            routing.*: All routing operations
            routing.create: Create delivery groups
            routing.delete: Remove delivery groups
            routing.read: List/view delivery groups and routing rules
            routing.update: Update delivery group configuration
            team.*: All team operations
            team.members.invite: Invite team members
            team.members.remove: Remove team members
            team.members.roles: Change member roles
            team.read: View team settings and members
            team.update: Update team settings
            webhook.*: All webhook operations
            webhook.create: Create webhook subscriptions
            webhook.delete: Delete webhook subscriptions
            webhook.manage: Rotate signing secret + send test events
            webhook.read: List/view webhook subscriptions
            webhook.update: Update webhook URL, event types, enabled flag
          tokenUrl: https://app.sendmux.ai/oauth/token
      type: oauth2

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.