Skip to content

Domains and onboarding

An inbox can use the Extrovert domain included with your plan, a dedicated inbox subdomain from a domain your organization already owns, or a new domain purchased through the human-controlled commerce flow.

Paid accounts without a custom domain use extrovertmail.com. When free signup is enabled, free accounts use the separate free.extrovertmail.com pool. Check current availability with agent_context or GET /v1/signup-status before offering a new free account.

Included domain

Create an inbox without DNS work. Omit username and domain to use the platform domain for the account’s plan.

Use a domain you own

Choose a dedicated inbox subdomain, such as agents.example.com, and add the returned nameserver records. Extrovert manages mail setup inside that subdomain without changing the rest of your DNS.

Purchase a domain

An agent can quote and request a registration. A signed-in billing member or an existing purchase limit must authorize the exact request before payment and registration.

In the console, enter the domain you own, such as example.com, then choose an inbox subdomain. The default is agents, producing agents.example.com. Your website, existing email, and other DNS records remain unchanged.

  1. Create the complete inbox domain, such as agents.example.com, with mode: "ns_delegated".

  2. Add the returned NS records at your DNS provider. Extrovert uses three authoritative nameservers: ns1.extrovert.dev, ns2.extrovert.dev, and ns3.extrovert.dev.

  3. Extrovert publishes the required inbound and authentication records for the delegated zone.

  4. Use Recheck DNS once you have added the entries. Extrovert also checks automatically. When the entries are confirmed, Extrovert finishes mail setup in the background; no more DNS changes are needed from you.

  5. Create inboxes with domain: "agents.example.com", subject to the key’s allowed domains and project access.

Delegation allows Extrovert to rotate or repair mail records without asking the customer to update individual values. Do not point a CNAME at Extrovert as a substitute for delegation.

The console, API, SDK and MCP use the same readiness result:

ResultWhat it means for you
Waiting for DNSAdd the entries shown, then choose Recheck DNS.
Setting up mailYour part is done. Extrovert is finishing setup.
ReadyYou can create inboxes; existing ready inboxes can send and receive mail.
DNS needs fixingRestore the entries shown. Inboxes may be disrupted until they are restored.
Setup needs attentionExtrovert is investigating or retrying. Follow the summary; do not change DNS unless asked.

Lead with readiness.label and readiness.summary when presenting a result to a human. Use ready_for_inboxes for the readiness decision, action_required_by to identify who must act, and next_action for the next step. Legacy verification_status and dkim_status are diagnostic details; neither alone means mail is ready. The optional inboxes counts include only inboxes visible to the calling agent, project or organization, as stated by inboxes.scope.

With no visible inboxes, offer to create one when the domain is ready. Creating and sending still require the appropriate permissions, plan capacity and review approval.

Terminal window
npx -y @extrovert.dev/mcp domain status agents.example.com
npx -y @extrovert.dev/mcp domain recheck agents.example.com
npx -y @extrovert.dev/mcp domain wait agents.example.com

For agents, get_domain returns the current result and wait_for_domain waits up to 50 seconds. timed_out means the wait ended while setup continues. Resume after resume_after_seconds. The TypeScript equivalents are extrovert.domains.get(domain) and extrovert.domains.wait(domain).

Extrovert continues checking DNS after setup. Verified account owners and administrators receive email when a newly connected domain becomes ready, needs DNS repair, or recovers. The console also shows warnings in Domains and on affected inboxes, with a link to the entries to repair.

To resume agent updates after a restart, call list_domain_events (API: GET /v1/domains/{domain}/events; SDK: extrovert.domains.events(domain)). Save next_cursor and pass it as after for that same domain. Fetch the next page immediately when has_more is true; otherwise wait poll_after_seconds. Events do not wake a disconnected host: keep a polling task running or resume checking when the agent next runs.

OperationRequired permission
List, inspect, or read status events for a domaindomain:read or domain:manage
Recheck or offboard a customer-controlled domaindomain:manage
Connect a domain you own with nameserver delegationdomain:manage
Quote, request, inspect, or cancel an agent’s purchase requestcommerce:request

An agent’s commerce:request permission does not approve payment and does not grant direct registrar access.

Customer-controlled domains belong to one project. scope is project; omitting it uses the connection’s project. Account-level creation without a project uses Default. Only platform-designated shared domains are available across projects, and each inbox on a shared domain still belongs to one project.

A project_id in an agent request is an assertion. It cannot move the connection into another project. Use a reviewed resource transfer to move existing domains and their inboxes.

  1. Quote. quote_domain returns availability, the exact registration and renewal price, quote expiry, and any plan requirement. A quote does not reserve, charge, or register the domain.

  2. Request. request_domain_purchase records the quoted commercial facts under a stable idempotency key.

  3. Authorize. If no matching purchase limit allows the request, Extrovert notifies the billing owner and returns a signed-in approval URL. Ordinary mail/commerce permissions cannot approve the request. An explicitly authorized Full account control connection can approve through administrative actions, including its own request.

  4. Recover payment if needed. If additional payment authentication is required, the console keeps the person on the same durable request and resumes afterward.

  5. Register and configure. Payment confirmation queues registration, DNS, and mail setup. Only the ready state means inboxes can use the domain.

Purchase limits may constrain budget period, per-purchase amount, domain count, extensions, premium status, and applicability. The most restrictive matching control wins. Plan capacity and purchase authority are separate checks.

Extrovert supports new registrations in this flow. Domain transfers are not supported. Registration fees are non-refundable after a successful purchase, and renewal consent remains separate from the authority to acquire a domain.

Offboarding a domain can affect every inbox on it. Resolve or remove dependent inboxes before starting the teardown job, then poll the returned job id to a terminal state. Cross-project dependencies remain subject to organization and project access checks.