ProductPricingCompareCheck your domainDocsDashboardSign inGet started
Docs / REST API

Start

  • Overview
  • Getting started
  • Connect a mailbox

Sending

  • Domains
  • Mailboxes
  • Sending safety

Leads and campaigns

  • Leads
  • Campaigns
  • Write with AI

Replies and results

  • Unibox and AI labels
  • Analytics

Workspace

  • Team and roles
  • Billing and plans
  • Integrations

Developers

  • Connect your AI (MCP)
  • REST API
    • Overview
    • Workspace5
    • Analytics1
    • Campaigns26
    • Leads16
    • Lists4
    • Labels6
    • Suppressions3
    • Unibox6
    • Mailboxes8
    • Warmup3
    • Deliverability Network4
    • Domains4
    • Link domain5
    • Integrations3
    • Webhook endpoints7
    • Offer profile3
    • Billing1
    • Domain checker1
    • API keys1
  • Webhooks

Start

  • Overview
  • Getting started
  • Connect a mailbox

Sending

  • Domains
  • Mailboxes
  • Sending safety

Leads and campaigns

  • Leads
  • Campaigns
  • Write with AI

Replies and results

  • Unibox and AI labels
  • Analytics

Workspace

  • Team and roles
  • Billing and plans
  • Integrations

Developers

  • Connect your AI (MCP)
  • REST API
    • Overview
    • Workspace5
    • Analytics1
    • Campaigns26
    • Leads16
    • Lists4
    • Labels6
    • Suppressions3
    • Unibox6
    • Mailboxes8
    • Warmup3
    • Deliverability Network4
    • Domains4
    • Link domain5
    • Integrations3
    • Webhook endpoints7
    • Offer profile3
    • Billing1
    • Domain checker1
    • API keys1
  • Webhooks

Cold email that keeps your domains steady, with every feature on every plan.

Product

  • Features
  • Pricing
  • Sequences
  • Warmup
  • How it works
  • Docs
  • Changelog
  • Blog

Compare

  • Ballast vs Instantly
  • Ballast vs Smartlead
  • Ballast vs Lemlist
  • Switch from Instantly
  • Switch from Smartlead
  • Switch from Lemlist

Free tools

  • Domain checker
  • MX lookup
  • SPF checker
  • DKIM checker
  • DMARC checker
  • Blacklist check

Legal

  • Terms of Service
  • Privacy Policy
  • Acceptable Use Policy
  • Data Processing Agreement
  • Sub-processors

Developers

  • REST API
  • MCP server
  • OpenAPI spec
© 2026 BallastTermsPrivacy
All systems normal
ProductPricingCompareCheck your domainDocsBlogChangelogSign in

API reference

Link domain

The domain your unsubscribe and tracking links use. 5 endpoints, each also a tool for your AI through MCP. Authentication and errors are on the overview.

Get the link domain

GET/api/v1/link-domain

The hostname that carries unsubscribe, click and open links in this workspace's emails, the CNAME record to add, and whether DNS and the certificate are ready.

MCP tool get_link_domainRead-only

Returns

hostnamerequiredstring | null
The workspace's link domain, null when none is set
statusrequired"none" | "pending_dns" | "pending_tls" | "active" | "failed"
active = links in emails use it
dnsrequired"ok" | "missing" | "wrong" | "unknown"
What our resolver sees at the hostname
tlsrequired"active" | "pending" | "failed" | "none"
Certificate on Cloudflare
messagerequiredstring | null
What to do next, null when active
recordrequiredobject | null
The DNS record to add
suggestionrequiredstring | null
links.<sending domain> when nothing is set yet
requiredrequiredboolean
Campaigns can't launch without an active link domain on this server
verifiedAtrequiredstring | null
checkedAtrequiredstring | null
cURL
curl https://ballast.to/api/v1/link-domain \
  -H "Authorization: Bearer $BALLAST_API_KEY"

Set the link domain

PUT/api/v1/link-domain

Sets the subdomain (e.g. links.acme.com) that carries the links in this workspace's emails. Add the returned CNAME record at your DNS provider; we issue the certificate and switch it on once both are ready. Replacing an active one breaks the unsubscribe links in emails already sent, so it needs replace: true.

MCP tool set_link_domainOwners and admins

Parameters

hostnamerequiredstring
A subdomain of a domain you own, e.g. links.acme.com
replaceboolean
Confirm replacing an active link domain

Returns the same fields as Get the link domain.

cURL
curl -X PUT https://ballast.to/api/v1/link-domain \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"hostname":"<hostname>"}'

Check the link domain now

POST/api/v1/link-domain/check

Looks up the CNAME and asks Cloudflare for the certificate again. The worker also checks every minute for the first hour.

MCP tool check_link_domain

Returns the same fields as Get the link domain.

cURL
curl -X POST https://ballast.to/api/v1/link-domain/check \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Remove the link domain

DELETE/api/v1/link-domain

Unsubscribe and tracked links in emails already sent stop working, and campaigns can't send until a new one is active.

MCP tool remove_link_domainOwners and adminsMCP asks to confirm

Returns

okrequiredtrue
cURL
curl -X DELETE https://ballast.to/api/v1/link-domain \
  -H "Authorization: Bearer $BALLAST_API_KEY"

Check a link domain CNAME

GET/api/v1/check/link

Whether links.<domain> has the CNAME to our link target. DNS only.

MCP tool check_link_cnameRead-only

Parameters

domainrequiredquery · string

Returns

hostnamerequiredstring
targetrequiredstring | null
dnsrequired"ok" | "missing" | "wrong" | "unknown"
cURL
curl https://ballast.to/api/v1/check/link?domain=<domain> \
  -H "Authorization: Bearer $BALLAST_API_KEY"
PreviousDomainsNextIntegrations