Domains
Programmatically manage sending domains — add, verify, configure inbound receiving, set up webhooks, and enforce per-domain sending limits. Cloud edition only.
/v1/domainsAPI KeyRegister a new sending domain. Creates a BYODKIM identity in the selected SES region and returns DNS records to configure.
| Parameter | Type | In | Description |
|---|---|---|---|
domainrequired | string | body | Fully qualified domain name (e.g. "mail.example.com") |
region | string | body | AWS SES region for sending. Defaults to "us-east-1". Options: us-east-1, eu-north-1 |
Request
curl -X POST https://api.posthawk.dev/v1/domains \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-d '{
"domain": "mail.example.com",
"region": "us-east-1"
}'Response
{
"success": true,
"data": {
"id": "domain-uuid",
"domain": "mail.example.com",
"ses_region": "us-east-1",
"dkim_status": "pending",
"sending_enabled": false,
"receiving_enabled": false,
"dns_records": [
{ "type": "TXT", "name": "posthawk._domainkey.mail.example.com", "value": "v=DKIM1; k=rsa; p=MIIBIj..." },
{ "type": "TXT", "name": "mail.example.com", "value": "v=spf1 include:amazonses.com ~all" },
{ "type": "MX", "name": "mail.example.com", "value": "10 feedback-smtp.us-east-1.amazonses.com" }
]
},
"message": "Domain registered. Add the DNS records to verify ownership."
}/v1/domainsAPI KeyList all domains belonging to the authenticated workspace.
Response
{
"success": true,
"data": [
{
"id": "domain-uuid",
"domain": "mail.example.com",
"ses_region": "us-east-1",
"dkim_status": "verified",
"sending_enabled": true,
"receiving_enabled": false,
"created_at": "2026-01-15T10:00:00Z"
}
]
}/v1/domains/:idAPI KeyGet details of a specific domain including DNS records.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
Response
{
"success": true,
"data": {
"id": "domain-uuid",
"domain": "mail.example.com",
"ses_region": "us-east-1",
"dkim_status": "verified",
"sending_enabled": true,
"receiving_enabled": false,
"webhook_url": null,
"dns_records": [ ... ]
}
}/v1/domains/:idAPI KeyDelete a domain and clean up all associated SES identities.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
Response
{
"success": true,
"message": "Domain removed"
}/v1/domains/:id/verifyAPI KeyTrigger a verification check for a domain. Returns the current verification status.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
Response
{
"success": true,
"data": {
"id": "domain-uuid",
"dkim_status": "verified",
"sending_enabled": true
},
"message": "Domain verified and ready for sending"
}/v1/domains/:id/receiving/enableAPI KeyEnable inbound email receiving for a domain. Creates the identity in the receiving region and sets up a receipt rule.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
Response
{
"success": true,
"data": {
"id": "domain-uuid",
"receiving_enabled": true,
"mx_record": { "type": "MX", "name": "mail.example.com", "value": "10 inbound-smtp.eu-west-1.amazonaws.com" }
},
"message": "Receiving enabled. Add the MX record to start receiving emails."
}/v1/domains/:id/receiving/disableAPI KeyDisable inbound email receiving for a domain.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
Response
{
"success": true,
"data": {
"id": "domain-uuid",
"receiving_enabled": false
},
"message": "Receiving disabled"
}/v1/domains/:id/webhookAPI KeySet or update the webhook URL for inbound email forwarding. Set to null to disable.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
webhookUrlrequired | string | null | body | Webhook URL to forward inbound emails to, or null to disable |
Request
curl -X PATCH https://api.posthawk.dev/v1/domains/domain-uuid/webhook \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-d '{ "webhookUrl": "https://yourapp.com/api/incoming-email" }'Response
{
"success": true,
"data": {
"id": "domain-uuid",
"webhook_url": "https://yourapp.com/api/incoming-email"
},
"message": "Webhook updated"
}/v1/domains/:id/webhook/testAPI KeySend a test payload to the configured webhook URL to verify it is working.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
Response
{
"success": true,
"statusCode": 200,
"message": "Webhook test successful"
}/v1/domains/:id/limitsAPI KeySet per-domain sending limits. Emails exceeding these limits will be rejected with a clear error message. Set to null to remove a limit (unlimited). Limits are enforced on both the REST API and SMTP relay.
| Parameter | Type | In | Description |
|---|---|---|---|
idrequired | string | path | Domain UUID |
maxDailyEmails | number | null | body | Maximum emails per day from this domain. Null for unlimited. |
maxMonthlyEmails | number | null | body | Maximum emails per month from this domain. Null for unlimited. |
Request
curl -X PATCH https://api.posthawk.dev/v1/domains/domain-uuid/limits \
-H "Content-Type: application/json" \
-H "X-API-Key: your_api_key" \
-d '{
"maxDailyEmails": 1000,
"maxMonthlyEmails": 25000
}'Response
{
"success": true,
"data": {
"id": "domain-uuid",
"domain": "mail.example.com",
"max_daily_emails": 1000,
"max_monthly_emails": 25000
},
"message": "Sending limits updated"
}