---
title: "Domain Updated"
method: POST
path: "domain.updated"
tags: ["Domains"]
---

# Domain Updated

`POST domain.updated` (webhook)

Sent when a domain's fields change, such as its status or a capability's state, verification, or issues. previous_attributes carries the previous values of the fields that changed

Required permissions:
 - `webhook_receive:domains`

## Headers

- `webhook-id` string, required: A unique identifier for this webhook request
- `webhook-signature` string, required: The signature of the webhook request with the webhook version prepended
- `webhook-timestamp` string, required: The timestamp in seconds since the Unix epoch that the webhook was sent at on the server

## Payload

- object
  - `account_id` string, nullable: The account ID that this webhook event is associated with
  - `api_version` 'v1', required: The API version for this webhook
  - `api_version_date` string, nullable, required: The dated API version (Api-Version-Date) the payload is serialized to
  - `data` Domain, required
    - `account_id` string, nullable, required: ID of the account the domain belongs to, prefixed `biz_`.
    - `apple_pay` DomainApplePay, required
      - `state` 'pending' | 'ready' | 'action_required' | 'releasing', required: `pending` while Whop registers the domain with Apple, `ready` once Apple verified it, and `action_required` when Apple couldn't; its issue says how to fix it. `releasing` while Whop removes it from Apple.
    - `availability` DomainAvailability, required
      - `available` boolean, required: Whether the domain can be registered now.
      - `premium` boolean, required: Whether the registry charges more than its standard price for this domain.
      - `price` Money, required
        - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
        - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
        - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
        - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
      - `renewal_price` Money, required
        - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
        - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
        - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
        - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
      - `score` integer, required: How desirable the domain is, from 0 to 100. Short, real-word names on well-known extensions score highest.
      - `transfer_price` Money, required
        - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
        - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
        - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
        - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
    - `created_at` string, nullable, required: When the domain was created, as an ISO 8601 timestamp.
    - `domain` string, required: Normalized hostname, such as checkout.example.com.
    - `email` DomainEmail, required
      - `state` 'pending' | 'ready' | 'action_required' | 'releasing', required: `pending` while Whop sets the domain up with its email provider and publishes its DNS records, `ready` once the provider verified them, and `action_required` when it couldn't; its issue says what happens next. `releasing` while Whop removes email from the domain.
    - `id` string, nullable, required: Domain ID, prefixed `dom_`. `null` when no domain on Whop has this hostname.
    - `issues` DomainIssue[], required
      - `capability` 'verification' | 'registration' | 'platform' | 'website' | 'apple_pay' | 'pixel' | 'email' | 'transfer', required: The capability the issue is about.
      - `code` 'verification_required' | 'verification_expired' | 'ownership_conflict' | 'ownership_lost' | 'dns_required' | 'provider_validation' | 'certificate_pending' | 'expiring_soon' | 'account_unavailable' | 'check_failed' | 'purchase_expired' | 'domain_unavailable' | 'unsupported_tld' | 'registration_unavailable' | 'registration_failed' | 'renewal_failed' | 'payment_action_required' | 'domain_on_whop' | 'domain_transfer_unavailable' | 'transfer_locked' | 'transfer_auth_code_rejected' | 'transfer_rejected' | 'transfer_not_cancellable' | 'domain_transfer_failed' | 'apple_pay_unverified' | 'pixel_not_seen' | 'pixel_not_installed' | 'pixel_waiting' | 'pixel_unreachable' | 'pixel_quiet' | 'email_needs_whop_dns' | 'email_unreachable' | 'email_identity_in_use' | 'email_verification_failed', required: What needs attention, as a stable code.
      - `code_block` string, nullable, required: Code to add to the site to fix the issue, ready to copy. `null` when the issue needs none.
      - `dns_records` DomainDnsRecord[], required
        - `name` string, required: Full hostname where the record must be published.
        - `type` 'TXT' | 'CNAME' | 'A' | 'AAAA', required: DNS record type.
        - `value` string, required: DNS record content.
      - `message` string, required: What needs attention and how to fix it.
    - `metadata` object, required: Custom string keys and values attached to this domain. Empty when the domain isn't yours.
    - `owned_by` DomainOwner, required
      - `id` string, required: ID of the account that owns the domain, prefixed `biz_`.
      - `logo_url` string, nullable, required: Account logo image URL.
      - `route` string, required: Account public route identifier.
      - `title` string, required: Account display name.
    - `pixel` DomainPixel, required
      - `state` 'pending' | 'ready' | 'action_required', required: `ready` while the Whop pixel recorded a page view on the domain in the last 7 days. `pending` until a pixel you asked for records its first one, and `action_required` once it goes 7 days without one; its issue says what to do.
    - `platform` DomainPlatform, required
      - `state` 'pending' | 'ready' | 'action_required' | 'releasing', required: Whether Whop holds this address for the account. A platform address is ready as soon as its route is claimed.
    - `public_record` DomainPublicRecord, required
      - `dnssec` boolean, nullable, required: Whether the domain's delegation is signed with DNSSEC, or `null` when the registry doesn't say.
      - `expires_at` string, nullable, required: When the current registration expires, as an ISO 8601 timestamp, or `null` when the record omits it.
      - `name_servers` string[], required
      - `registered_at` string, nullable, required: When the domain was first registered, as an ISO 8601 timestamp, or `null` when the record omits it.
      - `registrant` DomainRegistrant, required
        - `address` string, nullable, required: Registrant postal address as published, with lines separated by line breaks. Often only a state or region. `null` when withheld.
        - `contact_url` string, nullable, required: A web form for contacting the registrant, published when the registrar withholds their email. `null` when there is none.
        - `country` string, nullable, required: Registrant country as an ISO 3166-1 alpha-2 code, such as `US`, or `null` when withheld.
        - `email` string, nullable, required: Registrant email address, often a privacy forwarding address, or `null` when withheld.
        - `name` string, nullable, required: Registrant name, or `null` when withheld.
        - `organization` string, nullable, required: Registrant organization, often a privacy service, or `null` when withheld.
        - `phone` string, nullable, required: Registrant phone number, or `null` when withheld.
      - `registrar` DomainRegistrar, required
        - `iana_id` string, nullable, required: The registrar's IANA registrar ID, or `null` when the record omits it.
        - `name` string, required: Registrar name, such as `GoDaddy.com, LLC`.
        - `url` string, nullable, required: The registrar's website, or `null` when the record omits it.
      - `statuses` string[], required
      - `updated_at` string, nullable, required: When the registration record last changed, as an ISO 8601 timestamp, or `null` when the record omits it.
    - `registration` DomainRegistration, required
      - `amount_due` Money, required
        - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
        - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
        - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
        - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
      - `auto_renew` boolean, required: Whether Whop charges the saved payment method to renew the domain before it expires.
      - `expires_at` string, nullable, required: When the registration expires unless renewed, as an ISO 8601 timestamp. `null` until it's registered.
      - `method` 'registration' | 'transfer', required: How the domain came to Whop: `registration` when it was bought through Whop, `transfer` when it was moved from another registrar.
      - `payment_method_id` string, nullable, required: ID of the saved card charged for the domain, prefixed `payt_`. `null` when none is set.
      - `phase` 'awaiting_payment' | 'ordering' | 'transferring' | 'delegating' | 'held' | 'expired' | 'failed' | 'releasing', required: Where the registration is: awaiting payment, ordering at the registrar, transferring from another registrar, delegating DNS to Whop, held, expired, or releasing.
      - `purchase_url` string, nullable, required: Link to pay what the domain owes now: its registration or transfer, or a yearly renewal. `null` when nothing is owed.
      - `renewal_price` Money, required
        - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
        - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
        - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
        - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
      - `state` 'pending' | 'ready' | 'action_required' | 'releasing', required: How far registering and keeping the domain has got.
    - `stats` DomainStats, required
      - `unique_visitors_last_7_days` integer, required: People who viewed a page on the domain with the Whop pixel in the last 7 days, refreshed hourly.
    - `status` 'idle' | 'pending' | 'ready' | 'action_required' | 'releasing' | 'null', nullable, required: The most pressing state of the domain's capabilities: `releasing`, then `action_required`, then `pending`, then `ready`. `idle` when it wants nothing.
    - `transfer` DomainTransfer, required
      - `code` string, nullable, required: The code that takes the domain. For an `internal` move it starts `whop_dt_`, and the receiving Whop account enters it as `registration.auth_code` when it creates or updates the domain. Returned when the response is a single domain and you can manage it; `null` otherwise.
      - `destination` 'internal', required: Where the domain is moving. `internal` is another Whop account.
      - `state` 'ready' | 'pending', required: `ready` while the code waits to be used. `pending` once it has: Whop removes the domain's email, Apple Pay and pixel from this account, then moves the registration and removes the domain from this account.
    - `updated_at` string, nullable, required: When the domain was last updated, as an ISO 8601 timestamp.
    - `verification` DomainVerification, required
      - `state` 'pending' | 'ready' | 'action_required' | 'releasing', required: How far proving verification has got.
      - `verification_expires_at` string, nullable, required: When an unproven claim is removed, 48 hours after it was made, as an ISO 8601 timestamp.
    - `website` DomainWebsite, required
      - `app` DomainWebsiteApp, required
        - `base_url` string, nullable, required: The production base URL where the app is hosted. `null` if no base URL is configured or the domain isn't yours.
        - `id` string, required: App ID, prefixed `app_`.
      - `state` 'pending' | 'ready' | 'action_required' | 'releasing', required: How far serving the website has got.
  - `id` string, required: A unique ID for every single webhook request
  - `previous_attributes` object: For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event
  - `timestamp` string, date-time, required: The timestamp in ISO 8601 format that the webhook was sent at on the server
  - `type` 'domain.updated', required: The webhook event type

## Acknowledgement `200`

Return a 200 status to indicate that the data was received successfully

---

[API](https://skmtc.dev/whop/apis/whop-api.md) - [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whop/apis/whop-api/revisions/9993d9eaebc8?raw)
