1. Events
  • Welcome to the Cold Mail Reseller API
  • Get Started
    • Overview
    • Authentication
    • Quick Start
  • Core Concepts
    • Users
    • Domains
    • DNS Management
    • Subscriptions
    • Pre-Warmup
    • Domain Renewal
    • Mailbox Warmup
    • OAuth Exports
    • Platform Exports
    • Mailboxes
    • Sandbox API
    • 1+ Year Subscriptions
  • API Reference
    • Users
      • List Users
      • Get User
      • Create User
      • Update User
      • Delete User
    • Geo
      • List Countries
      • List States
    • Domains
      • Domain Renewal
        • Get Domain Renewal Prices
        • Renew Domains
        • Toggle Domain Auto-Renew
      • Get Domain
      • List Available Aged Domains
      • Order Aged Domains
      • Get Domains by User
      • Check Domain Availability
      • Check Single Domain Availability
      • Check Workspace Existence
      • Set Domain Forwarding
      • Set Email Forwarding
      • Delete Domains
    • DNS
      • Get DNS Records
      • Add DNS Records
      • Update DNS Record
      • Update Nameservers
      • Delete DNS Record
    • Mailboxes
      • List Mailboxes
      • Get Mailboxes by User
      • Get Mailbox
      • Get Admin Mailbox Details
      • Update Mailbox Details
      • Delete Mailbox
    • Mailbox Warmup
      • Add Warmup to Mailbox
      • Toggle Warmup
      • Update Warmup Settings
      • Delete Warmup Subscription
    • Orders
      • Get Order Status
      • Get Order Details
      • Create Order
      • Create Order (JSON)
      • Create Mailbox Order (JSON)
      • Process Order
    • Subscriptions
      • 1+ Year Subscription
        • Recreate Subscription
      • Get Subscriptions
      • Renew Subscriptions
      • Cancel Subscription
      • Toggle Auto-Renewal
    • Exports
      • Platform Exports
        • Get Platform Credentials
        • Get Platform Workspaces
        • Add Platform Credential
        • Export Mailboxes to Platform
        • Update Platform Credential
        • Remove Platform Credential
      • OAuth Exports
        • Perform OAuth
        • Add Client ID to Domains
    • Pre-Warmup
      • Sandbox
        • Get Sandbox Pre-warmup Domains
        • Order Sandbox Pre-warmup
        • Reset Sandbox Pre-warmup
      • Get Pre-warmup Domains
      • Order Pre-warmup
    • Placement Test
      • Create Placement Order
      • Get Placement Reports
  • Resources
    • Errors
    • Rate Limits
    • Pagination
    • Sandbox
    • MCP
  • Webhooks
    • Overview
    • Events
      • DNS Events
      • Subscription Events
      • Prewarmup Events
      • Mailbox Warmup Events
      • Mailbox Events
      • Domain Events
  • Schemas
    • Error
    • Success
    • MessageResponse
    • User
    • Domain
    • ErrorResponse
    • Mailbox
    • Subscription
    • DnsRecord
    • Error Response
    • Pagination Meta
    • Action Error Response
    • PrewarmupOrderResult
    • OrderCreationResult
  1. Events

Domain Events

Domain events are triggered when orders are placed to register domains or when domain registrations are renewed.

Overview#

The domain event lifecycle occurs in three scenarios:
1.
New domain registration — When a user orders a new domain
2.
Domain renewal — When an existing domain's registration period approaches expiration
3.
Expiry — When a domain lapses at the registrar: first domain.grace_period (still renewable), then domain.expired (gone)

domain.order.success#

This event is triggered when a domain is successfully registered with the registrar and added to the user's account.

When it occurs#

User places a domain order through the platform
The domain registrar confirms successful registration
The domain becomes active and accessible

Example Payload#

{
  "event": "domain.order.success",
  "eventId": "6SSHBXWR3N4JEKGRQSG3KW3D76N6",
  "data": {
    "userId": "PWM7Y25RYZ450YNM8K8FX9GK5AHX",
    "userEmail": "johndoe@company.com",
    "orderId": "NQ682GAVFTMYC2H6C87PPKPG5WXV",
    "domainId": "AH2BD0WYWSMQC9NQHTMES3TFK4TX",
    "domainName": "company.com",
    "creationtime": "2024-03-08T23:59:59Z",
    "expiryDate": "2025-03-08T23:59:59Z",
    "price": 15.88
  }
}

Payload Schema#

FieldTypeDescription
eventstringAlways "domain.order.success"
eventIdstringUnique identifier for this event
data.userIdstringID of the user who placed the order
data.userEmailstringUser's email address
data.orderIdstringUnique order identifier
data.domainIdstringUnique domain identifier
data.domainNamestringThe registered domain name (e.g., company.com)
data.creationTimeISO 8601Timestamp when domain was registered
data.expiryDateISO 8601Timestamp when domain registration expires
data.pricenumberPrice paid for the domain

domain.order.failed#

This event is triggered when a domain order fails to be registered. This could happen due to domain availability, restrictions, or registrar errors.

When it occurs#

User orders a domain that's already taken
Domain name contains restricted phrases
Registrar has connectivity issues
Payment processing fails
User has insufficient wallet balance

Example Payload#

{
  "event": "domain.order.failed",
  "eventId": "6SSHBXWR3N4JEKGRQSG3KW3D76N6",
  "data": {
    "userId": "PWM7Y25RYZ450YNM8K8FX9GK5AHX",
    "userEmail": "jean@gmail.com",
    "message": "Domain contains restricted phrase(s)",
    "domainName": "norton360.com",
    "orderId": "WR3N4JEW3D76N6KGRQSG36SSHBXK",
    "price": 15.88
  }
}

Payload Schema#

FieldTypeDescription
eventstringAlways "domain.order.failed"
eventIdstringUnique identifier for this event
data.userIdstringID of the user who placed the order
data.userEmailstringUser's email address
data.orderIdstringUnique order identifier
data.domainNamestringThe domain name that failed to register
data.messagestringHuman-readable reason for failure
data.pricenumberPrice that was attempted to charge

Common failure reasons#

"Domain unavailable" — Already registered by someone else
"Domain contains restricted phrase(s)" — Domain name violates policies
"Registrar error" — Technical issue with registrar
"Insufficient wallet balance" — User needs to add funds
"Invalid domain format" — Domain name doesn't meet requirements

Notes#

Multiple domains per order: An order can include multiple domains. You'll receive separate domain.order.* events for each domain.

domain.renewal.success#

This event is triggered when an existing domain registration is successfully renewed for another term.

When it occurs#

A domain's registration period is approaching expiration
Renewal is processed (automatically or manually)
Registrar confirms the renewal
Domain registration is extended by 1 year

Example Payload#

{
  "event": "domain.renewal.success",
  "eventId": "6SSHBXWR3N4JEKGRQSG3KW3D76N6",
  "data": {
    "userId": "PWM7Y25RYZ450YNM8K8FX9GK5AHX",
    "userEmail": "johndoe@company.com",
    "domainName": "company.com",
    "domainId": "AH2BD0WYWSMQC9NQHTMES3TFK4TX",
    "years": 1,
    "price": 26.90,
    "expireOn": "2026-03-08T23:59:59.000Z"
  }
}

Payload Schema#

FieldTypeDescription
eventstringAlways "domain.renewal.success"
eventIdstringUnique identifier for this event
data.userIdstringID of the user
data.userEmailstringUser's email address
data.domainNamestringThe renewed domain name
data.domainIdstringUnique domain identifier
data.yearsnumberNumber of years renewed for (usually 1)
data.pricenumberPrice of domain renewal
data.expireOnISO 8601New expiration timestamp

domain.renewal.failed#

This event is triggered when a domain renewal fails. This is separate from subscription renewal and indicates the domain registration itself couldn't be renewed.

When it occurs#

Renewal was charged but the registrar rejected it
Domain has been deleted at the registrar
Registrar had an error processing the renewal
Domain has too many rule violations
Important: Subscriptions linked to this domain cannot be renewed until the domain is fixed

Example Payload#

{
  "event": "domain.renewal.failed",
  "eventId": "6SSHBXWR3N4JEKGRQSG3KW3D76N6",
  "data": {
    "userId": "PWM7Y25RYZ450YNM8K8FX9GK5AHX",
    "userEmail": "johndoe@company.com",
    "domainName": "company.com",
    "domainId": "AH2BD0WYWSMQC9NQHTMES3TFK4TX",
    "years": 1,
    "error": "Registrar renewal failed with an unknown error."
  }
}

Payload Schema#

FieldTypeDescription
eventstringAlways "domain.renewal.failed"
eventIdstringUnique identifier for this event
data.userIdstringID of the user
data.userEmailstringUser's email address
data.domainNamestringThe domain that failed to renew
data.domainIdstringUnique domain identifier
data.yearsnumberYears that renewal was attempted for
data.errorstringTechnical error message from registrar

domain.grace_period#

The domain has reached its registrar expiry date and entered a 7-day renewal grace window. The registration is still recoverable at this point — this is the event you act on.
The domain.grace_period webhook is sent when the domain has already expired at the registrar, but the domain is still within its 7-day grace window during which it can be renewed.
Mailbox subscription renewals on this domain are blocked while it stays in grace.

Example Payload#

{
  "event": "domain.grace_period",
  "eventId": "6SSHBXWR3N4JEKGRQSG3KW3D76N6",
  "data": {
    "userId": "PWM7Y25RYZ450YNM8K8FX9GK5AHX",
    "domainId": "AH2BD0WYWSMQC9NQHTMES3TFK4TX",
    "domainName": "company.com",
    "expireOn": "2026-03-08T23:59:59.000Z"
  }
}

Payload Schema#

FieldTypeDescription
eventstringAlways "domain.grace_period"
eventIdstringUnique identifier for this event
data.userIdstringID of the user who owns the domain
data.domainIdstringUnique domain identifier
data.domainNamestringThe domain that entered grace (e.g., company.com)
data.expireOnISO 8601Registrar expiry timestamp. The grace window closes 7 days after this, end of day UTC

What to do#

1.
Renew immediately — call POST /domains/renew with domainNames: ["company.com"]. This is the only window in which renewal is possible
2.
Notify the customer — tell them mailboxes on this domain stop working if the domain lapses, and that their subscription cannot renew until the domain is renewed

domain.expired#

The domain is gone at the registrar. The 7-day grace window closed without a renewal, and the registration is no longer recoverable through the API.
Treat it as terminal, not actionable — this is a reconciliation signal. Mark the domain dead on your side, deactivate or archive the mailboxes attached to it, and stop any sending campaigns pointed at it. Do not queue a renewal — it will be rejected

Example Payload#

{
  "event": "domain.expired",
  "eventId": "6SSHBXWR3N4JEKGRQSG3KW3D76N6",
  "data": {
    "userId": "PWM7Y25RYZ450YNM8K8FX9GK5AHX",
    "domainId": "AH2BD0WYWSMQC9NQHTMES3TFK4TX",
    "domainName": "company.com",
    "expireOn": "2026-03-08T23:59:59.000Z"
  }
}

Payload Schema#

FieldTypeDescription
eventstringAlways "domain.expired"
eventIdstringUnique identifier for this event
data.userIdstringID of the user who owned the domain
data.domainIdstringUnique domain identifier. Still resolvable via GET /domains/domain, which now returns status EXPIRED
data.domainNamestringThe expired domain name
data.expireOnISO 8601The original registrar expiry timestamp — not the date this event fired. Grace ended 7 days after this

Notes#

Domain renewal ≠ Subscription renewal: A domain is the actual registration with the registrar. A subscription is the mailbox accounts provisioned on that domain. Both can be renewed independently.
Grace period: After a domain reaches expireOn, it enters a 7-day grace period where it can still be renewed — you receive domain.grace_period. Once that window closes the domain is gone at the registrar and you receive domain.expired.

Next Steps#

Domains
Manage domains, forwarding, and status transitions.
Mailbox Events
What happens after domain registration succeeds.
Subscription Events
How mailbox subscription renewal works.
Modified at 2026-09-09 11:35:51
Previous
Mailbox Events
Next
Error
Built with