Skip to content

Meetings: booked from the reply

Book the call from the reply that said yes, at a time both calendars hold free, and brief the AE.

Meetings books the call from the reply that said yes, at a time both calendars hold free, and briefs the AE. A Meeting costs $0 (sample).

Booked from the replyMode try
You, to your agent

Book a call with the lead who said yes, without sending the invite.

curl -X POST "https://api.sb/leaseline.app/meetings/book?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contact":"contact_88","at":"2026-10-21T19:00:00Z"}'

curl -X POST "https://api.sb/leaseline.app/tasks/task_118/assign?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"worker":"worker_3"}'
import { $ } from 'startup-builder'

const { meeting } = await $.Meeting.book({ contact: 'contact_88', at: '2026-10-21T19:00:00Z' }, { mode: 'try' })   // Northgate Rentals said “Interested. Can you send times for Tuesday?”
await $.Task.assign({ task: 'task_118', worker: 'worker_3' }, { mode: 'try' })   // the Handoff Brief, to the AE, due in 60 min
return meeting
npx startup-builder do Meeting.book --json '{"contact":"contact_88","at":"2026-10-21T19:00:00Z"}' --try
npx startup-builder do Task.assign --json '{"task":"task_118","worker":"worker_3"}' --try
{
  "name": "do",
  "arguments": {
    "code": "const { meeting } = await $.Meeting.book({ contact: 'contact_88', at: '2026-10-21T19:00:00Z' }, { mode: 'try' })   // Northgate Rentals said “Interested. Can you send times for Tuesday?”\nawait $.Task.assign({ task: 'task_118', worker: 'worker_3' }, { mode: 'try' })   // the Handoff Brief, to the AE, due in 60 min\nreturn meeting",
    "mode": "try"
  }
}
Response200application/json
{
  "meeting": {
    "$id": "https://api.sb/leaseline.app/meetings/meeting_14",
    "$type": "Meeting",
    "at": "2026-10-21T19:00:00Z",
    "agenda": "Northgate Rentals: 180 units, renewals by hand today",
    "contact": {
      "$id": "https://api.sb/leaseline.app/contacts/contact_88",
      "$type": "Contact",
      "name": "Lee Park"
    },
    "mode": "try"
  }
}
sample

What it does

What you pay forPrice per unit (sample)The call
A Meeting booked$0POST /{namespace}/meetings/book
The Handoff Brief on the AE’s Task$0.01POST /{namespace}/tasks/{task}/assign

Run it

StepCallWhat it does here
1POST /{namespace}/meetings/bookNorthgate Rentals said “Interested. Can you send times for Tuesday?”
2POST /{namespace}/tasks/{task}/assignthe Handoff Brief, to the AE, due in 60 min

Set it up

CheckOn the day-0 StartupFixYour timeWaitThen
role-unstaffedwarnstaff the AE, or leave it: Meetings book on your calendar0 minnonePOST /{namespace}/roles/{role}/staff
domain-authenticatedpassinvites send from your Domain0 minnonePOST /{namespace}/domains/{domain}/authenticate

The records

The Meeting · sample
{
  "meeting": {
    "$id": "https://api.sb/leaseline.app/meetings/meeting_14",
    "$type": "Meeting",
    "at": "2026-10-21T19:00:00Z",
    "agenda": "Northgate Rentals: 180 units, renewals by hand today"
  }
}
The Handoff Brief · sample
{
  "task": {
    "$id": "https://api.sb/leaseline.app/tasks/task_118",
    "$type": "Task",
    "assignee": "worker_3",
    "due": "2026-10-19T16:41:00Z",
    "brief": {
      "who": "Lee Park, Northgate Rentals",
      "said": "Interested. Can you send times for Tuesday?",
      "booked": "Tue 14:00 Central",
      "never": [
        "a price beyond the list",
        "a discount",
        "terms"
      ]
    }
  }
}

Calls

CallWhat it doesWhat else happensEvent
POST /{namespace}/meetings/bookBook schedules a Meeting with a Contact at a time both calendars hold free.—Meeting.booked
POST /{namespace}/tasks/{task}/assignAssign gives a Task to a Worker, human or agent, and places it in that Worker’s worklist.Moves the waiting Action from awaitingWorker to awaitingAction.Task.assigned

Events

Meeting.booked · StartupBuilder-Signature
{
  "$id": "https://api.sb/leaseline.app/events/event_1",
  "$type": "Event",
  "name": "Meeting.booked",
  "at": "2026-10-22T12:00:00Z",
  "seq": 1,
  "data": {
    "meeting": {
      "$id": "https://api.sb/leaseline.app/meetings/meeting_1",
      "$type": "Meeting",
      "at": "2026-10-22T12:00:00Z"
    }
  }
}
Task.assigned · StartupBuilder-Signature
{
  "$id": "https://api.sb/leaseline.app/events/event_1",
  "$type": "Event",
  "name": "Task.assigned",
  "at": "2026-10-22T12:00:00Z",
  "seq": 1,
  "data": {
    "task": {
      "$id": "https://api.sb/leaseline.app/tasks/task_1",
      "$type": "Task",
      "status": "pending",
      "mode": "try"
    }
  }
}

Refuses when

CheckRefusesFixThen
owned-by-a-person Not live yet · gaps #8 · today: The dry run renders from the sample; each check names the call that clears it.a send to a Contact whose Lead, open Deal or Conversation a person ownsLeave it to the person who owns it: the draft waits in their queue.POST /{namespace}/tasks/{task}/assign
suppressed-contacta send or Sequence step to a Contact on a Suppression, from any PlayLeave them out: run the List again, which drops every suppressed Contact.POST /{namespace}/collections/query
422RefusedStep two to Lakeside Rentals’ owner did not send: they asked us to stop on Oct 12.
CheckFixThen
suppressed-contact failLeave them out: run the List again, which drops every suppressed Contact.POST /{namespace}/collections/query
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "Step two to Lakeside Rentals’ owner did not send: they asked us to stop on Oct 12.",
  "checks": [
    {
      "check": "suppressed-contact",
      "status": "fail",
      "observed": "Suppression suppression_6, unsubscribed 2026-10-12",
      "doc": "/code/refusals#check-suppressed-contact",
      "fix": "Leave them out: run the List again, which drops every suppressed Contact.",
      "then": "Collection.query"
    }
  ]
}

It says no, says why, and names the fix.

422RefusedPinecrest Homes’ second visitor was not enrolled: no Consent on record for sales email.
CheckFixThen
suppressed-contact pass—POST /{namespace}/collections/query
no-consent failRecord the Contact’s yes, with where they gave it, before the first send.POST /{namespace}/consents
JSON
{
  "type": "https://startupbuilder.dev/errors/refused",
  "title": "Refused",
  "status": 422,
  "detail": "Pinecrest Homes’ second visitor was not enrolled: no Consent on record for sales email.",
  "checks": [
    {
      "check": "suppressed-contact",
      "status": "pass"
    },
    {
      "check": "no-consent",
      "status": "fail",
      "observed": "no Consent for purpose sales-email",
      "doc": "/code/refusals#check-no-consent",
      "fix": "Record the Contact’s yes, with where they gave it, before the first send.",
      "then": "Consent.create"
    }
  ]
}

It says no, says why, and names the fix.

Pauses when

StopPauses whenFixThen
unanswered-positivea reply asking to meet that waits 60 minutes for a personAnswer the reply, then approve the resume.POST /{namespace}/approvals/{approval}/approve
Campaign.paused · unanswered-positive · Not live yet, gaps #2 · sample
{
  "$id": "https://api.sb/leaseline.app/events/event_951",
  "$type": "Event",
  "name": "Campaign.paused",
  "at": "2026-10-19T16:45:00Z",
  "data": {
    "campaign": {
      "$id": "https://api.sb/leaseline.app/campaigns/cold-email",
      "$type": "Campaign"
    },
    "reason": {
      "limit": "unanswered-positive",
      "observed": "64m",
      "bound": "60m",
      "window": "60m"
    },
    "task": {
      "$id": "https://api.sb/leaseline.app/tasks/task_88",
      "$type": "Task"
    }
  }
}

Plays that use it

PlayWhat it doesIts Metric
Instant responseAnswers every form and email within 5 minutes from your own pages, books the call, starts the trial or hands it to the right person.inbound-meeting-rate
Cold emailWrites first to people at companies that showed two fresh public reasons to talk, three short emails at most, and answers every reply by kind.positive-reply-rate
Warm introsFinds who already knows each company you want, and that person asks them first, from their own account, before any introduction.intro-acceptance-rate
Proof-of-work outreachSends each Prospect one finished piece of your product’s work, made from their own public data, in a plain email that asks for nothing.proof-reply-rate
LinkedIn outboundPicks each day’s People on LinkedIn, drafts the connection note and the Messages, and queues them in your send tray; you press every send.linkedin-reply-rate
Outbound callingA disclosed voice agent calls back anyone who asks within 60 seconds and answers your number; a person dials every cold call.callback-meeting-rate
GiftingSends one gift the Person picks after two relevant touches at a live moment, with you approving each, and counts the Meetings it adds.gift-meetings-per-100
Lead reactivationWrites once to each old Lead nobody works, only when something new answers what they asked, from their last contact at the Startup.reactivated-pipeline
Account visitsFinds the fitting companies behind visits to your own buying pages and writes to the right person there, from facts, never from the visit.visit-reply-lift
Product signalsFinds teams getting value on a free account and writes to the right person, citing only their own usage, after you approve the first send.pql-deal-rate
Buying committeeWrites to 3 or more roles at each named company, one a week, and hands each engaged company to your AE within a day.committee-deal-lift
Waitlist interviewsInterviews each Waitlist signup with your disclosed agent, admits by fit under a published cap, and sends a result built on their company.interview-activation-rate

Cost only: it moves no Metric itself, and what it costs counts against each Play that uses it.

Hub guides it deepens

On startupbuilder.devIdWhat it holds
Meetingnoun:meetingthe record, its fields and every call on it
AErole:sales-leadthe Role contract the seat fills

Example

Leaseline, whenWhat happenedCost (sample)
2026-10-19 15:41Northgate Rentals says yes—
16:12Tuesday 14:00 Central is booked and the AE has the Brief$0.01

Compiled, not written: edit its page, then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.

Contents