Skip to main content
A domain is one resource with capabilities: it can serve your storefront (web), send email (email_sending), and receive email (email_receiving) — search for a name, buy it or connect one you own, and verify. A freshly built Site lives at https://<subdomain>.crevio.app. The Domains API moves it to https://yourbrand.com. Buy through Crevio and DNS is configured for you automatically — zero records to add. Connect a domain you own and the response tells you exactly which records to add and tracks each one individually. Domains carry their own resource ID, returned by the purchase and create calls.

The flow at a glance

1

Search for a buyable domain

GET /domains/search returns available names and prices.
2

Purchase it — or connect your own

POST /domains/purchase registers the domain and auto-configures every DNS record. POST /domains connects a domain you already own.
3

Check what's left

GET /domains/{id} returns per-capability statuses, every DNS record with its own status, and a next_step sentence.
4

Verify

POST /domains/{id}/verify confirms DNS and goes live.

Worked example: buy a domain and attach it to a site

1. Search for an available domain

The result lists available names with prices so you can pick one to buy.

2. Purchase it

domain is required.
Crevio owns the DNS zone for purchased domains, so routing and email records are written for you — poll GET /domains/{id} until the capabilities you care about read active. GET /domains/{id} carries purchase_status for domains bought through Crevio, and next_step spells the same thing out in a sentence. It’s the answer to “did my payment go through?” — the DNS capabilities stay pending until the registration lands, so read the purchase first: Domain purchases are platform charges, not storefront orders, so they never appear in GET /orders.
With no card on file the response carries a checkout_url instead, and the domain sits at pending_payment until it’s paid. Checkout links expire after a day — call POST /domains/purchase again for the same domain to get a fresh one. A domain that’s already paid for (registering) or already yours (registered) refuses a repeat purchase and says so.

3. Assign it to a site

Site assignment is an attribute — set site_id (or pass it at create time). "site_id": null detaches.

4. Verify

Verification is idempotent and re-checks every enabled capability. Scope it with ?capability=web|email_sending|email_receiving to skip the other providers’ checks.
Verification can take time to propagate. If it doesn’t pass immediately, the platform re-checks in the background, so a verify that returns “pending” will often resolve on its own.

Connect a domain you already own

If you registered a domain elsewhere, create it instead of purchasing. The response carries the DNS records to add at your registrar — each with its own status — plus a next_step telling you whose move it is.
GET /domains/{id} is the source of truth while you set up DNS: records[] shows each record as pending or verified, and capabilities shows web / email_sending / email_receiving as pending, active, error, or null (off). Toggle capabilities later with PATCH /domains/{id} { "capabilities": { ... } }.

DNS zone management

For domains purchased through Crevio, the DNS zone itself is manageable — add an MX record, a TXT verification record, or a CNAME for a subdomain. The zone’s ID is on the domain payload as zone_id.
Connected (bring-your-own) domains have no zone — their DNS lives at your registrar. GET /domains/{id} still shows you every record Crevio expects and whether it resolves.

Next steps

Sites

Build the site you’ll attach this domain to.

Email

Send from your own address once email_sending is active.

API reference

Every domain endpoint and parameter.

Usage & credits

How domain registration is billed.