sendmux-ai Emails API

The Emails API from sendmux-ai — 3 operation(s) for emails.

Operations 3

GET /emails/logs List delivery logs #
GET /emails/logs/{public_id} Get delivery log #
GET /emails/metrics Get email metrics #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/sendmux-ai:sendmux-ai-emails-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

sendmux-ai-emails-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: Programmatic access to your Sendmux email infrastructure.
  title: Sendmux Emails API
  version: 1.0.0
servers:
- description: API v1
  url: https://app.sendmux.ai/api/v1
security:
- bearerAuth: []
- oauth2: []
tags:
- name: Emails
paths:
  /emails/logs:
    get:
      description: Returns paginated delivery logs with cursor-based pagination and filters.
      operationId: managementListEmailLogs
      parameters:
      - in: query
        name: limit
        required: false
        schema:
          description: Max results (default 25)
          maximum: 100
          minimum: 1
          type: integer
      - in: query
        name: cursor
        required: false
        schema:
          description: Cursor from previous page
          type: string
      - in: query
        name: status
        required: false
        schema:
          description: Filter by delivery status.
          enum:
          - pending
          - sent
          - failed
          - rejected
          type: string
      - in: query
        name: from_date
        required: false
        schema:
          description: ISO 8601 start date. Date-only values start at 00:00 UTC.
          type: string
      - in: query
        name: to_date
        required: false
        schema:
          description: ISO 8601 end date. Date-only values include the full UTC day.
          type: string
      - in: query
        name: provider_id
        required: false
        schema:
          description: Filter by provider publicId
          type: string
      - in: query
        name: search
        required: false
        schema:
          description: Search to_email, from_email, sent_from_email, subject, message_id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryLogItemCursorListResponse'
          description: Delivery log list
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Authentication required
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Insufficient permissions
      security:
      - bearerAuth: []
      - oauth2:
        - logs.read
      summary: List delivery logs
      tags:
      - Emails
  /emails/logs/{public_id}:
    get:
      description: Returns a single delivery log by its public ID. Responses carry a weak `ETag` header — send it back as `If-None-Match` on the next request and the server will return `304 Not Modified` (no body) when the log has not changed. Logs in a terminal status (sent/failed/rejected) stop changing, so 304 replay is a real bandwidth win on repeated polls.
      operationId: managementGetEmailLog
      parameters:
      - in: path
        name: public_id
        required: true
        schema:
          description: Delivery log public ID (dlog_...)
          type: string
      - in: header
        name: If-None-Match
        required: false
        schema:
          description: Weak ETag from a previous response. Returns 304 when unchanged.
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryLogItemResponse'
          description: Delivery log detail
          headers:
            ETag:
              description: Weak ETag for conditional GETs.
              schema:
                example: W/"a1b2c3d4e5f60718"
                type: string
        '304':
          description: Not Modified — the client's cached copy (matching `If-None-Match`) is still current.
          headers:
            ETag:
              description: Current weak ETag (same as request's `If-None-Match`).
              schema:
                type: string
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Authentication required
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Insufficient permissions
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Not found
      security:
      - bearerAuth: []
      - oauth2:
        - logs.read
      summary: Get delivery log
      tags:
      - Emails
  /emails/metrics:
    get:
      description: Returns aggregated email delivery counts with flexible time windowing and comparison period.
      operationId: managementGetEmailMetrics
      parameters:
      - in: query
        name: window
        required: false
        schema:
          description: 'Preset time window (default: 24h)'
          enum:
          - 24h
          - 7d
          - 30d
          type: string
      - in: query
        name: from_date
        required: false
        schema:
          description: ISO 8601 start date (overrides window)
          type: string
      - in: query
        name: to_date
        required: false
        schema:
          description: ISO 8601 end date
          type: string
      - in: query
        name: granularity
        required: false
        schema:
          description: 'Timeseries granularity (default: daily)'
          enum:
          - hourly
          - daily
          type: string
      - in: query
        name: provider_id
        required: false
        schema:
          description: Filter by provider publicId
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailMetricsResponse'
          description: Email metrics with comparison
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Authentication required
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Insufficient permissions
      security:
      - bearerAuth: []
      - oauth2:
        - analytics.read
      summary: Get email metrics
      tags:
      - Emails
components:
  schemas:
    ResponseMeta:
      additionalProperties: false
      properties:
        request_id:
          example: req_clxxxxxxxxxxxxxxxxxxxxxxxxx
          type: string
      required:
      - request_id
      type: object
    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
    DeliveryLogItemResponse:
      allOf:
      - $ref: '#/components/schemas/SuccessEnvelope'
      - properties:
          data:
            $ref: '#/components/schemas/DeliveryLogDetail'
          meta:
            $ref: '#/components/schemas/ResponseMeta'
        required:
        - data
        type: object
      unevaluatedProperties: false
    EmailMetricsResponse:
      allOf:
      - $ref: '#/components/schemas/SuccessEnvelope'
      - properties:
          data:
            $ref: '#/components/schemas/EmailMetrics'
          meta:
            $ref: '#/components/schemas/ResponseMeta'
        required:
        - data
        type: object
      unevaluatedProperties: false
    DeliveryLogItem:
      additionalProperties: false
      properties:
        accepted_recipient_count:
          description: Recipient occurrences accepted by the provider, or null when no recipient snapshot exists
          maximum: 50
          minimum: 0
          type:
          - integer
          - 'null'
        attempts:
          type: number
        created_at:
          description: ISO 8601 creation timestamp
          type: string
        delivery_group:
          description: Applied per-message delivery group public IDs, or null for absent, ignored or historical hints
          items:
            maxLength: 128
            minLength: 6
            type: string
          maxItems: 50
          minItems: 1
          type:
          - array
          - 'null'
        from_email:
          type:
          - string
          - 'null'
        id:
          description: Log public ID
          example: dlog_clxxxxxxxxxxxxxxxxxxxxxxxxx
          type: string
        message_id:
          description: Email Message-ID header
          type:
          - string
          - 'null'
        provider_id:
          description: Provider public ID
          type:
          - string
          - 'null'
        provider_name:
          description: Provider display name
          type:
          - string
          - 'null'
        recipient_count:
          description: Total recipient occurrences, or null when no recipient snapshot exists
          maximum: 50
          minimum: 0
          type:
          - integer
          - 'null'
        rejected_recipient_count:
          description: Recipient occurrences rejected by the provider, or null when no recipient snapshot exists
          maximum: 50
          minimum: 0
          type:
          - integer
          - 'null'
        sent_at:
          description: ISO 8601 timestamp when email was sent
          type:
          - string
          - 'null'
        sent_from_email:
          description: The actual from address used for delivery after transformation. NULL if no transformation occurred or for older log entries.
          type:
          - string
          - 'null'
        size_bytes:
          type:
          - number
          - 'null'
        status:
          enum:
          - pending
          - sent
          - failed
          - rejected
          type: string
        status_reason:
          type:
          - string
          - 'null'
        subject:
          type:
          - string
          - 'null'
        to_email:
          type:
          - string
          - 'null'
      required:
      - id
      - provider_id
      - provider_name
      - delivery_group
      - message_id
      - from_email
      - sent_from_email
      - to_email
      - subject
      - status
      - status_reason
      - attempts
      - sent_at
      - size_bytes
      - created_at
      - recipient_count
      - accepted_recipient_count
      - rejected_recipient_count
      type: object
    SuccessEnvelope:
      properties:
        meta:
          additionalProperties: {}
          properties: {}
          type: object
        ok:
          enum:
          - true
          type: boolean
      required:
      - ok
      - meta
      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
    DeliveryLogRecipient:
      additionalProperties: false
      properties:
        email:
          description: Recipient email address
          format: email
          type: string
        reason:
          description: Recipient-specific rejection reason when available
          type:
          - string
          - 'null'
        status:
          description: Provider acceptance outcome
          enum:
          - accepted
          - rejected
          type: string
        type:
          description: Recipient header type when known
          enum:
          - to
          - cc
          - bcc
          type:
          - string
          - 'null'
      required:
      - email
      - type
      - status
      - reason
      type: object
    EmailMetrics:
      additionalProperties: false
      properties:
        comparison:
          additionalProperties: false
          properties:
            change_pct:
              additionalProperties: false
              properties:
                failed:
                  example: 10.53
                  type: number
                pending:
                  example: 0
                  type: number
                rejected:
                  example: 33.33
                  type: number
                sent:
                  example: 7.9
                  type: number
                total:
                  example: 8.01
                  type: number
              required:
              - total
              - sent
              - failed
              - rejected
              - pending
              type: object
            failed:
              example: 210
              type: number
            pending:
              example: 50
              type: number
            rejected:
              example: 80
              type: number
            sent:
              example: 14890
              type: number
            total:
              example: 15230
              type: number
          required:
          - total
          - sent
          - failed
          - rejected
          - pending
          - change_pct
          type: object
        summary:
          additionalProperties: false
          properties:
            failed:
              example: 210
              type: number
            pending:
              example: 50
              type: number
            rejected:
              example: 80
              type: number
            sent:
              example: 14890
              type: number
            total:
              example: 15230
              type: number
          required:
          - total
          - sent
          - failed
          - rejected
          - pending
          type: object
        timeseries:
          items:
            additionalProperties: false
            properties:
              failed:
                type: number
              pending:
                type: number
              rejected:
                type: number
              sent:
                type: number
              timestamp:
                example: '2026-03-19T00:00:00Z'
                type: string
              total:
                type: number
            required:
            - timestamp
            - total
            - sent
            - failed
            - rejected
            - pending
            type: object
          type: array
      required:
      - summary
      - comparison
      - timeseries
      type: object
    DeliveryLogDetail:
      additionalProperties: false
      properties:
        accepted_recipient_count:
          description: Recipient occurrences accepted by the provider, or null when no recipient snapshot exists
          maximum: 50
          minimum: 0
          type:
          - integer
          - 'null'
        attempts:
          type: number
        created_at:
          description: ISO 8601 creation timestamp
          type: string
        delivery_group:
          description: Applied per-message delivery group public IDs, or null for absent, ignored or historical hints
          items:
            maxLength: 128
            minLength: 6
            type: string
          maxItems: 50
          minItems: 1
          type:
          - array
          - 'null'
        from_email:
          type:
          - string
          - 'null'
        id:
          description: Log public ID
          example: dlog_clxxxxxxxxxxxxxxxxxxxxxxxxx
          type: string
        message_id:
          description: Email Message-ID header
          type:
          - string
          - 'null'
        provider_id:
          description: Provider public ID
          type:
          - string
          - 'null'
        provider_name:
          description: Provider display name
          type:
          - string
          - 'null'
        recipient_count:
          description: Total recipient occurrences, or null when no recipient snapshot exists
          maximum: 50
          minimum: 0
          type:
          - integer
          - 'null'
        recipients:
          description: Ordered recipient outcome snapshot for this send, or null when no snapshot exists
          items:
            $ref: '#/components/schemas/DeliveryLogRecipient'
          maxItems: 50
          type:
          - array
          - 'null'
        rejected_recipient_count:
          description: Recipient occurrences rejected by the provider, or null when no recipient snapshot exists
          maximum: 50
          minimum: 0
          type:
          - integer
          - 'null'
        sent_at:
          description: ISO 8601 timestamp when email was sent
          type:
          - string
          - 'null'
        sent_from_email:
          description: The actual from address used for delivery after transformation. NULL if no transformation occurred or for older log entries.
          type:
          - string
          - 'null'
        size_bytes:
          type:
          - number
          - 'null'
        status:
          enum:
          - pending
          - sent
          - failed
          - rejected
          type: string
        status_reason:
          type:
          - string
          - 'null'
        subject:
          type:
          - string
          - 'null'
        to_email:
          type:
          - string
          - 'null'
      required:
      - id
      - provider_id
      - provider_name
      - delivery_group
      - message_id
      - from_email
      - sent_from_email
      - to_email
      - subject
      - status
      - status_reason
      - attempts
      - sent_at
      - size_bytes
      - created_at
      - recipient_count
      - accepted_recipient_count
      - rejected_recipient_count
      - recipients
      type: object
    CursorPagination:
      additionalProperties: false
      properties:
        has_more:
          type: boolean
        next_cursor:
          type: string
      required:
      - has_more
      type: object
    DeliveryLogItemCursorListResponse:
      allOf:
      - $ref: '#/components/schemas/SuccessEnvelope'
      - properties:
          data:
            items:
              $ref: '#/components/schemas/DeliveryLogItem'
            type: array
          meta:
            $ref: '#/components/schemas/ResponseMeta'
          pagination:
            $ref: '#/components/schemas/CursorPagination'
        required:
        - data
        - pagination
        type: object
      unevaluatedProperties: false
  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
            calendar.read: Read calendars and events in this mailbox
            calendar.write: Create calendars and create, edit and delete events in this mailbox
            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