sendmux-ai Domain Filters API

The Domain Filters API from sendmux-ai — 1 operation(s) for domain filters.

Operations 2

GET /domains/{public_id}/filters Get domain-wide sender filters #
PUT /domains/{public_id}/filters Replace domain-wide sender filters #

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-domain-filters-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-domain-filters-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: Programmatic access to your Sendmux email infrastructure.
  title: Sendmux Domain Filters API
  version: 1.0.0
servers:
- description: API v1
  url: https://app.sendmux.ai/api/v1
security:
- bearerAuth: []
- oauth2: []
tags:
- name: Domain Filters
paths:
  /domains/{public_id}/filters:
    get:
      description: 'Returns the current sender-filter mode and rule set applied to every mailbox under this domain. Only sending and receiving domains support domain-wide filters. Per-mailbox rules take precedence at match time.


        Responses carry a weak `ETag` — send it as `If-None-Match` to skip the body when the filter set has not changed (returns `304 Not Modified`). The same ETag is the value to use in `If-Match` on the corresponding PUT for optimistic concurrency.'
      operationId: managementGetDomainFilters
      parameters:
      - in: path
        name: public_id
        required: true
        schema:
          description: Domain public ID
          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/FilterStateResponse'
          description: Filter state
          headers:
            ETag:
              description: Weak ETag for conditional GETs and optimistic-concurrency PUTs.
              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.
              schema:
                type: string
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Domain not found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Domain is send-only and does not support inbound filters.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Filter service temporarily unavailable
      security:
      - bearerAuth: []
      - oauth2:
        - mailbox.admin.manage
      summary: Get domain-wide sender filters
      tags:
      - Domain Filters
    put:
      description: 'Atomically replaces the sender-filter mode and rule set for an entire sending and receiving domain. Applies to every mailbox under the domain unless that mailbox has its own per-mailbox rules (which take precedence). Maximum 1000 rules per request.


        For optimistic concurrency, send `If-Match: ` using the ETag from a prior GET. A mismatched `If-Match` returns `409 conflict` (the server''s ETag is echoed back so you can decide whether to re-fetch). Responses carry the new ETag so chained edits can pipeline without a re-GET.'
      operationId: managementSetDomainFilters
      parameters:
      - in: path
        name: public_id
        required: true
        schema:
          description: Domain public ID
          type: string
      - in: header
        name: If-Match
        required: false
        schema:
          description: Weak ETag from a prior GET. Reject with 409 conflict when the server's current ETag differs.
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetFilterStateBody'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FilterStateResponse'
          description: Updated filter state
          headers:
            ETag:
              description: Weak ETag for the post-update resource.
              schema:
                type: string
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Invalid request body
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Domain not found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: '`If-Match` ETag does not match the server''s current version, the domain is send-only, or deletion is in progress.'
        '413':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Request body too large
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Rule cap exceeded or invalid rule pattern
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Filter service temporarily unavailable
      security:
      - bearerAuth: []
      - oauth2:
        - mailbox.admin.manage
      summary: Replace domain-wide sender filters
      tags:
      - Domain Filters
components:
  schemas:
    ResponseMeta:
      additionalProperties: false
      properties:
        request_id:
          example: req_clxxxxxxxxxxxxxxxxxxxxxxxxx
          type: string
      required:
      - request_id
      type: object
    FilterState:
      additionalProperties: false
      properties:
        mode:
          description: Active filtering mode. `off` disables filtering (all senders accepted). `allowlist` only accepts senders matching a rule. `denylist` blocks senders matching a rule.
          enum:
          - 'off'
          - allowlist
          - denylist
          type: string
        rules:
          description: Current rules, sorted by pattern ascending
          items:
            $ref: '#/components/schemas/FilterRule'
          type: array
      required:
      - mode
      - rules
      type: object
    FilterStateResponse:
      allOf:
      - $ref: '#/components/schemas/SuccessEnvelope'
      - properties:
          data:
            $ref: '#/components/schemas/FilterState'
          meta:
            $ref: '#/components/schemas/ResponseMeta'
        required:
        - data
        type: object
      unevaluatedProperties: false
    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
    SuccessEnvelope:
      properties:
        meta:
          additionalProperties: {}
          properties: {}
          type: object
        ok:
          enum:
          - true
          type: boolean
      required:
      - ok
      - meta
      type: object
    SetFilterStateBody:
      additionalProperties: false
      properties:
        mode:
          enum:
          - 'off'
          - allowlist
          - denylist
          type: string
        rules:
          description: Replacement rule set. Maximum 1000 rules per request. An empty array is valid (no rules).
          items:
            $ref: '#/components/schemas/FilterRule'
          maxItems: 1000
          type: array
      required:
      - mode
      - rules
      type: object
    FilterRule:
      additionalProperties: false
      properties:
        note:
          description: Free-form caption for the rule (≤255 chars). UI-only metadata — never consulted at match time. `null` when absent.
          example: billing webhooks
          maxLength: 255
          type:
          - string
          - 'null'
        pattern:
          description: Email address or bare domain name. Validated against RFC 5321/1035 regexes. The `*@domain` wildcard spelling is accepted and normalised to the bare domain (matching is by exact address or sender domain).
          example: partner.com
          type: string
        type:
          description: Rule type
          enum:
          - allow
          - deny
          type: string
      required:
      - type
      - pattern
      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
  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