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

# Resume Domain

> Restore a paused domain to the rotation pool.

## Authentication

Requires x402-verified wallet identity (`X-Payment-Proof` header). Same
auth surface as `/email/quote`.

## Path Parameters

<ParamField path="domain" type="string" required>
  The bare domain to resume. Must be owned by the caller and currently
  `pool_status='paused'`.
</ParamField>

## Behavior

Restores `pool_status` to `active`. **Only paused domains can be resumed**
— this is a deliberate gate to prevent warmup bypass.

| From      | Result                                                                            |
| --------- | --------------------------------------------------------------------------------- |
| `paused`  | → `active`                                                                        |
| `warming` | 404 — the warmup gate must graduate the domain (daily reconciler), not the caller |
| `active`  | 404 — already active                                                              |
| `removed` | 404 — not in the pool                                                             |

Returns `404 domain_not_found` whenever the transition isn't allowed.

## Response

<ResponseField name="domain" type="string">
  The resumed domain.
</ResponseField>

<ResponseField name="pool_status" type="string">
  `active`.
</ResponseField>

<ResponseField name="warmup_state" type="string">
  Reputation health (`warming` | `warmed` | `degraded`). Note: a manual
  resume forces the domain back into rotation regardless of health — if it's
  still `degraded` (score `< MIN_ROTATION_SCORE`), the next reconcile will
  re-pause it as `low_reputation`. Prefer letting a `low_reputation` pause
  auto-recover instead of forcing a resume.
</ResponseField>

<ResponseField name="pause_reason" type="string | null">
  `null` after a successful resume.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST \
    https://win.oneshotagent.com/v1/tools/email/domains/oneshotagents.com/resume \
    -H "X-Payment-Proof: <your_x402_signature>"
  ```

  ```typescript SDK theme={null}
  await sdk.email.resumeDomain('oneshotagents.com');
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  { "domain": "oneshotagents.com", "pool_status": "active", "warmup_state": "warmed", "pause_reason": null }
  ```
</ResponseExample>

## Why is `warming → active` blocked?

The whole point of warmup is that a freshly-provisioned mailbox
sends low volume into a network of cooperating mailboxes that mark it as
important and rescue it from spam. ESPs (Gmail, Outlook) build domain
reputation from those signals. If the caller could pause a warming
domain and resume it straight to `active`, that warmup machinery is
defeated and the domain joins rotation with no reputation history —
landing every send in spam.

Warming → active happens *only* via the daily lifecycle reconciler,
which gates on `warmup_score >= WARMUP_ACTIVE_THRESHOLD` (default 75).
