SavvyCal Scheduling Links API
Create and manage scheduling links for booking.
Create and manage scheduling links for booking.
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-scheduling-links-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 Scheduling Links 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: Scheduling Links
description: Create and manage scheduling links for booking.
paths:
/links:
get:
operationId: listSchedulingLinks
summary: List scheduling links
description: Get a paginated list of scheduling links for the authenticated user.
tags:
- Scheduling Links
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 scheduling links.
content:
application/json:
schema:
$ref: '#/components/schemas/LinkList'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
/links/{link_id}:
get:
operationId: getSchedulingLink
summary: Get scheduling link
description: Get a specific scheduling link by ID.
tags:
- Scheduling Links
parameters:
- $ref: '#/components/parameters/LinkId'
responses:
'200':
description: Scheduling link details.
content:
application/json:
schema:
$ref: '#/components/schemas/Link'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateSchedulingLink
summary: Update scheduling link
description: Update an existing scheduling link.
tags:
- Scheduling Links
parameters:
- $ref: '#/components/parameters/LinkId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateLinkRequest'
responses:
'200':
description: Updated scheduling link.
content:
application/json:
schema:
$ref: '#/components/schemas/Link'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
components:
responses:
Unauthorized:
description: Authentication credentials missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
UnprocessableEntity:
description: Validation errors.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Forbidden:
description: Insufficient permissions to access the resource.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: Invalid request parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
UpdateLinkRequest:
type: object
description: Request body for updating a scheduling link (all fields optional).
properties:
name:
type: string
description: New public-facing name.
private_name:
type: string
description: New owner-only name.
description:
type: string
description: New description.
state:
type: string
enum:
- active
- pending
- disabled
description: New state for the link.
default_duration:
type: integer
description: New default duration in minutes.
durations:
type: array
items:
type: integer
description: New set of available durations in minutes.
increment:
type: integer
description: New time slot interval in minutes.
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
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.
Scope:
type: object
description: A team or organizational scope.
properties:
id:
type: string
description: Unique scope identifier.
name:
type: string
description: Scope name.
slug:
type: string
description: URL slug for the scope.
LinkList:
type: object
description: Paginated list of scheduling links.
properties:
data:
type: array
items:
$ref: '#/components/schemas/Link'
meta:
$ref: '#/components/schemas/PaginationMeta'
Link:
type: object
description: A SavvyCal scheduling link for booking appointments.
properties:
id:
type: string
description: Unique link identifier.
slug:
type: string
description: URL slug for the scheduling link.
name:
type: string
description: Public-facing name of the scheduling link.
private_name:
type:
- string
- 'null'
description: Owner-only name for the link.
description:
type:
- string
- 'null'
description: Optional description shown to bookers.
state:
type: string
description: Current state of the scheduling link.
enum:
- active
- pending
- disabled
default_duration:
type: integer
description: Default meeting duration in minutes.
durations:
type: array
description: Array of available meeting durations in minutes.
items:
type: integer
increment:
type: integer
description: Time slot interval in minutes.
fields:
type: array
description: Custom booking form fields.
items:
$ref: '#/components/schemas/LinkField'
scope:
$ref: '#/components/schemas/Scope'
created_at:
type: string
format: date-time
description: When the link was created.
updated_at:
type: string
format: date-time
description: When the link was last updated.
LinkField:
type: object
description: A custom form field on a scheduling link.
properties:
id:
type: string
description: Field identifier.
label:
type: string
description: Field label shown to the booker.
type:
type: string
description: Field input type.
enum:
- text
- textarea
- select
- checkbox
- phone
required:
type: boolean
description: Whether the field is required.
parameters:
LinkId:
name: link_id
in: path
required: true
description: The unique identifier of the scheduling link.
schema:
type: string
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>`
'