> ## 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.

# Request attachment text

> Extract readable text from an attachment up to 7500000 bytes, at no extra charge. Repeating this request reuses the same current source extraction for 24 hours; no request body or Idempotency-Key is needed. Conversion runs for at most 30 seconds. OCR is unavailable. Current mailbox access and the source attachment are checked before serving cached text. If extraction cannot complete, use the original attachment download.



## OpenAPI

````yaml /openapi-app.json post /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:
    post:
      tags:
        - Mailbox API
      summary: Request attachment text
      description: >-
        Extract readable text from an attachment up to 7500000 bytes, at no
        extra charge. Repeating this request reuses the same current source
        extraction for 24 hours; no request body or Idempotency-Key is needed.
        Conversion runs for at most 30 seconds. OCR is unavailable. Current
        mailbox access and the source attachment are checked before serving
        cached text. If extraction cannot complete, use the original attachment
        download.
      operationId: mailboxRequestAttachmentText
      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: >-
            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
        '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.