---
title: "Purchase Domains"
method: POST
path: "/domains/purchase"
tags: ["Domains"]
---

# Purchase Domains

`POST /domains/purchase`

## Request

- Base URL: `https://public.outreach2day.com`
- URL: `https://public.outreach2day.com/domains/purchase`
- Auth: HTTP bearer

Purchase domains for a workspace via API.

Prerequisites:
- Workspace must have a saved payment method (via Stripe subscription)
- All domains must be available for registration
- Registrant contact info (`contact_info`) is required

Guardrails: at most `PUBLIC_DOMAIN_PURCHASE_MAX_DOMAINS_PER_CALL` domains
per call (default 10, over -> 400). An optional rolling-24h spend cap per
workspace (`PUBLIC_DOMAIN_PURCHASE_DAILY_CAP_CENTS`, over -> 429) is off
by default.
Send an `Idempotency-Key` header to make retries safe.

The payment is charged immediately using the saved payment method.

## Query parameters

- `dryRun` boolean: Validate and price the order without charging or registering anything.

## Headers

- `Idempotency-Key` string, nullable: Recommended. Same key + same body within 24h returns the first response without a second charge; same key + different body -> 409.

## Request body

- DomainPurchaseRequest: Request model for domain purchase.
  - `workspace_id` integer, required: Workspace ID where domains should be created
  - `domains` string[], required: List of root domains to purchase
  - `contact_info` DomainPurchaseContactInfo: Registrant contact details used by registrar during domain purchase.
    - `first_name` string, required: Registrant first name
    - `last_name` string, required: Registrant last name
    - `real_address` string, required: Street address
    - `city` string, required: City
    - `state_province` string, required: State/Province
    - `postal_code` string, required: Postal code
    - `country` string, required: Country
    - `phone` string, required: Phone in international format
    - `email_address` string, email, nullable: Registrant email address
    - `organization_name` string, required: Organization name
    - `job_title` string, required: Job title

## Response `200`

Successful Response

- DomainPurchaseResponse: Response model for domain purchase.
  - `status` string, required
  - `message` string, required
  - `domains_purchased` string[], required
  - `total_charged_cents` integer, required
  - `invoice_id` string, nullable
  - `estimated_total_cents` integer, nullable

## Other responses

- `402`: Payment required. Create a quote (POST /v2/quotes), show it to the human and let them pay on the Stripe page; nothing was charged.
- `422`: Validation Error

---

[API](https://skmtc.dev/outreach2day/apis/outreach-today-public-api.md) · [All operations](https://skmtc.dev/outreach2day/apis/outreach-today-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/outreach2day/apis/outreach-today-public-api/revisions/0e5471143371?raw)
