{"formatVersion":"1","kind":"dock_integration","slug":"calendly-api","title":"Calendly API","summary":"Import a Harbor-safe Calendly starter set for event type discovery, bounded scheduled-event reads, and approval-friendly event cancellation.","description":"A Dock-hosted Calendly API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Calendly action set for listing event types, listing scheduled events with explicit organization and time filters, and canceling a scheduled event with operator review. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"calendly","name":"Calendly","websiteUrl":"https://developer.calendly.com/"},"category":"Work Management","tags":["calendly","scheduling","meetings","event-types","calendar"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. The starter reads stay organization-scoped through explicit URI query inputs so Harbor does not expose broad account traversal by default."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Calendly API","description":"Calendly API connection managed locally through Harbor.","baseUrl":"https://api.calendly.com","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"get-current-user","label":"Get Current User","description":"Fetch the Calendly user tied to the local token so Harbor can confirm principal context before organization-scoped scheduling reads.","method":"GET","path":"/users/me","approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-organization-memberships","label":"List Organization Memberships","description":"List Calendly organization memberships for an explicit user or organization URI so Harbor can discover scoped membership context safely.","method":"GET","path":"/organization_memberships","inputs":{"parameters":[{"name":"user","in":"query","schema":{"type":"string","minLength":1,"maxLength":300},"description":"Optional Calendly user URI to narrow memberships to one principal."},{"name":"organization","in":"query","schema":{"type":"string","minLength":1,"maxLength":300},"description":"Optional Calendly organization URI to limit returned memberships."},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of memberships to return."},{"name":"page_token","in":"query","schema":{"type":"string"},"description":"Pagination token from a previous Calendly response."},{"name":"sort","in":"query","schema":{"type":"string","enum":["created_at:asc","created_at:desc"]},"description":"Optional sort order for returned memberships."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-event-types","label":"List Event Types","description":"List Calendly event types for an explicit organization or user URI with bounded pagination filters.","method":"GET","path":"/event_types","inputs":{"parameters":[{"name":"organization","in":"query","schema":{"type":"string","minLength":1,"maxLength":300},"description":"Calendly organization URI, such as https://api.calendly.com/organizations/ORG_UUID."},{"name":"user","in":"query","schema":{"type":"string","minLength":1,"maxLength":300},"description":"Optional Calendly user URI when you want the event types for one specific user instead of the broader organization scope."},{"name":"active","in":"query","schema":{"type":"boolean"},"default":true,"description":"Whether to return only active event types."},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of event types to return."},{"name":"page_token","in":"query","schema":{"type":"string"},"description":"Pagination token from a previous Calendly response."},{"name":"sort","in":"query","schema":{"type":"string","enum":["name:asc","name:desc","position:asc","position:desc","created_at:asc","created_at:desc","updated_at:asc","updated_at:desc"]},"description":"Optional sort order for the returned event types."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-event-type","label":"Get Event Type","description":"Fetch a specific Calendly event type using its UUID.","method":"GET","path":"/event_types/{eventTypeUuid}","inputs":{"parameters":[{"name":"eventTypeUuid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Calendly event type UUID."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-scheduled-event","label":"Get Scheduled Event","description":"Fetch a single Calendly scheduled event using its UUID.","method":"GET","path":"/scheduled_events/{eventUuid}","inputs":{"parameters":[{"name":"eventUuid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Calendly scheduled event UUID, not the full URI."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-scheduled-events","label":"List Scheduled Events","description":"List Calendly scheduled events for an explicit organization URI with bounded status, time, and pagination filters.","method":"GET","path":"/scheduled_events","inputs":{"parameters":[{"name":"organization","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":300},"description":"Calendly organization URI, such as https://api.calendly.com/organizations/ORG_UUID."},{"name":"status","in":"query","schema":{"type":"string","enum":["active","canceled"]},"default":"active","description":"Whether to return active or canceled scheduled events."},{"name":"min_start_time","in":"query","schema":{"type":"string","format":"date-time"},"description":"Optional RFC 3339 lower bound for scheduled event start time."},{"name":"max_start_time","in":"query","schema":{"type":"string","format":"date-time"},"description":"Optional RFC 3339 upper bound for scheduled event start time."},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of scheduled events to return."},{"name":"page_token","in":"query","schema":{"type":"string"},"description":"Pagination token from a previous Calendly response."},{"name":"sort","in":"query","schema":{"type":"string","enum":["start_time:asc","start_time:desc","created_at:asc","created_at:desc"]},"description":"Optional sort order for the returned scheduled events."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-event-invitees","label":"List Event Invitees","description":"List invitees for a specific Calendly scheduled event using the event UUID and bounded pagination inputs.","method":"GET","path":"/scheduled_events/{eventUuid}/invitees","inputs":{"parameters":[{"name":"eventUuid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Calendly scheduled event UUID, not the full URI."},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of invitees to return."},{"name":"page_token","in":"query","schema":{"type":"string"},"description":"Pagination token from a previous Calendly response."},{"name":"sort","in":"query","schema":{"type":"string","enum":["created_at:asc","created_at:desc"]},"description":"Optional sort order for returned invitees."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-event-type-available-times","label":"Get Event Type Available Times","description":"Get available time slots for a specific Calendly event type using an explicit event type URI and bounded time window.","method":"GET","path":"/event_type_available_times","inputs":{"parameters":[{"name":"event_type","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":300},"description":"Calendly event type URI."},{"name":"start_time","in":"query","required":true,"schema":{"type":"string","format":"date-time"},"description":"RFC 3339 lower bound for the availability window."},{"name":"end_time","in":"query","required":true,"schema":{"type":"string","format":"date-time"},"description":"RFC 3339 upper bound for the availability window."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-invitee","label":"Create Invitee","description":"Create a Calendly invitee for a specific scheduling link using a bounded JSON request body.","method":"POST","path":"/invitees","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"list-webhook-subscriptions","label":"List Webhook Subscriptions","description":"List Calendly webhook subscriptions for an explicit organization or user URI with typed pagination inputs.","method":"GET","path":"/webhook_subscriptions","inputs":{"parameters":[{"name":"organization","in":"query","schema":{"type":"string","minLength":1,"maxLength":300},"description":"Optional Calendly organization URI."},{"name":"user","in":"query","schema":{"type":"string","minLength":1,"maxLength":300},"description":"Optional Calendly user URI."},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":20,"description":"Maximum number of webhook subscriptions to return."},{"name":"page_token","in":"query","schema":{"type":"string"},"description":"Pagination token from a previous Calendly response."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-webhook-subscription","label":"Create Webhook Subscription","description":"Create a Calendly webhook subscription using a bounded JSON request body.","method":"POST","path":"/webhook_subscriptions","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-webhook-subscription","label":"Delete Webhook Subscription","description":"Delete a Calendly webhook subscription using an explicit webhook subscription UUID.","method":"DELETE","path":"/webhook_subscriptions/{webhookUuid}","inputs":{"parameters":[{"name":"webhookUuid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Calendly webhook subscription UUID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"cancel-event","label":"Cancel Event","description":"Cancel a specific Calendly scheduled event using its UUID and a reviewable JSON request body.","method":"POST","path":"/scheduled_events/{eventUuid}/cancellation","inputs":{"parameters":[{"name":"eventUuid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Calendly scheduled event UUID, not the full URI."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"}],"helpText":"Import to Harbor, configure local auth, then validate list-event-types and list-scheduled-events before enabling cancel-event. Keep cancellation on approval unless your local policy explicitly allows operator-reviewed schedule remediation.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Calendly reads use explicit organization or user URIs in input.query, and cancel-event uses input.path.eventUuid plus input.body for the cancellation payload."}