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

# Update an email account

> <small>_Requires the `channels:write` scope (or a broader one that includes it)._</small>

Use this endpoint when you need to change specific settings on an existing email account without resending the whole record. Send at least one of the connection, safety, signature, optOut, rampUp, and tags sections; only the sections and fields you include are updated, and anything omitted is left unchanged. The connection section carries the SMTP/IMAP credentials, so it applies to custom mailboxes rather than OAuth-connected Gmail and Office 365 accounts. A safety daily limit above the ceiling allowed by your workspace plan is rejected.



## OpenAPI

````yaml /api-reference/bundled.yaml patch /v3/email-accounts/{id}
openapi: 3.1.0
info:
  version: 3.0.0
  title: Reply API
  description: API for managing email sequences, contacts, and automation workflows
servers:
  - url: https://api.reply.io
security:
  - bearerAuth: []
tags:
  - name: User Account
    description: Account information and authentication verification
  - name: Accounts
    description: Manage accounts (companies/organizations)
  - name: AI SDR Insights
    description: Read AI SDR insights for sequence contacts
  - name: AI SDR Intent Signals
    description: >-
      Read Reply industry IDs and technology slugs used in AI SDR intent-signal
      configuration (typeahead)
  - name: AI SDR Sequences
    description: >-
      Manage AI SDR sequences and their AI SDR-specific settings — create, read
      settings, partial update, autopilot enable/disable/force-start, approval
      mode, generated step types, and playbook/knowledge-base connections
  - name: AI SDR Web Search
    description: Find contacts via AI-driven web search and review past searches
  - name: Attachments
    description: >-
      Upload file attachments used across email templates, sequence steps, and
      direct emails
  - name: Account Lists
    description: Manage account lists and account membership
  - name: Background Jobs
    description: >-
      Track and cancel asynchronous background operations (e.g., email
      validation)
  - name: Custom Fields
    description: Manage custom contact fields
  - name: Direct Outreach
    description: >-
      Send one-off outreach directly to a contact outside of any sequence —
      direct emails and LinkedIn connection requests, messages, InMails, and
      voice messages
  - name: Contact Blacklist Rules
    description: Manage blacklist rules for domains, emails, and email exceptions
  - name: Contact Enrichment
    description: >-
      Enrich contacts with emails, phone numbers, LinkedIn data, and AI-filled
      custom fields
  - name: Contact Lists
    description: Manage contact lists and contact membership
  - name: Contacts
    description: Manage individual contacts
  - name: Email Accounts
    description: Manage email accounts used for sending and receiving
  - name: Email Templates
    description: Manage email templates and template folders
  - name: Email Validations
    description: Estimate and schedule asynchronous email validation jobs
  - name: Holiday Calendars
    description: Manage holiday calendars for scheduling
  - name: Inbox
    description: >-
      Manage inbox threads and per-team thread categories — list/filter, read
      state, replies, category assignment, and meeting-intent flagging
  - name: LinkedIn Accounts
    description: Manage LinkedIn accounts for outreach
  - name: Live Data
    description: >-
      Find new contacts via Live Data searches and read typeahead values for the
      Live Data / Autopilot filter sidebar
  - name: AI SDR Knowledge Bases
    description: >-
      Manage AI SDR knowledge bases — collections of documents, links, reply
      handlers, and reengagement cards that inform the agent's responses
  - name: AI SDR Offers
    description: >-
      Manage AI SDR offers — bundles of company-context inputs (ICP, pain
      points, value propositions, etc.) used to personalize outreach
  - name: AI SDR Pending Approvals
    description: >-
      Review, send, regenerate, and provide feedback on AI-generated messages
      awaiting human approval
  - name: AI SDR Playbooks
    description: >-
      Manage AI SDR playbooks — tone, voice, and style guides applied during
      personalized message generation
  - name: Reports
    description: >-
      Generate and access performance reports across email, calls, tasks,
      LinkedIn, and team performance
  - name: Schedules
    description: Manage email send schedules and timing
  - name: Settings
    description: Manage team and user settings
  - name: Sequence Contacts
    description: Manage contacts within sequences
  - name: Sequence Email Accounts
    description: Manage email accounts linked to sequences
  - name: Sequence Folders
    description: Organize sequences into folders
  - name: Sequence LinkedIn Accounts
    description: Manage LinkedIn accounts linked to sequences
  - name: AI SDR Sequence Preview
    description: >-
      Read and regenerate per-contact previews of the messages a sequence will
      send, and provide feedback on preview messages
  - name: Sequence Steps
    description: Manage individual steps in sequences
  - name: Sequence Templates
    description: Manage sequence templates
  - name: Sequences
    description: Manage email automation sequences
  - name: AI SDR Strategist
    description: Trigger AI Strategist runs
  - name: Tasks
    description: Manage tasks and to-do items
  - name: Webhooks
    description: Manage webhook subscriptions and inspect delivery history
paths:
  /v3/email-accounts/{id}:
    patch:
      tags:
        - Email Accounts
      summary: Update an email account
      description: >-
        <small>_Requires the `channels:write` scope (or a broader one that
        includes it)._</small>


        Use this endpoint when you need to change specific settings on an
        existing email account without resending the whole record. Send at least
        one of the connection, safety, signature, optOut, rampUp, and tags
        sections; only the sections and fields you include are updated, and
        anything omitted is left unchanged. The connection section carries the
        SMTP/IMAP credentials, so it applies to custom mailboxes rather than
        OAuth-connected Gmail and Office 365 accounts. A safety daily limit
        above the ceiling allowed by your workspace plan is rejected.
      operationId: UpdateEmailAccount
      parameters:
        - name: id
          in: path
          required: true
          description: Email Account ID
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: EmailAccountUpdateRequest
              description: |-
                Request body for partially updating an email account (PATCH).
                Only provide the sections and fields you want to change.
                Omitted sections and fields are left unchanged.
              properties:
                connection:
                  type: object
                  title: EmailAccountConnectionSection
                  description: >-
                    SMTP and IMAP connection settings for a custom email
                    account. Only applicable to Custom provider type.
                  properties:
                    email:
                      type: string
                      format: email
                      description: The email address
                    senderName:
                      type: string
                      description: The name displayed as sender in recipient inboxes
                    smtpHost:
                      type: string
                      description: >-
                        Hostname or IP address of the SMTP server used for
                        sending emails
                    smtpPort:
                      type: integer
                      minimum: 1
                      maximum: 65535
                      description: >-
                        Port number for the SMTP server (typically 465 for
                        SSL/TLS)
                    smtpPassword:
                      type: string
                      description: Password for SMTP authentication
                    smtpSsl:
                      type: boolean
                      default: true
                      description: Whether SSL/TLS is used for the SMTP connection
                    imapHost:
                      type: string
                      description: >-
                        Hostname or IP address of the IMAP server used for
                        receiving emails
                    imapPort:
                      type: integer
                      minimum: 1
                      maximum: 65535
                      description: >-
                        Port number for the IMAP server (typically 993 for
                        SSL/TLS)
                    imapPassword:
                      type: string
                      description: Password for IMAP authentication
                    imapSsl:
                      type: boolean
                      default: true
                      description: Whether SSL/TLS is used for the IMAP connection
                  required:
                    - email
                    - smtpHost
                    - smtpPort
                    - smtpPassword
                    - imapHost
                    - imapPort
                    - imapPassword
                safety:
                  type: object
                  title: EmailAccountSafetySection
                  description: Sending safety and throttling configuration.
                  properties:
                    dailyLimit:
                      type: integer
                      description: Maximum number of emails that can be sent per day
                    isEmailsThrottlingEnabled:
                      type: boolean
                      nullable: true
                      description: Whether email throttling is enabled
                    emailsPerInterval:
                      type: integer
                      format: int16
                      nullable: true
                      description: Number of emails allowed per throttling interval
                    emailsThrottlingSecondsInterval:
                      type: integer
                      format: int16
                      nullable: true
                      description: Length of the throttling interval in seconds
                    isSendingDelayEnabled:
                      type: boolean
                      nullable: true
                      description: Whether a random delay between emails is enabled
                    maxSendingDelaySeconds:
                      type: integer
                      nullable: true
                      description: Maximum delay in seconds between sent emails
                    minSendingDelaySeconds:
                      type: integer
                      nullable: true
                      description: Minimum delay in seconds between sent emails
                signature:
                  type: object
                  title: EmailAccountSignatureSection
                  description: Email signature configuration.
                  properties:
                    signature:
                      type: string
                      nullable: true
                      description: HTML or plain-text signature appended to outgoing emails
                optOut:
                  type: object
                  title: EmailAccountOptOutSection
                  description: Opt-out / unsubscribe link configuration.
                  properties:
                    message:
                      type: string
                      nullable: true
                      description: Opt-out message text
                    emailFooter:
                      type: string
                      nullable: true
                      description: Footer text appended to emails
                    isOptOutLinkEnabled:
                      type: boolean
                      description: Whether the opt-out link is included in emails
                    optOutTextBlock:
                      type: string
                      nullable: true
                      description: Custom opt-out text block content
                rampUp:
                  type: object
                  title: EmailAccountRampUpSection
                  description: >-
                    Sending volume ramp-up configuration for warming up email
                    accounts.
                  properties:
                    enabled:
                      type: boolean
                      description: Whether sending ramp-up is enabled
                    startValue:
                      type: integer
                      description: Initial number of emails per day when ramp-up starts
                    incrementValue:
                      type: integer
                      description: Daily increase in email volume during ramp-up
                tags:
                  type: array
                  items:
                    type: string
                  description: Tag names to assign (replaces existing tags)
              example:
                safety:
                  dailyLimit: 750
                signature:
                  signature: Updated signature
      responses:
        '200':
          description: Email account updated successfully
          content:
            application/json:
              schema:
                type: object
                title: EmailAccountDetail
                description: >-
                  Full detailed representation of an email account, including
                  all configuration sections.
                properties:
                  id:
                    type: integer
                    format: int64
                    description: Unique identifier for the email account
                    readOnly: true
                  ownerUserId:
                    type: integer
                    description: ID of the user who owns this email account
                    readOnly: true
                  emailAccountType:
                    type: string
                    description: >-
                      Provider type of the email account.

                      Values: custom, gmail, outlook, exchange,
                      exchangeOnPremise
                    enum:
                      - custom
                      - gmail
                      - outlook
                      - exchange
                      - exchangeOnPremise
                    readOnly: true
                  isDefault:
                    type: boolean
                    description: Whether this is the user's default email account
                    readOnly: true
                  isInUse:
                    type: boolean
                    description: >-
                      Whether this email account is currently used in any active
                      sequence
                    readOnly: true
                  connectionStatus:
                    type: string
                    description: |-
                      Current connection status of the email account.
                      Values: unknown, connected, disconnected
                    enum:
                      - unknown
                      - connected
                      - disconnected
                    readOnly: true
                  sendingConnectivityError:
                    type: string
                    nullable: true
                    description: Error details if SMTP sending connectivity has failed
                    readOnly: true
                  receivingConnectivityError:
                    type: string
                    nullable: true
                    description: Error details if IMAP receiving connectivity has failed
                    readOnly: true
                  sendingLockedByProvider:
                    type: boolean
                    description: Whether the email provider has locked outbound sending
                    readOnly: true
                  updatedAt:
                    type: string
                    format: date-time
                    description: Timestamp of the last update to this email account
                    readOnly: true
                  connection:
                    type: object
                    title: EmailAccountConnectionResponseSection
                    description: >-
                      Connection settings returned in responses (passwords
                      excluded).
                    properties:
                      email:
                        type: string
                        format: email
                        description: The email address
                      senderName:
                        type: string
                        description: The name displayed as sender in recipient inboxes
                      smtpHost:
                        type: string
                        description: Hostname or IP address of the SMTP server
                      smtpPort:
                        type: integer
                        description: Port number for the SMTP server
                      smtpSsl:
                        type: boolean
                        description: Whether SSL/TLS is used for the SMTP connection
                      imapHost:
                        type: string
                        description: Hostname or IP address of the IMAP server
                      imapPort:
                        type: integer
                        description: Port number for the IMAP server
                      imapSsl:
                        type: boolean
                        description: Whether SSL/TLS is used for the IMAP connection
                  safety:
                    type: object
                    title: EmailAccountSafetySection
                    description: Sending safety and throttling configuration.
                    properties:
                      dailyLimit:
                        type: integer
                        description: Maximum number of emails that can be sent per day
                      isEmailsThrottlingEnabled:
                        type: boolean
                        nullable: true
                        description: Whether email throttling is enabled
                      emailsPerInterval:
                        type: integer
                        format: int16
                        nullable: true
                        description: Number of emails allowed per throttling interval
                      emailsThrottlingSecondsInterval:
                        type: integer
                        format: int16
                        nullable: true
                        description: Length of the throttling interval in seconds
                      isSendingDelayEnabled:
                        type: boolean
                        nullable: true
                        description: Whether a random delay between emails is enabled
                      maxSendingDelaySeconds:
                        type: integer
                        nullable: true
                        description: Maximum delay in seconds between sent emails
                      minSendingDelaySeconds:
                        type: integer
                        nullable: true
                        description: Minimum delay in seconds between sent emails
                  signature:
                    type: object
                    title: EmailAccountSignatureSection
                    description: Email signature configuration.
                    properties:
                      signature:
                        type: string
                        nullable: true
                        description: >-
                          HTML or plain-text signature appended to outgoing
                          emails
                  optOut:
                    type: object
                    title: EmailAccountOptOutSection
                    description: Opt-out / unsubscribe link configuration.
                    properties:
                      message:
                        type: string
                        nullable: true
                        description: Opt-out message text
                      emailFooter:
                        type: string
                        nullable: true
                        description: Footer text appended to emails
                      isOptOutLinkEnabled:
                        type: boolean
                        description: Whether the opt-out link is included in emails
                      optOutTextBlock:
                        type: string
                        nullable: true
                        description: Custom opt-out text block content
                  rampUp:
                    type: object
                    title: EmailAccountRampUpSection
                    description: >-
                      Sending volume ramp-up configuration for warming up email
                      accounts.
                    properties:
                      enabled:
                        type: boolean
                        description: Whether sending ramp-up is enabled
                      startValue:
                        type: integer
                        description: Initial number of emails per day when ramp-up starts
                      incrementValue:
                        type: integer
                        description: Daily increase in email volume during ramp-up
                  tags:
                    type: array
                    items:
                      type: string
                    description: Tag names associated with this email account
                example:
                  id: 12345
                  ownerUserId: 42
                  emailAccountType: custom
                  isDefault: false
                  isInUse: true
                  connectionStatus: connected
                  sendingConnectivityError: null
                  receivingConnectivityError: null
                  sendingLockedByProvider: false
                  updatedAt: '2026-03-15T10:30:00Z'
                  connection:
                    email: john.doe@company.com
                    senderName: John Doe
                    smtpHost: smtp.company.com
                    smtpPort: 465
                    smtpSsl: true
                    imapHost: imap.company.com
                    imapPort: 993
                    imapSsl: true
                  safety:
                    dailyLimit: 500
                    isEmailsThrottlingEnabled: true
                    emailsPerInterval: 5
                    emailsThrottlingSecondsInterval: 60
                    isSendingDelayEnabled: true
                    maxSendingDelaySeconds: 120
                    minSendingDelaySeconds: 30
                  signature:
                    signature: |-
                      Best regards,
                      John Doe
                  optOut:
                    message: Unsubscribe
                    emailFooter: ''
                    isOptOutLinkEnabled: true
                    optOutTextBlock: Click here to unsubscribe
                  rampUp:
                    enabled: false
                    startValue: 10
                    incrementValue: 5
                  tags:
                    - Marketing
        '400':
          description: >-
            Validation failure on the request body or route parameter, or a
            business

            rule rejection.
          content:
            application/problem+json:
              schema:
                oneOf:
                  - allOf:
                      - allOf:
                          - type: object
                            title: Problem Details
                            description: >-
                              Bare RFC 9457 problem-details envelope. Returned
                              by middleware-level errors

                              that don't carry domain context: 401 Unauthorized
                              (auth middleware),

                              429 Too Many Requests (rate-limit middleware), and
                              route-level 404 / 405 /

                              415 (framework middleware).


                              Business and validation responses extend this
                              envelope and add additional

                              fields — see `business-problem.model.yaml` (adds
                              `code` slug) and

                              `validation-problem.model.yaml` (adds `errors[]`
                              array).
                            properties:
                              title:
                                type: string
                                description: Short, human-readable summary of the problem.
                              status:
                                type: integer
                                description: HTTP status code.
                                minimum: 100
                                maximum: 599
                              detail:
                                type: string
                                description: >-
                                  Human-readable explanation specific to this
                                  occurrence.
                          - type: object
                            properties:
                              errors:
                                type: array
                                description: >-
                                  List of field-level validation errors. Always
                                  non-empty when this

                                  envelope is returned. Each entry pins a single
                                  offending field

                                  via JSON Pointer plus a sanitized detail
                                  string.
                                items:
                                  type: object
                                  title: Validation Error
                                  description: A single field-level validation error.
                                  properties:
                                    pointer:
                                      type: string
                                      description: >-
                                        JSON Pointer (RFC 6901) to the offending
                                        field — e.g.

                                        `/steps/0/subject`.


                                        * An empty string (`""`) means the error
                                        applies to the whole
                                          request body (e.g. body is missing or unparseable).
                                        * For route or query parameter failures
                                        the pointer is the parameter
                                          name (e.g. `id`, `top`).
                                      example: /steps/0/subject
                                    detail:
                                      type: string
                                      description: >-
                                        Sanitized, human-readable explanation of
                                        this field's error. One of a

                                        small set of templates — `"Field is
                                        required."`, `"Value has an

                                        invalid type."`, `"Value has an invalid
                                        format."`, `"Request body is

                                        not valid JSON."`, `"The request body is
                                        required and cannot be

                                        empty."` — or a FluentValidator message
                                        on body endpoints.
                                      example: Field is required.
                        title: Validation Problem
                        description: >-
                          Input-validation error response at 400. Returned when
                          the request body

                          fails binding, FluentValidator rules, or when
                          route/query parameter

                          attribute validation (`[Range]`, `[Required]`) fails.
                          Route, query, and

                          body errors are combined into a single `errors[]`
                          array — clients should

                          not assume one error per request.
                      - example:
                          title: Validation failed
                          status: 400
                          detail: The request body contains validation errors.
                          errors:
                            - pointer: /name
                              detail: Field is required.
                  - allOf:
                      - allOf:
                          - type: object
                            title: Problem Details
                            description: >-
                              Bare RFC 9457 problem-details envelope. Returned
                              by middleware-level errors

                              that don't carry domain context: 401 Unauthorized
                              (auth middleware),

                              429 Too Many Requests (rate-limit middleware), and
                              route-level 404 / 405 /

                              415 (framework middleware).


                              Business and validation responses extend this
                              envelope and add additional

                              fields — see `business-problem.model.yaml` (adds
                              `code` slug) and

                              `validation-problem.model.yaml` (adds `errors[]`
                              array).
                            properties:
                              title:
                                type: string
                                description: Short, human-readable summary of the problem.
                              status:
                                type: integer
                                description: HTTP status code.
                                minimum: 100
                                maximum: 599
                              detail:
                                type: string
                                description: >-
                                  Human-readable explanation specific to this
                                  occurrence.
                          - type: object
                            properties:
                              code:
                                type: string
                                description: >-
                                  Stable, machine-readable error slug in the
                                  form

                                  `"<resource>.<variant>"`.


                                  * `resource` is the camelCased domain — e.g.
                                  `sequence`,
                                    `contact`, `inboxThread`, `blacklistDomainRule`.
                                  * `variant` is the camelCased specific failure
                                  mode — e.g.
                                    `notFound`, `forbidden`, `duplicateName`, `globalRuleReadOnly`.

                                  Use `code` for programmatic error handling;
                                  use `detail` for

                                  user-facing messages. Slugs are stable across
                                  server-side enum

                                  reorderings and never change meaning under a
                                  given resource.
                                pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                                example: sequence.notFound
                        title: Business Problem
                        description: >-
                          Domain error response carrying a stable, namespaced
                          error slug.

                          Emitted for most 4xx responses (business 400, 403,
                          404, 409, …) and

                          for 503 when a downstream dependency is unavailable.
                      - example:
                          title: Bad Request
                          status: 400
                          detail: Pagination parameters are invalid.
                          code: sequence.invalidPagination
              examples:
                validation_failed:
                  summary: Body validation failure (FluentValidator)
                  value:
                    title: Validation failed
                    status: 400
                    detail: The request body contains validation errors.
                    errors:
                      - pointer: /email
                        detail: '''email'' must be a valid email address.'
                business_invalid_input:
                  summary: Domain rule rejection
                  value:
                    title: Bad Request
                    status: 400
                    detail: Invalid request
                    code: emailAccount.invalidInput
        '401':
          description: >-
            Unauthorized. The response body is empty; check the
            `WWW-Authenticate` header for the expected scheme.
          content:
            application/problem+json:
              schema:
                allOf:
                  - type: object
                    title: Problem Details
                    description: >-
                      Bare RFC 9457 problem-details envelope. Returned by
                      middleware-level errors

                      that don't carry domain context: 401 Unauthorized (auth
                      middleware),

                      429 Too Many Requests (rate-limit middleware), and
                      route-level 404 / 405 /

                      415 (framework middleware).


                      Business and validation responses extend this envelope and
                      add additional

                      fields — see `business-problem.model.yaml` (adds `code`
                      slug) and

                      `validation-problem.model.yaml` (adds `errors[]` array).
                    properties:
                      title:
                        type: string
                        description: Short, human-readable summary of the problem.
                      status:
                        type: integer
                        description: HTTP status code.
                        minimum: 100
                        maximum: 599
                      detail:
                        type: string
                        description: >-
                          Human-readable explanation specific to this
                          occurrence.
                  - example:
                      title: Unauthorized
                      status: 401
                      detail: Authentication credentials are missing or invalid.
        '403':
          description: User lacks required feature scope to update this email account
          content:
            application/problem+json:
              schema:
                allOf:
                  - allOf:
                      - type: object
                        title: Problem Details
                        description: >-
                          Bare RFC 9457 problem-details envelope. Returned by
                          middleware-level errors

                          that don't carry domain context: 401 Unauthorized
                          (auth middleware),

                          429 Too Many Requests (rate-limit middleware), and
                          route-level 404 / 405 /

                          415 (framework middleware).


                          Business and validation responses extend this envelope
                          and add additional

                          fields — see `business-problem.model.yaml` (adds
                          `code` slug) and

                          `validation-problem.model.yaml` (adds `errors[]`
                          array).
                        properties:
                          title:
                            type: string
                            description: Short, human-readable summary of the problem.
                          status:
                            type: integer
                            description: HTTP status code.
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                            description: >-
                              Human-readable explanation specific to this
                              occurrence.
                      - type: object
                        properties:
                          code:
                            type: string
                            description: >-
                              Stable, machine-readable error slug in the form

                              `"<resource>.<variant>"`.


                              * `resource` is the camelCased domain — e.g.
                              `sequence`,
                                `contact`, `inboxThread`, `blacklistDomainRule`.
                              * `variant` is the camelCased specific failure
                              mode — e.g.
                                `notFound`, `forbidden`, `duplicateName`, `globalRuleReadOnly`.

                              Use `code` for programmatic error handling; use
                              `detail` for

                              user-facing messages. Slugs are stable across
                              server-side enum

                              reorderings and never change meaning under a given
                              resource.
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            example: sequence.notFound
                    title: Business Problem
                    description: >-
                      Domain error response carrying a stable, namespaced error
                      slug.

                      Emitted for most 4xx responses (business 400, 403, 404,
                      409, …) and

                      for 503 when a downstream dependency is unavailable.
                  - example:
                      title: Forbidden
                      status: 403
                      detail: You do not have permission to access this resource.
                      code: sequence.forbidden
              example:
                title: Forbidden
                status: 403
                detail: Feature scopes [ManageEmailAccount] are denied for userId 123.
                code: emailAccount.forbidden
        '404':
          description: Email account not found
          content:
            application/problem+json:
              schema:
                allOf:
                  - allOf:
                      - type: object
                        title: Problem Details
                        description: >-
                          Bare RFC 9457 problem-details envelope. Returned by
                          middleware-level errors

                          that don't carry domain context: 401 Unauthorized
                          (auth middleware),

                          429 Too Many Requests (rate-limit middleware), and
                          route-level 404 / 405 /

                          415 (framework middleware).


                          Business and validation responses extend this envelope
                          and add additional

                          fields — see `business-problem.model.yaml` (adds
                          `code` slug) and

                          `validation-problem.model.yaml` (adds `errors[]`
                          array).
                        properties:
                          title:
                            type: string
                            description: Short, human-readable summary of the problem.
                          status:
                            type: integer
                            description: HTTP status code.
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                            description: >-
                              Human-readable explanation specific to this
                              occurrence.
                      - type: object
                        properties:
                          code:
                            type: string
                            description: >-
                              Stable, machine-readable error slug in the form

                              `"<resource>.<variant>"`.


                              * `resource` is the camelCased domain — e.g.
                              `sequence`,
                                `contact`, `inboxThread`, `blacklistDomainRule`.
                              * `variant` is the camelCased specific failure
                              mode — e.g.
                                `notFound`, `forbidden`, `duplicateName`, `globalRuleReadOnly`.

                              Use `code` for programmatic error handling; use
                              `detail` for

                              user-facing messages. Slugs are stable across
                              server-side enum

                              reorderings and never change meaning under a given
                              resource.
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            example: sequence.notFound
                    title: Business Problem
                    description: >-
                      Domain error response carrying a stable, namespaced error
                      slug.

                      Emitted for most 4xx responses (business 400, 403, 404,
                      409, …) and

                      for 503 when a downstream dependency is unavailable.
                  - example:
                      title: Not Found
                      status: 404
                      detail: The requested resource was not found.
                      code: sequence.notFound
              example:
                title: Not Found
                status: 404
                detail: Email account with ID 42 not found
                code: emailAccount.notFound
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying
              schema:
                type: integer
                minimum: 1
          content:
            application/problem+json:
              schema:
                allOf:
                  - type: object
                    title: Problem Details
                    description: >-
                      Bare RFC 9457 problem-details envelope. Returned by
                      middleware-level errors

                      that don't carry domain context: 401 Unauthorized (auth
                      middleware),

                      429 Too Many Requests (rate-limit middleware), and
                      route-level 404 / 405 /

                      415 (framework middleware).


                      Business and validation responses extend this envelope and
                      add additional

                      fields — see `business-problem.model.yaml` (adds `code`
                      slug) and

                      `validation-problem.model.yaml` (adds `errors[]` array).
                    properties:
                      title:
                        type: string
                        description: Short, human-readable summary of the problem.
                      status:
                        type: integer
                        description: HTTP status code.
                        minimum: 100
                        maximum: 599
                      detail:
                        type: string
                        description: >-
                          Human-readable explanation specific to this
                          occurrence.
              example:
                title: Too Many Requests
                status: 429
                detail: Rate limit exceeded. Retry after 60 seconds.
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Authenticate every request with a Bearer token. Pass your Reply API key
        in the

        `Authorization` header:


        ```

        Authorization: Bearer <your-api-key>

        ```


        Get your API key from the Reply dashboard: **Settings → API Key**.

````