Skip to content

App API

Your sales and marketing Systems as Nouns, Verbs and Events on one key: apps your agents call instead of screens they click.

Systems
12
Action Verbs
16
Integrations
25
Contact.enroll
You, to your agent

Enroll the 50 verified heads of operations in my three-email sequence from my warmed second domain, and show me the first send.

curl -X POST "https://api.sb/leaseline.app/contacts/enroll?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"audience":"audiences/heads-of-operations","sequence":"sequences/first-touch","from":"dana@tryleaseline.app"}'
npx startup-builder do Contact.enroll --try --data '{"audience":"audiences/heads-of-operations","sequence":"sequences/first-touch","from":"dana@tryleaseline.app"}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Contact.enroll({ audience: 'audiences/heads-of-operations', sequence: 'sequences/first-touch', from: 'dana@tryleaseline.app' })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Contact.enroll({ audience: 'audiences/heads-of-operations', sequence: 'sequences/first-touch', from: 'dana@tryleaseline.app' })
Response
{
  "mode": "try",
  "stored": false,
  "enrolled": 50,
  "sequence": "sequences/first-touch",
  "from": "dana@tryleaseline.app",
  "pace": {
    "perDay": 25,
    "under": "mandates/sdr-cold-email"
  },
  "firstSend": {
    "to": "dana@harborview-pm.com",
    "step": 1,
    "at": "2026-10-28T15:00:00Z",
    "subject": "Rent ledgers at Harborview"
  },
  "skipped": []
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

The overview, in a founder's words: Headless SaaS: every write is one record and one Event.

Each System holds your sales records as calls

Each System is a hub System run headless: its Nouns, the Verbs that change them, and the Events each change emits. A System page projects every Noun and Verb definition from the hub, and adds only the integrations it reaches and the seats that work in it. The Revenue Systems (Quotes, Success and the ARR bridge) live under Revenue.

SystemWhat it holdsVerbsEventsIts action Verb pages
CRMYour Contacts, Organizations, leads and deals on one record, with qualify, assign, advance and win as calls every agent and app shares.1310Lead.qualify
ProspectingPeople who have never engaged, found from a sentence, checked for a working address, and saved with the reason each one fits.44None.
SequencesTimed series of emails and tasks for one Contact at a time, enrolled by one call, stopped on any reply, and ended by an unsubscribe.86Contact.enroll
MailboxesThe addresses your agents send from, warmed, rested and authenticated, with every Suppression and Consent read before each send.99Message.broadcast, Message.schedule
SchedulingA booking link into each seat’s free hours, so an interested reply becomes a booked Meeting with a brief, not a thread of emails.42Meeting.book
SocialPosts from your own accounts on LinkedIn, X, Reddit, YouTube, TikTok and Instagram, published or scheduled by one call per site.65Post.publish, Post.schedule
AdsAudiences, Campaigns and Ads on your own Meta, Google, Bing, LinkedIn, Reddit, X and TikTok ad accounts, spent only under a standing approval.66Ad.create, Audience.create, Campaign.create, Campaign.update
SEOThe search terms and AI questions your pages target, where each ranks, which answers cite you, and whether every page is indexed.44None.
Sites and contentYour Site, its pages and the Content on them, drafted from what ranks, published by one call, and submitted to search engines on every publish.86None.
MediaVideos, images and voice made from your records, cut to each site’s format, and finalized only once every claim reads from a live record.66None.
Forms and waitlistsForms and Waitlists turn a visit into a lead, and the Visitor record joins earlier visits to the Contact once they sign up.66None.
Analytics and experimentsEvery visit and Event as Metrics you query, watch and test against, so each Play is read by its number and not by a hunch.98Metric.query

The action Verbs are where your agents act

Each action Verb has its own page: Inputs, Outputs, Effects, what each site honors, what try does, and what refuses it. The four account calls (Integration.connect, Integration.call, Handle.connect and Mandate.authorize) live under Integrations.

VerbSystemWhat it changesPage
Post.publishSocialPuts a Post live from your account on one site, by API or by a browser agent signed in as youPost.publish
Post.scheduleSocialPlaces a drafted Post on its account’s calendar for a set timePost.schedule
Message.scheduleMailboxesHolds one Message until its send time, then sends it from your MailboxMessage.schedule
Message.broadcastMailboxesSends one Message to an Audience, now or at a set timeMessage.broadcast
Contact.enrollSequencesStarts each Contact on a Sequence, which stops on any replyContact.enroll
Meeting.bookSchedulingBooks a Meeting at a time both calendars hold freeMeeting.book
Audience.createAdsMatches a saved list of Prospects or customers to an Audience on your ad accountAudience.create
Campaign.createAdsCreates a Campaign on your ad account, with its stop rule, on spend you authorizedCampaign.create
Campaign.updateAdsChanges a live Campaign’s budget, bids or statusCampaign.update
Ad.createAdsAdds an Ad, with its creative in the site’s format, to a CampaignAd.create
Metric.queryAnalytics and experimentsNothing: it reads a Metric as a trend, funnel or retention curveMetric.query
Lead.qualifyCRMConfirms a lead fits an offer and opens a deal for itLead.qualify

Every call takes the same four forms on one key

A System Verb is one Tool under one name on every Interface: the SDK, the REST API, the CLI and the MCP do tool. In try mode the call reads and plans, stores nothing and sends nothing.

TypeScript
import { $ } from 'startup-builder'

const plan = await $.try.Contact.enroll({
  audience: 'audiences/heads-of-operations',
  sequence: 'sequences/first-touch',
  from: 'dana@tryleaseline.app',
})
Terminal
npm i startup-builder@0.3
npx startup-builder do Contact.enroll --data '{"audience":"audiences/heads-of-operations","sequence":"sequences/first-touch"}'

Every change emits one Event you can hear

Each write emits the Event named for its Verb, such as Contact.enrolled or Post.published, and a webhook carries it out. A Trigger can start a Workflow on it unchanged, and Metric.query reads it back. Events and webhooks lists every one.

Every send passes one check before it leaves

Before any Message, Post or enrollment goes out, the platform reads Consent and every Suppression, the Mailbox cap and your standing approval that covers the send. A failed check refuses that one send with its code and its fix, listed at Checks, and the rest of the batch goes on.

Contents