Appearance
Domains
Every link is served from a domain. ArtistHub provides two shared domains, and accounts can add their own.
| Domain | Availability |
|---|---|
vibe.to | Always available to every artist. |
listen.to | Always available to every artist. |
| Custom domains | Must be added to the account and assigned to the artist. |
Create Link rejects any domain outside this set with Artist does not have access to the domain.
Listing available domains
Domains assigned to your artists:
graphql
query MyDomains {
custom_domains {
id
domain
custom_domain_artists {
artist { id name }
}
}
}The artist's default domain record:
graphql
query ArtistDomain($artist_id: uuid!) {
domains(where: { artist_id: { _eq: $artist_id } }) {
id
domain
verification_google
verification_facebook
created_at
}
}Adding a custom domain
graphql
mutation AddCustomDomain($domain: String!) {
add_custom_domain(domain: $domain) {
id
domain
user_id
}
}Variables:
json
{ "domain": "links.exampleartist.com" }This registers the domain against your user account. It is not usable on links until you also assign it to an artist.
DNS still has to point at ArtistHub — adding the domain here does not configure it. Follow the DNS instructions in the dashboard for the current target records.
Assigning a domain to an artist
graphql
mutation AssignDomain($artist_id: uuid!, $custom_domain_id: uuid!) {
insert_custom_domain_artists_one(object: {
artist_id: $artist_id
custom_domain_id: $custom_domain_id
}) {
id
artist { id name }
custom_domain { id domain }
}
}Both conditions must hold: the artist must be one you manage, and the custom domain must be one your user account owns. Failing either produces permission-error.
One domain can serve several artists — insert one row per artist.
Removing
Unassign a domain from an artist but keep the domain:
graphql
mutation Unassign($id: uuid!) {
delete_custom_domain_artists_by_pk(id: $id) { id }
}Remove the domain entirely:
graphql
mutation RemoveCustomDomain($id: String!) {
remove_custom_domain(id: $id) {
id
domain
}
}DANGER
Removing a domain breaks every link published on it. Move those links to another domain first — see Changing the public URL — or the URLs go dead.
Checking path availability
Paths are unique per domain, so the same path can exist on vibe.to and on your own domain.
graphql
mutation CheckPath($domain: String!, $path: String!) {
path_available(domain: $domain, path: $path) {
success
}
}success: true means free. Rules enforced:
domainmust be a valid hostname, orInvalid url.pathmust be at least three characters, orPath must be 3 at least characters.
This is a check, not a reservation — the path can be claimed between your check and your create. Always handle Path is not available from create_link.
Domain verification
The domains table carries verification_google and verification_facebook, holding the verification tokens those platforms require before a domain can be used for ad conversion tracking. A manager can update them:
graphql
mutation SetVerification($id: uuid!, $google: String, $facebook: String) {
update_domains_by_pk(
pk_columns: { id: $id }
_set: {
verification_google: $google
verification_facebook: $facebook
}
) {
id
domain
verification_google
verification_facebook
}
}Set these before attaching Meta or Google pixels to links on the domain — see Tracking Pixels.
Moving links between domains
graphql
mutation MoveLink($id: uuid!, $domain: String!, $path: String!) {
update_links_by_pk(
pk_columns: { id: $id }
_set: { domain: $domain, path: $path }
) {
id
domain
path
}
}The target domain must be assigned to the link's artist, and the domain + path pair must be free. The old URL stops resolving immediately.