---
title: "Create a done-for-you order"
method: POST
path: "/dfy/orders"
tags: ["DoneForYou"]
---

# Create a done-for-you order

`POST /dfy/orders`

## Request

- Base URL: `https://api.emailchaser.com/r`
- URL: `https://api.emailchaser.com/r/dfy/orders`
- Auth: HTTP bearer

Orders domains and pre-warmed mailboxes for the caller's workspace. The order is accepted and provisioned asynchronously; poll GET /dfy/orders/{id} for progress.

This call buys domains and charges the card, and it can take longer than the connection is held open — a timeout or a 502 does NOT mean the order failed. Send an Idempotency-Key header and repeat the identical request to find out: a repeat of a key that already placed an order returns that order instead of buying anything again. Reuse the key to retry safely; use a NEW key only when you intend a genuinely different order.

Without a key the order is still checked against the workspace's live orders, and one that would buy a domain or a mailbox address already bought is refused with 409 and the id of the order that has it.

## Headers

- `Idempotency-Key` string

## Request body

- ModelsCreateDfyOrderRequest
  - `domains` ModelsDfyDomainInput[]
    - `domainName` string, required
  - `forwardingDomain` string: ForwardingDomain is where the purchased domains redirect visitors.
  - `mailboxes` ModelsDfyMailboxInput[]
    - `domainName` string, required
    - `firstName` string, required
    - `lastName` string, required
    - `profilePicture` string
    - `username` string, required

## Response `202`

The accepted order, or the order a previous attempt with the same Idempotency-Key already placed

- ModelsDfyOrderResult
  - `order` ModelsDfyOrderResponse
    - `completedAt` string: CompletedAt is when the order completed (RFC3339), or null.
    - `cost_breakdown` unknown
    - `createdAt` string
    - `domains` unknown
    - `externalOrderId` string
    - `failureReason` string
    - `forwardingDomain` unknown
    - `id` integer
    - `mailboxes` unknown
    - `processedAt` string: ProcessedAt is when the order started processing (RFC3339), or null.
    - `status` string: Status is one of: created, pending_approval, processing, completed, failed, partially_completed, canceled.

## Other responses

- `400`: Invalid order
- `401`: Unauthorized - invalid or missing API key
- `409`: A live order already covers one of these domains or mailboxes
- `500`: Failed to create the order

---

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