---
title: "Add company domain"
method: POST
path: "/company/domains"
tags: ["Email Domains"]
---

# Add company domain

`POST /company/domains`

Add a new email domain for the company. This initiates the domain verification process. After creation, you must:
1. Add a TXT record to your DNS with the verification token
2. Call POST /company/domains/{id}/verify-ownership to verify domain ownership
3. Call POST /company/domains/{id}/finalize to register with email provider
4. Add the returned DNS records (SPF, DKIM, etc.)
5. Call POST /company/domains/{id}/verify-dns to complete verification

## Request body

- object
  - `domain` string, required — Domain name to add (e.g., 'example.com'). Must be a valid domain format.

## Response `201`

Domain created successfully. Add the verification TXT record to your DNS.

- DomainCreateResponse — Domain created with verification instructions
  - `domain` Domain, required — Email domain configuration for sending signing request emails
    - `id` string, uuid, required — Unique identifier for the domain
    - `domain` string, required — The domain name (e.g., 'example.com')
    - `verification_status` 0 | 1 | 2, required — Domain ownership verification status: 0=pending, 1=ownership verified (TXT record confirmed), 2=finalized (registered with email provider)
    - `domain_status` 0 | 1, required — Email sending status: 0=DNS records pending verification, 1=fully verified and ready to send
    - `is_primary` boolean — Whether this is the primary domain for sending emails from this workspace
    - `verification_token` string — Token to add as TXT record for domain ownership verification. Only returned when verification_status=0.
    - `resend_domain_id` string, nullable — External email provider domain ID (internal use)
    - `dns_records` DomainDnsRecord[], nullable — Required DNS records for email sending. Only returned after domain finalization (verification_status=2).
      - `type` 'TXT' | 'CNAME' | 'MX' — DNS record type
      - `name` string — DNS record name/host (e.g., 'resend._domainkey' or '@')
      - `value` string — DNS record value
      - `ttl` string — Time to live (e.g., 'Auto' or seconds)
      - `priority` integer, nullable — Priority for MX records
      - `status` 'pending' | 'verified' | 'failed' — Verification status of this specific record
    - `date_created` string, date-time — Domain creation timestamp
    - `date_changed` string, date-time — Domain last update timestamp
  - `verification_instructions` object, required
    - `record_type` string
    - `record_name` string
    - `record_value` string
    - `next_step` string

## Other responses

- `400` — Invalid domain format or domain already exists
- `401` — Unauthorized - Invalid or missing API key
- `429` — Too Many Requests - Rate limit exceeded

---

[API](https://skmtc.dev/firma/apis/firma-partner-api.md) · [All operations](https://skmtc.dev/firma/apis/firma-partner-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/firma/firma-partner-api/revisions/5c03d6a9d080/schema)
