Request headers

Only a registered user can perform this action
  Authentication - string - required
    Example of Authentication header : "Bearer TOKEN_FETCHED_FROM_SERVER_DURING_REGISTRATION"

Behaviour

Lightweight link check that runs BEFORE the preview/parse endpoint
(POST /api/external/calendars/ical). It normalizes the URL (webcal:// ->
https://), rejects a URL already connected anywhere in the workspace
(workspace calendars or any user's personal calendars, matched on the
normalized URL), then makes ONE short SSRF-guarded outbound request to
confirm the link is reachable and is an iCal feed. It never parses or
returns events; a valid-but-empty feed still passes.

Request body example

{
  "url": "webcal://calendar.example.com/team/games.ics"
}

Success response body (200)

Carries the normalized (canonical) URL for the frontend to use in the
subsequent preview/create; no events are returned.
{
  "valid": true,
  "url": "https://calendar.example.com/team/games.ics"
}
Unreachable / timeout / non-200 / non-iCal / SSRF-blocked URL.
{
  "message": "The iCal URL you entered is not valid"
}

Error response body (422) — already connected

The URL is already connected as a workspace or personal calendar; the
email of the user who connected it is included.
{
  "message": "This iCal is already connected",
  "email": "coach@example.com"
}

Error response body (403) — beta gate (GP-16587, temporary)

While CALENDARS_BETA_ENABLED=true only users granted `calendars_enabled`
may call this endpoint; open to everyone once the variable is off.
{
  "message": "This feature is not available for your account yet.",
  "code": "feature_not_available"
}

Params

Param name Description
url
required

iCal feed URL (webcal:// or https://)

Validations:

  • Must be a String