SavvyCal Webhooks API
Configure webhooks for real-time event notifications.
Configure webhooks for real-time event notifications.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/savvycal-webhooks-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: SavvyCal Meetings Current User Webhooks API
description: 'The SavvyCal Meetings REST API enables developers to manage scheduling links, events, webhooks, workflows, and time zones programmatically. It uses OAuth 2.0 and personal access tokens for authentication and communicates in JSON format.
'
version: '1.0'
contact:
name: SavvyCal Developer Support
url: https://developers.savvycal.com/
termsOfService: https://savvycal.com/legal/terms
license:
name: Proprietary
url: https://savvycal.com/
servers:
- url: https://api.savvycal.com/v1
description: SavvyCal API v1
security:
- BearerAuth: []
tags:
- name: Webhooks
description: Configure webhooks for real-time event notifications.
paths:
/webhooks:
get:
operationId: listWebhooks
summary: List webhooks
description: Get a paginated list of webhooks for the authenticated user.
tags:
- Webhooks
parameters:
- name: page
in: query
description: Page number for pagination.
schema:
type: integer
minimum: 1
default: 1
- name: per_page
in: query
description: Number of results per page.
schema:
type: integer
minimum: 1
maximum: 100
default: 20
responses:
'200':
description: Paginated list of webhooks.
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createWebhook
summary: Create webhook
description: Create a new webhook for receiving event notifications.
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateWebhookRequest'
responses:
'201':
description: Webhook successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/webhooks/{webhook_id}:
get:
operationId: getWebhook
summary: Get webhook
description: Get a specific webhook by ID.
tags:
- Webhooks
parameters:
- $ref: '#/components/parameters/WebhookId'
responses:
'200':
description: Webhook details.
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteWebhook
summary: Delete webhook
description: Delete an existing webhook.
tags:
- Webhooks
parameters:
- $ref: '#/components/parameters/WebhookId'
responses:
'200':
description: Webhook successfully deleted.
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
parameters:
WebhookId:
name: webhook_id
in: path
required: true
description: The unique identifier of the webhook.
schema:
type: string
responses:
Unauthorized:
description: Authentication credentials missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Invalid request parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
description: Standard error response.
properties:
error:
type: string
description: Human-readable error message.
errors:
type: object
description: Field-level validation errors.
additionalProperties:
type: array
items:
type: string
Webhook:
type: object
description: A webhook configuration for receiving SavvyCal event notifications.
properties:
id:
type: string
description: Unique webhook identifier.
url:
type: string
format: uri
description: The endpoint URL where notifications are sent.
secret:
type: string
description: 'Secret used for authenticating webhook payloads via HMAC-SHA256 signature in the x-savvycal-signature header.
'
state:
type: string
description: Current webhook state.
enum:
- active
- disabled
- deleted
version:
type: string
description: Payload format version.
example: '2020-11-18'
created_at:
type: string
format: date-time
description: When the webhook was created.
PaginationMeta:
type: object
description: Pagination metadata for list responses.
properties:
current_page:
type: integer
description: Current page number.
per_page:
type: integer
description: Number of items per page.
total_count:
type: integer
description: Total number of items.
total_pages:
type: integer
description: Total number of pages.
CreateWebhookRequest:
type: object
description: Request body for creating a new webhook.
required:
- url
properties:
url:
type: string
format: uri
description: The endpoint URL to receive webhook notifications.
events:
type: array
description: List of event types to subscribe to. Subscribes to all if omitted.
items:
type: string
enum:
- event.created
- event.requested
- event.approved
- event.declined
- event.rescheduled
- event.changed
- event.canceled
- event.checkout.pending
- event.checkout.expired
- event.checkout.completed
- event.attendee.added
- event.attendee.canceled
- event.attendee.rescheduled
- poll.response.created
- poll.response.updated
- workflow.action.triggered
WebhookList:
type: object
description: Paginated list of webhooks.
properties:
data:
type: array
items:
$ref: '#/components/schemas/Webhook'
meta:
$ref: '#/components/schemas/PaginationMeta'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: 'Personal access tokens (prefixed with `pt_secret_`) or OAuth 2.0 access tokens. Include in the Authorization header as: `Authorization: Bearer <token>`
'