@graph8/sdk 0.251.0 → 0.260.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/dist/cli.js +216 -0
- package/dist/index.d.mts +104 -7
- package/dist/index.d.ts +104 -7
- package/dist/index.js +44 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +44 -3
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +102 -7
- package/dist/react.d.ts +102 -7
- package/dist/react.js +62 -11
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +53 -12
- package/dist/react.mjs.map +1 -1
- package/dist/types/README.md +7 -0
- package/dist/types/agency.d.ts +20 -0
- package/dist/types/agentSetup.d.ts +57 -0
- package/dist/types/api.d.ts +127 -0
- package/dist/types/appClient.d.ts +99 -0
- package/dist/types/appPlatform.d.ts +269 -0
- package/dist/types/appTokens.d.ts +125 -0
- package/dist/types/apps.d.ts +130 -0
- package/dist/types/audiences.d.ts +88 -0
- package/dist/types/calendar.d.ts +55 -0
- package/dist/types/campaigns.d.ts +61 -0
- package/dist/types/chat.d.ts +35 -0
- package/dist/types/cli.d.ts +14 -0
- package/dist/types/companies.d.ts +123 -0
- package/dist/types/contacts.d.ts +200 -0
- package/dist/types/copilot.d.ts +31 -0
- package/dist/types/core.d.ts +1052 -0
- package/dist/types/deals.d.ts +215 -0
- package/dist/types/enrich.d.ts +51 -0
- package/dist/types/fields.d.ts +84 -0
- package/dist/types/forms.d.ts +16 -0
- package/dist/types/http.d.ts +141 -0
- package/dist/types/inbox.d.ts +123 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/intent.d.ts +196 -0
- package/dist/types/lists.d.ts +44 -0
- package/dist/types/mailboxes.d.ts +240 -0
- package/dist/types/marketplace.d.ts +62 -0
- package/dist/types/meetings.d.ts +70 -0
- package/dist/types/newsletter.d.ts +212 -0
- package/dist/types/notes.d.ts +57 -0
- package/dist/types/objects.d.ts +281 -0
- package/dist/types/pipelines.d.ts +135 -0
- package/dist/types/quotes.d.ts +143 -0
- package/dist/types/react.d.ts +978 -0
- package/dist/types/search.d.ts +99 -0
- package/dist/types/sequences.d.ts +255 -0
- package/dist/types/signals.d.ts +28 -0
- package/dist/types/skills.d.ts +176 -0
- package/dist/types/snippet.d.ts +24 -0
- package/dist/types/studio.d.ts +161 -0
- package/dist/types/tasks.d.ts +101 -0
- package/dist/types/types.d.ts +45 -0
- package/dist/types/utils.d.ts +21 -0
- package/dist/types/version.d.ts +10 -0
- package/dist/types/visitors.d.ts +29 -0
- package/dist/types/voice.d.ts +304 -0
- package/dist/types/webhooks.d.ts +71 -0
- package/dist/types/workflows.d.ts +229 -0
- package/docs/agents.md +748 -0
- package/docs/api/README.md +165 -0
- package/docs/api/accounts.d.ts +396 -0
- package/docs/api/accounts.md +644 -0
- package/docs/api/adCampaigns.d.ts +707 -0
- package/docs/api/adCampaigns.md +1091 -0
- package/docs/api/adCreatives.d.ts +996 -0
- package/docs/api/adCreatives.md +1708 -0
- package/docs/api/agency.d.ts +556 -0
- package/docs/api/agency.md +845 -0
- package/docs/api/agent.d.ts +330 -0
- package/docs/api/agent.md +514 -0
- package/docs/api/agents.d.ts +1622 -0
- package/docs/api/agents.md +2860 -0
- package/docs/api/aiInbox.d.ts +1984 -0
- package/docs/api/aiInbox.md +3490 -0
- package/docs/api/analytics.d.ts +1273 -0
- package/docs/api/analytics.md +2095 -0
- package/docs/api/apiKeys.d.ts +252 -0
- package/docs/api/apiKeys.md +318 -0
- package/docs/api/appDeployments.d.ts +236 -0
- package/docs/api/appDeployments.md +471 -0
- package/docs/api/appDomains.d.ts +171 -0
- package/docs/api/appDomains.md +281 -0
- package/docs/api/appLogs.d.ts +120 -0
- package/docs/api/appLogs.md +159 -0
- package/docs/api/appObjects.d.ts +415 -0
- package/docs/api/appObjects.md +568 -0
- package/docs/api/appPages.d.ts +557 -0
- package/docs/api/appPages.md +796 -0
- package/docs/api/appPlatformTokens.d.ts +123 -0
- package/docs/api/appPlatformTokens.md +172 -0
- package/docs/api/appointments.d.ts +2361 -0
- package/docs/api/appointments.md +3917 -0
- package/docs/api/apps.d.ts +822 -0
- package/docs/api/apps.md +1342 -0
- package/docs/api/assertUpsert.d.ts +286 -0
- package/docs/api/assertUpsert.md +370 -0
- package/docs/api/audienceSyncs.d.ts +259 -0
- package/docs/api/audienceSyncs.md +395 -0
- package/docs/api/brandKit.d.ts +686 -0
- package/docs/api/brandKit.md +1133 -0
- package/docs/api/bugReports.d.ts +181 -0
- package/docs/api/bugReports.md +268 -0
- package/docs/api/by-path.md +3260 -0
- package/docs/api/calendarInvites.d.ts +117 -0
- package/docs/api/calendarInvites.md +148 -0
- package/docs/api/campaignWorkflows.d.ts +152 -0
- package/docs/api/campaignWorkflows.md +200 -0
- package/docs/api/campaigns.d.ts +721 -0
- package/docs/api/campaigns.md +1236 -0
- package/docs/api/channels.d.ts +171 -0
- package/docs/api/channels.md +235 -0
- package/docs/api/cliCampaigns.d.ts +205 -0
- package/docs/api/cliCampaigns.md +256 -0
- package/docs/api/cliPipelines.d.ts +324 -0
- package/docs/api/cliPipelines.md +562 -0
- package/docs/api/clickHouse.d.ts +115 -0
- package/docs/api/clickHouse.md +138 -0
- package/docs/api/companies.d.ts +1636 -0
- package/docs/api/companies.md +2211 -0
- package/docs/api/companyIntelligence.d.ts +299 -0
- package/docs/api/companyIntelligence.md +488 -0
- package/docs/api/contacts.d.ts +2173 -0
- package/docs/api/contacts.md +3143 -0
- package/docs/api/content.d.ts +968 -0
- package/docs/api/content.md +1667 -0
- package/docs/api/contentGridSkills.d.ts +177 -0
- package/docs/api/contentGridSkills.md +271 -0
- package/docs/api/copilot.d.ts +1017 -0
- package/docs/api/copilot.md +1765 -0
- package/docs/api/crmSyncs.d.ts +215 -0
- package/docs/api/crmSyncs.md +301 -0
- package/docs/api/customerSuccess.d.ts +491 -0
- package/docs/api/customerSuccess.md +776 -0
- package/docs/api/deals.d.ts +1696 -0
- package/docs/api/deals.md +2432 -0
- package/docs/api/deliverability.d.ts +418 -0
- package/docs/api/deliverability.md +677 -0
- package/docs/api/desk.d.ts +1765 -0
- package/docs/api/desk.md +3007 -0
- package/docs/api/dialer.d.ts +1185 -0
- package/docs/api/dialer.md +2166 -0
- package/docs/api/dialerAnalytics.d.ts +187 -0
- package/docs/api/dialerAnalytics.md +257 -0
- package/docs/api/documents.d.ts +895 -0
- package/docs/api/documents.md +1440 -0
- package/docs/api/duplicates.d.ts +195 -0
- package/docs/api/duplicates.md +315 -0
- package/docs/api/eSign.d.ts +38 -0
- package/docs/api/eSign.md +54 -0
- package/docs/api/eSignature.d.ts +242 -0
- package/docs/api/eSignature.md +341 -0
- package/docs/api/enrichment.d.ts +3207 -0
- package/docs/api/enrichment.md +5225 -0
- package/docs/api/events.d.ts +115 -0
- package/docs/api/events.md +105 -0
- package/docs/api/fields.d.ts +482 -0
- package/docs/api/fields.md +566 -0
- package/docs/api/forms.d.ts +1012 -0
- package/docs/api/forms.md +1542 -0
- package/docs/api/gtmCampaigns.d.ts +662 -0
- package/docs/api/gtmCampaigns.md +1044 -0
- package/docs/api/gtmContext.d.ts +1187 -0
- package/docs/api/gtmContext.md +2112 -0
- package/docs/api/gtmDeliverability.d.ts +60 -0
- package/docs/api/gtmDeliverability.md +63 -0
- package/docs/api/gtmKnowledgeBase.d.ts +76 -0
- package/docs/api/gtmKnowledgeBase.md +91 -0
- package/docs/api/gtmLaunchHelpers.d.ts +123 -0
- package/docs/api/gtmLaunchHelpers.md +148 -0
- package/docs/api/gtmLibrary.d.ts +448 -0
- package/docs/api/gtmLibrary.md +780 -0
- package/docs/api/health.d.ts +39 -0
- package/docs/api/health.md +58 -0
- package/docs/api/imageLibrary.d.ts +341 -0
- package/docs/api/imageLibrary.md +569 -0
- package/docs/api/imports.d.ts +157 -0
- package/docs/api/imports.md +174 -0
- package/docs/api/inbox.d.ts +709 -0
- package/docs/api/inbox.md +1067 -0
- package/docs/api/install.d.ts +213 -0
- package/docs/api/install.md +317 -0
- package/docs/api/installedApps.d.ts +131 -0
- package/docs/api/installedApps.md +241 -0
- package/docs/api/integrationStatus.d.ts +142 -0
- package/docs/api/integrationStatus.md +205 -0
- package/docs/api/integrations.d.ts +2327 -0
- package/docs/api/integrations.md +3791 -0
- package/docs/api/intent.d.ts +482 -0
- package/docs/api/intent.md +858 -0
- package/docs/api/knowledge.d.ts +501 -0
- package/docs/api/knowledge.md +843 -0
- package/docs/api/knowledgeBase.d.ts +84 -0
- package/docs/api/knowledgeBase.md +96 -0
- package/docs/api/landingPages.d.ts +1411 -0
- package/docs/api/landingPages.md +2488 -0
- package/docs/api/leads.d.ts +133 -0
- package/docs/api/leads.md +180 -0
- package/docs/api/library.d.ts +217 -0
- package/docs/api/library.md +338 -0
- package/docs/api/linkedIn.d.ts +227 -0
- package/docs/api/linkedIn.md +289 -0
- package/docs/api/linkedInOutreach.d.ts +727 -0
- package/docs/api/linkedInOutreach.md +990 -0
- package/docs/api/lists.d.ts +1106 -0
- package/docs/api/lists.md +1609 -0
- package/docs/api/logs.d.ts +71 -0
- package/docs/api/logs.md +70 -0
- package/docs/api/mailboxes.d.ts +1050 -0
- package/docs/api/mailboxes.md +1690 -0
- package/docs/api/marketingIntelligence.d.ts +256 -0
- package/docs/api/marketingIntelligence.md +454 -0
- package/docs/api/marketplace.d.ts +3173 -0
- package/docs/api/marketplace.md +5953 -0
- package/docs/api/mcp.d.ts +69 -0
- package/docs/api/mcp.md +69 -0
- package/docs/api/me.d.ts +54 -0
- package/docs/api/me.md +56 -0
- package/docs/api/meetings.d.ts +539 -0
- package/docs/api/meetings.md +747 -0
- package/docs/api/newsletter.d.ts +1613 -0
- package/docs/api/newsletter.md +2746 -0
- package/docs/api/notes.d.ts +517 -0
- package/docs/api/notes.md +888 -0
- package/docs/api/notifications.d.ts +94 -0
- package/docs/api/notifications.md +105 -0
- package/docs/api/objects.d.ts +621 -0
- package/docs/api/objects.md +1098 -0
- package/docs/api/openSearch.d.ts +234 -0
- package/docs/api/openSearch.md +297 -0
- package/docs/api/ops.d.ts +299 -0
- package/docs/api/ops.md +339 -0
- package/docs/api/orgGovernance.d.ts +393 -0
- package/docs/api/orgGovernance.md +623 -0
- package/docs/api/orgVideos.d.ts +184 -0
- package/docs/api/orgVideos.md +252 -0
- package/docs/api/organizationSettings.d.ts +626 -0
- package/docs/api/organizationSettings.md +911 -0
- package/docs/api/phoneNumbers.d.ts +484 -0
- package/docs/api/phoneNumbers.md +777 -0
- package/docs/api/profile.d.ts +329 -0
- package/docs/api/profile.md +540 -0
- package/docs/api/programmaticPages.d.ts +400 -0
- package/docs/api/programmaticPages.md +626 -0
- package/docs/api/providerDomains.d.ts +866 -0
- package/docs/api/providerDomains.md +1446 -0
- package/docs/api/providerUsage.d.ts +129 -0
- package/docs/api/providerUsage.md +186 -0
- package/docs/api/public.d.ts +69 -0
- package/docs/api/public.md +78 -0
- package/docs/api/publicCopilot.d.ts +67 -0
- package/docs/api/publicCopilot.md +80 -0
- package/docs/api/publicSignals.d.ts +66 -0
- package/docs/api/publicSignals.md +71 -0
- package/docs/api/publicVisitors.d.ts +97 -0
- package/docs/api/publicVisitors.md +118 -0
- package/docs/api/quotes.d.ts +1564 -0
- package/docs/api/quotes.md +2553 -0
- package/docs/api/radar.d.ts +808 -0
- package/docs/api/radar.md +1431 -0
- package/docs/api/radarReports.d.ts +208 -0
- package/docs/api/radarReports.md +306 -0
- package/docs/api/recordRoles.d.ts +143 -0
- package/docs/api/recordRoles.md +175 -0
- package/docs/api/repos.d.ts +146 -0
- package/docs/api/repos.md +211 -0
- package/docs/api/research.d.ts +295 -0
- package/docs/api/research.md +534 -0
- package/docs/api/revenue.d.ts +402 -0
- package/docs/api/revenue.md +608 -0
- package/docs/api/revenueAnalytics.d.ts +147 -0
- package/docs/api/revenueAnalytics.md +212 -0
- package/docs/api/revenueLifecycle.d.ts +207 -0
- package/docs/api/revenueLifecycle.md +274 -0
- package/docs/api/revenueRecords.d.ts +372 -0
- package/docs/api/revenueRecords.md +563 -0
- package/docs/api/roles.d.ts +431 -0
- package/docs/api/roles.md +812 -0
- package/docs/api/salesCoach.d.ts +877 -0
- package/docs/api/salesCoach.md +1540 -0
- package/docs/api/sandbox.d.ts +210 -0
- package/docs/api/sandbox.md +380 -0
- package/docs/api/scans.d.ts +104 -0
- package/docs/api/scans.md +136 -0
- package/docs/api/scheduleBuy.d.ts +293 -0
- package/docs/api/scheduleBuy.md +431 -0
- package/docs/api/scraping.d.ts +266 -0
- package/docs/api/scraping.md +383 -0
- package/docs/api/sdrAnalytics.d.ts +138 -0
- package/docs/api/sdrAnalytics.md +246 -0
- package/docs/api/search.d.ts +598 -0
- package/docs/api/search.md +866 -0
- package/docs/api/seo.d.ts +447 -0
- package/docs/api/seo.md +660 -0
- package/docs/api/sequenceLifecycle.d.ts +439 -0
- package/docs/api/sequenceLifecycle.md +513 -0
- package/docs/api/sequences.d.ts +1936 -0
- package/docs/api/sequences.md +3232 -0
- package/docs/api/settings.d.ts +448 -0
- package/docs/api/settings.md +731 -0
- package/docs/api/signals.d.ts +1441 -0
- package/docs/api/signals.md +2526 -0
- package/docs/api/signatures.d.ts +719 -0
- package/docs/api/signatures.md +1247 -0
- package/docs/api/skills.d.ts +230 -0
- package/docs/api/skills.md +466 -0
- package/docs/api/snippet.d.ts +85 -0
- package/docs/api/snippet.md +106 -0
- package/docs/api/socialPublishing.d.ts +824 -0
- package/docs/api/socialPublishing.md +1245 -0
- package/docs/api/studioDocuments.d.ts +244 -0
- package/docs/api/studioDocuments.md +348 -0
- package/docs/api/support.d.ts +90 -0
- package/docs/api/support.md +76 -0
- package/docs/api/suppressions.d.ts +241 -0
- package/docs/api/suppressions.md +343 -0
- package/docs/api/surveys.d.ts +847 -0
- package/docs/api/surveys.md +1223 -0
- package/docs/api/tasks.d.ts +813 -0
- package/docs/api/tasks.md +1344 -0
- package/docs/api/teamMembers.d.ts +668 -0
- package/docs/api/teamMembers.md +1040 -0
- package/docs/api/teams.d.ts +784 -0
- package/docs/api/teams.md +1395 -0
- package/docs/api/usage.d.ts +277 -0
- package/docs/api/usage.md +389 -0
- package/docs/api/visitors.d.ts +690 -0
- package/docs/api/visitors.md +1075 -0
- package/docs/api/voice.d.ts +4661 -0
- package/docs/api/voice.md +7905 -0
- package/docs/api/webAnalytics.d.ts +964 -0
- package/docs/api/webAnalytics.md +1452 -0
- package/docs/api/webChat.d.ts +1704 -0
- package/docs/api/webChat.md +2048 -0
- package/docs/api/webhooks.d.ts +251 -0
- package/docs/api/webhooks.md +386 -0
- package/docs/api/websiteEditor.d.ts +324 -0
- package/docs/api/websiteEditor.md +517 -0
- package/docs/api/work.d.ts +2298 -0
- package/docs/api/work.md +3096 -0
- package/docs/api/workbench.d.ts +2962 -0
- package/docs/api/workbench.md +4884 -0
- package/docs/api/workflows.d.ts +1218 -0
- package/docs/api/workflows.md +2302 -0
- package/docs/sdk-clients.md +4339 -0
- package/package.json +10 -3
|
@@ -0,0 +1,3917 @@
|
|
|
1
|
+
<!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
|
|
2
|
+
|
|
3
|
+
# `g8.api.appointments`: Appointments
|
|
4
|
+
|
|
5
|
+
92 operations (31 read, 27 write, 16 destructive, 18 external).
|
|
6
|
+
|
|
7
|
+
No hand-written client covers this area. Call it through `g8.api.appointments.*` as shown below, or by operationId with `g8.api.call(operationId, input)`.
|
|
8
|
+
|
|
9
|
+
Every example below assumes this setup (server-side, API key):
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { g8 } from "@graph8/sdk";
|
|
13
|
+
|
|
14
|
+
g8.init({ apiKey: process.env.G8_API_KEY! });
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Example values are placeholders that match each field's type. Only required fields are shown. Every example is type-checked against the SDK in CI.
|
|
18
|
+
|
|
19
|
+
Exact TypeScript types for every operation on this page, and every schema they use: [appointments.d.ts](appointments.d.ts).
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
| Call | HTTP | Tier | Scope | Summary |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| [`addBookingGuests`](#op-addbookingguests) | `POST /api/v1/appointments/bookings/{booking_uid}/guests` | external | `meetings:run` | Add guest attendees to a booking |
|
|
26
|
+
| [`addBookingNote`](#op-addbookingnote) | `POST /api/v1/appointments/bookings/{booking_uid}/notes` | external | `meetings:run` | Add an internal note to a booking |
|
|
27
|
+
| [`addEventTypeHost`](#op-addeventtypehost) | `POST /api/v1/appointments/event-types/{event_type_id}/hosts` | write | `meetings:write` | Add Event Type Host |
|
|
28
|
+
| [`assignAllMembers`](#op-assignallmembers) | `POST /api/v1/appointments/event-types/{event_type_id}/members/all` | write | `meetings:write` | Assign All Members |
|
|
29
|
+
| [`assignManagedMember`](#op-assignmanagedmember) | `POST /api/v1/appointments/event-types/{event_type_id}/members` | write | `meetings:write` | Assign Managed Member |
|
|
30
|
+
| [`cancelBooking`](#op-cancelbooking) | `POST /api/v1/appointments/bookings/{booking_uid}/cancel` | destructive | `meetings:delete` | Cancel a booking and notify both parties |
|
|
31
|
+
| [`clearEventTypeDestinationCalendar`](#op-cleareventtypedestinationcalendar) | `DELETE /api/v1/appointments/event-types/{event_type_id}/destination-calendar` | destructive | `meetings:delete` | Clear Event Type Destination Calendar |
|
|
32
|
+
| [`confirmBooking`](#op-confirmbooking) | `POST /api/v1/appointments/bookings/{booking_uid}/confirm` | external | `meetings:run` | Confirm or reject a pending booking |
|
|
33
|
+
| [`connectConferencing`](#op-connectconferencing) | `POST /api/v1/appointments/conferencing/connect/{provider}` | external | `meetings:run` | Connect a conferencing provider (link-based / no-OAuth only) |
|
|
34
|
+
| [`createBooking`](#op-createbooking) | `POST /api/v1/appointments/bookings` | external | `meetings:run` | Create a booking (charges credits + sends notifications) |
|
|
35
|
+
| [`createEventType`](#op-createeventtype) | `POST /api/v1/appointments/event-types` | write | `meetings:write` | Create a bookable event type |
|
|
36
|
+
| [`createEventTypeHostGroup`](#op-createeventtypehostgroup) | `POST /api/v1/appointments/event-types/{event_type_id}/host-groups` | write | `meetings:write` | Create Event Type Host Group |
|
|
37
|
+
| [`createOoo`](#op-createooo) | `POST /api/v1/appointments/out-of-office` | write | `meetings:write` | Create an out-of-office entry |
|
|
38
|
+
| [`createRoutingForm`](#op-createroutingform) | `POST /api/v1/appointments/routing-forms` | write | `meetings:write` | Create a routing form |
|
|
39
|
+
| [`createSavedFilter`](#op-createsavedfilter) | `POST /api/v1/appointments/saved-filters` | write | `meetings:write` | Create Saved Filter |
|
|
40
|
+
| [`createSchedule`](#op-createschedule) | `POST /api/v1/appointments/schedules` | write | `meetings:write` | Create an availability schedule |
|
|
41
|
+
| [`createWorkflow`](#op-createworkflow) | `POST /api/v1/appointments/workflows` | external | `meetings:run` | Create a workflow |
|
|
42
|
+
| [`deleteEventType`](#op-deleteeventtype) | `DELETE /api/v1/appointments/event-types/{event_type_id}` | destructive | `meetings:delete` | Delete an event type |
|
|
43
|
+
| [`deleteEventTypeHostGroup`](#op-deleteeventtypehostgroup) | `DELETE /api/v1/appointments/event-types/{event_type_id}/host-groups/{group_id}` | destructive | `meetings:delete` | Delete Event Type Host Group |
|
|
44
|
+
| [`deleteOoo`](#op-deleteooo) | `DELETE /api/v1/appointments/out-of-office/{ooo_uuid}` | destructive | `meetings:delete` | Delete an out-of-office entry |
|
|
45
|
+
| [`deleteRoutingForm`](#op-deleteroutingform) | `DELETE /api/v1/appointments/routing-forms/{form_id}` | destructive | `meetings:delete` | Delete a routing form (cascades fields and routes) |
|
|
46
|
+
| [`deleteSavedFilter`](#op-deletesavedfilter) | `DELETE /api/v1/appointments/saved-filters/{filter_id}` | destructive | `meetings:delete` | Delete Saved Filter |
|
|
47
|
+
| [`deleteSchedule`](#op-deleteschedule) | `DELETE /api/v1/appointments/schedules/{schedule_id}` | destructive | `meetings:delete` | Delete a schedule |
|
|
48
|
+
| [`deleteWorkflow`](#op-deleteworkflow) | `DELETE /api/v1/appointments/workflows/{workflow_id}` | destructive | `meetings:delete` | Delete a workflow and cancel pending reminders |
|
|
49
|
+
| [`deselectCalendar`](#op-deselectcalendar) | `DELETE /api/v1/appointments/calendars/selected` | destructive | `meetings:delete` | Deselect a sub-calendar from conflict checking |
|
|
50
|
+
| [`disconnectCalendar`](#op-disconnectcalendar) | `DELETE /api/v1/appointments/calendars/{credential_id}` | destructive | `meetings:delete` | Disconnect a calendar account |
|
|
51
|
+
| [`disconnectConferencing`](#op-disconnectconferencing) | `DELETE /api/v1/appointments/conferencing/{provider}/disconnect` | destructive | `meetings:delete` | Disconnect a conferencing provider |
|
|
52
|
+
| [`duplicateEventType`](#op-duplicateeventtype) | `POST /api/v1/appointments/event-types/{event_type_id}/duplicate` | write | `meetings:write` | Duplicate an event type (with a '-copy' slug) |
|
|
53
|
+
| [`duplicateRoutingForm`](#op-duplicateroutingform) | `POST /api/v1/appointments/routing-forms/{form_id}/duplicate` | write | `meetings:write` | Duplicate a routing form (copy with all fields and routes) |
|
|
54
|
+
| [`exportBookingInsights`](#op-exportbookinginsights) | `GET /api/v1/appointments/bookings/insights/export` | read | `meetings:read` | Export Booking Insights |
|
|
55
|
+
| [`exportRoutingFormResponses`](#op-exportroutingformresponses) | `GET /api/v1/appointments/routing-forms/{form_id}/responses/export` | read | `meetings:read` | Export Routing Form Responses |
|
|
56
|
+
| [`getAvailability`](#op-getavailability) | `GET /api/v1/appointments/schedules/{schedule_id}/availability` | read | `meetings:read` | Get availability rules and overrides for a schedule |
|
|
57
|
+
| [`getAvailableSlots`](#op-getavailableslots) | `GET /api/v1/appointments/slots` | read | `meetings:read` | Get Available Slots |
|
|
58
|
+
| [`getBooking`](#op-getbooking) | `GET /api/v1/appointments/bookings/{booking_uid}` | read | `meetings:read` | Get a single booking by UID |
|
|
59
|
+
| [`getBookingInsights`](#op-getbookinginsights) | `GET /api/v1/appointments/bookings/insights` | read | `meetings:read` | Get aggregated booking insights |
|
|
60
|
+
| [`getDefaultConferencing`](#op-getdefaultconferencing) | `GET /api/v1/appointments/conferencing/default` | read | `meetings:read` | Get the current default conferencing provider |
|
|
61
|
+
| [`getDestinationCalendar`](#op-getdestinationcalendar) | `GET /api/v1/appointments/calendars/destination` | read | `meetings:read` | Get the destination calendar (with event-type fallback) |
|
|
62
|
+
| [`getEmbedConfig`](#op-getembedconfig) | `GET /api/v1/appointments/event-types/{event_type_id}/embed` | read | `meetings:read` | Get Embed Config |
|
|
63
|
+
| [`getEventType`](#op-geteventtype) | `GET /api/v1/appointments/event-types/{event_type_id}` | read | `meetings:read` | Get full detail for one bookable event type |
|
|
64
|
+
| [`getEventTypeDestinationCalendar`](#op-geteventtypedestinationcalendar) | `GET /api/v1/appointments/event-types/{event_type_id}/destination-calendar` | read | `meetings:read` | Get Event Type Destination Calendar |
|
|
65
|
+
| [`getEventTypeSelectedCalendars`](#op-geteventtypeselectedcalendars) | `GET /api/v1/appointments/event-types/{event_type_id}/selected-calendars` | read | `meetings:read` | Get Event Type Selected Calendars |
|
|
66
|
+
| [`getOrgSettings`](#op-getorgsettings) | `GET /api/v1/appointments/org-settings` | read | `meetings:read` | Get Org Settings |
|
|
67
|
+
| [`getRoutingForm`](#op-getroutingform) | `GET /api/v1/appointments/routing-forms/{form_id}` | read | `meetings:read` | Get a single routing form |
|
|
68
|
+
| [`getSchedule`](#op-getschedule) | `GET /api/v1/appointments/schedules/{schedule_id}` | read | `meetings:read` | Get a schedule with availability and linked event types |
|
|
69
|
+
| [`getScheduleProfile`](#op-getscheduleprofile) | `GET /api/v1/appointments/profile` | read | `meetings:read` | Get Schedule Profile |
|
|
70
|
+
| [`getWorkflow`](#op-getworkflow) | `GET /api/v1/appointments/workflows/{workflow_id}` | read | `meetings:read` | Get a single workflow |
|
|
71
|
+
| [`importMeeting`](#op-importmeeting) | `POST /api/v1/appointments/bookings/import` | external | `meetings:run` | Import Meeting |
|
|
72
|
+
| [`listBookings`](#op-listbookings) | `GET /api/v1/appointments/bookings` | read | `meetings:read` | List the caller's bookings (paginated) |
|
|
73
|
+
| [`listCalendarEvents`](#op-listcalendarevents) | `GET /api/v1/appointments/calendars/events` | read | `meetings:read` | List Calendar Events |
|
|
74
|
+
| [`listCalendars`](#op-listcalendars) | `GET /api/v1/appointments/calendars` | read | `meetings:read` | List connected calendar accounts |
|
|
75
|
+
| [`listConferencing`](#op-listconferencing) | `GET /api/v1/appointments/conferencing` | read | `meetings:read` | List connected conferencing providers |
|
|
76
|
+
| [`listEventTypeHostGroups`](#op-listeventtypehostgroups) | `GET /api/v1/appointments/event-types/{event_type_id}/host-groups` | read | `meetings:read` | List Event Type Host Groups |
|
|
77
|
+
| [`listMembership`](#op-listmembership) | `GET /api/v1/appointments/membership` | read | `meetings:read` | List Membership |
|
|
78
|
+
| [`listOoo`](#op-listooo) | `GET /api/v1/appointments/out-of-office` | read | `meetings:read` | List out-of-office entries for the calling user |
|
|
79
|
+
| [`listRoutingFormResponses`](#op-listroutingformresponses) | `GET /api/v1/appointments/routing-forms/{form_id}/responses` | read | `meetings:read` | List captured responses for a routing form (paginated) |
|
|
80
|
+
| [`listRoutingForms`](#op-listroutingforms) | `GET /api/v1/appointments/routing-forms` | read | `meetings:read` | List routing forms (includes response_count) |
|
|
81
|
+
| [`listSavedFilters`](#op-listsavedfilters) | `GET /api/v1/appointments/saved-filters` | read | `meetings:read` | List Saved Filters |
|
|
82
|
+
| [`listSchedules`](#op-listschedules) | `GET /api/v1/appointments/schedules` | read | `meetings:read` | List the caller's availability schedules |
|
|
83
|
+
| [`listSequencesForPicker`](#op-listsequencesforpicker) | `GET /api/v1/appointments/bookings/sequences-picker` | read | `meetings:read` | List Sequences For Picker |
|
|
84
|
+
| [`listTeamAvailability`](#op-listteamavailability) | `GET /api/v1/appointments/availability/team` | read | `meetings:read` | List Team Availability |
|
|
85
|
+
| [`listWorkflows`](#op-listworkflows) | `GET /api/v1/appointments/workflows` | read | `meetings:read` | List all workflows |
|
|
86
|
+
| [`markAbsent`](#op-markabsent) | `POST /api/v1/appointments/bookings/{booking_uid}/mark-absent` | external | `meetings:run` | Mark host or attendees as no-show |
|
|
87
|
+
| [`releaseSlot`](#op-releaseslot) | `DELETE /api/v1/appointments/slots/reserve/{slot_uid}` | destructive | `meetings:delete` | Release Slot |
|
|
88
|
+
| [`removeEventTypeHost`](#op-removeeventtypehost) | `DELETE /api/v1/appointments/event-types/{event_type_id}/hosts/{host_user_id}` | destructive | `meetings:delete` | Remove Event Type Host |
|
|
89
|
+
| [`requestBookingReschedule`](#op-requestbookingreschedule) | `POST /api/v1/appointments/bookings/{booking_uid}/request-reschedule` | external | `meetings:run` | Send a reschedule-request email to the attendee (host action) |
|
|
90
|
+
| [`rescheduleBooking`](#op-reschedulebooking) | `POST /api/v1/appointments/bookings/{booking_uid}/reschedule` | external | `meetings:run` | Reschedule a booking to a new start time |
|
|
91
|
+
| [`reserveSlot`](#op-reserveslot) | `POST /api/v1/appointments/slots/reserve` | write | `meetings:write` | Reserve Slot |
|
|
92
|
+
| [`selectCalendar`](#op-selectcalendar) | `POST /api/v1/appointments/calendars/selected` | external | `meetings:run` | Select a sub-calendar for conflict checking |
|
|
93
|
+
| [`setDefaultConferencing`](#op-setdefaultconferencing) | `POST /api/v1/appointments/conferencing/{provider}/default` | external | `meetings:run` | Set the default conferencing provider |
|
|
94
|
+
| [`setDefaultSchedule`](#op-setdefaultschedule) | `POST /api/v1/appointments/schedules/{schedule_id}/set-default` | write | `meetings:write` | Set a schedule as the caller's default |
|
|
95
|
+
| [`setDestinationCalendar`](#op-setdestinationcalendar) | `PUT /api/v1/appointments/calendars/destination` | external | `meetings:run` | Set the destination calendar for new booking events |
|
|
96
|
+
| [`setEventTypeDestinationCalendar`](#op-seteventtypedestinationcalendar) | `PUT /api/v1/appointments/event-types/{event_type_id}/destination-calendar` | write | `meetings:write` | Set Event Type Destination Calendar |
|
|
97
|
+
| [`setEventTypeSelectedCalendars`](#op-seteventtypeselectedcalendars) | `PUT /api/v1/appointments/event-types/{event_type_id}/selected-calendars` | write | `meetings:write` | Set Event Type Selected Calendars |
|
|
98
|
+
| [`setLockedFields`](#op-setlockedfields) | `PUT /api/v1/appointments/event-types/{event_type_id}/locked-fields` | write | `meetings:write` | Set Locked Fields |
|
|
99
|
+
| [`setProviderLink`](#op-setproviderlink) | `PUT /api/v1/appointments/conferencing/{provider}/link` | external | `meetings:run` | Set or update a link-based conferencing provider's meeting URL |
|
|
100
|
+
| [`toggleWorkflow`](#op-toggleworkflow) | `POST /api/v1/appointments/workflows/{workflow_id}/toggle` | external | `meetings:run` | Activate or deactivate a workflow |
|
|
101
|
+
| [`unassignManagedMember`](#op-unassignmanagedmember) | `DELETE /api/v1/appointments/event-types/{event_type_id}/members/{user_id}` | destructive | `meetings:delete` | Unassign Managed Member |
|
|
102
|
+
| [`updateAvailability`](#op-updateavailability) | `PATCH /api/v1/appointments/schedules/{schedule_id}/availability` | write | `meetings:write` | Replace availability rules and/or date overrides for a schedule |
|
|
103
|
+
| [`updateBookingLocation`](#op-updatebookinglocation) | `PATCH /api/v1/appointments/bookings/{booking_uid}/location` | external | `meetings:run` | Update the meeting location and notify both parties |
|
|
104
|
+
| [`updateBookingSequence`](#op-updatebookingsequence) | `PATCH /api/v1/appointments/bookings/{booking_uid}/sequence` | external | `meetings:run` | Associate a booking with a sequence (or detach) |
|
|
105
|
+
| [`updateEmbedConfig`](#op-updateembedconfig) | `PATCH /api/v1/appointments/event-types/{event_type_id}/embed` | write | `meetings:write` | Update Embed Config |
|
|
106
|
+
| [`updateEventType`](#op-updateeventtype) | `PATCH /api/v1/appointments/event-types/{event_type_id}` | write | `meetings:write` | Update an event type (partial) |
|
|
107
|
+
| [`updateEventTypeHost`](#op-updateeventtypehost) | `PATCH /api/v1/appointments/event-types/{event_type_id}/hosts/{host_user_id}` | write | `meetings:write` | Update Event Type Host |
|
|
108
|
+
| [`updateEventTypeHostGroup`](#op-updateeventtypehostgroup) | `PATCH /api/v1/appointments/event-types/{event_type_id}/host-groups/{group_id}` | write | `meetings:write` | Update Event Type Host Group |
|
|
109
|
+
| [`updateMemberRole`](#op-updatememberrole) | `PATCH /api/v1/appointments/membership/by-user/{user_id}/role` | destructive | `meetings:delete` | Update Member Role |
|
|
110
|
+
| [`updateOoo`](#op-updateooo) | `PATCH /api/v1/appointments/out-of-office/{ooo_uuid}` | write | `meetings:write` | Update an out-of-office entry |
|
|
111
|
+
| [`updateOrgSettings`](#op-updateorgsettings) | `PATCH /api/v1/appointments/org-settings` | write | `meetings:write` | Update Org Settings |
|
|
112
|
+
| [`updateRoutingForm`](#op-updateroutingform) | `PATCH /api/v1/appointments/routing-forms/{form_id}` | write | `meetings:write` | Update a routing form (partial) |
|
|
113
|
+
| [`updateSavedFilter`](#op-updatesavedfilter) | `PUT /api/v1/appointments/saved-filters/{filter_id}` | write | `meetings:write` | Update Saved Filter |
|
|
114
|
+
| [`updateSchedule`](#op-updateschedule) | `PATCH /api/v1/appointments/schedules/{schedule_id}` | write | `meetings:write` | Update a schedule (partial) |
|
|
115
|
+
| [`updateScheduleProfile`](#op-updatescheduleprofile) | `PATCH /api/v1/appointments/profile` | write | `meetings:write` | Update Schedule Profile |
|
|
116
|
+
| [`updateWorkflow`](#op-updateworkflow) | `PATCH /api/v1/appointments/workflows/{workflow_id}` | external | `meetings:run` | Update a workflow (partial) |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
<a id="op-addbookingguests"></a>
|
|
121
|
+
|
|
122
|
+
### `g8.api.appointments.addBookingGuests(input)`
|
|
123
|
+
|
|
124
|
+
**Add guest attendees to a booking**
|
|
125
|
+
|
|
126
|
+
- HTTP: `POST /api/v1/appointments/bookings/{booking_uid}/guests`
|
|
127
|
+
- operationId: `add_booking_guests_appointments_bookings__booking_uid__guests_post` (also callable as `g8.api.call("add_booking_guests_appointments_bookings__booking_uid__guests_post", input)`)
|
|
128
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
129
|
+
- API-key scope: `meetings:run`
|
|
130
|
+
|
|
131
|
+
Invite additional guests (email addresses) to an existing booking.
|
|
132
|
+
|
|
133
|
+
Sends notification emails to each new guest and updates the booking's
|
|
134
|
+
attendee list. Backed by ``BookingsHandler.handle_add_guests``.
|
|
135
|
+
Raises 404 when the booking uid is not visible to the caller.
|
|
136
|
+
|
|
137
|
+
**Input**
|
|
138
|
+
|
|
139
|
+
| Field | Type | Required | Description |
|
|
140
|
+
|---|---|---|---|
|
|
141
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
142
|
+
| `body` | `AddGuestsRequest` | yes | Request body; fields below. |
|
|
143
|
+
|
|
144
|
+
Body fields (`AddGuestsRequest`):
|
|
145
|
+
|
|
146
|
+
| Field | Type | Required | Description |
|
|
147
|
+
|---|---|---|---|
|
|
148
|
+
| `body.guests` | `Array<string>` | yes | |
|
|
149
|
+
|
|
150
|
+
**Returns** `Record<string, unknown>`.
|
|
151
|
+
|
|
152
|
+
**Example**
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
156
|
+
const result = await g8.api.appointments.addBookingGuests({ path: { booking_uid: "example" }, body: { guests: ["example"] } });
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
<a id="op-addbookingnote"></a>
|
|
162
|
+
|
|
163
|
+
### `g8.api.appointments.addBookingNote(input)`
|
|
164
|
+
|
|
165
|
+
**Add an internal note to a booking**
|
|
166
|
+
|
|
167
|
+
- HTTP: `POST /api/v1/appointments/bookings/{booking_uid}/notes`
|
|
168
|
+
- operationId: `add_booking_note_appointments_bookings__booking_uid__notes_post` (also callable as `g8.api.call("add_booking_note_appointments_bookings__booking_uid__notes_post", input)`)
|
|
169
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
170
|
+
- API-key scope: `meetings:run`
|
|
171
|
+
|
|
172
|
+
Append an internal (host-only) note to a booking.
|
|
173
|
+
|
|
174
|
+
Notes are not visible to attendees; they appear in the booking detail
|
|
175
|
+
view for org members. Backed by ``BookingsHandler.handle_add_note``.
|
|
176
|
+
Raises 404 when the booking uid is not visible to the caller.
|
|
177
|
+
|
|
178
|
+
**Input**
|
|
179
|
+
|
|
180
|
+
| Field | Type | Required | Description |
|
|
181
|
+
|---|---|---|---|
|
|
182
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
183
|
+
| `body` | `AddNoteRequest` | yes | Request body; fields below. |
|
|
184
|
+
|
|
185
|
+
Body fields (`AddNoteRequest`):
|
|
186
|
+
|
|
187
|
+
| Field | Type | Required | Description |
|
|
188
|
+
|---|---|---|---|
|
|
189
|
+
| `body.text` | `string` | yes | |
|
|
190
|
+
|
|
191
|
+
**Returns** `Record<string, unknown>`.
|
|
192
|
+
|
|
193
|
+
**Example**
|
|
194
|
+
|
|
195
|
+
```ts
|
|
196
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
197
|
+
const result = await g8.api.appointments.addBookingNote({ path: { booking_uid: "example" }, body: { text: "example" } });
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
<a id="op-addeventtypehost"></a>
|
|
203
|
+
|
|
204
|
+
### `g8.api.appointments.addEventTypeHost(input)`
|
|
205
|
+
|
|
206
|
+
**Add Event Type Host**
|
|
207
|
+
|
|
208
|
+
- HTTP: `POST /api/v1/appointments/event-types/{event_type_id}/hosts`
|
|
209
|
+
- operationId: `add_event_type_host_appointments_event_types__event_type_id__hosts_post` (also callable as `g8.api.call("add_event_type_host_appointments_event_types__event_type_id__hosts_post", input)`)
|
|
210
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
211
|
+
- API-key scope: `meetings:write`
|
|
212
|
+
|
|
213
|
+
Add a host to an event type.
|
|
214
|
+
|
|
215
|
+
`is_fixed` is the round-robin distinction that matters: a FIXED host is on
|
|
216
|
+
every booking, a non-fixed host is one of the rotation. Getting it wrong
|
|
217
|
+
silently changes who gets booked, so it is declared rather than defaulted
|
|
218
|
+
into ambiguity.
|
|
219
|
+
|
|
220
|
+
**Input**
|
|
221
|
+
|
|
222
|
+
| Field | Type | Required | Description |
|
|
223
|
+
|---|---|---|---|
|
|
224
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
225
|
+
| `body` | `AppointmentHostCreateRequest` | yes | Request body; fields below. |
|
|
226
|
+
|
|
227
|
+
Body fields (`AppointmentHostCreateRequest`):
|
|
228
|
+
|
|
229
|
+
| Field | Type | Required | Description |
|
|
230
|
+
|---|---|---|---|
|
|
231
|
+
| `body.user_id` | `integer` | yes | User to add as a host. |
|
|
232
|
+
| `body.group_id` | `string \| null` | no | |
|
|
233
|
+
| `body.is_fixed` | `boolean` | no | True = on every booking; false = one of the round-robin rotation. default `false` |
|
|
234
|
+
| `body.priority` | `integer \| null` | no | |
|
|
235
|
+
| `body.schedule_id` | `integer \| null` | no | |
|
|
236
|
+
| `body.weight` | `integer \| null` | no | |
|
|
237
|
+
|
|
238
|
+
**Returns** `ApiResponse_AppointmentHost_`: the envelope `{ data: AppointmentHost, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
239
|
+
|
|
240
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
241
|
+
|
|
242
|
+
`AppointmentHost` fields:
|
|
243
|
+
|
|
244
|
+
| Field | Type | Required | Description |
|
|
245
|
+
|---|---|---|---|
|
|
246
|
+
| `avatar_url` | `string \| null` | no | |
|
|
247
|
+
| `email` | `string \| null` | no | |
|
|
248
|
+
| `event_type_id` | `integer \| null` | no | |
|
|
249
|
+
| `group_id` | `string \| null` | no | Host group, if partitioned. |
|
|
250
|
+
| `is_fixed` | `boolean \| null` | no | True = on EVERY booking. False = one of the round-robin rotation. This is the setting that decides who actually gets booked. |
|
|
251
|
+
| `name` | `string \| null` | no | |
|
|
252
|
+
| `priority` | `integer \| null` | no | Rotation priority. |
|
|
253
|
+
| `schedule_id` | `integer \| null` | no | Availability schedule this host is booked against. |
|
|
254
|
+
| `user_id` | `integer \| null` | no | |
|
|
255
|
+
| `weight` | `integer \| null` | no | Relative share of the rotation. |
|
|
256
|
+
|
|
257
|
+
**Example**
|
|
258
|
+
|
|
259
|
+
```ts
|
|
260
|
+
const result = await g8.api.appointments.addEventTypeHost({ path: { event_type_id: 123 }, body: { user_id: 123 } });
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
<a id="op-assignallmembers"></a>
|
|
266
|
+
|
|
267
|
+
### `g8.api.appointments.assignAllMembers(input)`
|
|
268
|
+
|
|
269
|
+
**Assign All Members**
|
|
270
|
+
|
|
271
|
+
- HTTP: `POST /api/v1/appointments/event-types/{event_type_id}/members/all`
|
|
272
|
+
- operationId: `assign_all_members_appointments_event_types__event_type_id__members_all_post` (also callable as `g8.api.call("assign_all_members_appointments_event_types__event_type_id__members_all_post", input)`)
|
|
273
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
274
|
+
- API-key scope: `meetings:write`
|
|
275
|
+
|
|
276
|
+
Give EVERY active member their own bookable copy of a managed template.
|
|
277
|
+
|
|
278
|
+
Idempotent - members who already have a copy are skipped.
|
|
279
|
+
`include_future_joiners` is a standing rule: leave it true and someone who
|
|
280
|
+
joins next month gets a copy without anyone running this again.
|
|
281
|
+
|
|
282
|
+
**Input**
|
|
283
|
+
|
|
284
|
+
| Field | Type | Required | Description |
|
|
285
|
+
|---|---|---|---|
|
|
286
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
287
|
+
| `body` | `BulkAssignMembersRequest` | no | Request body; fields below. |
|
|
288
|
+
|
|
289
|
+
Body fields (`BulkAssignMembersRequest`):
|
|
290
|
+
|
|
291
|
+
| Field | Type | Required | Description |
|
|
292
|
+
|---|---|---|---|
|
|
293
|
+
| `body.include_future_joiners` | `boolean` | no | When true, members who join the organisation LATER also get a copy automatically. A standing rule, not a one-off action. default `false` |
|
|
294
|
+
|
|
295
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
296
|
+
|
|
297
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
298
|
+
|
|
299
|
+
**Example**
|
|
300
|
+
|
|
301
|
+
```ts
|
|
302
|
+
const result = await g8.api.appointments.assignAllMembers({ path: { event_type_id: 123 } });
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
<a id="op-assignmanagedmember"></a>
|
|
308
|
+
|
|
309
|
+
### `g8.api.appointments.assignManagedMember(input)`
|
|
310
|
+
|
|
311
|
+
**Assign Managed Member**
|
|
312
|
+
|
|
313
|
+
- HTTP: `POST /api/v1/appointments/event-types/{event_type_id}/members`
|
|
314
|
+
- operationId: `assign_managed_member_appointments_event_types__event_type_id__members_post` (also callable as `g8.api.call("assign_managed_member_appointments_event_types__event_type_id__members_post", input)`)
|
|
315
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
316
|
+
- API-key scope: `meetings:write`
|
|
317
|
+
|
|
318
|
+
Give ONE member their own bookable copy of a managed template.
|
|
319
|
+
|
|
320
|
+
The template itself is not bookable - it distributes a child event type
|
|
321
|
+
per member, which is what that member's booking link points at.
|
|
322
|
+
|
|
323
|
+
**Input**
|
|
324
|
+
|
|
325
|
+
| Field | Type | Required | Description |
|
|
326
|
+
|---|---|---|---|
|
|
327
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
328
|
+
| `body` | `AssignManagedMemberRequest` | yes | Request body; fields below. |
|
|
329
|
+
|
|
330
|
+
Body fields (`AssignManagedMemberRequest`):
|
|
331
|
+
|
|
332
|
+
| Field | Type | Required | Description |
|
|
333
|
+
|---|---|---|---|
|
|
334
|
+
| `body.user_id` | `integer` | yes | The member's INTEGER scheduling user id - the `user_id` field of `GET /appointments/membership`. Not an email, not a PropelAuth id. min 1 |
|
|
335
|
+
|
|
336
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
337
|
+
|
|
338
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
339
|
+
|
|
340
|
+
**Example**
|
|
341
|
+
|
|
342
|
+
```ts
|
|
343
|
+
const result = await g8.api.appointments.assignManagedMember({ path: { event_type_id: 123 }, body: { user_id: 1 } });
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
<a id="op-cancelbooking"></a>
|
|
349
|
+
|
|
350
|
+
### `g8.api.appointments.cancelBooking(input)`
|
|
351
|
+
|
|
352
|
+
**Cancel a booking and notify both parties**
|
|
353
|
+
|
|
354
|
+
- HTTP: `POST /api/v1/appointments/bookings/{booking_uid}/cancel`
|
|
355
|
+
- operationId: `cancel_booking_appointments_bookings__booking_uid__cancel_post` (also callable as `g8.api.call("cancel_booking_appointments_bookings__booking_uid__cancel_post", input)`)
|
|
356
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
357
|
+
- API-key scope: `meetings:delete`
|
|
358
|
+
|
|
359
|
+
Cancel a booking. Reuses ``BookingsHandler.handle_cancel`` (sends the
|
|
360
|
+
cancellation emails, releases the slot, emits the EDA event). Body is
|
|
361
|
+
optional — omit it to cancel with no reason.
|
|
362
|
+
|
|
363
|
+
**Input**
|
|
364
|
+
|
|
365
|
+
| Field | Type | Required | Description |
|
|
366
|
+
|---|---|---|---|
|
|
367
|
+
| `path.booking_uid` | `string` | yes | |
|
|
368
|
+
| `body` | `CancelBookingRequest \| null` | no | Request body; fields below. |
|
|
369
|
+
|
|
370
|
+
Body fields:
|
|
371
|
+
|
|
372
|
+
| Field | Type | Required | Description |
|
|
373
|
+
|---|---|---|---|
|
|
374
|
+
| `body.cancel_subsequent` | `boolean` | no | default `false` |
|
|
375
|
+
| `body.cancellation_reason` | `string \| null` | no | |
|
|
376
|
+
|
|
377
|
+
**Returns** `Record<string, unknown>`.
|
|
378
|
+
|
|
379
|
+
**Example**
|
|
380
|
+
|
|
381
|
+
```ts
|
|
382
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
383
|
+
const result = await g8.api.appointments.cancelBooking({ path: { booking_uid: "example" } });
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
<a id="op-cleareventtypedestinationcalendar"></a>
|
|
389
|
+
|
|
390
|
+
### `g8.api.appointments.clearEventTypeDestinationCalendar(input)`
|
|
391
|
+
|
|
392
|
+
**Clear Event Type Destination Calendar**
|
|
393
|
+
|
|
394
|
+
- HTTP: `DELETE /api/v1/appointments/event-types/{event_type_id}/destination-calendar`
|
|
395
|
+
- operationId: `clear_event_type_destination_calendar_appointments_event_types__event_type_id__destination_calendar_delete` (also callable as `g8.api.call("clear_event_type_destination_calendar_appointments_event_types__event_type_id__destination_calendar_delete", input)`)
|
|
396
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
397
|
+
- API-key scope: `meetings:delete`
|
|
398
|
+
|
|
399
|
+
Drop the per-event-type override. The ACCOUNT default is untouched, so
|
|
400
|
+
bookings fall back to it rather than stopping.
|
|
401
|
+
|
|
402
|
+
**Input**
|
|
403
|
+
|
|
404
|
+
| Field | Type | Required | Description |
|
|
405
|
+
|---|---|---|---|
|
|
406
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
407
|
+
|
|
408
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
409
|
+
|
|
410
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
411
|
+
|
|
412
|
+
**Example**
|
|
413
|
+
|
|
414
|
+
```ts
|
|
415
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
416
|
+
const result = await g8.api.appointments.clearEventTypeDestinationCalendar({ path: { event_type_id: 123 } });
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
<a id="op-confirmbooking"></a>
|
|
422
|
+
|
|
423
|
+
### `g8.api.appointments.confirmBooking(input)`
|
|
424
|
+
|
|
425
|
+
**Confirm or reject a pending booking**
|
|
426
|
+
|
|
427
|
+
- HTTP: `POST /api/v1/appointments/bookings/{booking_uid}/confirm`
|
|
428
|
+
- operationId: `confirm_booking_appointments_bookings__booking_uid__confirm_post` (also callable as `g8.api.call("confirm_booking_appointments_bookings__booking_uid__confirm_post", input)`)
|
|
429
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
430
|
+
- API-key scope: `meetings:run`
|
|
431
|
+
|
|
432
|
+
Confirm or reject a booking that requires host approval.
|
|
433
|
+
|
|
434
|
+
When ``confirmed=True`` the booking moves from ``pending`` to
|
|
435
|
+
``accepted`` and confirmation emails are sent. When ``confirmed=False``
|
|
436
|
+
the booking is rejected and the attendee is notified with the optional
|
|
437
|
+
``reason``. Backed by ``BookingsHandler.handle_confirm``; raises 404
|
|
438
|
+
when the booking uid is not visible to the caller, 403 on permission.
|
|
439
|
+
|
|
440
|
+
**Input**
|
|
441
|
+
|
|
442
|
+
| Field | Type | Required | Description |
|
|
443
|
+
|---|---|---|---|
|
|
444
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
445
|
+
| `body` | `ConfirmBookingRequest` | yes | Request body; fields below. |
|
|
446
|
+
|
|
447
|
+
Body fields (`ConfirmBookingRequest`):
|
|
448
|
+
|
|
449
|
+
| Field | Type | Required | Description |
|
|
450
|
+
|---|---|---|---|
|
|
451
|
+
| `body.confirmed` | `boolean` | yes | |
|
|
452
|
+
| `body.reason` | `string \| null` | no | |
|
|
453
|
+
|
|
454
|
+
**Returns** `Record<string, unknown>`.
|
|
455
|
+
|
|
456
|
+
**Example**
|
|
457
|
+
|
|
458
|
+
```ts
|
|
459
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
460
|
+
const result = await g8.api.appointments.confirmBooking({ path: { booking_uid: "example" }, body: { confirmed: true } });
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
---
|
|
464
|
+
|
|
465
|
+
<a id="op-connectconferencing"></a>
|
|
466
|
+
|
|
467
|
+
### `g8.api.appointments.connectConferencing(input)`
|
|
468
|
+
|
|
469
|
+
**Connect a conferencing provider (link-based / no-OAuth only)**
|
|
470
|
+
|
|
471
|
+
- HTTP: `POST /api/v1/appointments/conferencing/connect/{provider}`
|
|
472
|
+
- operationId: `connect_conferencing_appointments_conferencing_connect__provider__post` (also callable as `g8.api.call("connect_conferencing_appointments_conferencing_connect__provider__post", input)`)
|
|
473
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
474
|
+
- API-key scope: `meetings:run`
|
|
475
|
+
|
|
476
|
+
Connect a conferencing provider that does not require a browser OAuth
|
|
477
|
+
flow. Supported providers: google_meet, roam, roam_auto, whereby, jitsi.
|
|
478
|
+
Zoom and office365_video (Teams) are excluded - they require a browser
|
|
479
|
+
OAuth redirect that cannot be completed via an API key.
|
|
480
|
+
|
|
481
|
+
google_meet: clears the google_meet_suppressed flag (requires an existing
|
|
482
|
+
google_calendar credential - no credential row is created for Meet itself).
|
|
483
|
+
|
|
484
|
+
roam, whereby, jitsi: creates a credential row; optional ``link`` is the
|
|
485
|
+
meeting URL validated against the provider's URL pattern.
|
|
486
|
+
|
|
487
|
+
roam_auto: creates a stub credential row (no OAuth tokens - the Roam Auto
|
|
488
|
+
integration requires a prior OAuth flow to be completed in the web app).
|
|
489
|
+
|
|
490
|
+
**Input**
|
|
491
|
+
|
|
492
|
+
| Field | Type | Required | Description |
|
|
493
|
+
|---|---|---|---|
|
|
494
|
+
| `path.provider` | `string` | yes | Provider: google_meet \| roam \| roam_auto \| whereby \| jitsi |
|
|
495
|
+
| `body` | `Body_connect_conferencing_appointments_conferencing_connect__provider__post` | no | Request body; fields below. |
|
|
496
|
+
|
|
497
|
+
Body fields (`Body_connect_conferencing_appointments_conferencing_connect__provider__post`):
|
|
498
|
+
|
|
499
|
+
| Field | Type | Required | Description |
|
|
500
|
+
|---|---|---|---|
|
|
501
|
+
| `body.link` | `string \| null` | no | |
|
|
502
|
+
|
|
503
|
+
**Returns** `Record<string, unknown>`.
|
|
504
|
+
|
|
505
|
+
**Example**
|
|
506
|
+
|
|
507
|
+
```ts
|
|
508
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
509
|
+
const result = await g8.api.appointments.connectConferencing({ path: { provider: "example" } });
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
<a id="op-createbooking"></a>
|
|
515
|
+
|
|
516
|
+
### `g8.api.appointments.createBooking(input)`
|
|
517
|
+
|
|
518
|
+
**Create a booking (charges credits + sends notifications)**
|
|
519
|
+
|
|
520
|
+
- HTTP: `POST /api/v1/appointments/bookings`
|
|
521
|
+
- operationId: `create_booking_appointments_bookings_post` (also callable as `g8.api.call("create_booking_appointments_bookings_post", input)`)
|
|
522
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
523
|
+
- API-key scope: `meetings:run`
|
|
524
|
+
|
|
525
|
+
Create (book) an appointment on behalf of the API key's user.
|
|
526
|
+
|
|
527
|
+
Reuses ``BookingsHandler.handle_create`` verbatim — same host selection,
|
|
528
|
+
conflict checks, credit charge (~20 credits), calendar push, attendee
|
|
529
|
+
notifications, and EDA emit as an in-app booking. Surfaces the handler's
|
|
530
|
+
402 (insufficient credits) / 409 (slot conflict) / 404 (event type)
|
|
531
|
+
untouched.
|
|
532
|
+
|
|
533
|
+
**Input**
|
|
534
|
+
|
|
535
|
+
| Field | Type | Required | Description |
|
|
536
|
+
|---|---|---|---|
|
|
537
|
+
| `body` | `CreateBookingRequest` | yes | Request body; fields below. |
|
|
538
|
+
|
|
539
|
+
Body fields (`CreateBookingRequest`):
|
|
540
|
+
|
|
541
|
+
| Field | Type | Required | Description |
|
|
542
|
+
|---|---|---|---|
|
|
543
|
+
| `body.attendees` | `Array<AttendeeInput>` | yes | |
|
|
544
|
+
| `body.event_type_id` | `integer` | yes | |
|
|
545
|
+
| `body.start_time` | `string` | yes | |
|
|
546
|
+
| `body.end_time` | `string \| null` | no | |
|
|
547
|
+
| `body.guests` | `Array<string> \| null` | no | |
|
|
548
|
+
| `body.language` | `string` | no | default `"en"` |
|
|
549
|
+
| `body.location` | `string \| null` | no | |
|
|
550
|
+
| `body.metadata` | `Record<string, unknown> \| null` | no | |
|
|
551
|
+
| `body.override_availability` | `boolean` | no | default `false` |
|
|
552
|
+
| `body.recurring_event_id` | `string \| null` | no | |
|
|
553
|
+
| `body.responses` | `Record<string, unknown> \| null` | no | |
|
|
554
|
+
| `body.selected_conferencing` | `LocationItem \| null` | no | |
|
|
555
|
+
| `body.selected_location` | `LocationItem \| null` | no | |
|
|
556
|
+
| `body.slot_uid` | `string \| null` | no | |
|
|
557
|
+
|
|
558
|
+
**Returns** `Record<string, unknown>`.
|
|
559
|
+
|
|
560
|
+
**Example**
|
|
561
|
+
|
|
562
|
+
```ts
|
|
563
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
564
|
+
const result = await g8.api.appointments.createBooking({
|
|
565
|
+
body: {
|
|
566
|
+
attendees: [{ email: "jane@acme.com", name: "Example" }],
|
|
567
|
+
event_type_id: 123,
|
|
568
|
+
start_time: "example",
|
|
569
|
+
},
|
|
570
|
+
});
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
<a id="op-createeventtype"></a>
|
|
576
|
+
|
|
577
|
+
### `g8.api.appointments.createEventType(input)`
|
|
578
|
+
|
|
579
|
+
**Create a bookable event type**
|
|
580
|
+
|
|
581
|
+
- HTTP: `POST /api/v1/appointments/event-types`
|
|
582
|
+
- operationId: `create_event_type_appointments_event_types_post` (also callable as `g8.api.call("create_event_type_appointments_event_types_post", input)`)
|
|
583
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
584
|
+
- API-key scope: `meetings:write`
|
|
585
|
+
|
|
586
|
+
Create a new event type. Reuses ``EventTypesHandler.handle_create``
|
|
587
|
+
verbatim (slug uniqueness, host wiring, schedule attach), so the result is
|
|
588
|
+
identical to creating one in the app. ``slug`` must be unique within the org
|
|
589
|
+
(409 on collision); ``length`` is the meeting duration in minutes.
|
|
590
|
+
|
|
591
|
+
**Input**
|
|
592
|
+
|
|
593
|
+
| Field | Type | Required | Description |
|
|
594
|
+
|---|---|---|---|
|
|
595
|
+
| `body` | `CreateEventTypeRequest` | yes | Request body; fields below. |
|
|
596
|
+
|
|
597
|
+
Body fields (`CreateEventTypeRequest`):
|
|
598
|
+
|
|
599
|
+
| Field | Type | Required | Description |
|
|
600
|
+
|---|---|---|---|
|
|
601
|
+
| `body.length` | `integer` | yes | |
|
|
602
|
+
| `body.slug` | `string` | yes | |
|
|
603
|
+
| `body.title` | `string` | yes | |
|
|
604
|
+
| `body.after_event_buffer` | `integer` | no | default `0` |
|
|
605
|
+
| `body.before_event_buffer` | `integer` | no | default `0` |
|
|
606
|
+
| `body.booking_fields` | `Array<Record<string, unknown>> \| null` | no | |
|
|
607
|
+
| `body.default_layout` | `string \| null` | no | |
|
|
608
|
+
| `body.description` | `string \| null` | no | |
|
|
609
|
+
| `body.disable_cancelling` | `boolean` | no | default `false` |
|
|
610
|
+
| `body.disable_guests` | `boolean` | no | default `false` |
|
|
611
|
+
| `body.disable_rescheduling` | `boolean` | no | default `false` |
|
|
612
|
+
| `body.event_color` | `string \| null` | no | |
|
|
613
|
+
| `body.event_name` | `string \| null` | no | |
|
|
614
|
+
| `body.hidden` | `boolean` | no | default `false` |
|
|
615
|
+
| `body.initial_hosts` | `Array<Record<string, unknown>> \| null` | no | |
|
|
616
|
+
| `body.layouts` | `Array<string> \| null` | no | |
|
|
617
|
+
| `body.locations` | `Array<Record<string, unknown>> \| null` | no | |
|
|
618
|
+
| `body.metadata` | `Record<string, unknown> \| null` | no | |
|
|
619
|
+
| `body.minimum_booking_notice` | `integer` | no | default `120` |
|
|
620
|
+
| `body.period_days` | `integer \| null` | no | |
|
|
621
|
+
| `body.period_end_date` | `string \| null` | no | |
|
|
622
|
+
| `body.period_start_date` | `string \| null` | no | |
|
|
623
|
+
| `body.period_type` | `string` | no | default `"unlimited"` |
|
|
624
|
+
| `body.recurring_event` | `Record<string, unknown> \| null` | no | |
|
|
625
|
+
| `body.requires_confirmation` | `boolean` | no | default `false` |
|
|
626
|
+
| `body.schedule_id` | `integer \| null` | no | |
|
|
627
|
+
| `body.scheduling_type` | `string \| null` | no | |
|
|
628
|
+
| `body.seats_per_time_slot` | `integer \| null` | no | |
|
|
629
|
+
| `body.slot_interval` | `integer \| null` | no | |
|
|
630
|
+
| `body.success_redirect_url` | `string \| null` | no | |
|
|
631
|
+
| `body.time_zone` | `string \| null` | no | |
|
|
632
|
+
| `body.use_common_schedule` | `boolean \| null` | no | |
|
|
633
|
+
|
|
634
|
+
**Returns** `Record<string, unknown>`.
|
|
635
|
+
|
|
636
|
+
**Example**
|
|
637
|
+
|
|
638
|
+
```ts
|
|
639
|
+
const result = await g8.api.appointments.createEventType({ body: { length: 1, slug: "example", title: "Example" } });
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
<a id="op-createeventtypehostgroup"></a>
|
|
645
|
+
|
|
646
|
+
### `g8.api.appointments.createEventTypeHostGroup(input)`
|
|
647
|
+
|
|
648
|
+
**Create Event Type Host Group**
|
|
649
|
+
|
|
650
|
+
- HTTP: `POST /api/v1/appointments/event-types/{event_type_id}/host-groups`
|
|
651
|
+
- operationId: `create_event_type_host_group_appointments_event_types__event_type_id__host_groups_post` (also callable as `g8.api.call("create_event_type_host_group_appointments_event_types__event_type_id__host_groups_post", input)`)
|
|
652
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
653
|
+
- API-key scope: `meetings:write`
|
|
654
|
+
|
|
655
|
+
Create a host group. Assign hosts to it via `group_id` on a host.
|
|
656
|
+
|
|
657
|
+
**Input**
|
|
658
|
+
|
|
659
|
+
| Field | Type | Required | Description |
|
|
660
|
+
|---|---|---|---|
|
|
661
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
662
|
+
| `body` | `AppointmentHostGroupWriteRequest` | yes | Request body; fields below. |
|
|
663
|
+
|
|
664
|
+
Body fields (`AppointmentHostGroupWriteRequest`):
|
|
665
|
+
|
|
666
|
+
| Field | Type | Required | Description |
|
|
667
|
+
|---|---|---|---|
|
|
668
|
+
| `body.name` | `string` | yes | Group name. min length 1 |
|
|
669
|
+
|
|
670
|
+
**Returns** `ApiResponse_AppointmentHostGroup_`: the envelope `{ data: AppointmentHostGroup, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
671
|
+
|
|
672
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
673
|
+
|
|
674
|
+
`AppointmentHostGroup` fields:
|
|
675
|
+
|
|
676
|
+
| Field | Type | Required | Description |
|
|
677
|
+
|---|---|---|---|
|
|
678
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
679
|
+
| `event_type_id` | `integer \| null` | no | |
|
|
680
|
+
| `id` | `string \| null` | no | |
|
|
681
|
+
| `name` | `string \| null` | no | |
|
|
682
|
+
|
|
683
|
+
**Example**
|
|
684
|
+
|
|
685
|
+
```ts
|
|
686
|
+
const result = await g8.api.appointments.createEventTypeHostGroup({ path: { event_type_id: 123 }, body: { name: "Example" } });
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
691
|
+
<a id="op-createooo"></a>
|
|
692
|
+
|
|
693
|
+
### `g8.api.appointments.createOoo(input)`
|
|
694
|
+
|
|
695
|
+
**Create an out-of-office entry**
|
|
696
|
+
|
|
697
|
+
- HTTP: `POST /api/v1/appointments/out-of-office`
|
|
698
|
+
- operationId: `create_ooo_appointments_out_of_office_post` (also callable as `g8.api.call("create_ooo_appointments_out_of_office_post", input)`)
|
|
699
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
700
|
+
- API-key scope: `meetings:write`
|
|
701
|
+
|
|
702
|
+
Create an out-of-office entry for the calling user. While active, the
|
|
703
|
+
user's slots are blocked for booking. ``start`` and ``end`` may be local
|
|
704
|
+
calendar dates paired with ``time_zone`` or legacy ISO-8601 datetimes.
|
|
705
|
+
Optional ``to_user_id`` exposes an alternative teammate booking path.
|
|
706
|
+
|
|
707
|
+
**Input**
|
|
708
|
+
|
|
709
|
+
| Field | Type | Required | Description |
|
|
710
|
+
|---|---|---|---|
|
|
711
|
+
| `body` | `CreateOutOfOfficeRequest` | yes | Request body; fields below. |
|
|
712
|
+
|
|
713
|
+
Body fields (`CreateOutOfOfficeRequest`):
|
|
714
|
+
|
|
715
|
+
| Field | Type | Required | Description |
|
|
716
|
+
|---|---|---|---|
|
|
717
|
+
| `body.end` | `string` | yes | |
|
|
718
|
+
| `body.start` | `string` | yes | |
|
|
719
|
+
| `body.notes` | `string \| null` | no | |
|
|
720
|
+
| `body.public_note` | `string \| null` | no | |
|
|
721
|
+
| `body.reason` | `string \| null` | no | |
|
|
722
|
+
| `body.time_zone` | `string \| null` | no | |
|
|
723
|
+
| `body.to_user_id` | `integer \| null` | no | |
|
|
724
|
+
| `body.user_id` | `integer \| null` | no | |
|
|
725
|
+
|
|
726
|
+
**Returns** `Record<string, unknown>`.
|
|
727
|
+
|
|
728
|
+
**Example**
|
|
729
|
+
|
|
730
|
+
```ts
|
|
731
|
+
const result = await g8.api.appointments.createOoo({ body: { end: "example", start: "example" } });
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
---
|
|
735
|
+
|
|
736
|
+
<a id="op-createroutingform"></a>
|
|
737
|
+
|
|
738
|
+
### `g8.api.appointments.createRoutingForm(input)`
|
|
739
|
+
|
|
740
|
+
**Create a routing form**
|
|
741
|
+
|
|
742
|
+
- HTTP: `POST /api/v1/appointments/routing-forms`
|
|
743
|
+
- operationId: `create_routing_form_appointments_routing_forms_post` (also callable as `g8.api.call("create_routing_form_appointments_routing_forms_post", input)`)
|
|
744
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
745
|
+
- API-key scope: `meetings:write`
|
|
746
|
+
|
|
747
|
+
Create a new routing form with optional fields and routes.
|
|
748
|
+
|
|
749
|
+
Returns the created form including its generated slug. ``is_admin`` is
|
|
750
|
+
forced False so the form is owned by the API-key user.
|
|
751
|
+
|
|
752
|
+
**Input**
|
|
753
|
+
|
|
754
|
+
| Field | Type | Required | Description |
|
|
755
|
+
|---|---|---|---|
|
|
756
|
+
| `body` | `CreateRoutingFormRequest` | yes | Request body; fields below. |
|
|
757
|
+
|
|
758
|
+
Body fields (`CreateRoutingFormRequest`):
|
|
759
|
+
|
|
760
|
+
| Field | Type | Required | Description |
|
|
761
|
+
|---|---|---|---|
|
|
762
|
+
| `body.name` | `string` | yes | min length 1, max length 255 |
|
|
763
|
+
| `body.description` | `string \| null` | no | |
|
|
764
|
+
| `body.disabled` | `boolean` | no | default `false` |
|
|
765
|
+
| `body.fields` | `Array<RoutingFormField>` | no | |
|
|
766
|
+
| `body.routes` | `Array<RoutingFormRouteInput>` | no | |
|
|
767
|
+
|
|
768
|
+
**Returns** `Record<string, unknown>`.
|
|
769
|
+
|
|
770
|
+
**Example**
|
|
771
|
+
|
|
772
|
+
```ts
|
|
773
|
+
const result = await g8.api.appointments.createRoutingForm({ body: { name: "Example" } });
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
<a id="op-createsavedfilter"></a>
|
|
779
|
+
|
|
780
|
+
### `g8.api.appointments.createSavedFilter(input)`
|
|
781
|
+
|
|
782
|
+
**Create Saved Filter**
|
|
783
|
+
|
|
784
|
+
- HTTP: `POST /api/v1/appointments/saved-filters`
|
|
785
|
+
- operationId: `create_saved_filter_appointments_saved_filters_post` (also callable as `g8.api.call("create_saved_filter_appointments_saved_filters_post", input)`)
|
|
786
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
787
|
+
- API-key scope: `meetings:write`
|
|
788
|
+
|
|
789
|
+
Save a view. A second view with the same title is a 409.
|
|
790
|
+
|
|
791
|
+
`state` is the filter itself and is round-tripped as-is.
|
|
792
|
+
|
|
793
|
+
**Input**
|
|
794
|
+
|
|
795
|
+
| Field | Type | Required | Description |
|
|
796
|
+
|---|---|---|---|
|
|
797
|
+
| `body` | `CreateSavedFilterRequest` | yes | Request body; fields below. |
|
|
798
|
+
|
|
799
|
+
Body fields (`CreateSavedFilterRequest`):
|
|
800
|
+
|
|
801
|
+
| Field | Type | Required | Description |
|
|
802
|
+
|---|---|---|---|
|
|
803
|
+
| `body.title` | `string` | yes | min length 1, max length 120 |
|
|
804
|
+
| `body.description` | `string \| null` | no | max length 2000 |
|
|
805
|
+
| `body.state` | `Record<string, unknown>` | no | The filter itself. Opaque to this contract and round-tripped as-is. |
|
|
806
|
+
|
|
807
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
808
|
+
|
|
809
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
810
|
+
|
|
811
|
+
**Example**
|
|
812
|
+
|
|
813
|
+
```ts
|
|
814
|
+
const result = await g8.api.appointments.createSavedFilter({ body: { title: "Example" } });
|
|
815
|
+
```
|
|
816
|
+
|
|
817
|
+
---
|
|
818
|
+
|
|
819
|
+
<a id="op-createschedule"></a>
|
|
820
|
+
|
|
821
|
+
### `g8.api.appointments.createSchedule(input)`
|
|
822
|
+
|
|
823
|
+
**Create an availability schedule**
|
|
824
|
+
|
|
825
|
+
- HTTP: `POST /api/v1/appointments/schedules`
|
|
826
|
+
- operationId: `create_schedule_appointments_schedules_post` (also callable as `g8.api.call("create_schedule_appointments_schedules_post", input)`)
|
|
827
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
828
|
+
- API-key scope: `meetings:write`
|
|
829
|
+
|
|
830
|
+
Create a named availability schedule with weekly rules and optional date overrides.
|
|
831
|
+
|
|
832
|
+
Defaults to Mon-Fri 09:00-17:00 when ``availability`` is omitted.
|
|
833
|
+
Pass ``is_default=True`` to immediately set this as the caller's default
|
|
834
|
+
schedule (persisted via ``update_appointment_settings``).
|
|
835
|
+
|
|
836
|
+
**Input**
|
|
837
|
+
|
|
838
|
+
| Field | Type | Required | Description |
|
|
839
|
+
|---|---|---|---|
|
|
840
|
+
| `body` | `CreateScheduleRequest` | yes | Request body; fields below. |
|
|
841
|
+
|
|
842
|
+
Body fields (`CreateScheduleRequest`):
|
|
843
|
+
|
|
844
|
+
| Field | Type | Required | Description |
|
|
845
|
+
|---|---|---|---|
|
|
846
|
+
| `body.name` | `string` | yes | |
|
|
847
|
+
| `body.time_zone` | `string` | yes | |
|
|
848
|
+
| `body.availability` | `Array<AvailabilityInput> \| null` | no | |
|
|
849
|
+
| `body.is_default` | `boolean` | no | default `false` |
|
|
850
|
+
| `body.overrides` | `Array<OverrideInput> \| null` | no | |
|
|
851
|
+
|
|
852
|
+
**Returns** `Record<string, unknown>`.
|
|
853
|
+
|
|
854
|
+
**Example**
|
|
855
|
+
|
|
856
|
+
```ts
|
|
857
|
+
const result = await g8.api.appointments.createSchedule({ body: { name: "Example", time_zone: "example" } });
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
---
|
|
861
|
+
|
|
862
|
+
<a id="op-createworkflow"></a>
|
|
863
|
+
|
|
864
|
+
### `g8.api.appointments.createWorkflow(input)`
|
|
865
|
+
|
|
866
|
+
**Create a workflow**
|
|
867
|
+
|
|
868
|
+
- HTTP: `POST /api/v1/appointments/workflows`
|
|
869
|
+
- operationId: `create_workflow_appointments_workflows_post` (also callable as `g8.api.call("create_workflow_appointments_workflows_post", input)`)
|
|
870
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
871
|
+
- API-key scope: `meetings:run`
|
|
872
|
+
|
|
873
|
+
Create a new workflow. Steps define the actions to take; event_type_ids
|
|
874
|
+
attaches the workflow to specific event types (omit or set ``is_active_on_all``
|
|
875
|
+
to apply org-wide). ``trigger`` must be one of: new_booking, before_event,
|
|
876
|
+
after_event, booking_cancelled, booking_rescheduled. Time-based triggers
|
|
877
|
+
(before_event / after_event) require ``time`` and ``time_unit``.
|
|
878
|
+
|
|
879
|
+
**Input**
|
|
880
|
+
|
|
881
|
+
| Field | Type | Required | Description |
|
|
882
|
+
|---|---|---|---|
|
|
883
|
+
| `body` | `CreateWorkflowRequest` | yes | Request body; fields below. |
|
|
884
|
+
|
|
885
|
+
Body fields (`CreateWorkflowRequest`):
|
|
886
|
+
|
|
887
|
+
| Field | Type | Required | Description |
|
|
888
|
+
|---|---|---|---|
|
|
889
|
+
| `body.name` | `string` | yes | min length 1, max length 255 |
|
|
890
|
+
| `body.steps` | `Array<WorkflowStepInput>` | yes | min items 1, max items 20 |
|
|
891
|
+
| `body.trigger` | `"new_booking" \| "before_event" \| "after_event" \| "booking_cancelled" \| "booking_rescheduled"` | yes | |
|
|
892
|
+
| `body.event_type_ids` | `Array<integer> \| null` | no | |
|
|
893
|
+
| `body.is_active_on_all` | `boolean` | no | default `false` |
|
|
894
|
+
| `body.time` | `integer \| null` | no | min 1 |
|
|
895
|
+
| `body.time_unit` | `"minutes" \| "hours" \| "days" \| null` | no | |
|
|
896
|
+
|
|
897
|
+
**Returns** `Record<string, unknown>`.
|
|
898
|
+
|
|
899
|
+
**Example**
|
|
900
|
+
|
|
901
|
+
```ts
|
|
902
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
903
|
+
const result = await g8.api.appointments.createWorkflow({
|
|
904
|
+
body: {
|
|
905
|
+
name: "Example",
|
|
906
|
+
steps: [{ action: "email_host" }],
|
|
907
|
+
trigger: "new_booking",
|
|
908
|
+
},
|
|
909
|
+
});
|
|
910
|
+
```
|
|
911
|
+
|
|
912
|
+
---
|
|
913
|
+
|
|
914
|
+
<a id="op-deleteeventtype"></a>
|
|
915
|
+
|
|
916
|
+
### `g8.api.appointments.deleteEventType(input)`
|
|
917
|
+
|
|
918
|
+
**Delete an event type**
|
|
919
|
+
|
|
920
|
+
- HTTP: `DELETE /api/v1/appointments/event-types/{event_type_id}`
|
|
921
|
+
- operationId: `delete_event_type_appointments_event_types__event_type_id__delete` (also callable as `g8.api.call("delete_event_type_appointments_event_types__event_type_id__delete", input)`)
|
|
922
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
923
|
+
- API-key scope: `meetings:delete`
|
|
924
|
+
|
|
925
|
+
Delete an event type. Reuses ``EventTypesHandler.handle_delete``.
|
|
926
|
+
|
|
927
|
+
``EventTypePolicy.can_delete()`` is ADMIN-ONLY (Cal.com "team event delete =
|
|
928
|
+
admin only"; hosts cannot delete). So this requires the API key's user to
|
|
929
|
+
hold Admin/Owner in the org - resolved via ``_is_org_admin``. Member/Viewer
|
|
930
|
+
keys and org-scoped machine keys get a 403 from the handler. Returns
|
|
931
|
+
``{data: {deleted: true, event_type_id}}`` on success.
|
|
932
|
+
|
|
933
|
+
**Input**
|
|
934
|
+
|
|
935
|
+
| Field | Type | Required | Description |
|
|
936
|
+
|---|---|---|---|
|
|
937
|
+
| `path.event_type_id` | `integer` | yes | Event-type integer ID. |
|
|
938
|
+
|
|
939
|
+
**Returns** `Record<string, unknown>`.
|
|
940
|
+
|
|
941
|
+
**Example**
|
|
942
|
+
|
|
943
|
+
```ts
|
|
944
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
945
|
+
const result = await g8.api.appointments.deleteEventType({ path: { event_type_id: 1 } });
|
|
946
|
+
```
|
|
947
|
+
|
|
948
|
+
---
|
|
949
|
+
|
|
950
|
+
<a id="op-deleteeventtypehostgroup"></a>
|
|
951
|
+
|
|
952
|
+
### `g8.api.appointments.deleteEventTypeHostGroup(input)`
|
|
953
|
+
|
|
954
|
+
**Delete Event Type Host Group**
|
|
955
|
+
|
|
956
|
+
- HTTP: `DELETE /api/v1/appointments/event-types/{event_type_id}/host-groups/{group_id}`
|
|
957
|
+
- operationId: `delete_event_type_host_group_appointments_event_types__event_type_id__host_groups__group_id__delete` (also callable as `g8.api.call("delete_event_type_host_group_appointments_event_types__event_type_id__host_groups__group_id__delete", input)`)
|
|
958
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
959
|
+
- API-key scope: `meetings:delete`
|
|
960
|
+
|
|
961
|
+
Delete a host group. The hosts in it are NOT removed from the event
|
|
962
|
+
type - they become ungrouped.
|
|
963
|
+
|
|
964
|
+
**Input**
|
|
965
|
+
|
|
966
|
+
| Field | Type | Required | Description |
|
|
967
|
+
|---|---|---|---|
|
|
968
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
969
|
+
| `path.group_id` | `string` | yes | Host group id. |
|
|
970
|
+
|
|
971
|
+
**Returns**: no JSON body is declared for the success response.
|
|
972
|
+
|
|
973
|
+
**Example**
|
|
974
|
+
|
|
975
|
+
```ts
|
|
976
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
977
|
+
const result = await g8.api.appointments.deleteEventTypeHostGroup({ path: { event_type_id: 123, group_id: "id" } });
|
|
978
|
+
```
|
|
979
|
+
|
|
980
|
+
---
|
|
981
|
+
|
|
982
|
+
<a id="op-deleteooo"></a>
|
|
983
|
+
|
|
984
|
+
### `g8.api.appointments.deleteOoo(input)`
|
|
985
|
+
|
|
986
|
+
**Delete an out-of-office entry**
|
|
987
|
+
|
|
988
|
+
- HTTP: `DELETE /api/v1/appointments/out-of-office/{ooo_uuid}`
|
|
989
|
+
- operationId: `delete_ooo_appointments_out_of_office__ooo_uuid__delete` (also callable as `g8.api.call("delete_ooo_appointments_out_of_office__ooo_uuid__delete", input)`)
|
|
990
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
991
|
+
- API-key scope: `meetings:delete`
|
|
992
|
+
|
|
993
|
+
Delete an out-of-office entry. Only the owner may delete their own
|
|
994
|
+
entry (API keys force ``is_admin=False``). Returns
|
|
995
|
+
``{data: {deleted: true, ooo_uuid}}`` on success.
|
|
996
|
+
|
|
997
|
+
**Input**
|
|
998
|
+
|
|
999
|
+
| Field | Type | Required | Description |
|
|
1000
|
+
|---|---|---|---|
|
|
1001
|
+
| `path.ooo_uuid` | `string` | yes | UUID of the out-of-office entry to delete. |
|
|
1002
|
+
|
|
1003
|
+
**Returns** `Record<string, unknown>`.
|
|
1004
|
+
|
|
1005
|
+
**Example**
|
|
1006
|
+
|
|
1007
|
+
```ts
|
|
1008
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1009
|
+
const result = await g8.api.appointments.deleteOoo({ path: { ooo_uuid: "00000000-0000-0000-0000-000000000000" } });
|
|
1010
|
+
```
|
|
1011
|
+
|
|
1012
|
+
---
|
|
1013
|
+
|
|
1014
|
+
<a id="op-deleteroutingform"></a>
|
|
1015
|
+
|
|
1016
|
+
### `g8.api.appointments.deleteRoutingForm(input)`
|
|
1017
|
+
|
|
1018
|
+
**Delete a routing form (cascades fields and routes)**
|
|
1019
|
+
|
|
1020
|
+
- HTTP: `DELETE /api/v1/appointments/routing-forms/{form_id}`
|
|
1021
|
+
- operationId: `delete_routing_form_appointments_routing_forms__form_id__delete` (also callable as `g8.api.call("delete_routing_form_appointments_routing_forms__form_id__delete", input)`)
|
|
1022
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
1023
|
+
- API-key scope: `meetings:delete`
|
|
1024
|
+
|
|
1025
|
+
Delete a routing form permanently. Cascades to its fields and routes.
|
|
1026
|
+
|
|
1027
|
+
Returns 404 when the form does not exist or belongs to another user.
|
|
1028
|
+
|
|
1029
|
+
**Input**
|
|
1030
|
+
|
|
1031
|
+
| Field | Type | Required | Description |
|
|
1032
|
+
|---|---|---|---|
|
|
1033
|
+
| `path.form_id` | `integer` | yes | Routing form integer ID. |
|
|
1034
|
+
|
|
1035
|
+
**Returns** `Record<string, unknown>`.
|
|
1036
|
+
|
|
1037
|
+
**Example**
|
|
1038
|
+
|
|
1039
|
+
```ts
|
|
1040
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1041
|
+
const result = await g8.api.appointments.deleteRoutingForm({ path: { form_id: 1 } });
|
|
1042
|
+
```
|
|
1043
|
+
|
|
1044
|
+
---
|
|
1045
|
+
|
|
1046
|
+
<a id="op-deletesavedfilter"></a>
|
|
1047
|
+
|
|
1048
|
+
### `g8.api.appointments.deleteSavedFilter(input)`
|
|
1049
|
+
|
|
1050
|
+
**Delete Saved Filter**
|
|
1051
|
+
|
|
1052
|
+
- HTTP: `DELETE /api/v1/appointments/saved-filters/{filter_id}`
|
|
1053
|
+
- operationId: `delete_saved_filter_appointments_saved_filters__filter_id__delete` (also callable as `g8.api.call("delete_saved_filter_appointments_saved_filters__filter_id__delete", input)`)
|
|
1054
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
1055
|
+
- API-key scope: `meetings:delete`
|
|
1056
|
+
|
|
1057
|
+
Delete a saved view. The bookings it selected are untouched.
|
|
1058
|
+
|
|
1059
|
+
Always a success, whether or not the id existed - the app does not
|
|
1060
|
+
disclose which filters exist, and this does not either.
|
|
1061
|
+
|
|
1062
|
+
**Input**
|
|
1063
|
+
|
|
1064
|
+
| Field | Type | Required | Description |
|
|
1065
|
+
|---|---|---|---|
|
|
1066
|
+
| `path.filter_id` | `string` | yes | Filter id (UUID). |
|
|
1067
|
+
|
|
1068
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1069
|
+
|
|
1070
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1071
|
+
|
|
1072
|
+
**Example**
|
|
1073
|
+
|
|
1074
|
+
```ts
|
|
1075
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1076
|
+
const result = await g8.api.appointments.deleteSavedFilter({ path: { filter_id: "id" } });
|
|
1077
|
+
```
|
|
1078
|
+
|
|
1079
|
+
---
|
|
1080
|
+
|
|
1081
|
+
<a id="op-deleteschedule"></a>
|
|
1082
|
+
|
|
1083
|
+
### `g8.api.appointments.deleteSchedule(input)`
|
|
1084
|
+
|
|
1085
|
+
**Delete a schedule**
|
|
1086
|
+
|
|
1087
|
+
- HTTP: `DELETE /api/v1/appointments/schedules/{schedule_id}`
|
|
1088
|
+
- operationId: `delete_schedule_appointments_schedules__schedule_id__delete` (also callable as `g8.api.call("delete_schedule_appointments_schedules__schedule_id__delete", input)`)
|
|
1089
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
1090
|
+
- API-key scope: `meetings:delete`
|
|
1091
|
+
|
|
1092
|
+
Delete a schedule. Returns 409 when this is the caller's last schedule
|
|
1093
|
+
(mirroring the in-app guard - every user must retain at least one schedule).
|
|
1094
|
+
Returns 404 when the schedule does not exist or belongs to another user.
|
|
1095
|
+
|
|
1096
|
+
**Input**
|
|
1097
|
+
|
|
1098
|
+
| Field | Type | Required | Description |
|
|
1099
|
+
|---|---|---|---|
|
|
1100
|
+
| `path.schedule_id` | `integer` | yes | Schedule integer ID. |
|
|
1101
|
+
|
|
1102
|
+
**Returns** `Record<string, unknown>`.
|
|
1103
|
+
|
|
1104
|
+
**Example**
|
|
1105
|
+
|
|
1106
|
+
```ts
|
|
1107
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1108
|
+
const result = await g8.api.appointments.deleteSchedule({ path: { schedule_id: 1 } });
|
|
1109
|
+
```
|
|
1110
|
+
|
|
1111
|
+
---
|
|
1112
|
+
|
|
1113
|
+
<a id="op-deleteworkflow"></a>
|
|
1114
|
+
|
|
1115
|
+
### `g8.api.appointments.deleteWorkflow(input)`
|
|
1116
|
+
|
|
1117
|
+
**Delete a workflow and cancel pending reminders**
|
|
1118
|
+
|
|
1119
|
+
- HTTP: `DELETE /api/v1/appointments/workflows/{workflow_id}`
|
|
1120
|
+
- operationId: `delete_workflow_appointments_workflows__workflow_id__delete` (also callable as `g8.api.call("delete_workflow_appointments_workflows__workflow_id__delete", input)`)
|
|
1121
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
1122
|
+
- API-key scope: `meetings:delete`
|
|
1123
|
+
|
|
1124
|
+
Delete a workflow and cancel any pending reminder rows created by it.
|
|
1125
|
+
Mirrors the in-app router: ``cancel_workflow_reminders`` is called BEFORE
|
|
1126
|
+
``delete_workflow`` so reminder FK constraints are satisfied and scheduled
|
|
1127
|
+
worker jobs for this workflow never fire after deletion.
|
|
1128
|
+
|
|
1129
|
+
**Input**
|
|
1130
|
+
|
|
1131
|
+
| Field | Type | Required | Description |
|
|
1132
|
+
|---|---|---|---|
|
|
1133
|
+
| `path.workflow_id` | `integer` | yes | Workflow integer ID. |
|
|
1134
|
+
|
|
1135
|
+
**Returns**: no JSON body is declared for the success response.
|
|
1136
|
+
|
|
1137
|
+
**Example**
|
|
1138
|
+
|
|
1139
|
+
```ts
|
|
1140
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1141
|
+
const result = await g8.api.appointments.deleteWorkflow({ path: { workflow_id: 1 } });
|
|
1142
|
+
```
|
|
1143
|
+
|
|
1144
|
+
---
|
|
1145
|
+
|
|
1146
|
+
<a id="op-deselectcalendar"></a>
|
|
1147
|
+
|
|
1148
|
+
### `g8.api.appointments.deselectCalendar(input)`
|
|
1149
|
+
|
|
1150
|
+
**Deselect a sub-calendar from conflict checking**
|
|
1151
|
+
|
|
1152
|
+
- HTTP: `DELETE /api/v1/appointments/calendars/selected`
|
|
1153
|
+
- operationId: `deselect_calendar_appointments_calendars_selected_delete` (also callable as `g8.api.call("deselect_calendar_appointments_calendars_selected_delete", input)`)
|
|
1154
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
1155
|
+
- API-key scope: `meetings:delete`
|
|
1156
|
+
|
|
1157
|
+
Remove a sub-calendar from the caller's conflict-checking set.
|
|
1158
|
+
Reuses the in-app deselect_calendar logic (delete_selected_calendar).
|
|
1159
|
+
|
|
1160
|
+
**Input**
|
|
1161
|
+
|
|
1162
|
+
| Field | Type | Required | Description |
|
|
1163
|
+
|---|---|---|---|
|
|
1164
|
+
| `query.credential_id` | `integer` | yes | |
|
|
1165
|
+
| `query.integration` | `string` | yes | |
|
|
1166
|
+
| `query.external_id` | `string` | yes | |
|
|
1167
|
+
|
|
1168
|
+
**Returns**: no JSON body is declared for the success response.
|
|
1169
|
+
|
|
1170
|
+
**Example**
|
|
1171
|
+
|
|
1172
|
+
```ts
|
|
1173
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1174
|
+
const result = await g8.api.appointments.deselectCalendar({
|
|
1175
|
+
query: { credential_id: 123, integration: "example", external_id: "id" },
|
|
1176
|
+
});
|
|
1177
|
+
```
|
|
1178
|
+
|
|
1179
|
+
---
|
|
1180
|
+
|
|
1181
|
+
<a id="op-disconnectcalendar"></a>
|
|
1182
|
+
|
|
1183
|
+
### `g8.api.appointments.disconnectCalendar(input)`
|
|
1184
|
+
|
|
1185
|
+
**Disconnect a calendar account**
|
|
1186
|
+
|
|
1187
|
+
- HTTP: `DELETE /api/v1/appointments/calendars/{credential_id}`
|
|
1188
|
+
- operationId: `disconnect_calendar_appointments_calendars__credential_id__delete` (also callable as `g8.api.call("disconnect_calendar_appointments_calendars__credential_id__delete", input)`)
|
|
1189
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
1190
|
+
- API-key scope: `meetings:delete`
|
|
1191
|
+
|
|
1192
|
+
Disconnect a calendar account with best-effort token revocation.
|
|
1193
|
+
Reuses the in-app disconnect_calendar logic (revoke + delete credential +
|
|
1194
|
+
clean up destination calendar rows pointing at the removed credential).
|
|
1195
|
+
Raises 404 when not found; 403 when it belongs to a different user.
|
|
1196
|
+
|
|
1197
|
+
**Input**
|
|
1198
|
+
|
|
1199
|
+
| Field | Type | Required | Description |
|
|
1200
|
+
|---|---|---|---|
|
|
1201
|
+
| `path.credential_id` | `integer` | yes | |
|
|
1202
|
+
|
|
1203
|
+
**Returns**: no JSON body is declared for the success response.
|
|
1204
|
+
|
|
1205
|
+
**Example**
|
|
1206
|
+
|
|
1207
|
+
```ts
|
|
1208
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1209
|
+
const result = await g8.api.appointments.disconnectCalendar({ path: { credential_id: 123 } });
|
|
1210
|
+
```
|
|
1211
|
+
|
|
1212
|
+
---
|
|
1213
|
+
|
|
1214
|
+
<a id="op-disconnectconferencing"></a>
|
|
1215
|
+
|
|
1216
|
+
### `g8.api.appointments.disconnectConferencing(input)`
|
|
1217
|
+
|
|
1218
|
+
**Disconnect a conferencing provider**
|
|
1219
|
+
|
|
1220
|
+
- HTTP: `DELETE /api/v1/appointments/conferencing/{provider}/disconnect`
|
|
1221
|
+
- operationId: `disconnect_conferencing_appointments_conferencing__provider__disconnect_delete` (also callable as `g8.api.call("disconnect_conferencing_appointments_conferencing__provider__disconnect_delete", input)`)
|
|
1222
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
1223
|
+
- API-key scope: `meetings:delete`
|
|
1224
|
+
|
|
1225
|
+
Disconnect a conferencing provider. For real-credential providers
|
|
1226
|
+
(zoom, roam, whereby, jitsi, office365_video, roam_auto) this deletes
|
|
1227
|
+
the matching credentials row. Google Meet is special: it is a synthetic
|
|
1228
|
+
provider - disconnect sets google_meet_suppressed and clears the default
|
|
1229
|
+
if it pointed at Meet. Reuses the in-app disconnect_conferencing logic.
|
|
1230
|
+
|
|
1231
|
+
**Input**
|
|
1232
|
+
|
|
1233
|
+
| Field | Type | Required | Description |
|
|
1234
|
+
|---|---|---|---|
|
|
1235
|
+
| `path.provider` | `string` | yes | |
|
|
1236
|
+
|
|
1237
|
+
**Returns**: no JSON body is declared for the success response.
|
|
1238
|
+
|
|
1239
|
+
**Example**
|
|
1240
|
+
|
|
1241
|
+
```ts
|
|
1242
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
1243
|
+
const result = await g8.api.appointments.disconnectConferencing({ path: { provider: "example" } });
|
|
1244
|
+
```
|
|
1245
|
+
|
|
1246
|
+
---
|
|
1247
|
+
|
|
1248
|
+
<a id="op-duplicateeventtype"></a>
|
|
1249
|
+
|
|
1250
|
+
### `g8.api.appointments.duplicateEventType(input)`
|
|
1251
|
+
|
|
1252
|
+
**Duplicate an event type (with a '-copy' slug)**
|
|
1253
|
+
|
|
1254
|
+
- HTTP: `POST /api/v1/appointments/event-types/{event_type_id}/duplicate`
|
|
1255
|
+
- operationId: `duplicate_event_type_appointments_event_types__event_type_id__duplicate_post` (also callable as `g8.api.call("duplicate_event_type_appointments_event_types__event_type_id__duplicate_post", input)`)
|
|
1256
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
1257
|
+
- API-key scope: `meetings:write`
|
|
1258
|
+
|
|
1259
|
+
Duplicate an event type, generating a unique ``{slug}-copy`` slug and
|
|
1260
|
+
copying its hosts. Mirrors the in-app duplicate path (repo-direct, no
|
|
1261
|
+
handler) using the shared appointments helpers; ``is_admin`` is forced False
|
|
1262
|
+
so a host (or the owner) can duplicate, matching ``EventTypePolicy``.
|
|
1263
|
+
|
|
1264
|
+
**Input**
|
|
1265
|
+
|
|
1266
|
+
| Field | Type | Required | Description |
|
|
1267
|
+
|---|---|---|---|
|
|
1268
|
+
| `path.event_type_id` | `integer` | yes | Source event-type integer ID. |
|
|
1269
|
+
|
|
1270
|
+
**Returns** `Record<string, unknown>`.
|
|
1271
|
+
|
|
1272
|
+
**Example**
|
|
1273
|
+
|
|
1274
|
+
```ts
|
|
1275
|
+
const result = await g8.api.appointments.duplicateEventType({ path: { event_type_id: 1 } });
|
|
1276
|
+
```
|
|
1277
|
+
|
|
1278
|
+
---
|
|
1279
|
+
|
|
1280
|
+
<a id="op-duplicateroutingform"></a>
|
|
1281
|
+
|
|
1282
|
+
### `g8.api.appointments.duplicateRoutingForm(input)`
|
|
1283
|
+
|
|
1284
|
+
**Duplicate a routing form (copy with all fields and routes)**
|
|
1285
|
+
|
|
1286
|
+
- HTTP: `POST /api/v1/appointments/routing-forms/{form_id}/duplicate`
|
|
1287
|
+
- operationId: `duplicate_routing_form_appointments_routing_forms__form_id__duplicate_post` (also callable as `g8.api.call("duplicate_routing_form_appointments_routing_forms__form_id__duplicate_post", input)`)
|
|
1288
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
1289
|
+
- API-key scope: `meetings:write`
|
|
1290
|
+
|
|
1291
|
+
Duplicate a routing form. Creates a copy named "{name} (copy)" with
|
|
1292
|
+
a unique slug, copying all fields and routes verbatim.
|
|
1293
|
+
|
|
1294
|
+
**Input**
|
|
1295
|
+
|
|
1296
|
+
| Field | Type | Required | Description |
|
|
1297
|
+
|---|---|---|---|
|
|
1298
|
+
| `path.form_id` | `integer` | yes | Source routing form integer ID. |
|
|
1299
|
+
|
|
1300
|
+
**Returns** `Record<string, unknown>`.
|
|
1301
|
+
|
|
1302
|
+
**Example**
|
|
1303
|
+
|
|
1304
|
+
```ts
|
|
1305
|
+
const result = await g8.api.appointments.duplicateRoutingForm({ path: { form_id: 1 } });
|
|
1306
|
+
```
|
|
1307
|
+
|
|
1308
|
+
---
|
|
1309
|
+
|
|
1310
|
+
<a id="op-exportbookinginsights"></a>
|
|
1311
|
+
|
|
1312
|
+
### `g8.api.appointments.exportBookingInsights(input?)`
|
|
1313
|
+
|
|
1314
|
+
**Export Booking Insights**
|
|
1315
|
+
|
|
1316
|
+
- HTTP: `GET /api/v1/appointments/bookings/insights/export`
|
|
1317
|
+
- operationId: `export_booking_insights_appointments_bookings_insights_export_get` (also callable as `g8.api.call("export_booking_insights_appointments_bookings_insights_export_get", input)`)
|
|
1318
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1319
|
+
- API-key scope: `meetings:read`
|
|
1320
|
+
|
|
1321
|
+
The bookings behind `GET /appointments/bookings/insights`, one row each, as CSV.
|
|
1322
|
+
|
|
1323
|
+
An Admin key sees the team (or `member_user_id`'s); anyone else sees their
|
|
1324
|
+
own bookings only - the same split the insights read makes.
|
|
1325
|
+
|
|
1326
|
+
**Input**
|
|
1327
|
+
|
|
1328
|
+
| Field | Type | Required | Description |
|
|
1329
|
+
|---|---|---|---|
|
|
1330
|
+
| `query.date_from` | `string \| null` | no | ISO date. Omit for all time. |
|
|
1331
|
+
| `query.date_to` | `string \| null` | no | ISO date. Omit for all time. |
|
|
1332
|
+
| `query.event_type_ids` | `string \| null` | no | CSV of INTEGER event type ids. Checked here because the app splits and `int()`s it unguarded. |
|
|
1333
|
+
| `query.member_user_id` | `integer \| null` | no | One member's bookings. Honoured for Admin keys only. |
|
|
1334
|
+
|
|
1335
|
+
**Returns** `ApiResponse_CsvExportPayload_`: the envelope `{ data: CsvExportPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1336
|
+
|
|
1337
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1338
|
+
|
|
1339
|
+
`CsvExportPayload` fields:
|
|
1340
|
+
|
|
1341
|
+
| Field | Type | Required | Description |
|
|
1342
|
+
|---|---|---|---|
|
|
1343
|
+
| `csv` | `string` | yes | The full CSV document, header row first. |
|
|
1344
|
+
| `filename` | `string` | yes | |
|
|
1345
|
+
| `content_type` | `"text/csv"` | no | default `"text/csv"` |
|
|
1346
|
+
|
|
1347
|
+
**Example**
|
|
1348
|
+
|
|
1349
|
+
```ts
|
|
1350
|
+
const result = await g8.api.appointments.exportBookingInsights();
|
|
1351
|
+
```
|
|
1352
|
+
|
|
1353
|
+
---
|
|
1354
|
+
|
|
1355
|
+
<a id="op-exportroutingformresponses"></a>
|
|
1356
|
+
|
|
1357
|
+
### `g8.api.appointments.exportRoutingFormResponses(input)`
|
|
1358
|
+
|
|
1359
|
+
**Export Routing Form Responses**
|
|
1360
|
+
|
|
1361
|
+
- HTTP: `GET /api/v1/appointments/routing-forms/{form_id}/responses/export`
|
|
1362
|
+
- operationId: `export_routing_form_responses_appointments_routing_forms__form_id__responses_export_get` (also callable as `g8.api.call("export_routing_form_responses_appointments_routing_forms__form_id__responses_export_get", input)`)
|
|
1363
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1364
|
+
- API-key scope: `meetings:read`
|
|
1365
|
+
|
|
1366
|
+
Every response to a routing form, as CSV - one column per field.
|
|
1367
|
+
|
|
1368
|
+
The paged JSON read is `GET /appointments/routing-forms/{id}/responses`.
|
|
1369
|
+
Capped at the app's 10,000 most recent responses. A form you cannot see
|
|
1370
|
+
is a 404, not a 403, so its existence is not disclosed.
|
|
1371
|
+
|
|
1372
|
+
**Input**
|
|
1373
|
+
|
|
1374
|
+
| Field | Type | Required | Description |
|
|
1375
|
+
|---|---|---|---|
|
|
1376
|
+
| `path.form_id` | `integer` | yes | Routing form id. |
|
|
1377
|
+
|
|
1378
|
+
**Returns** `ApiResponse_CsvExportPayload_`: the envelope `{ data: CsvExportPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1379
|
+
|
|
1380
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1381
|
+
|
|
1382
|
+
`CsvExportPayload` fields:
|
|
1383
|
+
|
|
1384
|
+
| Field | Type | Required | Description |
|
|
1385
|
+
|---|---|---|---|
|
|
1386
|
+
| `csv` | `string` | yes | The full CSV document, header row first. |
|
|
1387
|
+
| `filename` | `string` | yes | |
|
|
1388
|
+
| `content_type` | `"text/csv"` | no | default `"text/csv"` |
|
|
1389
|
+
|
|
1390
|
+
**Example**
|
|
1391
|
+
|
|
1392
|
+
```ts
|
|
1393
|
+
const result = await g8.api.appointments.exportRoutingFormResponses({ path: { form_id: 123 } });
|
|
1394
|
+
```
|
|
1395
|
+
|
|
1396
|
+
---
|
|
1397
|
+
|
|
1398
|
+
<a id="op-getavailability"></a>
|
|
1399
|
+
|
|
1400
|
+
### `g8.api.appointments.getAvailability(input)`
|
|
1401
|
+
|
|
1402
|
+
**Get availability rules and overrides for a schedule**
|
|
1403
|
+
|
|
1404
|
+
- HTTP: `GET /api/v1/appointments/schedules/{schedule_id}/availability`
|
|
1405
|
+
- operationId: `get_availability_appointments_schedules__schedule_id__availability_get` (also callable as `g8.api.call("get_availability_appointments_schedules__schedule_id__availability_get", input)`)
|
|
1406
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1407
|
+
- API-key scope: `meetings:read`
|
|
1408
|
+
|
|
1409
|
+
Return the weekly recurring availability rules and date-specific overrides
|
|
1410
|
+
for the given schedule. Availability entries without a ``date`` are weekly
|
|
1411
|
+
rules; entries with a ``date`` are one-time overrides for that calendar day.
|
|
1412
|
+
|
|
1413
|
+
**Input**
|
|
1414
|
+
|
|
1415
|
+
| Field | Type | Required | Description |
|
|
1416
|
+
|---|---|---|---|
|
|
1417
|
+
| `path.schedule_id` | `integer` | yes | Schedule integer ID. |
|
|
1418
|
+
|
|
1419
|
+
**Returns** `Record<string, unknown>`.
|
|
1420
|
+
|
|
1421
|
+
**Example**
|
|
1422
|
+
|
|
1423
|
+
```ts
|
|
1424
|
+
const result = await g8.api.appointments.getAvailability({ path: { schedule_id: 1 } });
|
|
1425
|
+
```
|
|
1426
|
+
|
|
1427
|
+
---
|
|
1428
|
+
|
|
1429
|
+
<a id="op-getavailableslots"></a>
|
|
1430
|
+
|
|
1431
|
+
### `g8.api.appointments.getAvailableSlots(input)`
|
|
1432
|
+
|
|
1433
|
+
**Get Available Slots**
|
|
1434
|
+
|
|
1435
|
+
- HTTP: `GET /api/v1/appointments/slots`
|
|
1436
|
+
- operationId: `get_available_slots_appointments_slots_get` (also callable as `g8.api.call("get_available_slots_appointments_slots_get", input)`)
|
|
1437
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1438
|
+
- API-key scope: `meetings:read`
|
|
1439
|
+
|
|
1440
|
+
The bookable times for an event type, grouped by date under `slots`.
|
|
1441
|
+
|
|
1442
|
+
The AUTHENTICATED slots read - the unauthenticated one a prospect's browser
|
|
1443
|
+
calls is deliberately not published (see the module docstring).
|
|
1444
|
+
|
|
1445
|
+
**Input**
|
|
1446
|
+
|
|
1447
|
+
| Field | Type | Required | Description |
|
|
1448
|
+
|---|---|---|---|
|
|
1449
|
+
| `query.event_type_id` | `integer` | yes | Event type to compute slots for. |
|
|
1450
|
+
| `query.start` | `string` | yes | Window start, ISO-8601. A bare date is read as UTC. |
|
|
1451
|
+
| `query.end` | `string` | yes | Window end, ISO-8601. At most 60 days after `start`. |
|
|
1452
|
+
| `query.time_zone` | `string \| null` | no | IANA timezone to express the slots in. |
|
|
1453
|
+
| `query.duration` | `integer \| null` | no | Minutes, for a multi-duration event type. Omit for its own length. |
|
|
1454
|
+
|
|
1455
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1456
|
+
|
|
1457
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1458
|
+
|
|
1459
|
+
**Example**
|
|
1460
|
+
|
|
1461
|
+
```ts
|
|
1462
|
+
const result = await g8.api.appointments.getAvailableSlots({ query: { event_type_id: 123, start: "example", end: "example" } });
|
|
1463
|
+
```
|
|
1464
|
+
|
|
1465
|
+
---
|
|
1466
|
+
|
|
1467
|
+
<a id="op-getbooking"></a>
|
|
1468
|
+
|
|
1469
|
+
### `g8.api.appointments.getBooking(input)`
|
|
1470
|
+
|
|
1471
|
+
**Get a single booking by UID**
|
|
1472
|
+
|
|
1473
|
+
- HTTP: `GET /api/v1/appointments/bookings/{booking_uid}`
|
|
1474
|
+
- operationId: `get_booking_appointments_bookings__booking_uid__get` (also callable as `g8.api.call("get_booking_appointments_bookings__booking_uid__get", input)`)
|
|
1475
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1476
|
+
- API-key scope: `meetings:read`
|
|
1477
|
+
|
|
1478
|
+
Return the full booking detail (attendees, references, meeting_url,
|
|
1479
|
+
responses, internal notes). Backed by ``BookingsHandler.handle_get``;
|
|
1480
|
+
raises 404 when the UID isn't visible to the caller.
|
|
1481
|
+
|
|
1482
|
+
**Input**
|
|
1483
|
+
|
|
1484
|
+
| Field | Type | Required | Description |
|
|
1485
|
+
|---|---|---|---|
|
|
1486
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
1487
|
+
|
|
1488
|
+
**Returns** `Record<string, unknown>`.
|
|
1489
|
+
|
|
1490
|
+
**Example**
|
|
1491
|
+
|
|
1492
|
+
```ts
|
|
1493
|
+
const result = await g8.api.appointments.getBooking({ path: { booking_uid: "example" } });
|
|
1494
|
+
```
|
|
1495
|
+
|
|
1496
|
+
---
|
|
1497
|
+
|
|
1498
|
+
<a id="op-getbookinginsights"></a>
|
|
1499
|
+
|
|
1500
|
+
### `g8.api.appointments.getBookingInsights(input?)`
|
|
1501
|
+
|
|
1502
|
+
**Get aggregated booking insights**
|
|
1503
|
+
|
|
1504
|
+
- HTTP: `GET /api/v1/appointments/bookings/insights`
|
|
1505
|
+
- operationId: `get_booking_insights_appointments_bookings_insights_get` (also callable as `g8.api.call("get_booking_insights_appointments_bookings_insights_get", input)`)
|
|
1506
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1507
|
+
- API-key scope: `meetings:read`
|
|
1508
|
+
|
|
1509
|
+
Return aggregated booking insights for the caller's org.
|
|
1510
|
+
|
|
1511
|
+
Covers booking counts, show/no-show rates, and per-event-type breakdowns
|
|
1512
|
+
for the given date window. Backed by ``BookingsHandler.handle_insights``
|
|
1513
|
+
(same handler as the in-app insights view). ``is_admin`` is forced False
|
|
1514
|
+
so the caller sees only their own data. The in-app ``member_user_id`` filter
|
|
1515
|
+
is intentionally NOT exposed: it is an admin-only knob and an API key never
|
|
1516
|
+
holds admin, so the handler would ignore it anyway - omitting it from the
|
|
1517
|
+
route signature avoids the misleading "forwarded but ignored" surface.
|
|
1518
|
+
|
|
1519
|
+
**Input**
|
|
1520
|
+
|
|
1521
|
+
| Field | Type | Required | Description |
|
|
1522
|
+
|---|---|---|---|
|
|
1523
|
+
| `query.date_from` | `string \| null` | no | ISO date string for range start (e.g. '2026-01-01'). |
|
|
1524
|
+
| `query.date_to` | `string \| null` | no | ISO date string for range end (e.g. '2026-12-31'). |
|
|
1525
|
+
| `query.event_type_ids` | `string \| null` | no | Comma-separated event-type IDs to filter by. |
|
|
1526
|
+
|
|
1527
|
+
**Returns** `Record<string, unknown>`.
|
|
1528
|
+
|
|
1529
|
+
**Example**
|
|
1530
|
+
|
|
1531
|
+
```ts
|
|
1532
|
+
const result = await g8.api.appointments.getBookingInsights();
|
|
1533
|
+
```
|
|
1534
|
+
|
|
1535
|
+
---
|
|
1536
|
+
|
|
1537
|
+
<a id="op-getdefaultconferencing"></a>
|
|
1538
|
+
|
|
1539
|
+
### `g8.api.appointments.getDefaultConferencing(input?)`
|
|
1540
|
+
|
|
1541
|
+
**Get the current default conferencing provider**
|
|
1542
|
+
|
|
1543
|
+
- HTTP: `GET /api/v1/appointments/conferencing/default`
|
|
1544
|
+
- operationId: `get_default_conferencing_appointments_conferencing_default_get` (also callable as `g8.api.call("get_default_conferencing_appointments_conferencing_default_get", input)`)
|
|
1545
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1546
|
+
- API-key scope: `meetings:read`
|
|
1547
|
+
|
|
1548
|
+
Get the default conferencing provider. Returns provider, credential_id,
|
|
1549
|
+
and link. Returns ``{data: {provider: null}}`` when none is configured.
|
|
1550
|
+
Reuses the in-app get_default_conferencing logic.
|
|
1551
|
+
|
|
1552
|
+
**Input**: none.
|
|
1553
|
+
|
|
1554
|
+
**Returns** `DefaultConferencingEnvelope`: the envelope `{ data: DefaultConferencingResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1555
|
+
|
|
1556
|
+
`DefaultConferencingResponse` fields:
|
|
1557
|
+
|
|
1558
|
+
| Field | Type | Required | Description |
|
|
1559
|
+
|---|---|---|---|
|
|
1560
|
+
| `credential_id` | `integer \| null` | no | |
|
|
1561
|
+
| `link` | `string \| null` | no | |
|
|
1562
|
+
| `provider` | `string \| null` | no | |
|
|
1563
|
+
|
|
1564
|
+
**Example**
|
|
1565
|
+
|
|
1566
|
+
```ts
|
|
1567
|
+
const result = await g8.api.appointments.getDefaultConferencing();
|
|
1568
|
+
```
|
|
1569
|
+
|
|
1570
|
+
---
|
|
1571
|
+
|
|
1572
|
+
<a id="op-getdestinationcalendar"></a>
|
|
1573
|
+
|
|
1574
|
+
### `g8.api.appointments.getDestinationCalendar(input?)`
|
|
1575
|
+
|
|
1576
|
+
**Get the destination calendar (with event-type fallback)**
|
|
1577
|
+
|
|
1578
|
+
- HTTP: `GET /api/v1/appointments/calendars/destination`
|
|
1579
|
+
- operationId: `get_destination_calendar_appointments_calendars_destination_get` (also callable as `g8.api.call("get_destination_calendar_appointments_calendars_destination_get", input)`)
|
|
1580
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1581
|
+
- API-key scope: `meetings:read`
|
|
1582
|
+
|
|
1583
|
+
Get the destination calendar for the caller. When ``event_type_id`` is
|
|
1584
|
+
provided, returns the event-type-specific override if one exists, falling
|
|
1585
|
+
back to the user-level default. Returns ``{data: null}`` when none is set.
|
|
1586
|
+
Reuses the in-app get_destination_calendar logic.
|
|
1587
|
+
|
|
1588
|
+
**Input**
|
|
1589
|
+
|
|
1590
|
+
| Field | Type | Required | Description |
|
|
1591
|
+
|---|---|---|---|
|
|
1592
|
+
| `query.event_type_id` | `integer \| null` | no | |
|
|
1593
|
+
|
|
1594
|
+
**Returns** `DestinationCalendarEnvelope`: the envelope `{ data: DestinationCalendarResponse | null, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1595
|
+
|
|
1596
|
+
`data` fields:
|
|
1597
|
+
|
|
1598
|
+
| Field | Type | Required | Description |
|
|
1599
|
+
|---|---|---|---|
|
|
1600
|
+
| `external_id` | `string` | yes | |
|
|
1601
|
+
| `id` | `integer` | yes | |
|
|
1602
|
+
| `integration` | `string` | yes | |
|
|
1603
|
+
| `credential_id` | `integer \| null` | no | |
|
|
1604
|
+
| `event_type_id` | `integer \| null` | no | |
|
|
1605
|
+
| `primary_email` | `string \| null` | no | |
|
|
1606
|
+
|
|
1607
|
+
**Example**
|
|
1608
|
+
|
|
1609
|
+
```ts
|
|
1610
|
+
const result = await g8.api.appointments.getDestinationCalendar();
|
|
1611
|
+
```
|
|
1612
|
+
|
|
1613
|
+
---
|
|
1614
|
+
|
|
1615
|
+
<a id="op-getembedconfig"></a>
|
|
1616
|
+
|
|
1617
|
+
### `g8.api.appointments.getEmbedConfig(input)`
|
|
1618
|
+
|
|
1619
|
+
**Get Embed Config**
|
|
1620
|
+
|
|
1621
|
+
- HTTP: `GET /api/v1/appointments/event-types/{event_type_id}/embed`
|
|
1622
|
+
- operationId: `get_embed_config_appointments_event_types__event_type_id__embed_get` (also callable as `g8.api.call("get_embed_config_appointments_event_types__event_type_id__embed_get", input)`)
|
|
1623
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1624
|
+
- API-key scope: `meetings:read`
|
|
1625
|
+
|
|
1626
|
+
How the embedded booking widget for this event type is styled.
|
|
1627
|
+
|
|
1628
|
+
Hosts of the event type and Admin keys only.
|
|
1629
|
+
|
|
1630
|
+
**Input**
|
|
1631
|
+
|
|
1632
|
+
| Field | Type | Required | Description |
|
|
1633
|
+
|---|---|---|---|
|
|
1634
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
1635
|
+
|
|
1636
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1637
|
+
|
|
1638
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1639
|
+
|
|
1640
|
+
**Example**
|
|
1641
|
+
|
|
1642
|
+
```ts
|
|
1643
|
+
const result = await g8.api.appointments.getEmbedConfig({ path: { event_type_id: 123 } });
|
|
1644
|
+
```
|
|
1645
|
+
|
|
1646
|
+
---
|
|
1647
|
+
|
|
1648
|
+
<a id="op-geteventtype"></a>
|
|
1649
|
+
|
|
1650
|
+
### `g8.api.appointments.getEventType(input)`
|
|
1651
|
+
|
|
1652
|
+
**Get full detail for one bookable event type**
|
|
1653
|
+
|
|
1654
|
+
- HTTP: `GET /api/v1/appointments/event-types/{event_type_id}`
|
|
1655
|
+
- operationId: `get_event_type_appointments_event_types__event_type_id__get` (also callable as `g8.api.call("get_event_type_appointments_event_types__event_type_id__get", input)`)
|
|
1656
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1657
|
+
- API-key scope: `meetings:read`
|
|
1658
|
+
|
|
1659
|
+
Return the full event-type record (booking fields, locations, hosts,
|
|
1660
|
+
schedule, buffers, notice) — everything an agent needs before booking a
|
|
1661
|
+
slot. Backed by ``EventTypesHandler.handle_get`` (same handler as the
|
|
1662
|
+
in-app event-type detail view). Raises 404 when the id doesn't exist in
|
|
1663
|
+
this org.
|
|
1664
|
+
|
|
1665
|
+
**Input**
|
|
1666
|
+
|
|
1667
|
+
| Field | Type | Required | Description |
|
|
1668
|
+
|---|---|---|---|
|
|
1669
|
+
| `path.event_type_id` | `integer` | yes | Event-type integer ID. |
|
|
1670
|
+
|
|
1671
|
+
**Returns** `Record<string, unknown>`.
|
|
1672
|
+
|
|
1673
|
+
**Example**
|
|
1674
|
+
|
|
1675
|
+
```ts
|
|
1676
|
+
const result = await g8.api.appointments.getEventType({ path: { event_type_id: 1 } });
|
|
1677
|
+
```
|
|
1678
|
+
|
|
1679
|
+
---
|
|
1680
|
+
|
|
1681
|
+
<a id="op-geteventtypedestinationcalendar"></a>
|
|
1682
|
+
|
|
1683
|
+
### `g8.api.appointments.getEventTypeDestinationCalendar(input)`
|
|
1684
|
+
|
|
1685
|
+
**Get Event Type Destination Calendar**
|
|
1686
|
+
|
|
1687
|
+
- HTTP: `GET /api/v1/appointments/event-types/{event_type_id}/destination-calendar`
|
|
1688
|
+
- operationId: `get_event_type_destination_calendar_appointments_event_types__event_type_id__destination_calendar_get` (also callable as `g8.api.call("get_event_type_destination_calendar_appointments_event_types__event_type_id__destination_calendar_get", input)`)
|
|
1689
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1690
|
+
- API-key scope: `meetings:read`
|
|
1691
|
+
|
|
1692
|
+
Where bookings for THIS event type are written.
|
|
1693
|
+
|
|
1694
|
+
The per-event-type OVERRIDE of `GET /appointments/calendars/destination`.
|
|
1695
|
+
Null fields mean no override is set and the account default applies.
|
|
1696
|
+
|
|
1697
|
+
**Input**
|
|
1698
|
+
|
|
1699
|
+
| Field | Type | Required | Description |
|
|
1700
|
+
|---|---|---|---|
|
|
1701
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
1702
|
+
|
|
1703
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1704
|
+
|
|
1705
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1706
|
+
|
|
1707
|
+
**Example**
|
|
1708
|
+
|
|
1709
|
+
```ts
|
|
1710
|
+
const result = await g8.api.appointments.getEventTypeDestinationCalendar({ path: { event_type_id: 123 } });
|
|
1711
|
+
```
|
|
1712
|
+
|
|
1713
|
+
---
|
|
1714
|
+
|
|
1715
|
+
<a id="op-geteventtypeselectedcalendars"></a>
|
|
1716
|
+
|
|
1717
|
+
### `g8.api.appointments.getEventTypeSelectedCalendars(input)`
|
|
1718
|
+
|
|
1719
|
+
**Get Event Type Selected Calendars**
|
|
1720
|
+
|
|
1721
|
+
- HTTP: `GET /api/v1/appointments/event-types/{event_type_id}/selected-calendars`
|
|
1722
|
+
- operationId: `get_event_type_selected_calendars_appointments_event_types__event_type_id__selected_calendars_get` (also callable as `g8.api.call("get_event_type_selected_calendars_appointments_event_types__event_type_id__selected_calendars_get", input)`)
|
|
1723
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1724
|
+
- API-key scope: `meetings:read`
|
|
1725
|
+
|
|
1726
|
+
Which calendars are checked for conflicts on this event type.
|
|
1727
|
+
|
|
1728
|
+
The read to reach for when a slot was offered that should not have been:
|
|
1729
|
+
a calendar missing from here is a calendar nobody checked.
|
|
1730
|
+
|
|
1731
|
+
**Input**
|
|
1732
|
+
|
|
1733
|
+
| Field | Type | Required | Description |
|
|
1734
|
+
|---|---|---|---|
|
|
1735
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
1736
|
+
|
|
1737
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1738
|
+
|
|
1739
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1740
|
+
|
|
1741
|
+
**Example**
|
|
1742
|
+
|
|
1743
|
+
```ts
|
|
1744
|
+
const result = await g8.api.appointments.getEventTypeSelectedCalendars({ path: { event_type_id: 123 } });
|
|
1745
|
+
```
|
|
1746
|
+
|
|
1747
|
+
---
|
|
1748
|
+
|
|
1749
|
+
<a id="op-getorgsettings"></a>
|
|
1750
|
+
|
|
1751
|
+
### `g8.api.appointments.getOrgSettings(input?)`
|
|
1752
|
+
|
|
1753
|
+
**Get Org Settings**
|
|
1754
|
+
|
|
1755
|
+
- HTTP: `GET /api/v1/appointments/org-settings`
|
|
1756
|
+
- operationId: `get_org_settings_appointments_org_settings_get` (also callable as `g8.api.call("get_org_settings_appointments_org_settings_get", input)`)
|
|
1757
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1758
|
+
- API-key scope: `meetings:read`
|
|
1759
|
+
|
|
1760
|
+
The branding the public booking page wears, defaults filled in.
|
|
1761
|
+
|
|
1762
|
+
**Input**: none.
|
|
1763
|
+
|
|
1764
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1765
|
+
|
|
1766
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1767
|
+
|
|
1768
|
+
**Example**
|
|
1769
|
+
|
|
1770
|
+
```ts
|
|
1771
|
+
const result = await g8.api.appointments.getOrgSettings();
|
|
1772
|
+
```
|
|
1773
|
+
|
|
1774
|
+
---
|
|
1775
|
+
|
|
1776
|
+
<a id="op-getroutingform"></a>
|
|
1777
|
+
|
|
1778
|
+
### `g8.api.appointments.getRoutingForm(input)`
|
|
1779
|
+
|
|
1780
|
+
**Get a single routing form**
|
|
1781
|
+
|
|
1782
|
+
- HTTP: `GET /api/v1/appointments/routing-forms/{form_id}`
|
|
1783
|
+
- operationId: `get_routing_form_appointments_routing_forms__form_id__get` (also callable as `g8.api.call("get_routing_form_appointments_routing_forms__form_id__get", input)`)
|
|
1784
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1785
|
+
- API-key scope: `meetings:read`
|
|
1786
|
+
|
|
1787
|
+
Return a routing form with its fields, routes, and response_count.
|
|
1788
|
+
|
|
1789
|
+
Returns 404 when the form does not exist or belongs to another user.
|
|
1790
|
+
|
|
1791
|
+
**Input**
|
|
1792
|
+
|
|
1793
|
+
| Field | Type | Required | Description |
|
|
1794
|
+
|---|---|---|---|
|
|
1795
|
+
| `path.form_id` | `integer` | yes | Routing form integer ID. |
|
|
1796
|
+
|
|
1797
|
+
**Returns** `Record<string, unknown>`.
|
|
1798
|
+
|
|
1799
|
+
**Example**
|
|
1800
|
+
|
|
1801
|
+
```ts
|
|
1802
|
+
const result = await g8.api.appointments.getRoutingForm({ path: { form_id: 1 } });
|
|
1803
|
+
```
|
|
1804
|
+
|
|
1805
|
+
---
|
|
1806
|
+
|
|
1807
|
+
<a id="op-getschedule"></a>
|
|
1808
|
+
|
|
1809
|
+
### `g8.api.appointments.getSchedule(input)`
|
|
1810
|
+
|
|
1811
|
+
**Get a schedule with availability and linked event types**
|
|
1812
|
+
|
|
1813
|
+
- HTTP: `GET /api/v1/appointments/schedules/{schedule_id}`
|
|
1814
|
+
- operationId: `get_schedule_appointments_schedules__schedule_id__get` (also callable as `g8.api.call("get_schedule_appointments_schedules__schedule_id__get", input)`)
|
|
1815
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1816
|
+
- API-key scope: `meetings:read`
|
|
1817
|
+
|
|
1818
|
+
Return a schedule's full detail: weekly availability rules, date overrides,
|
|
1819
|
+
owner info, and the list of event types currently linked to this schedule.
|
|
1820
|
+
Returns 404 when the schedule doesn't exist or belongs to another user.
|
|
1821
|
+
|
|
1822
|
+
**Input**
|
|
1823
|
+
|
|
1824
|
+
| Field | Type | Required | Description |
|
|
1825
|
+
|---|---|---|---|
|
|
1826
|
+
| `path.schedule_id` | `integer` | yes | Schedule integer ID. |
|
|
1827
|
+
|
|
1828
|
+
**Returns** `Record<string, unknown>`.
|
|
1829
|
+
|
|
1830
|
+
**Example**
|
|
1831
|
+
|
|
1832
|
+
```ts
|
|
1833
|
+
const result = await g8.api.appointments.getSchedule({ path: { schedule_id: 1 } });
|
|
1834
|
+
```
|
|
1835
|
+
|
|
1836
|
+
---
|
|
1837
|
+
|
|
1838
|
+
<a id="op-getscheduleprofile"></a>
|
|
1839
|
+
|
|
1840
|
+
### `g8.api.appointments.getScheduleProfile(input?)`
|
|
1841
|
+
|
|
1842
|
+
**Get Schedule Profile**
|
|
1843
|
+
|
|
1844
|
+
- HTTP: `GET /api/v1/appointments/profile`
|
|
1845
|
+
- operationId: `get_schedule_profile_appointments_profile_get` (also callable as `g8.api.call("get_schedule_profile_appointments_profile_get", input)`)
|
|
1846
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1847
|
+
- API-key scope: `meetings:read`
|
|
1848
|
+
|
|
1849
|
+
The scheduling profile of the person who minted this key.
|
|
1850
|
+
|
|
1851
|
+
Published as `/profile` rather than the app's `/me`: an organisation key
|
|
1852
|
+
has no person behind it, so `/me` would promise something it cannot give.
|
|
1853
|
+
The first read seeds the profile with defaults if it does not exist yet.
|
|
1854
|
+
|
|
1855
|
+
**Input**: none.
|
|
1856
|
+
|
|
1857
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1858
|
+
|
|
1859
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1860
|
+
|
|
1861
|
+
**Example**
|
|
1862
|
+
|
|
1863
|
+
```ts
|
|
1864
|
+
const result = await g8.api.appointments.getScheduleProfile();
|
|
1865
|
+
```
|
|
1866
|
+
|
|
1867
|
+
---
|
|
1868
|
+
|
|
1869
|
+
<a id="op-getworkflow"></a>
|
|
1870
|
+
|
|
1871
|
+
### `g8.api.appointments.getWorkflow(input)`
|
|
1872
|
+
|
|
1873
|
+
**Get a single workflow**
|
|
1874
|
+
|
|
1875
|
+
- HTTP: `GET /api/v1/appointments/workflows/{workflow_id}`
|
|
1876
|
+
- operationId: `get_workflow_appointments_workflows__workflow_id__get` (also callable as `g8.api.call("get_workflow_appointments_workflows__workflow_id__get", input)`)
|
|
1877
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1878
|
+
- API-key scope: `meetings:read`
|
|
1879
|
+
|
|
1880
|
+
Return the full workflow record (steps, linked event types, trigger config).
|
|
1881
|
+
|
|
1882
|
+
**Input**
|
|
1883
|
+
|
|
1884
|
+
| Field | Type | Required | Description |
|
|
1885
|
+
|---|---|---|---|
|
|
1886
|
+
| `path.workflow_id` | `integer` | yes | Workflow integer ID. |
|
|
1887
|
+
|
|
1888
|
+
**Returns** `Record<string, unknown>`.
|
|
1889
|
+
|
|
1890
|
+
**Example**
|
|
1891
|
+
|
|
1892
|
+
```ts
|
|
1893
|
+
const result = await g8.api.appointments.getWorkflow({ path: { workflow_id: 1 } });
|
|
1894
|
+
```
|
|
1895
|
+
|
|
1896
|
+
---
|
|
1897
|
+
|
|
1898
|
+
<a id="op-importmeeting"></a>
|
|
1899
|
+
|
|
1900
|
+
### `g8.api.appointments.importMeeting(input)`
|
|
1901
|
+
|
|
1902
|
+
**Import Meeting**
|
|
1903
|
+
|
|
1904
|
+
- HTTP: `POST /api/v1/appointments/bookings/import`
|
|
1905
|
+
- operationId: `import_meeting_appointments_bookings_import_post` (also callable as `g8.api.call("import_meeting_appointments_bookings_import_post", input)`)
|
|
1906
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
1907
|
+
- API-key scope: `meetings:run`
|
|
1908
|
+
|
|
1909
|
+
Pull a meeting booked OUTSIDE graph8 into the bookings list.
|
|
1910
|
+
|
|
1911
|
+
For the meeting somebody put straight into their calendar. The event must
|
|
1912
|
+
be on a calendar the key owner connected; its details are re-read from
|
|
1913
|
+
there. IDEMPOTENT: importing the same event twice returns the first
|
|
1914
|
+
booking rather than creating a second.
|
|
1915
|
+
|
|
1916
|
+
**Input**
|
|
1917
|
+
|
|
1918
|
+
| Field | Type | Required | Description |
|
|
1919
|
+
|---|---|---|---|
|
|
1920
|
+
| `body` | `ImportMeetingRequest` | yes | Request body; fields below. |
|
|
1921
|
+
|
|
1922
|
+
Body fields (`ImportMeetingRequest`):
|
|
1923
|
+
|
|
1924
|
+
| Field | Type | Required | Description |
|
|
1925
|
+
|---|---|---|---|
|
|
1926
|
+
| `body.calendar_id` | `string` | yes | |
|
|
1927
|
+
| `body.event_id` | `string` | yes | |
|
|
1928
|
+
| `body.event_type_id` | `integer` | yes | The graph8 event type to import it as. |
|
|
1929
|
+
| `body.provider` | `"google_calendar" \| "office365_calendar"` | yes | |
|
|
1930
|
+
|
|
1931
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1932
|
+
|
|
1933
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1934
|
+
|
|
1935
|
+
**Example**
|
|
1936
|
+
|
|
1937
|
+
```ts
|
|
1938
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
1939
|
+
const result = await g8.api.appointments.importMeeting({
|
|
1940
|
+
body: {
|
|
1941
|
+
calendar_id: "id",
|
|
1942
|
+
event_id: "id",
|
|
1943
|
+
event_type_id: 123,
|
|
1944
|
+
provider: "google_calendar",
|
|
1945
|
+
},
|
|
1946
|
+
});
|
|
1947
|
+
```
|
|
1948
|
+
|
|
1949
|
+
---
|
|
1950
|
+
|
|
1951
|
+
<a id="op-listbookings"></a>
|
|
1952
|
+
|
|
1953
|
+
### `g8.api.appointments.listBookings(input?)`
|
|
1954
|
+
|
|
1955
|
+
**List the caller's bookings (paginated)**
|
|
1956
|
+
|
|
1957
|
+
- HTTP: `GET /api/v1/appointments/bookings`
|
|
1958
|
+
- operationId: `list_bookings_appointments_bookings_get` (also callable as `g8.api.call("list_bookings_appointments_bookings_get", input)`)
|
|
1959
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1960
|
+
- API-key scope: `meetings:read`
|
|
1961
|
+
|
|
1962
|
+
List bookings visible to the caller.
|
|
1963
|
+
|
|
1964
|
+
Personal keys retain the member-scoped path. An organization key that
|
|
1965
|
+
passed the existing explicit ``meetings:read`` gate uses the handler's
|
|
1966
|
+
org-wide read path and therefore never looks up the synthetic API identity.
|
|
1967
|
+
|
|
1968
|
+
**Input**
|
|
1969
|
+
|
|
1970
|
+
| Field | Type | Required | Description |
|
|
1971
|
+
|---|---|---|---|
|
|
1972
|
+
| `query.status` | `string \| null` | no | Filter by status: accepted \| pending \| cancelled \| rejected. |
|
|
1973
|
+
| `query.event_type_id` | `integer \| null` | no | Only bookings for this event type. |
|
|
1974
|
+
| `query.after_start` | `string \| null` | no | ISO-8601 lower bound on start_time. |
|
|
1975
|
+
| `query.before_end` | `string \| null` | no | ISO-8601 upper bound on end_time. |
|
|
1976
|
+
| `query.attendee_email` | `string \| null` | no | Filter by an attendee email. |
|
|
1977
|
+
| `query.sort_by` | `string` | no | start_time \| end_time \| created_at \| status. default `"start_time"` |
|
|
1978
|
+
| `query.sort_order` | `string` | no | default `"desc"` |
|
|
1979
|
+
| `query.skip` | `integer` | no | default `0` |
|
|
1980
|
+
| `query.take` | `integer` | no | default `20` |
|
|
1981
|
+
|
|
1982
|
+
**Returns** `Record<string, unknown>`.
|
|
1983
|
+
|
|
1984
|
+
**Example**
|
|
1985
|
+
|
|
1986
|
+
```ts
|
|
1987
|
+
const result = await g8.api.appointments.listBookings();
|
|
1988
|
+
```
|
|
1989
|
+
|
|
1990
|
+
---
|
|
1991
|
+
|
|
1992
|
+
<a id="op-listcalendarevents"></a>
|
|
1993
|
+
|
|
1994
|
+
### `g8.api.appointments.listCalendarEvents(input)`
|
|
1995
|
+
|
|
1996
|
+
**List Calendar Events**
|
|
1997
|
+
|
|
1998
|
+
- HTTP: `GET /api/v1/appointments/calendars/events`
|
|
1999
|
+
- operationId: `list_calendar_events_appointments_calendars_events_get` (also callable as `g8.api.call("list_calendar_events_appointments_calendars_events_get", input)`)
|
|
2000
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2001
|
+
- API-key scope: `meetings:read`
|
|
2002
|
+
|
|
2003
|
+
What is already on the connected Google / Outlook calendars in a window.
|
|
2004
|
+
|
|
2005
|
+
This is what makes a slot unavailable, so it is the read to reach for when
|
|
2006
|
+
availability looks wrong. READ-ONLY and display-only: private events come
|
|
2007
|
+
back as "Busy" blocks, and a calendar that fails to load is reported in
|
|
2008
|
+
`errors` rather than failing the request.
|
|
2009
|
+
|
|
2010
|
+
**Input**
|
|
2011
|
+
|
|
2012
|
+
| Field | Type | Required | Description |
|
|
2013
|
+
|---|---|---|---|
|
|
2014
|
+
| `query.start` | `string (date-time)` | yes | Window start, ISO-8601. |
|
|
2015
|
+
| `query.end` | `string (date-time)` | yes | Window end, ISO-8601. |
|
|
2016
|
+
| `query.scope` | `"my" \| "org"` | no | `my` for the key owner alone, `org` for every member who has not opted out. An empty `org` result means nobody shares a calendar, not that nobody is busy. default `"my"` |
|
|
2017
|
+
| `query.host_emails` | `string \| null` | no | CSV. Narrows `org` scope to these members. |
|
|
2018
|
+
|
|
2019
|
+
**Returns** `ApiResponse_SchedulingListPayload_`: the envelope `{ data: SchedulingListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2020
|
+
|
|
2021
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2022
|
+
|
|
2023
|
+
`SchedulingListPayload` fields:
|
|
2024
|
+
|
|
2025
|
+
| Field | Type | Required | Description |
|
|
2026
|
+
|---|---|---|---|
|
|
2027
|
+
| `items` | `Array<unknown>` | no | |
|
|
2028
|
+
|
|
2029
|
+
**Example**
|
|
2030
|
+
|
|
2031
|
+
```ts
|
|
2032
|
+
const result = await g8.api.appointments.listCalendarEvents({
|
|
2033
|
+
query: { start: "2026-01-01T09:00:00Z", end: "2026-01-01T09:00:00Z" },
|
|
2034
|
+
});
|
|
2035
|
+
```
|
|
2036
|
+
|
|
2037
|
+
---
|
|
2038
|
+
|
|
2039
|
+
<a id="op-listcalendars"></a>
|
|
2040
|
+
|
|
2041
|
+
### `g8.api.appointments.listCalendars(input?)`
|
|
2042
|
+
|
|
2043
|
+
**List connected calendar accounts**
|
|
2044
|
+
|
|
2045
|
+
- HTTP: `GET /api/v1/appointments/calendars`
|
|
2046
|
+
- operationId: `list_calendars_appointments_calendars_get` (also callable as `g8.api.call("list_calendars_appointments_calendars_get", input)`)
|
|
2047
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2048
|
+
- API-key scope: `meetings:read`
|
|
2049
|
+
|
|
2050
|
+
List calendar accounts (Google, Outlook) connected to the caller's
|
|
2051
|
+
appointments profile, each with its sub-calendars and selection state.
|
|
2052
|
+
Reuses the in-app list_calendars logic faithfully.
|
|
2053
|
+
|
|
2054
|
+
**Input**: none.
|
|
2055
|
+
|
|
2056
|
+
**Returns** `Array<ConnectedCalendarResponse>`.
|
|
2057
|
+
|
|
2058
|
+
**Example**
|
|
2059
|
+
|
|
2060
|
+
```ts
|
|
2061
|
+
const result = await g8.api.appointments.listCalendars();
|
|
2062
|
+
```
|
|
2063
|
+
|
|
2064
|
+
---
|
|
2065
|
+
|
|
2066
|
+
<a id="op-listconferencing"></a>
|
|
2067
|
+
|
|
2068
|
+
### `g8.api.appointments.listConferencing(input?)`
|
|
2069
|
+
|
|
2070
|
+
**List connected conferencing providers**
|
|
2071
|
+
|
|
2072
|
+
- HTTP: `GET /api/v1/appointments/conferencing`
|
|
2073
|
+
- operationId: `list_conferencing_appointments_conferencing_get` (also callable as `g8.api.call("list_conferencing_appointments_conferencing_get", input)`)
|
|
2074
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2075
|
+
- API-key scope: `meetings:read`
|
|
2076
|
+
|
|
2077
|
+
List conferencing providers connected to the caller's appointments profile.
|
|
2078
|
+
Google Meet is synthesized from any google_calendar credential (it has no
|
|
2079
|
+
real credential row) and is suppressed when google_meet_suppressed is set.
|
|
2080
|
+
Reuses the in-app list_conferencing logic faithfully.
|
|
2081
|
+
|
|
2082
|
+
**Input**: none.
|
|
2083
|
+
|
|
2084
|
+
**Returns** `Array<ConnectedConferencingResponse>`.
|
|
2085
|
+
|
|
2086
|
+
**Example**
|
|
2087
|
+
|
|
2088
|
+
```ts
|
|
2089
|
+
const result = await g8.api.appointments.listConferencing();
|
|
2090
|
+
```
|
|
2091
|
+
|
|
2092
|
+
---
|
|
2093
|
+
|
|
2094
|
+
<a id="op-listeventtypehostgroups"></a>
|
|
2095
|
+
|
|
2096
|
+
### `g8.api.appointments.listEventTypeHostGroups(input)`
|
|
2097
|
+
|
|
2098
|
+
**List Event Type Host Groups**
|
|
2099
|
+
|
|
2100
|
+
- HTTP: `GET /api/v1/appointments/event-types/{event_type_id}/host-groups`
|
|
2101
|
+
- operationId: `list_event_type_host_groups_appointments_event_types__event_type_id__host_groups_get` (also callable as `g8.api.call("list_event_type_host_groups_appointments_event_types__event_type_id__host_groups_get", input)`)
|
|
2102
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2103
|
+
- API-key scope: `meetings:read`
|
|
2104
|
+
|
|
2105
|
+
Groups that partition this event type's hosts for the rotation.
|
|
2106
|
+
|
|
2107
|
+
**Input**
|
|
2108
|
+
|
|
2109
|
+
| Field | Type | Required | Description |
|
|
2110
|
+
|---|---|---|---|
|
|
2111
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
2112
|
+
|
|
2113
|
+
**Returns** `ApiResponse_list_AppointmentHostGroup__`: the envelope `{ data: Array<AppointmentHostGroup>, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2114
|
+
|
|
2115
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2116
|
+
|
|
2117
|
+
`AppointmentHostGroup` fields:
|
|
2118
|
+
|
|
2119
|
+
| Field | Type | Required | Description |
|
|
2120
|
+
|---|---|---|---|
|
|
2121
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
2122
|
+
| `event_type_id` | `integer \| null` | no | |
|
|
2123
|
+
| `id` | `string \| null` | no | |
|
|
2124
|
+
| `name` | `string \| null` | no | |
|
|
2125
|
+
|
|
2126
|
+
**Example**
|
|
2127
|
+
|
|
2128
|
+
```ts
|
|
2129
|
+
const result = await g8.api.appointments.listEventTypeHostGroups({ path: { event_type_id: 123 } });
|
|
2130
|
+
```
|
|
2131
|
+
|
|
2132
|
+
---
|
|
2133
|
+
|
|
2134
|
+
<a id="op-listmembership"></a>
|
|
2135
|
+
|
|
2136
|
+
### `g8.api.appointments.listMembership(input?)`
|
|
2137
|
+
|
|
2138
|
+
**List Membership**
|
|
2139
|
+
|
|
2140
|
+
- HTTP: `GET /api/v1/appointments/membership`
|
|
2141
|
+
- operationId: `list_membership_appointments_membership_get` (also callable as `g8.api.call("list_membership_appointments_membership_get", input)`)
|
|
2142
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2143
|
+
- API-key scope: `meetings:read`
|
|
2144
|
+
|
|
2145
|
+
Everyone in the organisation, as scheduling sees them.
|
|
2146
|
+
|
|
2147
|
+
The source of the integer `user_id` the member and role routes take.
|
|
2148
|
+
|
|
2149
|
+
**Input**: none.
|
|
2150
|
+
|
|
2151
|
+
**Returns** `ApiResponse_SchedulingListPayload_`: the envelope `{ data: SchedulingListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2152
|
+
|
|
2153
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2154
|
+
|
|
2155
|
+
`SchedulingListPayload` fields:
|
|
2156
|
+
|
|
2157
|
+
| Field | Type | Required | Description |
|
|
2158
|
+
|---|---|---|---|
|
|
2159
|
+
| `items` | `Array<unknown>` | no | |
|
|
2160
|
+
|
|
2161
|
+
**Example**
|
|
2162
|
+
|
|
2163
|
+
```ts
|
|
2164
|
+
const result = await g8.api.appointments.listMembership();
|
|
2165
|
+
```
|
|
2166
|
+
|
|
2167
|
+
---
|
|
2168
|
+
|
|
2169
|
+
<a id="op-listooo"></a>
|
|
2170
|
+
|
|
2171
|
+
### `g8.api.appointments.listOoo(input?)`
|
|
2172
|
+
|
|
2173
|
+
**List out-of-office entries for the calling user**
|
|
2174
|
+
|
|
2175
|
+
- HTTP: `GET /api/v1/appointments/out-of-office`
|
|
2176
|
+
- operationId: `list_ooo_appointments_out_of_office_get` (also callable as `g8.api.call("list_ooo_appointments_out_of_office_get", input)`)
|
|
2177
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2178
|
+
- API-key scope: `meetings:read`
|
|
2179
|
+
|
|
2180
|
+
List all out-of-office entries belonging to the calling user. API keys
|
|
2181
|
+
never receive org-wide admin access, so this always returns only the
|
|
2182
|
+
caller's own entries (equivalent to the non-admin in-app path).
|
|
2183
|
+
|
|
2184
|
+
**Input**: none.
|
|
2185
|
+
|
|
2186
|
+
**Returns** `Record<string, unknown>`.
|
|
2187
|
+
|
|
2188
|
+
**Example**
|
|
2189
|
+
|
|
2190
|
+
```ts
|
|
2191
|
+
const result = await g8.api.appointments.listOoo();
|
|
2192
|
+
```
|
|
2193
|
+
|
|
2194
|
+
---
|
|
2195
|
+
|
|
2196
|
+
<a id="op-listroutingformresponses"></a>
|
|
2197
|
+
|
|
2198
|
+
### `g8.api.appointments.listRoutingFormResponses(input)`
|
|
2199
|
+
|
|
2200
|
+
**List captured responses for a routing form (paginated)**
|
|
2201
|
+
|
|
2202
|
+
- HTTP: `GET /api/v1/appointments/routing-forms/{form_id}/responses`
|
|
2203
|
+
- operationId: `list_routing_form_responses_appointments_routing_forms__form_id__responses_get` (also callable as `g8.api.call("list_routing_form_responses_appointments_routing_forms__form_id__responses_get", input)`)
|
|
2204
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2205
|
+
- API-key scope: `meetings:read`
|
|
2206
|
+
|
|
2207
|
+
List captured form responses. Paginated via ``skip`` / ``take``.
|
|
2208
|
+
|
|
2209
|
+
Returns 404 when the form does not exist or belongs to another user.
|
|
2210
|
+
Response items include: ``id``, ``form_id``, ``responses`` (field answers),
|
|
2211
|
+
``routed_to_event_type_id``, and ``created_at``.
|
|
2212
|
+
|
|
2213
|
+
**Input**
|
|
2214
|
+
|
|
2215
|
+
| Field | Type | Required | Description |
|
|
2216
|
+
|---|---|---|---|
|
|
2217
|
+
| `path.form_id` | `integer` | yes | Routing form integer ID. |
|
|
2218
|
+
| `query.skip` | `integer` | no | Number of responses to skip. default `0` |
|
|
2219
|
+
| `query.take` | `integer` | no | Maximum responses to return (max 500). default `50` |
|
|
2220
|
+
|
|
2221
|
+
**Returns** `Record<string, unknown>`.
|
|
2222
|
+
|
|
2223
|
+
**Example**
|
|
2224
|
+
|
|
2225
|
+
```ts
|
|
2226
|
+
const result = await g8.api.appointments.listRoutingFormResponses({ path: { form_id: 1 } });
|
|
2227
|
+
```
|
|
2228
|
+
|
|
2229
|
+
---
|
|
2230
|
+
|
|
2231
|
+
<a id="op-listroutingforms"></a>
|
|
2232
|
+
|
|
2233
|
+
### `g8.api.appointments.listRoutingForms(input?)`
|
|
2234
|
+
|
|
2235
|
+
**List routing forms (includes response_count)**
|
|
2236
|
+
|
|
2237
|
+
- HTTP: `GET /api/v1/appointments/routing-forms`
|
|
2238
|
+
- operationId: `list_routing_forms_appointments_routing_forms_get` (also callable as `g8.api.call("list_routing_forms_appointments_routing_forms_get", input)`)
|
|
2239
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2240
|
+
- API-key scope: `meetings:read`
|
|
2241
|
+
|
|
2242
|
+
List all routing forms owned by the API-key user.
|
|
2243
|
+
|
|
2244
|
+
``is_admin`` is forced False - returns only the caller's own forms.
|
|
2245
|
+
Each item includes ``response_count`` (total submissions captured).
|
|
2246
|
+
|
|
2247
|
+
**Input**: none.
|
|
2248
|
+
|
|
2249
|
+
**Returns** `Record<string, unknown>`.
|
|
2250
|
+
|
|
2251
|
+
**Example**
|
|
2252
|
+
|
|
2253
|
+
```ts
|
|
2254
|
+
const result = await g8.api.appointments.listRoutingForms();
|
|
2255
|
+
```
|
|
2256
|
+
|
|
2257
|
+
---
|
|
2258
|
+
|
|
2259
|
+
<a id="op-listsavedfilters"></a>
|
|
2260
|
+
|
|
2261
|
+
### `g8.api.appointments.listSavedFilters(input?)`
|
|
2262
|
+
|
|
2263
|
+
**List Saved Filters**
|
|
2264
|
+
|
|
2265
|
+
- HTTP: `GET /api/v1/appointments/saved-filters`
|
|
2266
|
+
- operationId: `list_saved_filters_appointments_saved_filters_get` (also callable as `g8.api.call("list_saved_filters_appointments_saved_filters_get", input)`)
|
|
2267
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2268
|
+
- API-key scope: `meetings:read`
|
|
2269
|
+
|
|
2270
|
+
The caller's saved views over the bookings list.
|
|
2271
|
+
|
|
2272
|
+
**Input**: none.
|
|
2273
|
+
|
|
2274
|
+
**Returns** `ApiResponse_SchedulingListPayload_`: the envelope `{ data: SchedulingListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2275
|
+
|
|
2276
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2277
|
+
|
|
2278
|
+
`SchedulingListPayload` fields:
|
|
2279
|
+
|
|
2280
|
+
| Field | Type | Required | Description |
|
|
2281
|
+
|---|---|---|---|
|
|
2282
|
+
| `items` | `Array<unknown>` | no | |
|
|
2283
|
+
|
|
2284
|
+
**Example**
|
|
2285
|
+
|
|
2286
|
+
```ts
|
|
2287
|
+
const result = await g8.api.appointments.listSavedFilters();
|
|
2288
|
+
```
|
|
2289
|
+
|
|
2290
|
+
---
|
|
2291
|
+
|
|
2292
|
+
<a id="op-listschedules"></a>
|
|
2293
|
+
|
|
2294
|
+
### `g8.api.appointments.listSchedules(input?)`
|
|
2295
|
+
|
|
2296
|
+
**List the caller's availability schedules**
|
|
2297
|
+
|
|
2298
|
+
- HTTP: `GET /api/v1/appointments/schedules`
|
|
2299
|
+
- operationId: `list_schedules_appointments_schedules_get` (also callable as `g8.api.call("list_schedules_appointments_schedules_get", input)`)
|
|
2300
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2301
|
+
- API-key scope: `meetings:read`
|
|
2302
|
+
|
|
2303
|
+
List the caller's appointment availability schedules (the "when am I
|
|
2304
|
+
free?" working-hours profiles used by event types). This is DISTINCT from
|
|
2305
|
+
the sequencer send-window schedules at ``GET /schedules`` - those drive
|
|
2306
|
+
email send timing, these drive bookability. Each schedule carries its weekly
|
|
2307
|
+
rules' owner + a ``is_default`` flag derived from the caller's settings.
|
|
2308
|
+
|
|
2309
|
+
**Input**: none.
|
|
2310
|
+
|
|
2311
|
+
**Returns** `Record<string, unknown>`.
|
|
2312
|
+
|
|
2313
|
+
**Example**
|
|
2314
|
+
|
|
2315
|
+
```ts
|
|
2316
|
+
const result = await g8.api.appointments.listSchedules();
|
|
2317
|
+
```
|
|
2318
|
+
|
|
2319
|
+
---
|
|
2320
|
+
|
|
2321
|
+
<a id="op-listsequencesforpicker"></a>
|
|
2322
|
+
|
|
2323
|
+
### `g8.api.appointments.listSequencesForPicker(input?)`
|
|
2324
|
+
|
|
2325
|
+
**List Sequences For Picker**
|
|
2326
|
+
|
|
2327
|
+
- HTTP: `GET /api/v1/appointments/bookings/sequences-picker`
|
|
2328
|
+
- operationId: `list_sequences_for_picker_appointments_bookings_sequences_picker_get` (also callable as `g8.api.call("list_sequences_for_picker_appointments_bookings_sequences_picker_get", input)`)
|
|
2329
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2330
|
+
- API-key scope: `meetings:read`
|
|
2331
|
+
|
|
2332
|
+
Sequences a booking can be attributed to (`PATCH .../bookings/{uid}/sequence`).
|
|
2333
|
+
|
|
2334
|
+
SCOPED by the same sequence visibility the sequencer list uses, so two
|
|
2335
|
+
keys can legitimately get different lists. Archived and draft sequences
|
|
2336
|
+
are left out.
|
|
2337
|
+
|
|
2338
|
+
**Input**: none.
|
|
2339
|
+
|
|
2340
|
+
**Returns** `ApiResponse_SchedulingListPayload_`: the envelope `{ data: SchedulingListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2341
|
+
|
|
2342
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2343
|
+
|
|
2344
|
+
`SchedulingListPayload` fields:
|
|
2345
|
+
|
|
2346
|
+
| Field | Type | Required | Description |
|
|
2347
|
+
|---|---|---|---|
|
|
2348
|
+
| `items` | `Array<unknown>` | no | |
|
|
2349
|
+
|
|
2350
|
+
**Example**
|
|
2351
|
+
|
|
2352
|
+
```ts
|
|
2353
|
+
const result = await g8.api.appointments.listSequencesForPicker();
|
|
2354
|
+
```
|
|
2355
|
+
|
|
2356
|
+
---
|
|
2357
|
+
|
|
2358
|
+
<a id="op-listteamavailability"></a>
|
|
2359
|
+
|
|
2360
|
+
### `g8.api.appointments.listTeamAvailability(input)`
|
|
2361
|
+
|
|
2362
|
+
**List Team Availability**
|
|
2363
|
+
|
|
2364
|
+
- HTTP: `GET /api/v1/appointments/availability/team`
|
|
2365
|
+
- operationId: `list_team_availability_appointments_availability_team_get` (also callable as `g8.api.call("list_team_availability_appointments_availability_team_get", input)`)
|
|
2366
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2367
|
+
- API-key scope: `meetings:read`
|
|
2368
|
+
|
|
2369
|
+
Every teammate's availability windows for one day.
|
|
2370
|
+
|
|
2371
|
+
Cursor-paged on user id rather than offset, so a team that changes between
|
|
2372
|
+
pages does not shift rows under you. An empty `date_ranges` means that
|
|
2373
|
+
person has not set up a schedule, not that they are fully booked.
|
|
2374
|
+
|
|
2375
|
+
**Input**
|
|
2376
|
+
|
|
2377
|
+
| Field | Type | Required | Description |
|
|
2378
|
+
|---|---|---|---|
|
|
2379
|
+
| `query.date` | `string` | yes | The day, `YYYY-MM-DD`. |
|
|
2380
|
+
| `query.viewer_tz` | `string` | no | IANA timezone. INFORMATIONAL - the windows come back in UTC and the caller renders them; this shifts nothing server-side. default `"UTC"` |
|
|
2381
|
+
| `query.limit` | `integer` | no | default `50` |
|
|
2382
|
+
| `query.cursor` | `integer \| null` | no | `next_cursor` from the previous page. |
|
|
2383
|
+
| `query.search` | `string \| null` | no | Name or email substring. |
|
|
2384
|
+
| `query.user_ids` | `Array<integer> \| null` | no | Only these teammates. REPEATABLE (`?user_ids=1&user_ids=2`), and it takes PRECEDENCE over `search` - sending both ignores the search. |
|
|
2385
|
+
|
|
2386
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2387
|
+
|
|
2388
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2389
|
+
|
|
2390
|
+
**Example**
|
|
2391
|
+
|
|
2392
|
+
```ts
|
|
2393
|
+
const result = await g8.api.appointments.listTeamAvailability({ query: { date: "example" } });
|
|
2394
|
+
```
|
|
2395
|
+
|
|
2396
|
+
---
|
|
2397
|
+
|
|
2398
|
+
<a id="op-listworkflows"></a>
|
|
2399
|
+
|
|
2400
|
+
### `g8.api.appointments.listWorkflows(input?)`
|
|
2401
|
+
|
|
2402
|
+
**List all workflows**
|
|
2403
|
+
|
|
2404
|
+
- HTTP: `GET /api/v1/appointments/workflows`
|
|
2405
|
+
- operationId: `list_workflows_appointments_workflows_get` (also callable as `g8.api.call("list_workflows_appointments_workflows_get", input)`)
|
|
2406
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2407
|
+
- API-key scope: `meetings:read`
|
|
2408
|
+
|
|
2409
|
+
List all workflows for the organisation.
|
|
2410
|
+
|
|
2411
|
+
**Input**: none.
|
|
2412
|
+
|
|
2413
|
+
**Returns** `Record<string, unknown>`.
|
|
2414
|
+
|
|
2415
|
+
**Example**
|
|
2416
|
+
|
|
2417
|
+
```ts
|
|
2418
|
+
const result = await g8.api.appointments.listWorkflows();
|
|
2419
|
+
```
|
|
2420
|
+
|
|
2421
|
+
---
|
|
2422
|
+
|
|
2423
|
+
<a id="op-markabsent"></a>
|
|
2424
|
+
|
|
2425
|
+
### `g8.api.appointments.markAbsent(input)`
|
|
2426
|
+
|
|
2427
|
+
**Mark host or attendees as no-show**
|
|
2428
|
+
|
|
2429
|
+
- HTTP: `POST /api/v1/appointments/bookings/{booking_uid}/mark-absent`
|
|
2430
|
+
- operationId: `mark_absent_appointments_bookings__booking_uid__mark_absent_post` (also callable as `g8.api.call("mark_absent_appointments_bookings__booking_uid__mark_absent_post", input)`)
|
|
2431
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2432
|
+
- API-key scope: `meetings:run`
|
|
2433
|
+
|
|
2434
|
+
Record a no-show for the host, one or more attendees, or both.
|
|
2435
|
+
|
|
2436
|
+
Pass ``host=true`` to flag the host as absent. Pass ``attendees`` as a
|
|
2437
|
+
list of attendee dicts (each containing at least ``email``) to flag
|
|
2438
|
+
specific attendees. Backed by ``BookingsHandler.handle_mark_absent``
|
|
2439
|
+
(updates ``no_show`` flags; sends no automatic notifications - this is
|
|
2440
|
+
an operator CRM action). Raises 404 when the booking uid is not visible
|
|
2441
|
+
to the caller.
|
|
2442
|
+
|
|
2443
|
+
**Input**
|
|
2444
|
+
|
|
2445
|
+
| Field | Type | Required | Description |
|
|
2446
|
+
|---|---|---|---|
|
|
2447
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
2448
|
+
| `body` | `MarkAbsentRequest` | yes | Request body; fields below. |
|
|
2449
|
+
|
|
2450
|
+
Body fields (`MarkAbsentRequest`):
|
|
2451
|
+
|
|
2452
|
+
| Field | Type | Required | Description |
|
|
2453
|
+
|---|---|---|---|
|
|
2454
|
+
| `body.attendees` | `Array<Record<string, unknown>> \| null` | no | |
|
|
2455
|
+
| `body.host` | `boolean \| null` | no | |
|
|
2456
|
+
|
|
2457
|
+
**Returns** `Record<string, unknown>`.
|
|
2458
|
+
|
|
2459
|
+
**Example**
|
|
2460
|
+
|
|
2461
|
+
```ts
|
|
2462
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2463
|
+
const result = await g8.api.appointments.markAbsent({ path: { booking_uid: "example" }, body: {} });
|
|
2464
|
+
```
|
|
2465
|
+
|
|
2466
|
+
---
|
|
2467
|
+
|
|
2468
|
+
<a id="op-releaseslot"></a>
|
|
2469
|
+
|
|
2470
|
+
### `g8.api.appointments.releaseSlot(input)`
|
|
2471
|
+
|
|
2472
|
+
**Release Slot**
|
|
2473
|
+
|
|
2474
|
+
- HTTP: `DELETE /api/v1/appointments/slots/reserve/{slot_uid}`
|
|
2475
|
+
- operationId: `release_slot_appointments_slots_reserve__slot_uid__delete` (also callable as `g8.api.call("release_slot_appointments_slots_reserve__slot_uid__delete", input)`)
|
|
2476
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
2477
|
+
- API-key scope: `meetings:delete`
|
|
2478
|
+
|
|
2479
|
+
Give a held slot back before its hold lapses. Only the holder can.
|
|
2480
|
+
|
|
2481
|
+
**Input**
|
|
2482
|
+
|
|
2483
|
+
| Field | Type | Required | Description |
|
|
2484
|
+
|---|---|---|---|
|
|
2485
|
+
| `path.slot_uid` | `string` | yes | The `uid` returned by `POST /appointments/slots/reserve`. |
|
|
2486
|
+
|
|
2487
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2488
|
+
|
|
2489
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2490
|
+
|
|
2491
|
+
**Example**
|
|
2492
|
+
|
|
2493
|
+
```ts
|
|
2494
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
2495
|
+
const result = await g8.api.appointments.releaseSlot({ path: { slot_uid: "example" } });
|
|
2496
|
+
```
|
|
2497
|
+
|
|
2498
|
+
---
|
|
2499
|
+
|
|
2500
|
+
<a id="op-removeeventtypehost"></a>
|
|
2501
|
+
|
|
2502
|
+
### `g8.api.appointments.removeEventTypeHost(input)`
|
|
2503
|
+
|
|
2504
|
+
**Remove Event Type Host**
|
|
2505
|
+
|
|
2506
|
+
- HTTP: `DELETE /api/v1/appointments/event-types/{event_type_id}/hosts/{host_user_id}`
|
|
2507
|
+
- operationId: `remove_event_type_host_appointments_event_types__event_type_id__hosts__host_user_id__delete` (also callable as `g8.api.call("remove_event_type_host_appointments_event_types__event_type_id__hosts__host_user_id__delete", input)`)
|
|
2508
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
2509
|
+
- API-key scope: `meetings:delete`
|
|
2510
|
+
|
|
2511
|
+
Remove a host. Existing bookings already assigned to them are NOT
|
|
2512
|
+
reassigned - this only changes who future bookings can land on.
|
|
2513
|
+
|
|
2514
|
+
**Input**
|
|
2515
|
+
|
|
2516
|
+
| Field | Type | Required | Description |
|
|
2517
|
+
|---|---|---|---|
|
|
2518
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
2519
|
+
| `path.host_user_id` | `integer` | yes | Host user id. |
|
|
2520
|
+
|
|
2521
|
+
**Returns**: no JSON body is declared for the success response.
|
|
2522
|
+
|
|
2523
|
+
**Example**
|
|
2524
|
+
|
|
2525
|
+
```ts
|
|
2526
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
2527
|
+
const result = await g8.api.appointments.removeEventTypeHost({ path: { event_type_id: 123, host_user_id: 123 } });
|
|
2528
|
+
```
|
|
2529
|
+
|
|
2530
|
+
---
|
|
2531
|
+
|
|
2532
|
+
<a id="op-requestbookingreschedule"></a>
|
|
2533
|
+
|
|
2534
|
+
### `g8.api.appointments.requestBookingReschedule(input)`
|
|
2535
|
+
|
|
2536
|
+
**Send a reschedule-request email to the attendee (host action)**
|
|
2537
|
+
|
|
2538
|
+
- HTTP: `POST /api/v1/appointments/bookings/{booking_uid}/request-reschedule`
|
|
2539
|
+
- operationId: `request_booking_reschedule_appointments_bookings__booking_uid__request_reschedule_post` (also callable as `g8.api.call("request_booking_reschedule_appointments_bookings__booking_uid__request_reschedule_post", input)`)
|
|
2540
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2541
|
+
- API-key scope: `meetings:run`
|
|
2542
|
+
|
|
2543
|
+
Ask the attendee to pick a new time.
|
|
2544
|
+
|
|
2545
|
+
Sends a reschedule-request email with the optional host ``reason``
|
|
2546
|
+
message and a link to the public booking page. Does NOT move or cancel
|
|
2547
|
+
the original booking - the attendee reschedules by clicking the link.
|
|
2548
|
+
Backed by ``BookingsHandler.handle_request_reschedule``. Raises 404
|
|
2549
|
+
when the booking uid is not visible to the caller.
|
|
2550
|
+
|
|
2551
|
+
**Input**
|
|
2552
|
+
|
|
2553
|
+
| Field | Type | Required | Description |
|
|
2554
|
+
|---|---|---|---|
|
|
2555
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
2556
|
+
| `body` | `RequestRescheduleRequest` | yes | Request body; fields below. |
|
|
2557
|
+
|
|
2558
|
+
Body fields (`RequestRescheduleRequest`):
|
|
2559
|
+
|
|
2560
|
+
| Field | Type | Required | Description |
|
|
2561
|
+
|---|---|---|---|
|
|
2562
|
+
| `body.reason` | `string \| null` | no | |
|
|
2563
|
+
|
|
2564
|
+
**Returns** `Record<string, unknown>`.
|
|
2565
|
+
|
|
2566
|
+
**Example**
|
|
2567
|
+
|
|
2568
|
+
```ts
|
|
2569
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2570
|
+
const result = await g8.api.appointments.requestBookingReschedule({ path: { booking_uid: "example" }, body: {} });
|
|
2571
|
+
```
|
|
2572
|
+
|
|
2573
|
+
---
|
|
2574
|
+
|
|
2575
|
+
<a id="op-reschedulebooking"></a>
|
|
2576
|
+
|
|
2577
|
+
### `g8.api.appointments.rescheduleBooking(input)`
|
|
2578
|
+
|
|
2579
|
+
**Reschedule a booking to a new start time**
|
|
2580
|
+
|
|
2581
|
+
- HTTP: `POST /api/v1/appointments/bookings/{booking_uid}/reschedule`
|
|
2582
|
+
- operationId: `reschedule_booking_appointments_bookings__booking_uid__reschedule_post` (also callable as `g8.api.call("reschedule_booking_appointments_bookings__booking_uid__reschedule_post", input)`)
|
|
2583
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2584
|
+
- API-key scope: `meetings:run`
|
|
2585
|
+
|
|
2586
|
+
Reschedule a booking to ``start_time``. Reuses
|
|
2587
|
+
``BookingsHandler.handle_reschedule`` (no double credit charge — reschedules
|
|
2588
|
+
are free; re-renders the title, updates the calendar event, notifies
|
|
2589
|
+
attendees). Returns the NEW booking detail.
|
|
2590
|
+
|
|
2591
|
+
**Input**
|
|
2592
|
+
|
|
2593
|
+
| Field | Type | Required | Description |
|
|
2594
|
+
|---|---|---|---|
|
|
2595
|
+
| `path.booking_uid` | `string` | yes | |
|
|
2596
|
+
| `body` | `RescheduleBookingRequest` | yes | Request body; fields below. |
|
|
2597
|
+
|
|
2598
|
+
Body fields (`RescheduleBookingRequest`):
|
|
2599
|
+
|
|
2600
|
+
| Field | Type | Required | Description |
|
|
2601
|
+
|---|---|---|---|
|
|
2602
|
+
| `body.start_time` | `string` | yes | |
|
|
2603
|
+
| `body.rescheduling_reason` | `string \| null` | no | |
|
|
2604
|
+
|
|
2605
|
+
**Returns** `Record<string, unknown>`.
|
|
2606
|
+
|
|
2607
|
+
**Example**
|
|
2608
|
+
|
|
2609
|
+
```ts
|
|
2610
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2611
|
+
const result = await g8.api.appointments.rescheduleBooking({ path: { booking_uid: "example" }, body: { start_time: "example" } });
|
|
2612
|
+
```
|
|
2613
|
+
|
|
2614
|
+
---
|
|
2615
|
+
|
|
2616
|
+
<a id="op-reserveslot"></a>
|
|
2617
|
+
|
|
2618
|
+
### `g8.api.appointments.reserveSlot(input)`
|
|
2619
|
+
|
|
2620
|
+
**Reserve Slot**
|
|
2621
|
+
|
|
2622
|
+
- HTTP: `POST /api/v1/appointments/slots/reserve`
|
|
2623
|
+
- operationId: `reserve_slot_appointments_slots_reserve_post` (also callable as `g8.api.call("reserve_slot_appointments_slots_reserve_post", input)`)
|
|
2624
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2625
|
+
- API-key scope: `meetings:write`
|
|
2626
|
+
|
|
2627
|
+
Hold a slot for ten minutes while a booker fills in the form.
|
|
2628
|
+
|
|
2629
|
+
NOT a booking: nothing is written to a calendar and nobody is notified.
|
|
2630
|
+
The hold lapses by itself at `release_at`; release it explicitly if you
|
|
2631
|
+
know the booker walked away. A slot already taken is a 409.
|
|
2632
|
+
|
|
2633
|
+
**Input**
|
|
2634
|
+
|
|
2635
|
+
| Field | Type | Required | Description |
|
|
2636
|
+
|---|---|---|---|
|
|
2637
|
+
| `body` | `ReserveSlotRequest` | yes | Request body; fields below. |
|
|
2638
|
+
|
|
2639
|
+
Body fields (`ReserveSlotRequest`):
|
|
2640
|
+
|
|
2641
|
+
| Field | Type | Required | Description |
|
|
2642
|
+
|---|---|---|---|
|
|
2643
|
+
| `body.event_type_id` | `integer` | yes | |
|
|
2644
|
+
| `body.slot_end` | `string` | yes | ISO-8601 end of the slot being held. |
|
|
2645
|
+
| `body.slot_start` | `string` | yes | ISO-8601 start of the slot being held. |
|
|
2646
|
+
|
|
2647
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2648
|
+
|
|
2649
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2650
|
+
|
|
2651
|
+
**Example**
|
|
2652
|
+
|
|
2653
|
+
```ts
|
|
2654
|
+
const result = await g8.api.appointments.reserveSlot({
|
|
2655
|
+
body: { event_type_id: 123, slot_end: "example", slot_start: "example" },
|
|
2656
|
+
});
|
|
2657
|
+
```
|
|
2658
|
+
|
|
2659
|
+
---
|
|
2660
|
+
|
|
2661
|
+
<a id="op-selectcalendar"></a>
|
|
2662
|
+
|
|
2663
|
+
### `g8.api.appointments.selectCalendar(input)`
|
|
2664
|
+
|
|
2665
|
+
**Select a sub-calendar for conflict checking**
|
|
2666
|
+
|
|
2667
|
+
- HTTP: `POST /api/v1/appointments/calendars/selected`
|
|
2668
|
+
- operationId: `select_calendar_appointments_calendars_selected_post` (also callable as `g8.api.call("select_calendar_appointments_calendars_selected_post", input)`)
|
|
2669
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2670
|
+
- API-key scope: `meetings:run`
|
|
2671
|
+
|
|
2672
|
+
Add a sub-calendar to the caller's conflict-checking set.
|
|
2673
|
+
Reuses the in-app select_calendar logic (credential ownership check +
|
|
2674
|
+
create_selected_calendar). Raises 404 when the credential is not found
|
|
2675
|
+
or does not belong to the caller.
|
|
2676
|
+
|
|
2677
|
+
**Input**
|
|
2678
|
+
|
|
2679
|
+
| Field | Type | Required | Description |
|
|
2680
|
+
|---|---|---|---|
|
|
2681
|
+
| `body` | `SelectCalendarRequest` | yes | Request body; fields below. |
|
|
2682
|
+
|
|
2683
|
+
Body fields (`SelectCalendarRequest`):
|
|
2684
|
+
|
|
2685
|
+
| Field | Type | Required | Description |
|
|
2686
|
+
|---|---|---|---|
|
|
2687
|
+
| `body.credential_id` | `integer` | yes | |
|
|
2688
|
+
| `body.external_id` | `string` | yes | |
|
|
2689
|
+
| `body.integration` | `string` | yes | |
|
|
2690
|
+
|
|
2691
|
+
**Returns** `SelectedCalendarEnvelope`: the envelope `{ data: SelectedCalendarResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2692
|
+
|
|
2693
|
+
`SelectedCalendarResponse` fields:
|
|
2694
|
+
|
|
2695
|
+
| Field | Type | Required | Description |
|
|
2696
|
+
|---|---|---|---|
|
|
2697
|
+
| `external_id` | `string` | yes | |
|
|
2698
|
+
| `id` | `string` | yes | |
|
|
2699
|
+
| `integration` | `string` | yes | |
|
|
2700
|
+
| `credential_id` | `integer \| null` | no | |
|
|
2701
|
+
|
|
2702
|
+
**Example**
|
|
2703
|
+
|
|
2704
|
+
```ts
|
|
2705
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2706
|
+
const result = await g8.api.appointments.selectCalendar({
|
|
2707
|
+
body: { credential_id: 123, external_id: "id", integration: "example" },
|
|
2708
|
+
});
|
|
2709
|
+
```
|
|
2710
|
+
|
|
2711
|
+
---
|
|
2712
|
+
|
|
2713
|
+
<a id="op-setdefaultconferencing"></a>
|
|
2714
|
+
|
|
2715
|
+
### `g8.api.appointments.setDefaultConferencing(input)`
|
|
2716
|
+
|
|
2717
|
+
**Set the default conferencing provider**
|
|
2718
|
+
|
|
2719
|
+
- HTTP: `POST /api/v1/appointments/conferencing/{provider}/default`
|
|
2720
|
+
- operationId: `set_default_conferencing_appointments_conferencing__provider__default_post` (also callable as `g8.api.call("set_default_conferencing_appointments_conferencing__provider__default_post", input)`)
|
|
2721
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2722
|
+
- API-key scope: `meetings:run`
|
|
2723
|
+
|
|
2724
|
+
Set the default conferencing provider for new meetings. For link-based
|
|
2725
|
+
providers (roam, whereby, jitsi) a meeting URL is required (either in the
|
|
2726
|
+
request or previously stored on the credential). Reuses the in-app
|
|
2727
|
+
set_default_conferencing logic.
|
|
2728
|
+
|
|
2729
|
+
**Input**
|
|
2730
|
+
|
|
2731
|
+
| Field | Type | Required | Description |
|
|
2732
|
+
|---|---|---|---|
|
|
2733
|
+
| `path.provider` | `string` | yes | |
|
|
2734
|
+
| `body` | `SetDefaultConferencingRequest` | yes | Request body; fields below. |
|
|
2735
|
+
|
|
2736
|
+
Body fields (`SetDefaultConferencingRequest`):
|
|
2737
|
+
|
|
2738
|
+
| Field | Type | Required | Description |
|
|
2739
|
+
|---|---|---|---|
|
|
2740
|
+
| `body.credential_id` | `integer \| null` | no | |
|
|
2741
|
+
| `body.link` | `string \| null` | no | |
|
|
2742
|
+
|
|
2743
|
+
**Returns** `DefaultConferencingEnvelope`: the envelope `{ data: DefaultConferencingResponse, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2744
|
+
|
|
2745
|
+
`DefaultConferencingResponse` fields:
|
|
2746
|
+
|
|
2747
|
+
| Field | Type | Required | Description |
|
|
2748
|
+
|---|---|---|---|
|
|
2749
|
+
| `credential_id` | `integer \| null` | no | |
|
|
2750
|
+
| `link` | `string \| null` | no | |
|
|
2751
|
+
| `provider` | `string \| null` | no | |
|
|
2752
|
+
|
|
2753
|
+
**Example**
|
|
2754
|
+
|
|
2755
|
+
```ts
|
|
2756
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2757
|
+
const result = await g8.api.appointments.setDefaultConferencing({ path: { provider: "example" }, body: {} });
|
|
2758
|
+
```
|
|
2759
|
+
|
|
2760
|
+
---
|
|
2761
|
+
|
|
2762
|
+
<a id="op-setdefaultschedule"></a>
|
|
2763
|
+
|
|
2764
|
+
### `g8.api.appointments.setDefaultSchedule(input)`
|
|
2765
|
+
|
|
2766
|
+
**Set a schedule as the caller's default**
|
|
2767
|
+
|
|
2768
|
+
- HTTP: `POST /api/v1/appointments/schedules/{schedule_id}/set-default`
|
|
2769
|
+
- operationId: `set_default_schedule_appointments_schedules__schedule_id__set_default_post` (also callable as `g8.api.call("set_default_schedule_appointments_schedules__schedule_id__set_default_post", input)`)
|
|
2770
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2771
|
+
- API-key scope: `meetings:write`
|
|
2772
|
+
|
|
2773
|
+
Mark a schedule as the caller's default availability schedule.
|
|
2774
|
+
|
|
2775
|
+
Persists via ``repo.update_appointment_settings(default_schedule_id=...)``
|
|
2776
|
+
which is identical to the in-app ``PATCH /me`` (profile router) path that
|
|
2777
|
+
sets ``default_schedule_id``. The default schedule is used for slot
|
|
2778
|
+
generation when an event type has no schedule attached (Layer 3 resolution).
|
|
2779
|
+
Returns 404 when the schedule does not exist or belongs to another user.
|
|
2780
|
+
|
|
2781
|
+
**Input**
|
|
2782
|
+
|
|
2783
|
+
| Field | Type | Required | Description |
|
|
2784
|
+
|---|---|---|---|
|
|
2785
|
+
| `path.schedule_id` | `integer` | yes | Schedule integer ID. |
|
|
2786
|
+
|
|
2787
|
+
**Returns** `Record<string, unknown>`.
|
|
2788
|
+
|
|
2789
|
+
**Example**
|
|
2790
|
+
|
|
2791
|
+
```ts
|
|
2792
|
+
const result = await g8.api.appointments.setDefaultSchedule({ path: { schedule_id: 1 } });
|
|
2793
|
+
```
|
|
2794
|
+
|
|
2795
|
+
---
|
|
2796
|
+
|
|
2797
|
+
<a id="op-setdestinationcalendar"></a>
|
|
2798
|
+
|
|
2799
|
+
### `g8.api.appointments.setDestinationCalendar(input)`
|
|
2800
|
+
|
|
2801
|
+
**Set the destination calendar for new booking events**
|
|
2802
|
+
|
|
2803
|
+
- HTTP: `PUT /api/v1/appointments/calendars/destination`
|
|
2804
|
+
- operationId: `set_destination_calendar_appointments_calendars_destination_put` (also callable as `g8.api.call("set_destination_calendar_appointments_calendars_destination_put", input)`)
|
|
2805
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2806
|
+
- API-key scope: `meetings:run`
|
|
2807
|
+
|
|
2808
|
+
Set (upsert) the destination calendar where booking events are pushed.
|
|
2809
|
+
Optionally scoped to a specific event type via ``event_type_id``. Reuses
|
|
2810
|
+
the in-app set_destination_calendar logic (upsert_destination_calendar).
|
|
2811
|
+
|
|
2812
|
+
**Input**
|
|
2813
|
+
|
|
2814
|
+
| Field | Type | Required | Description |
|
|
2815
|
+
|---|---|---|---|
|
|
2816
|
+
| `body` | `SetDestinationCalendarRequest` | yes | Request body; fields below. |
|
|
2817
|
+
|
|
2818
|
+
Body fields (`SetDestinationCalendarRequest`):
|
|
2819
|
+
|
|
2820
|
+
| Field | Type | Required | Description |
|
|
2821
|
+
|---|---|---|---|
|
|
2822
|
+
| `body.external_id` | `string` | yes | |
|
|
2823
|
+
| `body.integration` | `string` | yes | |
|
|
2824
|
+
| `body.credential_id` | `integer \| null` | no | |
|
|
2825
|
+
| `body.event_type_id` | `integer \| null` | no | |
|
|
2826
|
+
|
|
2827
|
+
**Returns** `DestinationCalendarEnvelope`: the envelope `{ data: DestinationCalendarResponse | null, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2828
|
+
|
|
2829
|
+
`data` fields:
|
|
2830
|
+
|
|
2831
|
+
| Field | Type | Required | Description |
|
|
2832
|
+
|---|---|---|---|
|
|
2833
|
+
| `external_id` | `string` | yes | |
|
|
2834
|
+
| `id` | `integer` | yes | |
|
|
2835
|
+
| `integration` | `string` | yes | |
|
|
2836
|
+
| `credential_id` | `integer \| null` | no | |
|
|
2837
|
+
| `event_type_id` | `integer \| null` | no | |
|
|
2838
|
+
| `primary_email` | `string \| null` | no | |
|
|
2839
|
+
|
|
2840
|
+
**Example**
|
|
2841
|
+
|
|
2842
|
+
```ts
|
|
2843
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2844
|
+
const result = await g8.api.appointments.setDestinationCalendar({ body: { external_id: "id", integration: "example" } });
|
|
2845
|
+
```
|
|
2846
|
+
|
|
2847
|
+
---
|
|
2848
|
+
|
|
2849
|
+
<a id="op-seteventtypedestinationcalendar"></a>
|
|
2850
|
+
|
|
2851
|
+
### `g8.api.appointments.setEventTypeDestinationCalendar(input)`
|
|
2852
|
+
|
|
2853
|
+
**Set Event Type Destination Calendar**
|
|
2854
|
+
|
|
2855
|
+
- HTTP: `PUT /api/v1/appointments/event-types/{event_type_id}/destination-calendar`
|
|
2856
|
+
- operationId: `set_event_type_destination_calendar_appointments_event_types__event_type_id__destination_calendar_put` (also callable as `g8.api.call("set_event_type_destination_calendar_appointments_event_types__event_type_id__destination_calendar_put", input)`)
|
|
2857
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2858
|
+
- API-key scope: `meetings:write`
|
|
2859
|
+
|
|
2860
|
+
Point one event type at a specific calendar.
|
|
2861
|
+
|
|
2862
|
+
The credential must belong to the key owner - the app enforces that, which
|
|
2863
|
+
is why this cannot write bookings onto a colleague's calendar.
|
|
2864
|
+
|
|
2865
|
+
**Input**
|
|
2866
|
+
|
|
2867
|
+
| Field | Type | Required | Description |
|
|
2868
|
+
|---|---|---|---|
|
|
2869
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
2870
|
+
| `body` | `UpdateDestinationCalendarRequest` | yes | Request body; fields below. |
|
|
2871
|
+
|
|
2872
|
+
Body fields (`UpdateDestinationCalendarRequest`):
|
|
2873
|
+
|
|
2874
|
+
| Field | Type | Required | Description |
|
|
2875
|
+
|---|---|---|---|
|
|
2876
|
+
| `body.credential_id` | `integer` | yes | The connected-calendar credential to write through. |
|
|
2877
|
+
| `body.external_id` | `string` | yes | The calendar's id in the provider. |
|
|
2878
|
+
| `body.integration` | `string` | yes | Calendar integration key, e.g. `google_calendar`. |
|
|
2879
|
+
| `body.primary_email` | `string \| null` | no | |
|
|
2880
|
+
| `body.use_calendar_email` | `boolean` | no | Send invitations from the calendar's own address rather than the host's. default `false` |
|
|
2881
|
+
|
|
2882
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2883
|
+
|
|
2884
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2885
|
+
|
|
2886
|
+
**Example**
|
|
2887
|
+
|
|
2888
|
+
```ts
|
|
2889
|
+
const result = await g8.api.appointments.setEventTypeDestinationCalendar({
|
|
2890
|
+
path: { event_type_id: 123 },
|
|
2891
|
+
body: { credential_id: 123, external_id: "id", integration: "example" },
|
|
2892
|
+
});
|
|
2893
|
+
```
|
|
2894
|
+
|
|
2895
|
+
---
|
|
2896
|
+
|
|
2897
|
+
<a id="op-seteventtypeselectedcalendars"></a>
|
|
2898
|
+
|
|
2899
|
+
### `g8.api.appointments.setEventTypeSelectedCalendars(input)`
|
|
2900
|
+
|
|
2901
|
+
**Set Event Type Selected Calendars**
|
|
2902
|
+
|
|
2903
|
+
- HTTP: `PUT /api/v1/appointments/event-types/{event_type_id}/selected-calendars`
|
|
2904
|
+
- operationId: `set_event_type_selected_calendars_appointments_event_types__event_type_id__selected_calendars_put` (also callable as `g8.api.call("set_event_type_selected_calendars_appointments_event_types__event_type_id__selected_calendars_put", input)`)
|
|
2905
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2906
|
+
- API-key scope: `meetings:write`
|
|
2907
|
+
|
|
2908
|
+
Set the conflict-check scope for this event type.
|
|
2909
|
+
|
|
2910
|
+
`scope="account"` falls back to the key owner's account-wide selection
|
|
2911
|
+
and IGNORES `entries`. `scope="event_type"` REPLACES the per-event-type
|
|
2912
|
+
list with the entries sent (only `enabled` ones are kept) - so an empty
|
|
2913
|
+
list there means nothing is checked and every slot looks free.
|
|
2914
|
+
|
|
2915
|
+
**Input**
|
|
2916
|
+
|
|
2917
|
+
| Field | Type | Required | Description |
|
|
2918
|
+
|---|---|---|---|
|
|
2919
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
2920
|
+
| `body` | `UpdateSelectedCalendarsRequest` | yes | Request body; fields below. |
|
|
2921
|
+
|
|
2922
|
+
Body fields (`UpdateSelectedCalendarsRequest`):
|
|
2923
|
+
|
|
2924
|
+
| Field | Type | Required | Description |
|
|
2925
|
+
|---|---|---|---|
|
|
2926
|
+
| `body.scope` | `"account" \| "event_type"` | yes | |
|
|
2927
|
+
| `body.entries` | `Array<SelectedCalendarEntry>` | no | |
|
|
2928
|
+
|
|
2929
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2930
|
+
|
|
2931
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2932
|
+
|
|
2933
|
+
**Example**
|
|
2934
|
+
|
|
2935
|
+
```ts
|
|
2936
|
+
const result = await g8.api.appointments.setEventTypeSelectedCalendars({ path: { event_type_id: 123 }, body: { scope: "account" } });
|
|
2937
|
+
```
|
|
2938
|
+
|
|
2939
|
+
---
|
|
2940
|
+
|
|
2941
|
+
<a id="op-setlockedfields"></a>
|
|
2942
|
+
|
|
2943
|
+
### `g8.api.appointments.setLockedFields(input)`
|
|
2944
|
+
|
|
2945
|
+
**Set Locked Fields**
|
|
2946
|
+
|
|
2947
|
+
- HTTP: `PUT /api/v1/appointments/event-types/{event_type_id}/locked-fields`
|
|
2948
|
+
- operationId: `set_locked_fields_appointments_event_types__event_type_id__locked_fields_put` (also callable as `g8.api.call("set_locked_fields_appointments_event_types__event_type_id__locked_fields_put", input)`)
|
|
2949
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2950
|
+
- API-key scope: `meetings:write`
|
|
2951
|
+
|
|
2952
|
+
Decide which fields a managed template owns for every child copy.
|
|
2953
|
+
|
|
2954
|
+
A locked field is read-only on the child AND is re-propagated from the
|
|
2955
|
+
template - so locking `length` after the fact OVERWRITES whatever each
|
|
2956
|
+
member had set. `propagation_notice` in the result counts the future
|
|
2957
|
+
bookings that touched. An empty list unlocks everything.
|
|
2958
|
+
|
|
2959
|
+
**Input**
|
|
2960
|
+
|
|
2961
|
+
| Field | Type | Required | Description |
|
|
2962
|
+
|---|---|---|---|
|
|
2963
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
2964
|
+
| `body` | `SetLockedFieldsRequest` | yes | Request body; fields below. |
|
|
2965
|
+
|
|
2966
|
+
Body fields (`SetLockedFieldsRequest`):
|
|
2967
|
+
|
|
2968
|
+
| Field | Type | Required | Description |
|
|
2969
|
+
|---|---|---|---|
|
|
2970
|
+
| `body.locked_fields` | `Array<"after_event_buffer" \| "before_event_buffer" \| "booking_fields" \| "description" \| "disable_cancelling" \| "disable_guests" \| "disable_rescheduling" \| "event_name" \| …>` | no | Fields locked on the managed template. An empty list unlocks everything. |
|
|
2971
|
+
|
|
2972
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2973
|
+
|
|
2974
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2975
|
+
|
|
2976
|
+
**Example**
|
|
2977
|
+
|
|
2978
|
+
```ts
|
|
2979
|
+
const result = await g8.api.appointments.setLockedFields({ path: { event_type_id: 123 }, body: {} });
|
|
2980
|
+
```
|
|
2981
|
+
|
|
2982
|
+
---
|
|
2983
|
+
|
|
2984
|
+
<a id="op-setproviderlink"></a>
|
|
2985
|
+
|
|
2986
|
+
### `g8.api.appointments.setProviderLink(input)`
|
|
2987
|
+
|
|
2988
|
+
**Set or update a link-based conferencing provider's meeting URL**
|
|
2989
|
+
|
|
2990
|
+
- HTTP: `PUT /api/v1/appointments/conferencing/{provider}/link`
|
|
2991
|
+
- operationId: `set_provider_link_appointments_conferencing__provider__link_put` (also callable as `g8.api.call("set_provider_link_appointments_conferencing__provider__link_put", input)`)
|
|
2992
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2993
|
+
- API-key scope: `meetings:run`
|
|
2994
|
+
|
|
2995
|
+
Set or update the meeting URL for a link-based conferencing provider
|
|
2996
|
+
(roam, whereby, jitsi). The provider must already be installed. Validates
|
|
2997
|
+
the URL against the provider's pattern. Reuses the in-app set_provider_link
|
|
2998
|
+
logic (validate + update_credential_key).
|
|
2999
|
+
|
|
3000
|
+
**Input**
|
|
3001
|
+
|
|
3002
|
+
| Field | Type | Required | Description |
|
|
3003
|
+
|---|---|---|---|
|
|
3004
|
+
| `path.provider` | `string` | yes | |
|
|
3005
|
+
| `body` | `Body_set_provider_link_appointments_conferencing__provider__link_put` | yes | Request body; fields below. |
|
|
3006
|
+
|
|
3007
|
+
Body fields (`Body_set_provider_link_appointments_conferencing__provider__link_put`):
|
|
3008
|
+
|
|
3009
|
+
| Field | Type | Required | Description |
|
|
3010
|
+
|---|---|---|---|
|
|
3011
|
+
| `body.link` | `string` | yes | |
|
|
3012
|
+
|
|
3013
|
+
**Returns** `Record<string, unknown>`.
|
|
3014
|
+
|
|
3015
|
+
**Example**
|
|
3016
|
+
|
|
3017
|
+
```ts
|
|
3018
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3019
|
+
const result = await g8.api.appointments.setProviderLink({ path: { provider: "example" }, body: { link: "example" } });
|
|
3020
|
+
```
|
|
3021
|
+
|
|
3022
|
+
---
|
|
3023
|
+
|
|
3024
|
+
<a id="op-toggleworkflow"></a>
|
|
3025
|
+
|
|
3026
|
+
### `g8.api.appointments.toggleWorkflow(input)`
|
|
3027
|
+
|
|
3028
|
+
**Activate or deactivate a workflow**
|
|
3029
|
+
|
|
3030
|
+
- HTTP: `POST /api/v1/appointments/workflows/{workflow_id}/toggle`
|
|
3031
|
+
- operationId: `toggle_workflow_appointments_workflows__workflow_id__toggle_post` (also callable as `g8.api.call("toggle_workflow_appointments_workflows__workflow_id__toggle_post", input)`)
|
|
3032
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
3033
|
+
- API-key scope: `meetings:run`
|
|
3034
|
+
|
|
3035
|
+
Set the workflow's active state. When deactivating (``active: false``),
|
|
3036
|
+
all pending reminders are cancelled first (same behaviour as the in-app
|
|
3037
|
+
toggle) so the reminder worker never fires steps for a disabled workflow.
|
|
3038
|
+
|
|
3039
|
+
**Input**
|
|
3040
|
+
|
|
3041
|
+
| Field | Type | Required | Description |
|
|
3042
|
+
|---|---|---|---|
|
|
3043
|
+
| `path.workflow_id` | `integer` | yes | Workflow integer ID. |
|
|
3044
|
+
| `body` | `ToggleWorkflowRequest` | yes | Request body; fields below. |
|
|
3045
|
+
|
|
3046
|
+
Body fields (`ToggleWorkflowRequest`):
|
|
3047
|
+
|
|
3048
|
+
| Field | Type | Required | Description |
|
|
3049
|
+
|---|---|---|---|
|
|
3050
|
+
| `body.active` | `boolean` | yes | |
|
|
3051
|
+
|
|
3052
|
+
**Returns** `Record<string, unknown>`.
|
|
3053
|
+
|
|
3054
|
+
**Example**
|
|
3055
|
+
|
|
3056
|
+
```ts
|
|
3057
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3058
|
+
const result = await g8.api.appointments.toggleWorkflow({ path: { workflow_id: 1 }, body: { active: true } });
|
|
3059
|
+
```
|
|
3060
|
+
|
|
3061
|
+
---
|
|
3062
|
+
|
|
3063
|
+
<a id="op-unassignmanagedmember"></a>
|
|
3064
|
+
|
|
3065
|
+
### `g8.api.appointments.unassignManagedMember(input)`
|
|
3066
|
+
|
|
3067
|
+
**Unassign Managed Member**
|
|
3068
|
+
|
|
3069
|
+
- HTTP: `DELETE /api/v1/appointments/event-types/{event_type_id}/members/{user_id}`
|
|
3070
|
+
- operationId: `unassign_managed_member_appointments_event_types__event_type_id__members__user_id__delete` (also callable as `g8.api.call("unassign_managed_member_appointments_event_types__event_type_id__members__user_id__delete", input)`)
|
|
3071
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
3072
|
+
- API-key scope: `meetings:delete`
|
|
3073
|
+
|
|
3074
|
+
Take a member off a managed template.
|
|
3075
|
+
|
|
3076
|
+
DESTRUCTIVE in a way the name understates: this HARD-DELETES that member's
|
|
3077
|
+
child event type, so their booking link for it stops resolving. Bookings
|
|
3078
|
+
already made survive, detached from any event type.
|
|
3079
|
+
|
|
3080
|
+
**Input**
|
|
3081
|
+
|
|
3082
|
+
| Field | Type | Required | Description |
|
|
3083
|
+
|---|---|---|---|
|
|
3084
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
3085
|
+
| `path.user_id` | `integer` | yes | The member's integer scheduling user id. |
|
|
3086
|
+
|
|
3087
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3088
|
+
|
|
3089
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3090
|
+
|
|
3091
|
+
**Example**
|
|
3092
|
+
|
|
3093
|
+
```ts
|
|
3094
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
3095
|
+
const result = await g8.api.appointments.unassignManagedMember({ path: { event_type_id: 123, user_id: 1 } });
|
|
3096
|
+
```
|
|
3097
|
+
|
|
3098
|
+
---
|
|
3099
|
+
|
|
3100
|
+
<a id="op-updateavailability"></a>
|
|
3101
|
+
|
|
3102
|
+
### `g8.api.appointments.updateAvailability(input)`
|
|
3103
|
+
|
|
3104
|
+
**Replace availability rules and/or date overrides for a schedule**
|
|
3105
|
+
|
|
3106
|
+
- HTTP: `PATCH /api/v1/appointments/schedules/{schedule_id}/availability`
|
|
3107
|
+
- operationId: `update_availability_appointments_schedules__schedule_id__availability_patch` (also callable as `g8.api.call("update_availability_appointments_schedules__schedule_id__availability_patch", input)`)
|
|
3108
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3109
|
+
- API-key scope: `meetings:write`
|
|
3110
|
+
|
|
3111
|
+
Replace weekly availability rules and/or date overrides for a schedule.
|
|
3112
|
+
|
|
3113
|
+
Body: ``{"availability": [...], "overrides": [...]}``
|
|
3114
|
+
|
|
3115
|
+
- ``availability``: list of ``{days, start_time, end_time}`` - replaces ALL weekly rules.
|
|
3116
|
+
- ``overrides``: list of ``{date, start_time, end_time}`` - replaces ALL date overrides.
|
|
3117
|
+
|
|
3118
|
+
Omit a key to leave that set unchanged. At least one key is required.
|
|
3119
|
+
Mirrors the in-app ``PATCH /schedules/{id}/availability`` logic verbatim.
|
|
3120
|
+
Typed via ``UpdateAvailabilityRequest`` so malformed items fail at FastAPI
|
|
3121
|
+
validation (422) rather than as an opaque 500.
|
|
3122
|
+
|
|
3123
|
+
**Input**
|
|
3124
|
+
|
|
3125
|
+
| Field | Type | Required | Description |
|
|
3126
|
+
|---|---|---|---|
|
|
3127
|
+
| `path.schedule_id` | `integer` | yes | Schedule integer ID. |
|
|
3128
|
+
| `body` | `UpdateAvailabilityRequest` | yes | Request body; fields below. |
|
|
3129
|
+
|
|
3130
|
+
Body fields (`UpdateAvailabilityRequest`):
|
|
3131
|
+
|
|
3132
|
+
| Field | Type | Required | Description |
|
|
3133
|
+
|---|---|---|---|
|
|
3134
|
+
| `body.availability` | `Array<AvailabilityInput> \| null` | no | |
|
|
3135
|
+
| `body.overrides` | `Array<OverrideInput> \| null` | no | |
|
|
3136
|
+
|
|
3137
|
+
**Returns** `Record<string, unknown>`.
|
|
3138
|
+
|
|
3139
|
+
**Example**
|
|
3140
|
+
|
|
3141
|
+
```ts
|
|
3142
|
+
const result = await g8.api.appointments.updateAvailability({ path: { schedule_id: 1 }, body: {} });
|
|
3143
|
+
```
|
|
3144
|
+
|
|
3145
|
+
---
|
|
3146
|
+
|
|
3147
|
+
<a id="op-updatebookinglocation"></a>
|
|
3148
|
+
|
|
3149
|
+
### `g8.api.appointments.updateBookingLocation(input)`
|
|
3150
|
+
|
|
3151
|
+
**Update the meeting location and notify both parties**
|
|
3152
|
+
|
|
3153
|
+
- HTTP: `PATCH /api/v1/appointments/bookings/{booking_uid}/location`
|
|
3154
|
+
- operationId: `update_booking_location_appointments_bookings__booking_uid__location_patch` (also callable as `g8.api.call("update_booking_location_appointments_bookings__booking_uid__location_patch", input)`)
|
|
3155
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
3156
|
+
- API-key scope: `meetings:run`
|
|
3157
|
+
|
|
3158
|
+
Change the meeting location for a booking and re-notify both parties.
|
|
3159
|
+
|
|
3160
|
+
``location`` is a location key such as ``"zoom"``, ``"google_meet"``,
|
|
3161
|
+
``"in_person"``, or a custom URL. Backed by
|
|
3162
|
+
``BookingsHandler.handle_update_location`` (updates the booking row,
|
|
3163
|
+
sends location-updated emails, emits an EDA event). Raises 404 when
|
|
3164
|
+
the booking uid is not visible to the caller.
|
|
3165
|
+
|
|
3166
|
+
**Input**
|
|
3167
|
+
|
|
3168
|
+
| Field | Type | Required | Description |
|
|
3169
|
+
|---|---|---|---|
|
|
3170
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
3171
|
+
| `body` | `UpdateLocationRequest` | yes | Request body; fields below. |
|
|
3172
|
+
|
|
3173
|
+
Body fields (`UpdateLocationRequest`):
|
|
3174
|
+
|
|
3175
|
+
| Field | Type | Required | Description |
|
|
3176
|
+
|---|---|---|---|
|
|
3177
|
+
| `body.location` | `string` | yes | |
|
|
3178
|
+
|
|
3179
|
+
**Returns** `Record<string, unknown>`.
|
|
3180
|
+
|
|
3181
|
+
**Example**
|
|
3182
|
+
|
|
3183
|
+
```ts
|
|
3184
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3185
|
+
const result = await g8.api.appointments.updateBookingLocation({ path: { booking_uid: "example" }, body: { location: "example" } });
|
|
3186
|
+
```
|
|
3187
|
+
|
|
3188
|
+
---
|
|
3189
|
+
|
|
3190
|
+
<a id="op-updatebookingsequence"></a>
|
|
3191
|
+
|
|
3192
|
+
### `g8.api.appointments.updateBookingSequence(input)`
|
|
3193
|
+
|
|
3194
|
+
**Associate a booking with a sequence (or detach)**
|
|
3195
|
+
|
|
3196
|
+
- HTTP: `PATCH /api/v1/appointments/bookings/{booking_uid}/sequence`
|
|
3197
|
+
- operationId: `update_booking_sequence_appointments_bookings__booking_uid__sequence_patch` (also callable as `g8.api.call("update_booking_sequence_appointments_bookings__booking_uid__sequence_patch", input)`)
|
|
3198
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
3199
|
+
- API-key scope: `meetings:run`
|
|
3200
|
+
|
|
3201
|
+
Link a booking to a sequencer sequence or remove the link.
|
|
3202
|
+
|
|
3203
|
+
``sequence_id`` is the sequence UUID (``seqsequences.id``); pass
|
|
3204
|
+
``null`` / omit to detach. Writes to
|
|
3205
|
+
``booking.metadata_['campaignId']`` - the same field the public booking
|
|
3206
|
+
flow populates from ``?campaignId=`` at create time. No EDA event is
|
|
3207
|
+
emitted (CRM-only action). Backed by
|
|
3208
|
+
``BookingsHandler.handle_update_sequence``. Raises 404 when the
|
|
3209
|
+
booking uid is not visible to the caller.
|
|
3210
|
+
|
|
3211
|
+
**Input**
|
|
3212
|
+
|
|
3213
|
+
| Field | Type | Required | Description |
|
|
3214
|
+
|---|---|---|---|
|
|
3215
|
+
| `path.booking_uid` | `string` | yes | Booking UID (uuid string). |
|
|
3216
|
+
| `body` | `appointments__domain__entities__UpdateSequenceRequest` | yes | Request body; fields below. |
|
|
3217
|
+
|
|
3218
|
+
Body fields (`appointments__domain__entities__UpdateSequenceRequest`):
|
|
3219
|
+
|
|
3220
|
+
| Field | Type | Required | Description |
|
|
3221
|
+
|---|---|---|---|
|
|
3222
|
+
| `body.sequence_id` | `string \| null` | no | |
|
|
3223
|
+
|
|
3224
|
+
**Returns** `Record<string, unknown>`.
|
|
3225
|
+
|
|
3226
|
+
**Example**
|
|
3227
|
+
|
|
3228
|
+
```ts
|
|
3229
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3230
|
+
const result = await g8.api.appointments.updateBookingSequence({ path: { booking_uid: "example" }, body: {} });
|
|
3231
|
+
```
|
|
3232
|
+
|
|
3233
|
+
---
|
|
3234
|
+
|
|
3235
|
+
<a id="op-updateembedconfig"></a>
|
|
3236
|
+
|
|
3237
|
+
### `g8.api.appointments.updateEmbedConfig(input)`
|
|
3238
|
+
|
|
3239
|
+
**Update Embed Config**
|
|
3240
|
+
|
|
3241
|
+
- HTTP: `PATCH /api/v1/appointments/event-types/{event_type_id}/embed`
|
|
3242
|
+
- operationId: `update_embed_config_appointments_event_types__event_type_id__embed_patch` (also callable as `g8.api.call("update_embed_config_appointments_event_types__event_type_id__embed_patch", input)`)
|
|
3243
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3244
|
+
- API-key scope: `meetings:write`
|
|
3245
|
+
|
|
3246
|
+
Restyle the embedded booking widget. Only what you send is written.
|
|
3247
|
+
|
|
3248
|
+
Like the org branding, this is visible to PROSPECTS rather than the team.
|
|
3249
|
+
|
|
3250
|
+
**Input**
|
|
3251
|
+
|
|
3252
|
+
| Field | Type | Required | Description |
|
|
3253
|
+
|---|---|---|---|
|
|
3254
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
3255
|
+
| `body` | `UpdateEmbedConfigRequest` | yes | Request body; fields below. |
|
|
3256
|
+
|
|
3257
|
+
Body fields (`UpdateEmbedConfigRequest`):
|
|
3258
|
+
|
|
3259
|
+
| Field | Type | Required | Description |
|
|
3260
|
+
|---|---|---|---|
|
|
3261
|
+
| `body.brand_color` | `string \| null` | no | |
|
|
3262
|
+
| `body.brand_color_dark` | `string \| null` | no | |
|
|
3263
|
+
| `body.button_position` | `string \| null` | no | |
|
|
3264
|
+
| `body.button_text` | `string \| null` | no | |
|
|
3265
|
+
| `body.button_text_color` | `string \| null` | no | |
|
|
3266
|
+
| `body.hide_event_type_details` | `boolean \| null` | no | |
|
|
3267
|
+
| `body.layout` | `string \| null` | no | |
|
|
3268
|
+
| `body.theme` | `string \| null` | no | |
|
|
3269
|
+
|
|
3270
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3271
|
+
|
|
3272
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3273
|
+
|
|
3274
|
+
**Example**
|
|
3275
|
+
|
|
3276
|
+
```ts
|
|
3277
|
+
const result = await g8.api.appointments.updateEmbedConfig({ path: { event_type_id: 123 }, body: {} });
|
|
3278
|
+
```
|
|
3279
|
+
|
|
3280
|
+
---
|
|
3281
|
+
|
|
3282
|
+
<a id="op-updateeventtype"></a>
|
|
3283
|
+
|
|
3284
|
+
### `g8.api.appointments.updateEventType(input)`
|
|
3285
|
+
|
|
3286
|
+
**Update an event type (partial)**
|
|
3287
|
+
|
|
3288
|
+
- HTTP: `PATCH /api/v1/appointments/event-types/{event_type_id}`
|
|
3289
|
+
- operationId: `update_event_type_appointments_event_types__event_type_id__patch` (also callable as `g8.api.call("update_event_type_appointments_event_types__event_type_id__patch", input)`)
|
|
3290
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3291
|
+
- API-key scope: `meetings:write`
|
|
3292
|
+
|
|
3293
|
+
Partially update an event type. Only the fields you send are changed
|
|
3294
|
+
(``exclude_unset`` semantics) - omit a field to leave it untouched, including
|
|
3295
|
+
``hidden`` (the active/visible toggle). Reuses
|
|
3296
|
+
``EventTypesHandler.handle_update`` (schedule-ownership guard, host policy).
|
|
3297
|
+
``is_admin`` is forced False.
|
|
3298
|
+
|
|
3299
|
+
**Input**
|
|
3300
|
+
|
|
3301
|
+
| Field | Type | Required | Description |
|
|
3302
|
+
|---|---|---|---|
|
|
3303
|
+
| `path.event_type_id` | `integer` | yes | Event-type integer ID. |
|
|
3304
|
+
| `body` | `UpdateEventTypeRequest` | yes | Request body; fields below. |
|
|
3305
|
+
|
|
3306
|
+
Body fields (`UpdateEventTypeRequest`):
|
|
3307
|
+
|
|
3308
|
+
| Field | Type | Required | Description |
|
|
3309
|
+
|---|---|---|---|
|
|
3310
|
+
| `body.after_event_buffer` | `integer \| null` | no | |
|
|
3311
|
+
| `body.before_event_buffer` | `integer \| null` | no | |
|
|
3312
|
+
| `body.booking_fields` | `Array<Record<string, unknown>> \| null` | no | |
|
|
3313
|
+
| `body.default_layout` | `string \| null` | no | |
|
|
3314
|
+
| `body.description` | `string \| null` | no | |
|
|
3315
|
+
| `body.disable_cancelling` | `boolean \| null` | no | |
|
|
3316
|
+
| `body.disable_guests` | `boolean \| null` | no | |
|
|
3317
|
+
| `body.disable_rescheduling` | `boolean \| null` | no | |
|
|
3318
|
+
| `body.event_color` | `string \| null` | no | |
|
|
3319
|
+
| `body.event_name` | `string \| null` | no | |
|
|
3320
|
+
| `body.hidden` | `boolean \| null` | no | |
|
|
3321
|
+
| `body.layouts` | `Array<string> \| null` | no | |
|
|
3322
|
+
| `body.length` | `integer \| null` | no | |
|
|
3323
|
+
| `body.locations` | `Array<Record<string, unknown>> \| null` | no | |
|
|
3324
|
+
| `body.metadata` | `Record<string, unknown> \| null` | no | |
|
|
3325
|
+
| `body.minimum_booking_notice` | `integer \| null` | no | |
|
|
3326
|
+
| `body.period_days` | `integer \| null` | no | |
|
|
3327
|
+
| `body.period_end_date` | `string \| null` | no | |
|
|
3328
|
+
| `body.period_start_date` | `string \| null` | no | |
|
|
3329
|
+
| `body.period_type` | `string \| null` | no | |
|
|
3330
|
+
| `body.recurring_event` | `Record<string, unknown> \| null` | no | |
|
|
3331
|
+
| `body.requires_confirmation` | `boolean \| null` | no | |
|
|
3332
|
+
| `body.schedule_id` | `integer \| null` | no | |
|
|
3333
|
+
| `body.scheduling_type` | `string \| null` | no | |
|
|
3334
|
+
| `body.seats_per_time_slot` | `integer \| null` | no | |
|
|
3335
|
+
| `body.slot_interval` | `integer \| null` | no | |
|
|
3336
|
+
| `body.slug` | `string \| null` | no | |
|
|
3337
|
+
| `body.success_redirect_url` | `string \| null` | no | |
|
|
3338
|
+
| `body.time_zone` | `string \| null` | no | |
|
|
3339
|
+
| `body.title` | `string \| null` | no | |
|
|
3340
|
+
| `body.use_common_schedule` | `boolean \| null` | no | |
|
|
3341
|
+
|
|
3342
|
+
**Returns** `Record<string, unknown>`.
|
|
3343
|
+
|
|
3344
|
+
**Example**
|
|
3345
|
+
|
|
3346
|
+
```ts
|
|
3347
|
+
const result = await g8.api.appointments.updateEventType({ path: { event_type_id: 1 }, body: {} });
|
|
3348
|
+
```
|
|
3349
|
+
|
|
3350
|
+
---
|
|
3351
|
+
|
|
3352
|
+
<a id="op-updateeventtypehost"></a>
|
|
3353
|
+
|
|
3354
|
+
### `g8.api.appointments.updateEventTypeHost(input)`
|
|
3355
|
+
|
|
3356
|
+
**Update Event Type Host**
|
|
3357
|
+
|
|
3358
|
+
- HTTP: `PATCH /api/v1/appointments/event-types/{event_type_id}/hosts/{host_user_id}`
|
|
3359
|
+
- operationId: `update_event_type_host_appointments_event_types__event_type_id__hosts__host_user_id__patch` (also callable as `g8.api.call("update_event_type_host_appointments_event_types__event_type_id__hosts__host_user_id__patch", input)`)
|
|
3360
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3361
|
+
- API-key scope: `meetings:write`
|
|
3362
|
+
|
|
3363
|
+
Change a host's rotation settings. Omitted fields are left alone.
|
|
3364
|
+
|
|
3365
|
+
**Input**
|
|
3366
|
+
|
|
3367
|
+
| Field | Type | Required | Description |
|
|
3368
|
+
|---|---|---|---|
|
|
3369
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
3370
|
+
| `path.host_user_id` | `integer` | yes | Host user id. |
|
|
3371
|
+
| `body` | `AppointmentHostUpdateRequest` | yes | Request body; fields below. |
|
|
3372
|
+
|
|
3373
|
+
Body fields (`AppointmentHostUpdateRequest`):
|
|
3374
|
+
|
|
3375
|
+
| Field | Type | Required | Description |
|
|
3376
|
+
|---|---|---|---|
|
|
3377
|
+
| `body.group_id` | `string \| null` | no | |
|
|
3378
|
+
| `body.is_fixed` | `boolean \| null` | no | |
|
|
3379
|
+
| `body.priority` | `integer \| null` | no | |
|
|
3380
|
+
| `body.schedule_id` | `integer \| null` | no | |
|
|
3381
|
+
| `body.weight` | `integer \| null` | no | |
|
|
3382
|
+
|
|
3383
|
+
**Returns** `ApiResponse_AppointmentHost_`: the envelope `{ data: AppointmentHost, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3384
|
+
|
|
3385
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3386
|
+
|
|
3387
|
+
`AppointmentHost` fields:
|
|
3388
|
+
|
|
3389
|
+
| Field | Type | Required | Description |
|
|
3390
|
+
|---|---|---|---|
|
|
3391
|
+
| `avatar_url` | `string \| null` | no | |
|
|
3392
|
+
| `email` | `string \| null` | no | |
|
|
3393
|
+
| `event_type_id` | `integer \| null` | no | |
|
|
3394
|
+
| `group_id` | `string \| null` | no | Host group, if partitioned. |
|
|
3395
|
+
| `is_fixed` | `boolean \| null` | no | True = on EVERY booking. False = one of the round-robin rotation. This is the setting that decides who actually gets booked. |
|
|
3396
|
+
| `name` | `string \| null` | no | |
|
|
3397
|
+
| `priority` | `integer \| null` | no | Rotation priority. |
|
|
3398
|
+
| `schedule_id` | `integer \| null` | no | Availability schedule this host is booked against. |
|
|
3399
|
+
| `user_id` | `integer \| null` | no | |
|
|
3400
|
+
| `weight` | `integer \| null` | no | Relative share of the rotation. |
|
|
3401
|
+
|
|
3402
|
+
**Example**
|
|
3403
|
+
|
|
3404
|
+
```ts
|
|
3405
|
+
const result = await g8.api.appointments.updateEventTypeHost({ path: { event_type_id: 123, host_user_id: 123 }, body: {} });
|
|
3406
|
+
```
|
|
3407
|
+
|
|
3408
|
+
---
|
|
3409
|
+
|
|
3410
|
+
<a id="op-updateeventtypehostgroup"></a>
|
|
3411
|
+
|
|
3412
|
+
### `g8.api.appointments.updateEventTypeHostGroup(input)`
|
|
3413
|
+
|
|
3414
|
+
**Update Event Type Host Group**
|
|
3415
|
+
|
|
3416
|
+
- HTTP: `PATCH /api/v1/appointments/event-types/{event_type_id}/host-groups/{group_id}`
|
|
3417
|
+
- operationId: `update_event_type_host_group_appointments_event_types__event_type_id__host_groups__group_id__patch` (also callable as `g8.api.call("update_event_type_host_group_appointments_event_types__event_type_id__host_groups__group_id__patch", input)`)
|
|
3418
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3419
|
+
- API-key scope: `meetings:write`
|
|
3420
|
+
|
|
3421
|
+
Rename a host group.
|
|
3422
|
+
|
|
3423
|
+
**Input**
|
|
3424
|
+
|
|
3425
|
+
| Field | Type | Required | Description |
|
|
3426
|
+
|---|---|---|---|
|
|
3427
|
+
| `path.event_type_id` | `integer` | yes | Event type id. |
|
|
3428
|
+
| `path.group_id` | `string` | yes | Host group id. |
|
|
3429
|
+
| `body` | `AppointmentHostGroupWriteRequest` | yes | Request body; fields below. |
|
|
3430
|
+
|
|
3431
|
+
Body fields (`AppointmentHostGroupWriteRequest`):
|
|
3432
|
+
|
|
3433
|
+
| Field | Type | Required | Description |
|
|
3434
|
+
|---|---|---|---|
|
|
3435
|
+
| `body.name` | `string` | yes | Group name. min length 1 |
|
|
3436
|
+
|
|
3437
|
+
**Returns** `ApiResponse_AppointmentHostGroup_`: the envelope `{ data: AppointmentHostGroup, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3438
|
+
|
|
3439
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3440
|
+
|
|
3441
|
+
`AppointmentHostGroup` fields:
|
|
3442
|
+
|
|
3443
|
+
| Field | Type | Required | Description |
|
|
3444
|
+
|---|---|---|---|
|
|
3445
|
+
| `created_at` | `string (date-time) \| null` | no | |
|
|
3446
|
+
| `event_type_id` | `integer \| null` | no | |
|
|
3447
|
+
| `id` | `string \| null` | no | |
|
|
3448
|
+
| `name` | `string \| null` | no | |
|
|
3449
|
+
|
|
3450
|
+
**Example**
|
|
3451
|
+
|
|
3452
|
+
```ts
|
|
3453
|
+
const result = await g8.api.appointments.updateEventTypeHostGroup({
|
|
3454
|
+
path: { event_type_id: 123, group_id: "id" },
|
|
3455
|
+
body: { name: "Example" },
|
|
3456
|
+
});
|
|
3457
|
+
```
|
|
3458
|
+
|
|
3459
|
+
---
|
|
3460
|
+
|
|
3461
|
+
<a id="op-updatememberrole"></a>
|
|
3462
|
+
|
|
3463
|
+
### `g8.api.appointments.updateMemberRole(input)`
|
|
3464
|
+
|
|
3465
|
+
**Update Member Role**
|
|
3466
|
+
|
|
3467
|
+
- HTTP: `PATCH /api/v1/appointments/membership/by-user/{user_id}/role`
|
|
3468
|
+
- operationId: `update_member_role_appointments_membership_by_user__user_id__role_patch` (also callable as `g8.api.call("update_member_role_appointments_membership_by_user__user_id__role_patch", input)`)
|
|
3469
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
3470
|
+
- API-key scope: `meetings:delete`
|
|
3471
|
+
|
|
3472
|
+
Change someone's SCHEDULING role. Admin keys only.
|
|
3473
|
+
|
|
3474
|
+
This decides what they can do in scheduling, not in graph8 generally -
|
|
3475
|
+
organisation roles live in Settings and are not reachable from here.
|
|
3476
|
+
|
|
3477
|
+
**Input**
|
|
3478
|
+
|
|
3479
|
+
| Field | Type | Required | Description |
|
|
3480
|
+
|---|---|---|---|
|
|
3481
|
+
| `path.user_id` | `integer` | yes | The member's INTEGER scheduling user id - `user_id` from `GET /appointments/membership`. Not a PropelAuth id or an email. |
|
|
3482
|
+
| `body` | `UpdateMemberRoleRequest` | yes | Request body; fields below. |
|
|
3483
|
+
|
|
3484
|
+
Body fields (`UpdateMemberRoleRequest`):
|
|
3485
|
+
|
|
3486
|
+
| Field | Type | Required | Description |
|
|
3487
|
+
|---|---|---|---|
|
|
3488
|
+
| `body.role` | `"ADMIN" \| "MEMBER"` | yes | |
|
|
3489
|
+
|
|
3490
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3491
|
+
|
|
3492
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3493
|
+
|
|
3494
|
+
**Example**
|
|
3495
|
+
|
|
3496
|
+
```ts
|
|
3497
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
3498
|
+
const result = await g8.api.appointments.updateMemberRole({ path: { user_id: 123 }, body: { role: "ADMIN" } });
|
|
3499
|
+
```
|
|
3500
|
+
|
|
3501
|
+
---
|
|
3502
|
+
|
|
3503
|
+
<a id="op-updateooo"></a>
|
|
3504
|
+
|
|
3505
|
+
### `g8.api.appointments.updateOoo(input)`
|
|
3506
|
+
|
|
3507
|
+
**Update an out-of-office entry**
|
|
3508
|
+
|
|
3509
|
+
- HTTP: `PATCH /api/v1/appointments/out-of-office/{ooo_uuid}`
|
|
3510
|
+
- operationId: `update_ooo_appointments_out_of_office__ooo_uuid__patch` (also callable as `g8.api.call("update_ooo_appointments_out_of_office__ooo_uuid__patch", input)`)
|
|
3511
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3512
|
+
- API-key scope: `meetings:write`
|
|
3513
|
+
|
|
3514
|
+
Update an entry owned by the calling API user.
|
|
3515
|
+
|
|
3516
|
+
**Input**
|
|
3517
|
+
|
|
3518
|
+
| Field | Type | Required | Description |
|
|
3519
|
+
|---|---|---|---|
|
|
3520
|
+
| `path.ooo_uuid` | `string` | yes | UUID of the out-of-office entry to update. |
|
|
3521
|
+
| `body` | `UpdateOutOfOfficeRequest` | yes | Request body; fields below. |
|
|
3522
|
+
|
|
3523
|
+
Body fields (`UpdateOutOfOfficeRequest`):
|
|
3524
|
+
|
|
3525
|
+
| Field | Type | Required | Description |
|
|
3526
|
+
|---|---|---|---|
|
|
3527
|
+
| `body.end` | `string \| null` | no | |
|
|
3528
|
+
| `body.notes` | `string \| null` | no | |
|
|
3529
|
+
| `body.public_note` | `string \| null` | no | |
|
|
3530
|
+
| `body.reason` | `string \| null` | no | |
|
|
3531
|
+
| `body.start` | `string \| null` | no | |
|
|
3532
|
+
| `body.time_zone` | `string \| null` | no | |
|
|
3533
|
+
| `body.to_user_id` | `integer \| null` | no | |
|
|
3534
|
+
|
|
3535
|
+
**Returns** `Record<string, unknown>`.
|
|
3536
|
+
|
|
3537
|
+
**Example**
|
|
3538
|
+
|
|
3539
|
+
```ts
|
|
3540
|
+
const result = await g8.api.appointments.updateOoo({
|
|
3541
|
+
path: { ooo_uuid: "00000000-0000-0000-0000-000000000000" },
|
|
3542
|
+
body: {},
|
|
3543
|
+
});
|
|
3544
|
+
```
|
|
3545
|
+
|
|
3546
|
+
---
|
|
3547
|
+
|
|
3548
|
+
<a id="op-updateorgsettings"></a>
|
|
3549
|
+
|
|
3550
|
+
### `g8.api.appointments.updateOrgSettings(input)`
|
|
3551
|
+
|
|
3552
|
+
**Update Org Settings**
|
|
3553
|
+
|
|
3554
|
+
- HTTP: `PATCH /api/v1/appointments/org-settings`
|
|
3555
|
+
- operationId: `update_org_settings_appointments_org_settings_patch` (also callable as `g8.api.call("update_org_settings_appointments_org_settings_patch", input)`)
|
|
3556
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3557
|
+
- API-key scope: `meetings:write`
|
|
3558
|
+
|
|
3559
|
+
Change the booking page's branding. Admin keys only.
|
|
3560
|
+
|
|
3561
|
+
Only what you send is written. This is what a PROSPECT sees, so a wrong
|
|
3562
|
+
value here is visible outside the organisation rather than inside it.
|
|
3563
|
+
|
|
3564
|
+
**Input**
|
|
3565
|
+
|
|
3566
|
+
| Field | Type | Required | Description |
|
|
3567
|
+
|---|---|---|---|
|
|
3568
|
+
| `body` | `UpdateOrgSettingsRequest` | yes | Request body; fields below. |
|
|
3569
|
+
|
|
3570
|
+
Body fields (`UpdateOrgSettingsRequest`):
|
|
3571
|
+
|
|
3572
|
+
| Field | Type | Required | Description |
|
|
3573
|
+
|---|---|---|---|
|
|
3574
|
+
| `body.booking_page_theme` | `"light" \| "dark" \| "auto" \| null` | no | |
|
|
3575
|
+
| `body.brand_color` | `string \| null` | no | Six-digit hex including the leading `#`, e.g. `#1a2b3c`. pattern `^#[0-9a-fA-F]{6}$` |
|
|
3576
|
+
| `body.hide_branding` | `boolean \| null` | no | Remove the graph8 mark from the booking page. |
|
|
3577
|
+
| `body.logo_url` | `string (uri) \| null` | no | min length 1, max length 2083 |
|
|
3578
|
+
|
|
3579
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3580
|
+
|
|
3581
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3582
|
+
|
|
3583
|
+
**Example**
|
|
3584
|
+
|
|
3585
|
+
```ts
|
|
3586
|
+
const result = await g8.api.appointments.updateOrgSettings({ body: {} });
|
|
3587
|
+
```
|
|
3588
|
+
|
|
3589
|
+
---
|
|
3590
|
+
|
|
3591
|
+
<a id="op-updateroutingform"></a>
|
|
3592
|
+
|
|
3593
|
+
### `g8.api.appointments.updateRoutingForm(input)`
|
|
3594
|
+
|
|
3595
|
+
**Update a routing form (partial)**
|
|
3596
|
+
|
|
3597
|
+
- HTTP: `PATCH /api/v1/appointments/routing-forms/{form_id}`
|
|
3598
|
+
- operationId: `update_routing_form_appointments_routing_forms__form_id__patch` (also callable as `g8.api.call("update_routing_form_appointments_routing_forms__form_id__patch", input)`)
|
|
3599
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3600
|
+
- API-key scope: `meetings:write`
|
|
3601
|
+
|
|
3602
|
+
Partially update a routing form. Only sent fields are changed.
|
|
3603
|
+
|
|
3604
|
+
Omit a field to leave it untouched. Slug must be unique in the org (409 on
|
|
3605
|
+
collision). Fields/routes are replaced atomically when present in the body.
|
|
3606
|
+
|
|
3607
|
+
**Input**
|
|
3608
|
+
|
|
3609
|
+
| Field | Type | Required | Description |
|
|
3610
|
+
|---|---|---|---|
|
|
3611
|
+
| `path.form_id` | `integer` | yes | Routing form integer ID. |
|
|
3612
|
+
| `body` | `UpdateRoutingFormRequest` | yes | Request body; fields below. |
|
|
3613
|
+
|
|
3614
|
+
Body fields (`UpdateRoutingFormRequest`):
|
|
3615
|
+
|
|
3616
|
+
| Field | Type | Required | Description |
|
|
3617
|
+
|---|---|---|---|
|
|
3618
|
+
| `body.description` | `string \| null` | no | |
|
|
3619
|
+
| `body.disabled` | `boolean \| null` | no | |
|
|
3620
|
+
| `body.fields` | `Array<RoutingFormField> \| null` | no | |
|
|
3621
|
+
| `body.name` | `string \| null` | no | min length 1, max length 255 |
|
|
3622
|
+
| `body.routes` | `Array<RoutingFormRouteInput> \| null` | no | |
|
|
3623
|
+
| `body.slug` | `string \| null` | no | |
|
|
3624
|
+
|
|
3625
|
+
**Returns** `Record<string, unknown>`.
|
|
3626
|
+
|
|
3627
|
+
**Example**
|
|
3628
|
+
|
|
3629
|
+
```ts
|
|
3630
|
+
const result = await g8.api.appointments.updateRoutingForm({ path: { form_id: 1 }, body: {} });
|
|
3631
|
+
```
|
|
3632
|
+
|
|
3633
|
+
---
|
|
3634
|
+
|
|
3635
|
+
<a id="op-updatesavedfilter"></a>
|
|
3636
|
+
|
|
3637
|
+
### `g8.api.appointments.updateSavedFilter(input)`
|
|
3638
|
+
|
|
3639
|
+
**Update Saved Filter**
|
|
3640
|
+
|
|
3641
|
+
- HTTP: `PUT /api/v1/appointments/saved-filters/{filter_id}`
|
|
3642
|
+
- operationId: `update_saved_filter_appointments_saved_filters__filter_id__put` (also callable as `g8.api.call("update_saved_filter_appointments_saved_filters__filter_id__put", input)`)
|
|
3643
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3644
|
+
- API-key scope: `meetings:write`
|
|
3645
|
+
|
|
3646
|
+
Change a saved view.
|
|
3647
|
+
|
|
3648
|
+
`null` LEAVES A FIELD ALONE, except `description`, where null is a real
|
|
3649
|
+
clear. That asymmetry is the app's and is mirrored rather than smoothed
|
|
3650
|
+
over, because smoothing it would make "remove the description" impossible.
|
|
3651
|
+
|
|
3652
|
+
**Input**
|
|
3653
|
+
|
|
3654
|
+
| Field | Type | Required | Description |
|
|
3655
|
+
|---|---|---|---|
|
|
3656
|
+
| `path.filter_id` | `string` | yes | Filter id (UUID). |
|
|
3657
|
+
| `body` | `UpdateSavedFilterRequest` | yes | Request body; fields below. |
|
|
3658
|
+
|
|
3659
|
+
Body fields (`UpdateSavedFilterRequest`):
|
|
3660
|
+
|
|
3661
|
+
| Field | Type | Required | Description |
|
|
3662
|
+
|---|---|---|---|
|
|
3663
|
+
| `body.description` | `string \| null` | no | Null CLEARS this one, unlike the others. max length 2000 |
|
|
3664
|
+
| `body.state` | `Record<string, unknown> \| null` | no | |
|
|
3665
|
+
| `body.title` | `string \| null` | no | min length 1, max length 120 |
|
|
3666
|
+
|
|
3667
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3668
|
+
|
|
3669
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3670
|
+
|
|
3671
|
+
**Example**
|
|
3672
|
+
|
|
3673
|
+
```ts
|
|
3674
|
+
const result = await g8.api.appointments.updateSavedFilter({ path: { filter_id: "id" }, body: {} });
|
|
3675
|
+
```
|
|
3676
|
+
|
|
3677
|
+
---
|
|
3678
|
+
|
|
3679
|
+
<a id="op-updateschedule"></a>
|
|
3680
|
+
|
|
3681
|
+
### `g8.api.appointments.updateSchedule(input)`
|
|
3682
|
+
|
|
3683
|
+
**Update a schedule (partial)**
|
|
3684
|
+
|
|
3685
|
+
- HTTP: `PATCH /api/v1/appointments/schedules/{schedule_id}`
|
|
3686
|
+
- operationId: `update_schedule_appointments_schedules__schedule_id__patch` (also callable as `g8.api.call("update_schedule_appointments_schedules__schedule_id__patch", input)`)
|
|
3687
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3688
|
+
- API-key scope: `meetings:write`
|
|
3689
|
+
|
|
3690
|
+
Partially update a schedule. Pass only the fields to change.
|
|
3691
|
+
|
|
3692
|
+
- ``name`` / ``time_zone``: update schedule metadata.
|
|
3693
|
+
- ``availability``: replaces ALL weekly recurring rules (pass every active day).
|
|
3694
|
+
- ``overrides``: replaces ALL date-specific overrides.
|
|
3695
|
+
- ``is_default``: when True, sets this as the caller's default schedule.
|
|
3696
|
+
|
|
3697
|
+
**Input**
|
|
3698
|
+
|
|
3699
|
+
| Field | Type | Required | Description |
|
|
3700
|
+
|---|---|---|---|
|
|
3701
|
+
| `path.schedule_id` | `integer` | yes | Schedule integer ID. |
|
|
3702
|
+
| `body` | `UpdateScheduleRequest` | yes | Request body; fields below. |
|
|
3703
|
+
|
|
3704
|
+
Body fields (`UpdateScheduleRequest`):
|
|
3705
|
+
|
|
3706
|
+
| Field | Type | Required | Description |
|
|
3707
|
+
|---|---|---|---|
|
|
3708
|
+
| `body.availability` | `Array<AvailabilityInput> \| null` | no | |
|
|
3709
|
+
| `body.is_default` | `boolean \| null` | no | |
|
|
3710
|
+
| `body.name` | `string \| null` | no | |
|
|
3711
|
+
| `body.overrides` | `Array<OverrideInput> \| null` | no | |
|
|
3712
|
+
| `body.time_zone` | `string \| null` | no | |
|
|
3713
|
+
|
|
3714
|
+
**Returns** `Record<string, unknown>`.
|
|
3715
|
+
|
|
3716
|
+
**Example**
|
|
3717
|
+
|
|
3718
|
+
```ts
|
|
3719
|
+
const result = await g8.api.appointments.updateSchedule({ path: { schedule_id: 1 }, body: {} });
|
|
3720
|
+
```
|
|
3721
|
+
|
|
3722
|
+
---
|
|
3723
|
+
|
|
3724
|
+
<a id="op-updatescheduleprofile"></a>
|
|
3725
|
+
|
|
3726
|
+
### `g8.api.appointments.updateScheduleProfile(input)`
|
|
3727
|
+
|
|
3728
|
+
**Update Schedule Profile**
|
|
3729
|
+
|
|
3730
|
+
- HTTP: `PATCH /api/v1/appointments/profile`
|
|
3731
|
+
- operationId: `update_schedule_profile_appointments_profile_patch` (also callable as `g8.api.call("update_schedule_profile_appointments_profile_patch", input)`)
|
|
3732
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3733
|
+
- API-key scope: `meetings:write`
|
|
3734
|
+
|
|
3735
|
+
Change the key owner's scheduling preferences. Only what you send is written.
|
|
3736
|
+
|
|
3737
|
+
`username` is the personal booking-URL slug and is GLOBALLY unique across
|
|
3738
|
+
graph8, claimed atomically - a rename can lose the race and come back as a
|
|
3739
|
+
conflict rather than succeeding quietly.
|
|
3740
|
+
|
|
3741
|
+
**Input**
|
|
3742
|
+
|
|
3743
|
+
| Field | Type | Required | Description |
|
|
3744
|
+
|---|---|---|---|
|
|
3745
|
+
| `body` | `UpdateScheduleProfileRequest` | yes | Request body; fields below. |
|
|
3746
|
+
|
|
3747
|
+
Body fields (`UpdateScheduleProfileRequest`):
|
|
3748
|
+
|
|
3749
|
+
| Field | Type | Required | Description |
|
|
3750
|
+
|---|---|---|---|
|
|
3751
|
+
| `body.buffer_time` | `integer \| null` | no | Minutes held either side of a booking. |
|
|
3752
|
+
| `body.default_schedule_id` | `integer \| null` | no | |
|
|
3753
|
+
| `body.hide_calendar_from_org` | `boolean \| null` | no | Hide the caller's external calendars from teammates' org-wide overlay. |
|
|
3754
|
+
| `body.time_format` | `integer \| null` | no | 12 or 24. |
|
|
3755
|
+
| `body.time_zone` | `string \| null` | no | IANA timezone, e.g. `Europe/London`. |
|
|
3756
|
+
| `body.username` | `string \| null` | no | Personal booking-URL slug. GLOBALLY unique across graph8 and claimed atomically, so a rename can lose the race and come back as a conflict. |
|
|
3757
|
+
| `body.week_start` | `string \| null` | no | |
|
|
3758
|
+
|
|
3759
|
+
**Returns** `ApiResponse_SchedulingPayload_`: the envelope `{ data: SchedulingPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3760
|
+
|
|
3761
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3762
|
+
|
|
3763
|
+
**Example**
|
|
3764
|
+
|
|
3765
|
+
```ts
|
|
3766
|
+
const result = await g8.api.appointments.updateScheduleProfile({ body: {} });
|
|
3767
|
+
```
|
|
3768
|
+
|
|
3769
|
+
---
|
|
3770
|
+
|
|
3771
|
+
<a id="op-updateworkflow"></a>
|
|
3772
|
+
|
|
3773
|
+
### `g8.api.appointments.updateWorkflow(input)`
|
|
3774
|
+
|
|
3775
|
+
**Update a workflow (partial)**
|
|
3776
|
+
|
|
3777
|
+
- HTTP: `PATCH /api/v1/appointments/workflows/{workflow_id}`
|
|
3778
|
+
- operationId: `update_workflow_appointments_workflows__workflow_id__patch` (also callable as `g8.api.call("update_workflow_appointments_workflows__workflow_id__patch", input)`)
|
|
3779
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
3780
|
+
- API-key scope: `meetings:run`
|
|
3781
|
+
|
|
3782
|
+
Partially update a workflow. Only the fields you send are changed; omit a
|
|
3783
|
+
field to leave it as-is. Steps are replaced wholesale when provided.
|
|
3784
|
+
|
|
3785
|
+
**Input**
|
|
3786
|
+
|
|
3787
|
+
| Field | Type | Required | Description |
|
|
3788
|
+
|---|---|---|---|
|
|
3789
|
+
| `path.workflow_id` | `integer` | yes | Workflow integer ID. |
|
|
3790
|
+
| `body` | `UpdateWorkflowRequest` | yes | Request body; fields below. |
|
|
3791
|
+
|
|
3792
|
+
Body fields (`UpdateWorkflowRequest`):
|
|
3793
|
+
|
|
3794
|
+
| Field | Type | Required | Description |
|
|
3795
|
+
|---|---|---|---|
|
|
3796
|
+
| `body.event_type_ids` | `Array<integer> \| null` | no | |
|
|
3797
|
+
| `body.is_active_on_all` | `boolean \| null` | no | |
|
|
3798
|
+
| `body.name` | `string \| null` | no | min length 1, max length 255 |
|
|
3799
|
+
| `body.steps` | `Array<WorkflowStepInput> \| null` | no | min items 1, max items 20 |
|
|
3800
|
+
| `body.time` | `integer \| null` | no | min 1 |
|
|
3801
|
+
| `body.time_unit` | `"minutes" \| "hours" \| "days" \| null` | no | |
|
|
3802
|
+
| `body.trigger` | `"new_booking" \| "before_event" \| "after_event" \| "booking_cancelled" \| "booking_rescheduled" \| null` | no | |
|
|
3803
|
+
|
|
3804
|
+
**Returns** `Record<string, unknown>`.
|
|
3805
|
+
|
|
3806
|
+
**Example**
|
|
3807
|
+
|
|
3808
|
+
```ts
|
|
3809
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3810
|
+
const result = await g8.api.appointments.updateWorkflow({ path: { workflow_id: 1 }, body: {} });
|
|
3811
|
+
```
|
|
3812
|
+
|
|
3813
|
+
---
|
|
3814
|
+
|
|
3815
|
+
## Referenced types
|
|
3816
|
+
|
|
3817
|
+
Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
|
|
3818
|
+
|
|
3819
|
+
<a id="type-attendeeinput"></a>
|
|
3820
|
+
|
|
3821
|
+
### `AttendeeInput`
|
|
3822
|
+
|
|
3823
|
+
| Field | Type | Required | Description |
|
|
3824
|
+
|---|---|---|---|
|
|
3825
|
+
| `email` | `string` | yes | |
|
|
3826
|
+
| `name` | `string` | yes | |
|
|
3827
|
+
| `phone_number` | `string \| null` | no | |
|
|
3828
|
+
| `time_zone` | `string \| null` | no | |
|
|
3829
|
+
|
|
3830
|
+
<a id="type-availabilityinput"></a>
|
|
3831
|
+
|
|
3832
|
+
### `AvailabilityInput`
|
|
3833
|
+
|
|
3834
|
+
| Field | Type | Required | Description |
|
|
3835
|
+
|---|---|---|---|
|
|
3836
|
+
| `days` | `Array<integer>` | yes | |
|
|
3837
|
+
| `end_time` | `string` | yes | |
|
|
3838
|
+
| `start_time` | `string` | yes | |
|
|
3839
|
+
|
|
3840
|
+
<a id="type-locationitem"></a>
|
|
3841
|
+
|
|
3842
|
+
### `LocationItem`
|
|
3843
|
+
|
|
3844
|
+
A single location option on an event type.
|
|
3845
|
+
|
|
3846
|
+
| Field | Type | Required | Description |
|
|
3847
|
+
|---|---|---|---|
|
|
3848
|
+
| `kind` | `LocationKind` | yes | |
|
|
3849
|
+
| `address` | `string \| null` | no | |
|
|
3850
|
+
| `display_label` | `string \| null` | no | |
|
|
3851
|
+
| `link` | `string \| null` | no | |
|
|
3852
|
+
| `phone` | `string \| null` | no | |
|
|
3853
|
+
| `provider` | `string \| null` | no | |
|
|
3854
|
+
| `public` | `boolean` | no | default `true` |
|
|
3855
|
+
|
|
3856
|
+
<a id="type-overrideinput"></a>
|
|
3857
|
+
|
|
3858
|
+
### `OverrideInput`
|
|
3859
|
+
|
|
3860
|
+
| Field | Type | Required | Description |
|
|
3861
|
+
|---|---|---|---|
|
|
3862
|
+
| `date` | `string` | yes | |
|
|
3863
|
+
| `end_time` | `string` | yes | |
|
|
3864
|
+
| `start_time` | `string` | yes | |
|
|
3865
|
+
|
|
3866
|
+
<a id="type-routingformfield"></a>
|
|
3867
|
+
|
|
3868
|
+
### `RoutingFormField`
|
|
3869
|
+
|
|
3870
|
+
| Field | Type | Required | Description |
|
|
3871
|
+
|---|---|---|---|
|
|
3872
|
+
| `label` | `string` | yes | min length 1, max length 500 |
|
|
3873
|
+
| `id` | `string \| null` | no | |
|
|
3874
|
+
| `identifier` | `string \| null` | no | |
|
|
3875
|
+
| `options` | `Array<RoutingFormFieldOption>` | no | |
|
|
3876
|
+
| `placeholder` | `string \| null` | no | |
|
|
3877
|
+
| `required` | `boolean` | no | default `true` |
|
|
3878
|
+
| `type` | `"text" \| "email" \| "phone" \| "number" \| "textarea" \| "select" \| "multiselect" \| "radio" \| …` | no | default `"select"` |
|
|
3879
|
+
|
|
3880
|
+
<a id="type-routingformrouteinput"></a>
|
|
3881
|
+
|
|
3882
|
+
### `RoutingFormRouteInput`
|
|
3883
|
+
|
|
3884
|
+
| Field | Type | Required | Description |
|
|
3885
|
+
|---|---|---|---|
|
|
3886
|
+
| `action_type` | `"redirect_event_type" \| "redirect_url" \| "show_message"` | no | default `"redirect_event_type"` |
|
|
3887
|
+
| `action_value` | `string` | no | default `""` |
|
|
3888
|
+
| `conditions` | `Array<RoutingFormCondition>` | no | |
|
|
3889
|
+
| `is_fallback` | `boolean` | no | default `false` |
|
|
3890
|
+
| `position` | `integer` | no | default `0` |
|
|
3891
|
+
|
|
3892
|
+
<a id="type-selectedcalendarentry"></a>
|
|
3893
|
+
|
|
3894
|
+
### `SelectedCalendarEntry`
|
|
3895
|
+
|
|
3896
|
+
One calendar to consult when checking for conflicts.
|
|
3897
|
+
|
|
3898
|
+
| Field | Type | Required | Description |
|
|
3899
|
+
|---|---|---|---|
|
|
3900
|
+
| `credential_id` | `integer` | yes | |
|
|
3901
|
+
| `external_id` | `string` | yes | |
|
|
3902
|
+
| `integration` | `string` | yes | |
|
|
3903
|
+
| `enabled` | `boolean` | no | default `true` |
|
|
3904
|
+
|
|
3905
|
+
<a id="type-workflowstepinput"></a>
|
|
3906
|
+
|
|
3907
|
+
### `WorkflowStepInput`
|
|
3908
|
+
|
|
3909
|
+
| Field | Type | Required | Description |
|
|
3910
|
+
|---|---|---|---|
|
|
3911
|
+
| `action` | `"email_host" \| "email_attendee" \| "email_address"` | yes | |
|
|
3912
|
+
| `email_subject` | `string \| null` | no | max length 500 |
|
|
3913
|
+
| `include_calendar_event` | `boolean` | no | default `false` |
|
|
3914
|
+
| `reminder_body` | `string \| null` | no | max length 20000 |
|
|
3915
|
+
| `send_to` | `string (email) \| null` | no | |
|
|
3916
|
+
| `sender` | `string \| null` | no | max length 255 |
|
|
3917
|
+
| `template` | `"reminder" \| "custom" \| "cancelled" \| "rescheduled" \| "completed" \| "rating"` | no | default `"reminder"` |
|