{"schema_version":"1.0","provider":{"name":"Grow by Webel","url":"https://grow.webel.ai","docs":"https://grow.webel.ai/docs/agent"},"auth":{"mechanism":"bearer_token","token_format":"webel_agt_<43-char-urlsafe>","header":"Authorization: Bearer <token>","note":"Tokens are minted by the founder via the Grow app and shipped to you out-of-band (email signature, calendar invite metadata). Each token is scoped to a single attendee identity and a fixed scope set."},"scopes":[{"name":"scheduling.read","description":"Call propose_meeting to see ranked time slots."},{"name":"scheduling.write","description":"Call book_meeting to atomically reserve a slot."}],"verbs":[{"name":"propose_meeting","url":"/api/agent/v1/propose_meeting","method":"POST","scope":"scheduling.read","rate_limit":"60/minute","input_schema":{"description":"Optional fields let the counterparty influence ranking without\nrequiring guesswork on the founder's side.","properties":{"attendee_email":{"anyOf":[{"format":"email","type":"string"},{"type":"null"}],"default":null,"title":"Attendee Email"},"attendee_name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"title":"Attendee Name"},"purpose":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"title":"Purpose"},"days_window":{"default":14,"maximum":60,"minimum":1,"title":"Days Window","type":"integer"},"preferred_part_of_day":{"default":"either","title":"Preferred Part Of Day","type":"string"}},"title":"ProposeMeetingRequest","type":"object"},"output_schema":{"$defs":{"ExistingBookingJson":{"properties":{"booking_id":{"title":"Booking Id","type":"string"},"scheduled_for_iso":{"title":"Scheduled For Iso","type":"string"},"duration_minutes":{"title":"Duration Minutes","type":"integer"}},"required":["booking_id","scheduled_for_iso","duration_minutes"],"title":"ExistingBookingJson","type":"object"},"ProposedSlotJson":{"properties":{"start_iso":{"title":"Start Iso","type":"string"},"duration_minutes":{"title":"Duration Minutes","type":"integer"},"rank":{"title":"Rank","type":"integer"},"why":{"title":"Why","type":"string"}},"required":["start_iso","duration_minutes","rank","why"],"title":"ProposedSlotJson","type":"object"},"PublicInvestorContextJson":{"description":"A2A-safe redacted view of the founder's context for an attendee.\n\nDeliberately omits ``engagement_score``, ``events_count``,\n``last_engagement_at``, ``days_since_last_touch``, ``deal_id``,\n``deal_stage``, ``commitment_status``, and ``identity_id`` — those\nare internal CRM signals the founder uses for ranking, and they\nmust not leak to the counterparty's agent (who would otherwise\nlearn \"Chris's deal with us is at term_sheet stage\" or \"Chris has\ntalked to us 12 times in 30 days\" — competitive intel a third\nparty shouldn't have).\n\nThe fields we DO surface (``display_name``, ``primary_email``,\n``firm_name``) are things the counterparty already knows about\nthemselves — they're echoes, not disclosures. ``existing_bookings``\nis filtered to the token's own bookings before we even build this\npayload (handled in the propose_meeting handler).","properties":{"display_name":{"title":"Display Name","type":"string"},"primary_email":{"title":"Primary Email","type":"string"},"firm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firm Name"},"existing_bookings":{"anyOf":[{"items":{"$ref":"#/$defs/ExistingBookingJson"},"type":"array"},{"type":"null"}],"default":null,"title":"Existing Bookings"}},"required":["display_name","primary_email","firm_name"],"title":"PublicInvestorContextJson","type":"object"}},"properties":{"page_id":{"title":"Page Id","type":"string"},"page_title":{"title":"Page Title","type":"string"},"page_timezone":{"title":"Page Timezone","type":"string"},"investor":{"$ref":"#/$defs/PublicInvestorContextJson"},"slots":{"items":{"$ref":"#/$defs/ProposedSlotJson"},"title":"Slots","type":"array"},"rationale":{"title":"Rationale","type":"string"}},"required":["page_id","page_title","page_timezone","investor","slots","rationale"],"title":"ProposeMeetingResponse","type":"object"}},{"name":"book_meeting","url":"/api/agent/v1/book_meeting","method":"POST","scope":"scheduling.write","rate_limit":"20/minute","input_schema":{"properties":{"slot_iso":{"title":"Slot Iso","type":"string"},"attendee_timezone":{"maxLength":64,"minLength":1,"title":"Attendee Timezone","type":"string"},"purpose":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"title":"Purpose"},"attendee_name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"title":"Attendee Name"}},"required":["slot_iso","attendee_timezone"],"title":"BookMeetingRequest","type":"object"},"output_schema":{"properties":{"booking_id":{"title":"Booking Id","type":"string"},"scheduled_for_iso":{"title":"Scheduled For Iso","type":"string"},"duration_minutes":{"title":"Duration Minutes","type":"integer"},"attendee_email":{"title":"Attendee Email","type":"string"},"attendee_name":{"title":"Attendee Name","type":"string"},"attendee_timezone":{"title":"Attendee Timezone","type":"string"},"public_url":{"title":"Public Url","type":"string"},"conference_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conference Url"},"confirmation_message":{"title":"Confirmation Message","type":"string"}},"required":["booking_id","scheduled_for_iso","duration_minutes","attendee_email","attendee_name","attendee_timezone","public_url","conference_url","confirmation_message"],"title":"BookMeetingResponse","type":"object"}},{"name":"cancel_meeting","url":"/api/agent/v1/cancel_meeting","method":"POST","scope":"scheduling.write","rate_limit":"20/minute","input_schema":{"properties":{"booking_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Booking Id"},"reason":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"title":"Reason"}},"title":"CancelMeetingRequest","type":"object"},"output_schema":{"properties":{"booking_id":{"title":"Booking Id","type":"string"},"cancelled_at_iso":{"title":"Cancelled At Iso","type":"string"},"attendee_email":{"title":"Attendee Email","type":"string"},"cancellation_message":{"title":"Cancellation Message","type":"string"}},"required":["booking_id","cancelled_at_iso","attendee_email","cancellation_message"],"title":"CancelMeetingResponse","type":"object"},"note":"Token's attendee_email must match the booking's attendee_email — defense against a leaked token being used to cancel someone else's meeting."},{"name":"reschedule_meeting","url":"/api/agent/v1/reschedule_meeting","method":"POST","scope":"scheduling.write","rate_limit":"20/minute","input_schema":{"properties":{"booking_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Booking Id"},"new_slot_iso":{"title":"New Slot Iso","type":"string"},"new_attendee_timezone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"title":"New Attendee Timezone"},"reason":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"title":"Reason"}},"required":["new_slot_iso"],"title":"RescheduleMeetingRequest","type":"object"},"output_schema":{"properties":{"old_booking_id":{"title":"Old Booking Id","type":"string"},"new_booking_id":{"title":"New Booking Id","type":"string"},"old_scheduled_for_iso":{"title":"Old Scheduled For Iso","type":"string"},"new_scheduled_for_iso":{"title":"New Scheduled For Iso","type":"string"},"duration_minutes":{"title":"Duration Minutes","type":"integer"},"attendee_email":{"title":"Attendee Email","type":"string"},"attendee_name":{"title":"Attendee Name","type":"string"},"attendee_timezone":{"title":"Attendee Timezone","type":"string"},"public_url":{"title":"Public Url","type":"string"},"conference_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conference Url"},"reschedule_message":{"title":"Reschedule Message","type":"string"}},"required":["old_booking_id","new_booking_id","old_scheduled_for_iso","new_scheduled_for_iso","duration_minutes","attendee_email","attendee_name","attendee_timezone","public_url","conference_url","reschedule_message"],"title":"RescheduleMeetingResponse","type":"object"},"note":"Atomic cancel-and-rebook. If the new slot is invalid (past, taken, beyond window) the original booking is preserved and the verb returns 409."}],"future_transports":[{"name":"mcp","status":"planned","note":"Same verbs will be available over MCP SSE at /mcp/sse in a subsequent release."}]}