openapi: 3.0.0
info:
  title: Calendso API
  description: The open source Calendly alternative.
  contact:
    name: Support
    email: support@calendso.com
  license:
    name: MIT License
    url: https://opensource.org/licenses/MIT
  version: 0.1.0
server:
  url: http://localhost:{port}
  description: Local Development Server
  variables:
    port:
      default: '3000'
tags:
  - name: Authentication
    description: Auth routes, powered by Next-Auth.js
    externalDocs:
      url: http://next-auth.js.org/
  - name: Availability
    description: Checking and setting user availability
  - name: Booking
    description: Create and manage bookings
  - name: Integrations
    description: Manage integrations
  - name: User
    description: Manage the user's profile and settings
paths:
  /api/auth/signin:
    get:
      description: Displays the sign in page.
      summary: Displays the sign in page
      tags:
        - Authentication
  /api/auth/signin/:provider:
    post:
      description: Starts an OAuth signin flow for the specified provider. The POST submission requires CSRF token from /api/auth/csrf.
      summary: Starts an OAuth signin flow for the specified provider
      tags:
        - Authentication
  /api/auth/callback/:provider:
    get:
      description: Handles returning requests from OAuth services during sign in. For OAuth 2.0 providers that support the state option, the value of the state parameter is checked against the one that was generated when the sign in flow was started - this uses a hash of the CSRF token which MUST match for both the POST and GET calls during sign in.
      summary: Handles returning requests from OAuth services
      tags:
        - Authentication
  /api/auth/signout:
    get:
      description: Displays the sign out page.
      summary: Displays the sign out page
      tags:
        - Authentication
    post:
      description: Handles signing out - this is a POST submission to prevent malicious links from triggering signing a user out without their consent. Handles signing out - this is a POST submission to prevent malicious links from triggering signing a user out without their consent.
      summary: Handles signing out
      tags:
        - Authentication
  /api/auth/session:
    get:
      description: Returns client-safe session object - or an empty object if there is no session. The contents of the session object that is returned are configurable with the session callback.
      summary: Returns client-safe session object
      tags:
        - Authentication
  /api/auth/csrf:
    get:
      description: Returns object containing CSRF token. In NextAuth.js, CSRF protection is present on all authentication routes. It uses the "double submit cookie method", which uses a signed HttpOnly, host-only cookie. The CSRF token returned by this endpoint must be passed as form variable named csrfToken in all POST submissions to any API endpoint.
      summary: Returns object containing CSRF token
      tags:
        - Authentication
  /api/auth/providers:
    get:
      description: Returns a list of configured OAuth services and details (e.g. sign in and callback URLs) for each service. It can be used to dynamically generate custom sign up pages and to check what callback URLs are configured for each OAuth provider that is configured.
      summary: Returns configured OAuth services
      tags:
        - Authentication
  /api/auth/changepw:
    post:
      description: Changes the password for the currently logged in account.
      summary: Changes the password for the currently logged in account
      tags:
        - Authentication
  /api/availability/:user:
    get:
      description: Gets the busy times for a particular user, by username.
      summary: Gets the busy times for a user
      tags:
        - Availability
  /api/availability/day:
    patch:
      description: Updates the start and end times for a user's availability.
      summary: Updates the user's start and end times
      tags:
        - Availability
  /api/availability/eventtype:
    post:
      description: Adds a new event type for the user.
      summary: Adds a new event type
      tags:
        - Availability
    patch:
      description: Updates an event type for the user.
      summary: Updates an event type
      tags:
        - Availability
    delete:
      description: Deletes an event type for the user.
      summary: Deletes an event type
      tags:
        - Availability
  /api/availability/calendars:
    post:
      description: Selects calendar for availability checking.
      summary: Adds selected calendar
      tags:
        - Availability
    delete:
      description: Removes a calendar from availability checking.
      summary: Deletes a selected calendar
      tags:
        - Availability
  /api/book/:user:
    post:
      description: Creates a booking in the user's calendar.
      summary: Creates a booking for a user
      tags:
        - Booking
  /api/integrations:
    get:
      description: Gets a list of the user's integrations.
      summary: Gets the user's integrations
      tags:
        - Integrations
    delete:
      description: Deletes a user's integration
      summary: Deletes a user's integration
      tags:
        - Integrations
  /api/integrations/googlecalendar/add:
    get:
      description: Gets the OAuth URL for a Google Calendar integration.
      summary: Gets the OAuth URL
      tags:
        - Integrations
  /api/integrations/googlecalendar/callback:
    post:
      description: Gets and stores the OAuth token for a Google Calendar integration.
      summary: Gets and stores the OAuth token
      tags:
        - Integrations
  /api/user/profile:
    patch:
      description: Updates a user's profile.
      summary: Updates a user's profile
      tags:
        - User