# Get Account Warmup

> Warmup progress, pool stats and recent warmup logs for one email account.

Requires an API key with the `read` scope.

## Path Parameters

<ParamField path="account_id" type="string" required>
  The unique identifier of the email account.
</ParamField>

## Response

<ResponseField name="data" type="object">
  Warmup detail for the account.

  <Expandable title="data">
    <ResponseField name="warmupProgress" type="object">Ramp progress: `enabled`, `progress` (percent), `currentLimit`, `targetLimit`, and once warmup has started `daysCompleted` and `totalDays`. The last two keys are absent when warmup is off or not started.</ResponseField>
    <ResponseField name="poolStats" type="object">Warmup pool activity: `sentCount`, `receivedCount` and `replyCount`. All 0 when the account has never been in the pool.</ResponseField>
    <ResponseField name="logs" type="array">
      The account's last 20 warmup logs, as sender or receiver, newest first.

      <Expandable title="logs">
        <ResponseField name="id" type="string">Log identifier.</ResponseField>
        <ResponseField name="senderEmail" type="string">Sending mailbox, or `unknown`.</ResponseField>
        <ResponseField name="receiverEmail" type="string">Receiving mailbox, or `unknown`.</ResponseField>
        <ResponseField name="subject" type="string">Subject line.</ResponseField>
        <ResponseField name="status" type="string">`sent`, `received`, `replied` or `failed` (the peer account rejected the recipient).</ResponseField>
        <ResponseField name="repliedAt" type="string">When the reply was sent, or `null`.</ResponseField>
        <ResponseField name="createdAt" type="string">ISO 8601 timestamp.</ResponseField>
      </Expandable>
    </ResponseField>
    <ResponseField name="warmupIdentifier" type="string">Warmup identifier, or `null`.</ResponseField>
    <ResponseField name="warmupIdentifierInSubject" type="boolean">Whether the identifier is added to warmup subjects.</ResponseField>
    <ResponseField name="warmupAccountCode" type="string">The account's warmup code, or `null`.</ResponseField>
    <ResponseField name="warmupSubjectCodeEnabled" type="boolean">Whether the code is added to warmup subjects.</ResponseField>
    <ResponseField name="warmupDynamicTagEnabled" type="boolean">Whether warmup mail carries a per-message tag.</ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
```bash cURL
curl -X GET "https://api.foxreach.io/api/v1/email-accounts/cea_abc123/warmup" \
  -H "X-API-Key: otr_your_key"
```

```python Python SDK (beta)
from foxreach import FoxReach

client = FoxReach(api_key="otr_your_key")
warmup = client.email_accounts.warmup_detail("cea_abc123")
```

```typescript TypeScript SDK (beta)
import { FoxReach } from "foxreach";

const client = new FoxReach({ apiKey: "otr_your_key" });
const warmup = await client.emailAccounts.warmup("cea_abc123");
```
</RequestExample>

<ResponseExample>
```json
{
  "data": {
    "warmupProgress": {
      "enabled": true,
      "progress": 50,
      "daysCompleted": 7,
      "totalDays": 14,
      "currentLimit": 2,
      "targetLimit": 5
    },
    "poolStats": { "sentCount": 34, "receivedCount": 31, "replyCount": 28 },
    "logs": [
      {
        "id": "wlg_abc123",
        "senderEmail": "outreach@company.com",
        "receiverEmail": "pool-member@example.com",
        "subject": "Quick question",
        "status": "replied",
        "repliedAt": "2026-10-30T14:12:00",
        "createdAt": "2026-10-30T14:02:00"
      }
    ],
    "warmupIdentifier": null,
    "warmupIdentifierInSubject": false,
    "warmupAccountCode": null,
    "warmupSubjectCodeEnabled": false,
    "warmupDynamicTagEnabled": false
  }
}
```
</ResponseExample>

## Errors

| Status | Description |
|--------|-------------|
| `401` | Missing, invalid, revoked or expired API key |
| `403` | API key does not have the required scope: `read` |
| `404` | Email account not found, or it belongs to another workspace |

## Rate Limit

- **100 requests per minute, per API key.** Fixed 60-second window.
- Every response includes `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` (unix epoch seconds).
- A `429` response includes a `Retry-After` header (seconds until the bucket resets).

For client-side patterns (`Retry-After`, exponential backoff, monitoring `X-RateLimit-Remaining`), see [Rate Limiting](/rate-limiting).
