> ## 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 a purchased mailbox's profile

> <Warning>
  **Coming soon.** This endpoint will be available by mid December 2026.
</Warning>

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

Changes the first name, last name or profile picture of a mailbox your team bought through mailbox procurement. Send only the fields to change; a field left out stays as it is. `null` and an empty string are rejected, because the provider cannot clear a value.

Only an active mailbox can be updated, one update at a time. Each mailbox allows 2 updates per day, and the limit resets at midnight UTC. Updates made in the app count toward the same limit; an update the provider rejects does not. Requires access to the team's settings.

Returns a jobId — poll GET /v3/background-jobs/{jobId} for the outcome. The job stays Processing until the provider confirms the update, which can take up to 60 minutes. When it ends as Done, its jsonDataResult carries `emailAccountId`, `firstName`, `lastName` and `avatarUrl` as the provider applied them; `avatarUrl` is the URL the provider reports, which can differ from the one you sent.

When the job ends as Failed, its jsonDataResult carries an `errorCode` and a `failureMessage`:

| `errorCode` | Meaning |
|---|---|
| `emailAccountProcurement.notFound` | The mailbox no longer exists. Nothing was sent to the provider. |
| `emailAccountProcurement.mailboxNotActive` | The mailbox stopped being active before the update was sent. Nothing was sent to the provider. |
| `emailAccountProcurement.temporarilyUnavailable` | A temporary error stopped the update before it was sent to the provider. Retry. |
| `emailAccountProcurement.updateRejected` | The provider rejected the update, so nothing was changed and the attempt does not count toward the daily limit. Check the requested values, then retry. |
| `emailAccountProcurement.updateNotConfirmed` | The provider did not confirm the update within 60 minutes. It may still be applied, and the attempt counts toward the daily limit. Check the mailbox before retrying. |

If the job ends as Cancelled, the update was not sent to the provider; retry. If it ends as Expired, the outcome is unknown: check the mailbox before retrying.



## OpenAPI

````yaml /api-reference/bundled.yaml patch /v3/email-accounts/{id}/procurement
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: Contacts
    description: Manage individual contacts
  - name: Contact Lists
    description: Manage contact lists and contact membership
  - name: Accounts
    description: Manage accounts (companies/organizations)
  - name: Account Lists
    description: Manage account lists and account membership
  - name: Custom Fields
    description: Manage custom contact fields
  - name: Prompt Actions
    description: Save reusable AI prompts and run them on contacts to fill custom fields
  - name: Contact Blacklist Rules
    description: Manage blacklist rules for domains, emails, and email exceptions
  - name: Live Data
    description: >-
      Find new contacts via Live Data searches and read typeahead values for the
      Live Data / Autopilot filter sidebar
  - name: Contact Enrichment
    description: >-
      Enrich contacts with emails, phone numbers, LinkedIn data, and AI-filled
      custom fields
  - name: Email Validations
    description: Estimate and schedule asynchronous email validation jobs
  - name: AI SDR Web Search
    description: Find contacts via AI-driven web search and review past searches
  - name: Sequences
    description: Manage email automation sequences
  - name: Sequence Steps
    description: Manage individual steps in sequences
  - name: Sequence Contacts
    description: Manage contacts within sequences
  - name: Sequence Folders
    description: Organize sequences into folders
  - name: Email Accounts
    description: Manage email accounts used for sending and receiving
  - name: Sequence Email Accounts
    description: Manage email accounts linked to sequences
  - name: LinkedIn Accounts
    description: Manage LinkedIn accounts for outreach
  - name: Sequence LinkedIn Accounts
    description: Manage LinkedIn accounts linked to sequences
  - name: Sequence Templates
    description: Manage sequence templates
  - name: Email Templates
    description: Manage email templates and template folders
  - name: Voices
    description: Manage cloned voices used for AI voice message steps
  - name: Schedules
    description: Manage email send schedules and timing
  - name: Holiday Calendars
    description: Manage holiday calendars for scheduling
  - name: Inbox
    description: >-
      Manage inbox threads — list/filter, read state, replies, category
      assignment, and meeting-intent flagging
  - name: Inbox Categories
    description: Manage per-team inbox thread categories and assign threads to them
  - 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: Tasks
    description: Manage tasks and to-do items
  - name: Reports
    description: >-
      Generate and access performance reports across email, calls, tasks,
      LinkedIn, and team performance
  - 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, sequence structure, and playbook/knowledge-base connections
  - name: AI SDR Sequence Structures
    description: >-
      Browse the sequence structures — reusable outlines of AI SDR sequence
      steps — that can be applied to AI SDR sequences
  - name: AI SDR Strategist
    description: Trigger AI Strategist runs
  - name: AI SDR Playbooks
    description: >-
      Manage AI SDR playbooks — tone, voice, and style guides applied during
      personalized message generation
  - 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 Sequence Preview
    description: >-
      Read and regenerate per-contact previews of the messages a sequence will
      send, and provide feedback on preview messages
  - 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 Prompts
    description: >-
      Manage the AI prompts used to configure sequence steps, and preview the
      output a prompt produces
  - name: AI SDR Learnings
    description: >-
      Manage the standing rules that shape how the AI writes — list, read,
      create, partially update and delete AI learnings
  - name: Registration
    description: Register the contact that domain purchases are filed under
  - name: Domains
    description: Find domains available to buy for outreach
  - name: Purchased Domains
    description: >-
      List the domains your team bought, with their subscription, setup and
      renewal state, and renew them
  - name: Pre-warmed Domains
    description: >-
      Find pre-warmed domains on sale, with mailboxes that are already warming,
      and list the ones your team bought
  - name: Mailboxes
    description: >-
      Add mailboxes to domains your team already bought, priced before you
      order, and reconnect them
  - name: User Account
    description: Account information and authentication verification
  - name: API Keys
    description: Create, list, edit and delete API keys, as the Settings page does
  - name: Teams
    description: Add existing users of your organization to its teams
  - name: Settings
    description: Manage team and user settings
  - name: Billing
    description: Subscription details and monthly active contacts usage
  - name: Rate Limits
    description: Your API rate limits, your current usage and the packages that raise them
  - name: Support Requests
    description: Raise and follow support requests with Reply's support team
  - name: Webhooks
    description: Manage webhook subscriptions and inspect delivery history
  - name: Background Jobs
    description: >-
      Track and cancel asynchronous background operations (e.g., email
      validation)
  - name: Attachments
    description: >-
      Upload file attachments used across email templates, sequence steps, and
      direct emails
paths:
  /v3/email-accounts/{id}/procurement:
    patch:
      tags:
        - Mailboxes
      summary: Update a purchased mailbox's profile
      description: >-
        <Warning>
          **Coming soon.** This endpoint will be available by mid December 2026.
        </Warning>


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


        Changes the first name, last name or profile picture of a mailbox your
        team bought through mailbox procurement. Send only the fields to change;
        a field left out stays as it is. `null` and an empty string are
        rejected, because the provider cannot clear a value.


        Only an active mailbox can be updated, one update at a time. Each
        mailbox allows 2 updates per day, and the limit resets at midnight UTC.
        Updates made in the app count toward the same limit; an update the
        provider rejects does not. Requires access to the team's settings.


        Returns a jobId — poll GET /v3/background-jobs/{jobId} for the outcome.
        The job stays Processing until the provider confirms the update, which
        can take up to 60 minutes. When it ends as Done, its jsonDataResult
        carries `emailAccountId`, `firstName`, `lastName` and `avatarUrl` as the
        provider applied them; `avatarUrl` is the URL the provider reports,
        which can differ from the one you sent.


        When the job ends as Failed, its jsonDataResult carries an `errorCode`
        and a `failureMessage`:


        | `errorCode` | Meaning |

        |---|---|

        | `emailAccountProcurement.notFound` | The mailbox no longer exists.
        Nothing was sent to the provider. |

        | `emailAccountProcurement.mailboxNotActive` | The mailbox stopped being
        active before the update was sent. Nothing was sent to the provider. |

        | `emailAccountProcurement.temporarilyUnavailable` | A temporary error
        stopped the update before it was sent to the provider. Retry. |

        | `emailAccountProcurement.updateRejected` | The provider rejected the
        update, so nothing was changed and the attempt does not count toward the
        daily limit. Check the requested values, then retry. |

        | `emailAccountProcurement.updateNotConfirmed` | The provider did not
        confirm the update within 60 minutes. It may still be applied, and the
        attempt counts toward the daily limit. Check the mailbox before
        retrying. |


        If the job ends as Cancelled, the update was not sent to the provider;
        retry. If it ends as Expired, the outcome is unknown: check the mailbox
        before retrying.
      operationId: UpdateProcurementMailboxProfile
      parameters:
        - name: id
          in: path
          required: true
          description: Email account ID of the purchased mailbox
          schema:
            type: integer
            format: int64
            minimum: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: EmailAccountProcurementUpdateModel
              description: >-
                The profile values to set on a purchased mailbox. Send at least
                one field. A field left out is not changed; `null` and an empty
                string are rejected, because the provider cannot clear a value.
              minProperties: 1
              properties:
                firstName:
                  type: string
                  minLength: 1
                  maxLength: 127
                  pattern: ^(?! )[A-Za-z0-9 .,'&/()#"-]{1,127}(?<! )$
                  description: >-
                    Latin letters, digits, spaces and the punctuation `. , - ' &
                    / ( ) # "`, with no leading or trailing space, up to 127
                    characters.
                lastName:
                  type: string
                  minLength: 1
                  maxLength: 127
                  pattern: ^(?! )[A-Za-z0-9 .,'&/()#"-]{1,127}(?<! )$
                  description: >-
                    Latin letters, digits, spaces and the punctuation `. , - ' &
                    / ( ) # "`, with no leading or trailing space, up to 127
                    characters.
                avatarUrl:
                  type: string
                  format: uri
                  maxLength: 500
                  description: >-
                    HTTP or HTTPS URL of the mailbox profile picture, up to 500
                    characters
              example:
                firstName: Jane
                lastName: O'Neil
      responses:
        '202':
          description: The update was scheduled; poll the returned job for the outcome
          headers:
            Location:
              description: >-
                Path of the corresponding background job, relative to the API
                root (`v3/background-jobs/{jobId}`)
              schema:
                type: string
                example: v3/background-jobs/3f6c2a1e-8b4d-4c1f-9a7e-5d2b0c6e9f14
          content:
            application/json:
              schema:
                type: object
                title: ProcurementOrderScheduleResponse
                properties:
                  jobId:
                    type: string
                    format: uuid
                    description: Poll GET /v3/background-jobs/{jobId} for the outcome
                required:
                  - jobId
                example:
                  jobId: 3f2b9c1e-5d47-4a8b-9f10-2c6de8a71b34
              example:
                jobId: 3f6c2a1e-8b4d-4c1f-9a7e-5d2b0c6e9f14
        '400':
          description: >-
            The id is not a positive number, the body is missing or malformed,
            or a field is invalid
          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:
                          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.
              examples:
                invalid_name:
                  summary: A name contains characters that are not allowed
                  value:
                    title: Validation failed
                    status: 400
                    detail: The request body contains validation errors.
                    errors:
                      - pointer: /firstName
                        detail: >-
                          firstName is required and must contain only Latin
                          letters, digits, spaces, and common punctuation
                          (.,-'&/#()"), without a leading or trailing space, up
                          to 127 characters.
                invalid_avatar_url:
                  summary: avatarUrl is not an HTTP or HTTPS URL
                  value:
                    title: Validation failed
                    status: 400
                    detail: The request body contains validation errors.
                    errors:
                      - pointer: /avatarUrl
                        detail: avatarUrl must be a valid HTTP or HTTPS URL.
                no_fields:
                  summary: The body names none of the fields
                  value:
                    title: Validation failed
                    status: 400
                    detail: The request body contains validation errors.
                    errors:
                      - pointer: ''
                        detail: >-
                          At least one of firstName, lastName or avatarUrl must
                          be provided.
        '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: >-
            The calling user's role does not give access to the team's email
            account settings. The body carries no `code`.
          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.
                  - type: object
                    title: FeatureScopeForbiddenProblem
                    description: >-
                      Returned when the calling user's role or the team's plan
                      does not give access to the feature. Carries no `code`.
                    properties:
                      title:
                        type: string
                        description: Always `Access forbidden`.
                      detail:
                        type: string
                        description: >-
                          Names the denied feature scopes and the calling user.
                          The text varies with both; do not match on it.
                      instance:
                        type: string
                        description: Path of the request that was refused
                      reasons:
                        type: array
                        description: |-
                          Why access was refused, one entry per cause:

                          - `1` — the team's plan does not include the feature.
                          - `2` — the user's role does not grant the permission.
                        items:
                          type: integer
                          enum:
                            - 1
                            - 2
                  - example:
                      title: Access forbidden
                      status: 403
                      detail: >-
                        Feature scopes  [EmailAccounts] are denied for userId
                        123
                      instance: /v3/email-accounts/42/procurement/reconnect
                      reasons:
                        - 2
              example:
                title: Access forbidden
                status: 403
                detail: Feature scopes  [EmailAccounts] are denied for userId 123
                instance: /v3/email-accounts/42/procurement
                reasons:
                  - 2
        '404':
          description: >-
            No email account with this id belongs to the team, or it is not a
            mailbox bought through mailbox procurement. The detail carries the
            requested id.
          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, not accessible, or not a
                  procurement mailbox.
                code: emailAccountProcurement.notFound
        '409':
          description: >-
            The mailbox is not active (the detail carries its status: `pending`,
            `failedToConfigure` or `locked`), its 2 updates for the day are used
            up, or another update of it is still in progress. When that update
            is a job started through this endpoint, the detail carries its job
            reference.
          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: Conflict
                      status: 409
                      detail: A resource with this name already exists.
                      code: sequence.duplicateName
              examples:
                mailbox_not_active:
                  summary: The mailbox is not active
                  value:
                    title: Conflict
                    status: 409
                    detail: >-
                      The mailbox profile can only be updated while the mailbox
                      is active; its status is locked.
                    code: emailAccountProcurement.mailboxNotActive
                daily_limit_reached:
                  summary: The mailbox's 2 updates for the day are used up
                  value:
                    title: Conflict
                    status: 409
                    detail: >-
                      The daily limit of 2 profile updates for this mailbox has
                      been reached. Updates made in the app count toward the
                      same limit, which resets at midnight UTC.
                    code: emailAccountProcurement.dailyLimitReached
                update_in_progress:
                  summary: Another update of the mailbox is in progress
                  value:
                    title: Conflict
                    status: 409
                    detail: >-
                      A profile update for this mailbox is already in progress.
                      Job reference: 3f6c2a1e-8b4d-4c1f-9a7e-5d2b0c6e9f14.
                    code: emailAccountProcurement.updateInProgress
        '422':
          description: Every field sent already matches the mailbox's current profile
          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.
                  - 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: Unprocessable Entity
                status: 422
                detail: >-
                  The requested values already match the mailbox's current
                  profile, so there is nothing to update.
                code: emailAccountProcurement.nothingToChange
        '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: API calls quota exceeded! maximum admitted 100 per 1m.
        '503':
          description: >-
            A temporary error stopped the update before it was sent to the
            provider. Retry in a few minutes.
          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: Service Unavailable
                      status: 503
                      detail: Background-jobs service is temporarily unavailable.
                      code: backgroundJob.upstreamUnavailable
              example:
                title: Service Unavailable
                status: 503
                detail: >-
                  The profile update could not be started. Nothing was sent to
                  the provider; try again in a few minutes.
                code: emailAccountProcurement.temporarilyUnavailable
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**.

````

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