Ulsav Docs
Organizations

Domains

Two different things called domains: custom hostnames that serve your pages, and email domains that prove your people

Ulsav uses the word domain for two features, and confusing them wastes an afternoon. A custom domain puts your Event on your own hostname. An email domain proves you control a mail domain used for identity.

Custom domains: your hostname, your page

A custom domain maps one hostname to one public target.

TargetWhat the hostname serves
EventThat Event's page on the market
EventSeriesThat series page on the market
EventGroupThat group's portal
EventGroupSeriesThat group series page on the market

A hostname is claimed platform-wide, not per Organization. Once tickets.example.org belongs to anyone, nobody else can claim it, even while it is pending.

Each target may have one canonical domain, the address its links prefer. A second canonical domain for the same target is refused until you disable the first. Disabling frees the target; deleting removes it.

Proof and routing records

Connecting a hostname produces two DNS records.

  • Ownership. A TXT record at the hostname with the value ulsav-site-verification=<token>. Its presence proves you control the name.
  • Routing. A CNAME from the hostname to the Ulsav edge target, usually cname.ulsav.com.

Verification checks ownership first, then asks the edge to serve the host. If ownership passes but the edge is not ready, the domain sits in verified with a message explaining what to fix.

Apex domains cannot hold a CNAME

A two-label name such as example.com is treated as an apex. Point it at the Ulsav edge using your DNS provider's ALIAS, ANAME, or CNAME-flattening feature, or connect a subdomain such as tickets.example.com instead.

Ulsav's own hosts are refused as customer hostnames: ulsav.com, anything under it, and the edge target itself.

The five states

StateMeaningServes traffic
PendingCreated, ownership not proven yetNo
VerifiedOwnership proven, edge not readyNo
ActiveOwnership proven and edge serving with a certificateYes
ErrorA lookup or edge call failed; the message says whichNo
DisabledSwitched off on purpose; the row is keptNo

Disabling releases the hostname at the edge so it stops serving and stops costing money. Deleting removes the edge hostname first and the row second, so a failure leaves the row in place to retry.

Who can do what

Reading needs domains.read; connecting, verifying, disabling, and deleting need domains.create, domains.verify, domains.update, and domains.delete respectively.

Host resolution returns a target kind and an opaque ID, never authority; a custom hostname never grants dashboard access.

Email domains: proving a mail domain

A verified email domain answers a different question: "are these people really from that organization?" You claim a domain such as students.example.edu, prove control with a TXT record, and Ulsav can then use it for sign-in routing and access rules.

DetailRule
UniquenessGlobally unique across Ulsav; first claim wins
Proof recordTXT with ulsav-email-domain-verification=<token>
StatesPending and verified only

The proof prefix differs from the hostname prefix, so the two claims can never be confused.

Ownership is the whole point: the domain never serves a website, and it is not the same thing as a hostname domain.

Identity providers

An Organization can connect one identity provider, using OIDC or SAML. The connection stores who the provider is, the credentials, the permitted redirects, and an enable switch.

SettingBehaviour
Type and issuerFixed at creation; recreate the connection to change them
Client secret, SAML keyEncrypted at rest; supplying one refuses the call when the platform key is not configured
Redirect URIsAllowlist; an unregistered redirect fails instead of bouncing silently
ScopeOrganizer, attendee, or both
EnabledDisabling stops every sign-in through it

Ulsav can start an OIDC flow, exchange the code, and validate a SAML assertion against it. It creates no membership; access still comes from Roles.

Eligibility records are separate time-boxed facts that an Account satisfies a condition through a provider or a verified email domain; they default to 30 days.

Edge cases

SituationResult
Hostname claimed by anyoneRefused as taken, even while pending
Second domain for one targetRefused until the first is disabled
TXT present, CNAME missingVerified, not active
TXT missingPending with a message, not an error
Email domain claimed elsewhereRefused as taken
Edge call fails during deleteRow kept so you can retry

On this page