---
title: "Start domain warming"
method: POST
path: "/v1/email/domains/{id}/warming"
tags: ["Email"]
---

# Start domain warming

`POST /v1/email/domains/{id}/warming`

## Request

- Base URL: `https://api.samva.dev`
- URL: `https://api.samva.dev/v1/email/domains/{id}/warming`
- Auth: API key in header `x-api-key`

Starts an automated warming policy on a verified sending domain. Samva opens the first 24-hour campaign window immediately, then opens later windows from the saved growth policy after safe windows close. Direct sends are counted in the domain's window but never delayed. Responds with 201.

## Path parameters

- `id` string, required

## Request body

- CreateDomainWarmingPlanPayload
  - `identity` 'new' | 'migrating' | 'returning', required
  - `initialDailyRecipients` integer, required
  - `dailyGrowthPercent` integer, required
  - `targetDailyRecipients` integer, required

## Response `201`

Success

- DomainWarming
  - `domain` DomainWarmingDomainRef, required
    - `id` string, required
    - `domain` string, required
  - `plan` DomainWarmingPlan, required
    - `id` string, required
    - `status` 'active' | 'paused' | 'completed', required
    - `identity` 'new' | 'migrating' | 'returning', required
    - `initialDailyRecipients` number, required
    - `dailyGrowthPercent` number, required
    - `targetDailyRecipients` number, required
    - `holdReason` string, nullable, required
    - `heldAt` string, nullable, required
    - `pausedAt` string, nullable, required
    - `completedAt` string, nullable, required
    - `createdAt` string, required
    - `updatedAt` string, required
  - `batches` DomainWarmingBatch[], required
    - `id` string, required
    - `sequence` number, required
    - `state` 'scheduled' | 'open' | 'closed' | 'cancelled', required
    - `startsAt` string, required
    - `endsAt` string, required
    - `allowanceRecipients` number, required
    - `dailyGrowthPercent` number, required
    - `targetDailyRecipients` number, required
    - `reservedRecipients` number, required
    - `acceptedRecipients` number, required
    - `cancelledAt` string, nullable, required
    - `createdAt` string, required
  - `decisions` DomainWarmingDecision[], required
    - `id` string, required
    - `kind` 'plan-created' | 'policy-updated' | 'window-opened' | 'window-cancelled' | 'paused' | 'resumed' | 'held' | 'completed', required
    - `batchId` string, required
    - `actor` string, required
    - `note` string, nullable, required
    - `createdAt` string, required
  - `evidence` DomainWarmingEvidence, required
    - `observedAt` string, required
    - `windowHours` number, required
    - `minimumSends` number, required
    - `sent` number, required
    - `bounced` number, required
    - `complained` number, required
    - `hourly` DomainWarmingWindowHour[], required
      - `sent` number, required
      - `bounced` number, required
      - `complained` number, required
    - `bounceThreshold` number, required
    - `complaintThreshold` number, required
    - `verdict` 'insufficient-evidence' | 'healthy' | 'over-threshold', required
    - `thresholdReason` string, nullable, required
  - `holds` DomainWarmingHolds, required
    - `workspacePausedAt` string, nullable, required
    - `workspacePauseReason` string, nullable, required
    - `sendingStatus` 'enabled' | 'disabled' | 'reinstated' | 'unknown', required

## Other responses

- `401`: UnauthorizedError
- `403`: ForbiddenError
- `404`: ResourceNotFoundError
- `409`: ConflictError
- `422`: ValidationError
- `500`: InternalError
- `504`: GatewayTimeoutError

---

[API](https://skmtc.dev/samva/apis/samva-api.md) · [All operations](https://skmtc.dev/samva/apis/samva-api/llms.txt) · [OpenAPI document](https://skmtc.dev/samva/apis/samva-api/revisions/a99408542cc3?raw)
