Skip to content

Google Calendar

Your agents offer the times you are free, book the call the buyer picks, send the invite and move it when either side changes plans.

Connect
Sign in once, 2 grants
Runs through
Your account
First run
Book one call from a positive reply, free on your account
Sites
None, it holds your records
Meeting.book
You, to your agent

Offer Rosa at Northgate Rentals three 30-minute slots I am free next week, between 10:00 and 16:00 Central.

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":"offer 3, 30 minutes, weekdays 10:00 to 16:00 America/Chicago, next week"}'
npx startup-builder do Meeting.book --try --data '{"contact":"contacts/rosa-northgate","at":"offer 3, 30 minutes, weekdays 10:00 to 16:00 America/Chicago, next week"}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Meeting.book({ contact: 'contacts/rosa-northgate', at: 'offer 3, 30 minutes, weekdays 10:00 to 16:00 America/Chicago, next week' })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Meeting.book({ contact: 'contacts/rosa-northgate', at: 'offer 3, 30 minutes, weekdays 10:00 to 16:00 America/Chicago, next week' })
Response
{
  "$type": "Meeting",
  "mode": "try",
  "stored": false,
  "contact": "rosa@northgate-rentals.com",
  "offered": [
    "2026-11-03T16:00:00Z",
    "2026-11-04T19:30:00Z",
    "2026-11-05T17:00:00Z"
  ],
  "calendar": "google",
  "sentence": "Would Tuesday at 10:00, Wednesday at 1:30 or Thursday at 11:00 Central work for 30 minutes?"
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

Connect once

  1. Call Integration.connect with system: 'scheduling', then open the connectUrl it returns and sign in as the Google account whose calendar you keep.
  2. Approve the two grants Google lists: your free and busy times, and the events your agents book.
  3. Set your bookable hours once, such as weekdays 10:00 to 16:00 in your time zone; every booking stays inside them.
GrantWhat it unlocksScope
Your free and busy timesYour agents offer only times you are free; they never read what your other events arehttps://www.googleapis.com/auth/calendar.freebusy
The events your agents bookCreate, move and cancel the Meetings your agents book, with the invite and the video linkhttps://www.googleapis.com/auth/calendar.events
ToDo this
PauseIntegration.pause stops every call through Google at once and keeps the token; Integration.resume picks up from the same cursor.
ReconnectIntegration.reconnect returns a fresh connectUrl that lasts one hour, and keeps the Integration's id and cursor, so nothing imports twice.
DisconnectIntegration.revoke revokes the token with Google; every record it brought in stays in your records.

What your agents do

AskVerbRuns throughPrice
Offer three times I am free in my reply.Meeting.bookYour accountFree
Move the call to Thursday, same time.Meeting.updateYour accountFree
Book the time they picked and send the invite with a video link.Meeting.bookYour accountFree
Mark yesterday’s call as a no-show and send the rebook note.Meeting.updateYour accountFree

Calls on your own account are free.

What it holds

NounThe account’s objectWhenWhich side leads
MeetingeventYour agent books a callYour records
MeetingeventThe buyer moves or declines the invite in their own calendarThe account

Events and webhooks

DirectionEvent
EmitsMeeting.booked, Meeting.updated
Hears events.watchBecomes Meeting.updated

Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed (Events and webhooks).

Limits

WhatLimitCall
Free and busy timesRead live before every offer and never stored, so an offer is never stale by more than the minutes it takes to replyMeeting.book
Bookable hoursOnly inside the hours you set and never over a busy block on any calendar you connectedMeeting.book
One inviteEach Meeting sends one invite from your calendar; a move updates it, so the buyer never holds twoEvery call

Field map

Our fieldGoogle Calendar’s fieldNotesCalls
Meeting.atevent.start.dateTime and event.end.dateTimeEach with its timeZoneMeeting.book
Meeting.contactevent.attendees[].emailNone.Meeting.book
Meeting.agendaevent.descriptionNone.Meeting.book
Meeting.linkevent.conferenceData.createRequestAdds a video link to the inviteMeeting.book

What try does here

Reads your free and busy times for real, picks the slot, and returns the invite it would send; nothing is written to your calendar.

How long a connection lasts

A connection lasts until you revoke it in your Google Account; Google also ends a grant left unused for six months, and every call your agents make counts as use.

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

Used by

Reference

4 calls, each with its path and price
CallPathPrice
Meeting.bookPOST /meetings/bookFree
Meeting.updatePOST /meetings/updateFree
Meeting.bookPOST /meetings/bookFree
Meeting.updatePOST /meetings/updateFree

Contents