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

Labels

Reply labels and the triggers they run. 6 endpoints, each also a tool for your AI through MCP. Authentication and errors are on the overview.

Labels with their triggers and lead counts

GET/api/v1/labels

MCP tool list_labelsRead-only

Returns

labelsrequiredobject[]
cURL
curl https://ballast.to/api/v1/labels \
  -H "Authorization: Bearer $BALLAST_API_KEY"

Create a label

POST/api/v1/labels

MCP tool create_labelOwners and admins

Parameters

namerequiredstring
descriptionstring | null
aiPromptstring | null
Tells the reply classifier when to apply it. Empty = applied by hand only.
typerequired"positive" | "negative" | "neutral" | "warning"
triggersrequiredobject

Returns

idrequiredstring
namerequiredstring
descriptionrequiredstring | null
aiPromptrequiredstring | null
typerequired"positive" | "negative" | "neutral" | "warning"
triggersrequiredobject
positionrequirednumber
systemrequiredboolean
Used by the engine: editable, not deletable
leadsrequirednumber
cURL
curl -X POST https://ballast.to/api/v1/labels \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>","type":"positive","triggers":{}}'

Change a label, its AI prompt or triggers

PATCH/api/v1/labels/{id}

MCP tool update_labelOwners and admins

Parameters

idrequiredpath · string
namerequiredstring
descriptionstring | null
aiPromptstring | null
Tells the reply classifier when to apply it. Empty = applied by hand only.
typerequired"positive" | "negative" | "neutral" | "warning"
triggersrequiredobject

Returns the same fields as Create a label.

cURL
curl -X PATCH https://ballast.to/api/v1/labels/<id> \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"<name>","type":"positive","triggers":{}}'

Delete a label

DELETE/api/v1/labels/{id}

Removes it from every lead. Labels the engine relies on can't be deleted.

MCP tool delete_labelOwners and adminsMCP asks to confirm

Parameters

idrequiredpath · string

Returns

okrequiredtrue
cURL
curl -X DELETE https://ballast.to/api/v1/labels/<id> \
  -H "Authorization: Bearer $BALLAST_API_KEY"

Set the label order

POST/api/v1/labels/reorder

Owners and admins

Parameters

idsrequiredstring[]

Returns

okrequiredtrue
cURL
curl -X POST https://ballast.to/api/v1/labels/reorder \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids":[]}'

Run the reply classifier on a sample reply

POST/api/v1/labels/test

Uses every label's AI prompt, with `draft` replacing one label's saved prompt, so a prompt can be tried before saving. Nothing is labeled.

MCP tool test_label_promptNeeds an active plan

Parameters

subjectstring | null
replyrequiredstring
draftobject | null

Returns

labelIdrequiredstring | null
Null: no label fits well enough, a human decides. "draft" when the unsaved new label wins
labelNamerequiredstring | null
confidencerequirednumber
reasonrequiredstring
sourcerequiredstring
"rules" for auto-replies caught without a model, else the model id
cURL
curl -X POST https://ballast.to/api/v1/labels/test \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reply":"<reply>"}'
PreviousListsNextSuppressions