Overview
Custom domains let you serve signing pages, and the links in your emails, SMS and webhooks, from your own branded domain (e.g.,sign.example-firm.com) instead of the default
spitshake.io. SpitShake verifies that you own the domain and then provisions its TLS
certificate for you.
All custom domain endpoints require an admin API token or user; anyone else gets
403 {"error": "Forbidden"}.
Add a Custom Domain
Register a new domain with your account. The response includes the TXT record you must create to verify ownership.- The domain is lowercased and trimmed before it is saved.
- A domain can be registered only once across all SpitShake accounts, and a removed domain still counts: re-adding a domain you deleted returns “Domain has already been taken”.
- SpitShake’s own hosts (such as
spitshake.io,app.spitshake.ioandapi.spitshake.io) are reserved.
DNS Setup
After adding a domain, create two DNS records with your DNS provider. Settings → Custom Domains → DNS Configuration Instructions shows both, with copy buttons.Required Records
Use the exact
verification_record_name and verification_record_value from the API
response. The token is 64 hexadecimal characters and is unique to the domain.
A domain added before the DocuTrust → SpitShake rename may keep its older
_docutrust-verification.<domain> = docutrust-verify=<token> record; either one verifies.
DNS propagation can take up to 48 hours, though most providers finish within 15 minutes.
SpitShake checks the TXT record automatically: first 30 seconds after you add the domain,
then after 1, 2 and 4 minutes, and then every 5 minutes. After 60 checks without finding the
record (about 5 hours) the domain is marked
failed with
"DNS verification timed out after 60 attempts". You can check it yourself
at any time.Status Lifecycle
Custom domains progress through the following statuses:
While a domain is
ssl_pending, SpitShake re-checks the certificate after 30 seconds,
1 minute and 2 minutes, then every 5 minutes, plus a sweep every 15 minutes. When the
certificate is issued the domain becomes active and ssl_provisioned_at is set. If the
domain has had 120 checks in total (DNS and certificate checks together) without a
certificate, it is marked failed with "SSL provisioning timed out".
Verify Domain DNS
Trigger a DNS check yourself. Useful if you have just added the TXT record and do not want to wait for the next automatic check. On success, certificate provisioning starts at once.Check Domain Status
Read a domain’s current status without triggering a check. Poll this while a domain moves frompending to active. GET /api/custom_domains/{id} returns the same body.
status to decide what to do next. ssl_status is informational; it reads active
once the certificate is issued.
List All Domains
Returns the account’s domains, newest first. Removed domains are not listed.account_branding is what a domain’s unset branding keys fall back to (the account’s own
signing-page branding).
Set Primary Domain
Designate a domain as the primary. Submissions that do not pick a domain themselves (see below) use the primary domain for their signing links and emails. Only one domain can be primary; setting a new one unsets the old one.Choose a Domain per Template or Submission
Once a domain isactive you can pick it for a single template or a single submission
with preferences.custom_domain, instead of (or on top of) setting an account-wide
primary. Resolution is submission › template › account primary › spitshake.io.
In the Template Builder the same choice is the Signing domain picker in Template
Settings.
-
The value must be one of the account’s active domains, or
"default"to forcespitshake.iofor that template/submission even when a primary custom domain is set. Anything else is rejected with422and the message lists your active domains:422 -
The chosen host is used everywhere a link is minted for that submission: each
submitter’s
signing_urlin thePOST /api/submissionsresponse, theembed_srclinks returned byPOST /api/submissions/emails, invitation/reminder/completion emails, SMS invitations, and thedownload_urls insubmission.completedwebhooks. - The submission also takes the domain’s branding (next section), so the page and emails look like the brand in the URL without passing any branding keys.
Brand each Domain
Each domain carries its own header title, logo, favicon, colours and “Powered by” setting. The keys aredisplay_title, logo_url, favicon_url, company_name,
primary_button_color, header_color and show_branding — the same set a
brand uses. Every submission sent on the domain shows them — whether the domain was chosen on the
submission, on its template, or is the account’s primary. Set them in Settings → Custom
Domains → Edit branding (with a live preview of the signer’s header), or via the API:
Saving replaces the domain’s whole branding object (
PUT is not a merge). The Settings
editor sends every key it shows, Favicon URL included, and leaves blank fields out, so a
blank field in the editor clears that key.PUTreplaces the whole object; a key sent asnullor""is removed and falls back to the account. Abrandingvalue that is not an object is rejected with422 {"error": "branding must be an object"}.header_colorsets the header bar verbatim; without it the header isprimary_button_colordarkened 20%. It must be a#rrggbbdark enough for the header’s white text.logo_urlandfavicon_urlmust behttp(s)URLs; the favicon falls back to the logo.display_titleandcompany_namealso make up the browser tab title, andfavicon_urlis the tab icon (see Brands).- Resolution is submission › submission’s brand › template › template’s brand › domain ›
account, key by key. A template that sets
display_title: "Example Firm Retainer"keeps its title on this domain and takes the logo and colour from the domain; a submission can still override any single key. A brand selected withpreferences.brand_idon the template or submission outranks the domain’s branding. custom_domain: "default"uses no domain branding. A domain that is removed stops contributing branding, like it stops contributing links.- Branding is looked up when the signing page or an email is rendered, not copied onto the submission — editing a domain changes it for every signer who has not finished yet.
Send the Bare Domain to Your Website
Your signing domain only serves signing links (https://sign.example-firm.com/s/…). Someone
who opens the domain itself, https://sign.example-firm.com/, is sent to your own site when
you set website_url; without it they get a plain “Not found” page. SpitShake’s own
homepage and marketing pages are never shown on your domain.
Set it in Settings → Custom Domains → Edit branding → Your website, or via the API. Each of
branding and website_url is changed only when it is sent, so this leaves the domain’s
branding alone:
website_urlmust be anhttp(s)URL;nullor""clears it.- The redirect is a
302, so you can change the destination at any time. - Signing links, the signing pages’ assets and the API are not affected.
Delete a Domain
Remove a custom domain. Its status becomesremoved and it is no longer primary. If it was
the primary domain, signing links fall back to spitshake.io; submissions or templates that
chose it with preferences.custom_domain fall back to the next level. A removed domain
cannot be added again (see Add a Custom Domain).

