Outlook
Your agents send from your Outlook address, read every reply, and book the call on your Outlook calendar.
- Connect
- Sign in once, 4 grants
- Runs through
- Your account
- First run
- Enroll 25 checked people in your first Sequence, free on your account
- Sites
- Outlook
You, to your agent
Book a 30-minute call with Rosa at Northgate Rentals in my next free weekday slot, and show me the invite.
curl -X POST "https: //api.sb/ leaseline.app/ meetings/ book? mode= try" \
-H "Authorization: Bearer $SB_TOKEN" \
-H "Content-Type: application/ json" \
-d '{"contact": "contacts/ rosa-northgate", "at": "next free 30 minutes, weekdays 10: 00 to 16: 00 America/ Chicago"}'
npx startup-builder do Meeting.book --try --data '{"contact": "contacts/ rosa-northgate", "at": "next free 30 minutes, weekdays 10: 00 to 16: 00 America/ Chicago"}'
{
"name": "do",
"arguments": {
"mode": "try",
"code": "return await $.Meeting.book({ contact: 'contacts/ rosa-northgate', at: 'next free 30 minutes, weekdays 10: 00 to 16: 00 America/ Chicago' })"
}
}
import { $ } from 'startup-builder'
const result = await $.try.Meeting.book({ contact: 'contacts/ rosa-northgate', at: 'next free 30 minutes, weekdays 10: 00 to 16: 00 America/ Chicago' })
Response
{
"$type": "Meeting",
"mode": "try",
"stored": false,
"contact": "rosa@northgate-rentals.com",
"at": "2026-10-29T15: 30: 00Z",
"calendar": "outlook",
"invite": {
"subject": "Leaseline and the Northgate rent spreadsheet, 30 minutes",
"from": "dana@leaseline.app"
},
"agenda": "How Northgate tracks rent and renewals today"
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns
Connect once
- Call
Integration.connectwithsystem:and'mailboxes' venue:, then open the'outlook' connectUrlit returns and sign in as the Microsoft work or personal account you send from. - Approve the four grants Microsoft lists. A work account whose admin restricts apps asks the admin once; the
connectUrlwaits an hour for it. - Authenticate the sending Domain once with
Domain.authenticate, which writes SPF, DKIM and DMARC and checks them before the first send.
| Grant | What it unlocks | Scope |
|---|---|---|
| Send as you | Each Sequence step, reply and broadcast leaves from your own address | Mail.Send |
| Read replies | Every reply lands on its thread and its lead; the platform reads no thread your agents did not start | Mail.Read |
| Your calendar | Free and busy times, and the Meetings your agents book, on your Outlook calendar | Calendars.ReadWrite |
| Stay connected | Your agents keep working without you signing in each day | offline_access |
| To | Do this |
|---|---|
| Pause | Integration.pause stops every call through Microsoft at once and keeps the token; Integration.resume picks up from the same cursor. |
| Reconnect | Integration.reconnect returns a fresh connectUrl that lasts one hour, and keeps the Integration's id and cursor, so nothing imports twice. |
| Disconnect | Integration.revoke revokes the token with Microsoft; every record it brought in stays in your records. |
What your agents do
| Ask | Verb | Runs through | Price |
|---|---|---|---|
| Send each step of my Sequence from my Outlook address, and stop on any reply. | Contact.enroll | Your account | Free |
| Hold this reply until 9:00 in their time zone, then send it. | Message.schedule | Your account | Free |
| Send the launch note to my waitlist. | Message.broadcast | Your account | Free |
| Book the call this reply asks for, on my Outlook calendar. | Meeting.book | Your account | Free |
| Answer this reply in the same thread. | Conversation.answer | Your account | Free |
| Stop every send to anyone who asks. | Contact.unsubscribe | Your account | Free |
Calls on your own account are free.
What it holds
| Noun | The account’s object | When | Which side leads |
|---|---|---|---|
| Message | message | Your agent sends a step, a reply or a broadcast | Your records |
| Message | message | A reply arrives in the inbox | The account |
| Thread | conversationId | The first send opens it; every reply joins it | The account |
| Meeting | event | Your agent books a call | Your records |
Events and webhooks
| Direction | Event |
|---|---|
| Emits | Message.created, Contact.enrolled, Message.broadcasted, Meeting.booked, Prospect.engaged, Contact.unsubscribed |
Hears subscription: | Becomes Message.created |
Hears subscription: | Becomes Meeting.updated |
Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed (Events and webhooks).
Limits
| What | Limit | Call |
|---|---|---|
| Recipients from one mailbox | 10,000 in a rolling 24 hours on Exchange Online; past it the mailbox sends nothing until the oldest sends age out, so the call returns quota-reached with the time | Message.broadcast |
| Send rate | 30 messages a minute; the platform paces a broadcast under it, so Microsoft never throttles a send | Message.broadcast |
| Cold sends | 30 a day per inbox after 14 days of warm-up, held by your standing approval; a Sequence spreads the rest over the next days | Contact.enroll |
| Bookings | Only inside your bookable hours and never over a busy block on any connected calendar | Meeting.book |
Field map
| Our field | Outlook’s field | Calls |
|---|---|---|
Message.to | message.toRecipients | Message.schedule, Message.broadcast, Contact.enroll |
Message.subject | message.subject | Message.schedule, Message.broadcast, Contact.enroll |
Message.body | message.body Notes contentType html or text | Message.schedule, Message.broadcast, Contact.enroll |
Message.purpose | message.internetMessageHeaders Notes A commercial purpose adds the one-click unsubscribe headers | Message.broadcast, Contact.enroll |
Meeting.at | event.start and event.end Notes Each with its timeZone | Meeting.book |
Meeting.contact | event.attendees[].emailAddress | Meeting.book |
Meeting.agenda | event.body | Meeting.book |
What try does here
Renders the exact email or invite and returns it with the time it would go; nothing reaches Outlook and no draft or event is saved.
How long a connection lasts
A connection lasts 90 days from its last use: Microsoft replaces the refresh token on every use, and your agents use it daily.
The platform asks you to reconnect 7 days before it runs out; until you do, a call that needs it refuses with needs-reauth.
Plays and strategies
| Kind | Where |
|---|---|
| Plays | Cold email, Buying committee, lead nurture, customer referrals, Owned newsletter |
| Strategies | Hands-on |
Used by
- Agent tasks: Launch day · Link pitches · Answer every inbound · Personal first touch
- Services: Booked first calls · Demand generation
Reference
6 calls, each with its path and price
| Call | Path | Price |
|---|---|---|
Contact.enroll | POST / | Free |
Message.schedule | POST / | Free |
Message.broadcast | POST / | Free |
Meeting.book | POST / | Free |
Conversation.answer | POST / | Free |
Contact.unsubscribe | POST / | Free |