Skip to Content
Elido is in closed beta — APIs are stable but rate-limits and quotas may change before GA. Request access →
GuidesWhite-label

White-label

White-label flips the dashboard, transactional emails, and the edge splash interstitial from Elido branding to your own. It runs in three phases internally, but from the API surface it’s a single record:

PUT /v1/workspaces/{workspace_id}/branding

Business plan only. Mutations from Free/Paid workspaces return 402 Payment Required. Reads always succeed so a downgrade never wipes your config.

Configure

curl -X PUT \ https://api.elido.app/v1/workspaces/1/branding \ -H "Authorization: Bearer $ELIDO_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "brand_name": "Acme Links", "logo_url": "https://cdn.acme.com/logo.svg", "primary_color": "#5b6cff", "email_from_name": "Acme Links", "portal_hostname": "links.acme.com", "enabled": true }'
FieldNotes
brand_nameReplaces “Elido” in the topbar, page titles, and email subjects. ≤80 chars.
logo_urlPublic HTTPS URL. Square SVG/PNG, recommended ≤512 KB.
primary_colorHex (#rrggbb) or oklch(...). Drives the --primary CSS var.
email_from_nameSender display name on transactional emails. Defaults to brand_name.
portal_hostnameCustom dashboard host (e.g. links.acme.com). Globally unique.
enabledMaster switch. Defaults false — set true to activate.

enabled: false keeps the config but renders nothing — useful for staging changes before flipping the brand on.

Where it shows up

The same config is read in three places:

Dashboard

The web app fetches /branding on load and injects brand_name, logo_url, and primary_color into the shell. Users see your name and colors instead of Elido’s the moment they sign in.

Transactional emails

Invitation, verification, password-reset, and webhook-failure emails render from a templated header that uses brand_name, logo_url, and email_from_name. The From: line becomes "Acme Links" <noreply@elido.app> — the sending domain stays Elido-managed for SPF/DKIM reasons.

Edge splash

When a link uses the conversion splash interstitial (see Retargeting pixels), the edge fetches the workspace’s branding via gRPC and renders the splash with your logo and colors instead of Elido’s.

Custom portal hostname

Setting portal_hostname is the difference between acme.elido.app/dashboard and links.acme.com/dashboard. The flow:

  1. Set the field via the API or Settings → Branding.
  2. Add a CNAME links.acme.com → portal.elido.app record at your registrar.
  3. The first request triggers Caddy on-demand TLS — Elido issues a Let’s Encrypt cert in under 30 seconds.

The public lookup endpoint that drives this:

GET /v1/portal/lookup?host=links.acme.com → 200 { "workspace_id": 1 } # if claimed and enabled 404 # otherwise (Caddy refuses cert issuance)

Hostnames are reserved globally — if a different workspace already claims links.acme.com, your PUT returns 409 Conflict.

Reset to defaults

curl -X DELETE \ https://api.elido.app/v1/workspaces/1/branding \ -H "Authorization: Bearer $ELIDO_TOKEN"

Reverts the workspace to Elido branding immediately. The custom hostname stops resolving on the next Caddy ask.

Limits

  • One branding record per workspace.
  • Hostname conflicts return 409 — pick another or contact support if you believe the claim is stale.
  • The dashboard previews changes live, but the edge splash pulls via gRPC and may take up to ~60s to reflect a fresh config.