Recal Organization Scheduling API

Routes for the Organization Scheduling

Operations 1

GET /v1/organizations/{orgSlug}/scheduling Get V1Organizations by org slug scheduling #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/recal:recal-organization-scheduling-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

recal-organization-scheduling-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Recal Organization Scheduling API
  description: 'The official Recal.dev API.


    **Tip:** Use `x-timezone` header to set timezone for all returned datetimes.'
  version: 0.2.0
servers:
- url: https://api.recal.dev
  description: Recal API
security:
- token: []
tags:
- name: Organization Scheduling
  description: Routes for the Organization Scheduling
paths:
  /v1/organizations/{orgSlug}/scheduling:
    get:
      operationId: getV1OrganizationsByOrgSlugScheduling
      description: 'Get available time slots for all users in a sub-organization. Users whose calendars could not be read are listed in `failedUsers` and contribute no slots, so a non-empty `failedUsers` means the availability is a partial answer rather than a complete one. Members with no connected calendar are not listed — https://docs.recal.dev/core/troubleshooting


        Tip: Use the `x-timezone` header to specify the timezone of the times provided in the request'
      tags:
      - Organization Scheduling
      responses:
        '200':
          description: Available time slots, plus the users that could not be read
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      availableSlots:
                        type: array
                        items:
                          type: object
                          properties:
                            end:
                              type: string
                              description: End time of the time range in ISO format
                              format: date-time
                              pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
                            start:
                              type: string
                              description: Start time of the time range in ISO format
                              format: date-time
                              pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
                            userId:
                              type: string
                              examples:
                              - user_123
                              pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$
                          required:
                          - end
                          - start
                          - userId
                      options:
                        type: object
                        properties:
                          end:
                            type: string
                            description: End time of the time range in ISO format
                            format: date-time
                            pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
                          maxOverlaps:
                            type: integer
                          padding:
                            type: integer
                            description: Padding in minutes to add before and after busy times
                          slotDuration:
                            type: integer
                            description: Duration of each slot in minutes
                          start:
                            type: string
                            description: Start time of the time range in ISO format
                            format: date-time
                            pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
                          earliestTimeEachDay:
                            type: string
                            description: Requested earliest time of each day (in the time zone of the request)
                            examples:
                            - '10:00'
                            pattern: ^([01]?[0-9]|2[0-3]):[0-5][0-9]$
                          latestTimeEachDay:
                            type: string
                            description: Requested latest time of each day (in the time zone of the request)
                            examples:
                            - '16:00'
                            pattern: ^([01]?[0-9]|2[0-3]):[0-5][0-9]$
                        required:
                        - end
                        - maxOverlaps
                        - padding
                        - slotDuration
                        - start
                    required:
                    - availableSlots
                    - options
                  failedUsers:
                    type: array
                    items:
                      $ref: '#/components/schemas/FailedFreeBusyUser'
                required:
                - data
                - failedUsers
        '400':
          description: Validation Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  data:
                    type: 'null'
                required:
                - error
                - data
        '404':
          description: Organization not found, or it has no members
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: 'null'
                  error:
                    type: string
                    examples:
                    - Organization not found
                    - No users found in this organization
                required:
                - data
                - error
      parameters:
      - in: path
        name: orgSlug
        schema:
          type: string
          examples:
          - recal
          pattern: ^[a-z0-9][a-z0-9_-]{2,127}$
        required: true
      - in: query
        name: end
        schema:
          type: string
          pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
        required: true
        description: End time of the time range in ISO format
      - in: query
        name: start
        schema:
          type: string
          pattern: ^([+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))(T((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([,.]\d+(?!:))?)?(\17[0-5]\d([,.]\d+)?)?([Zz]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
        required: true
        description: Start time of the time range in ISO format
      - in: query
        name: earliestTimeEachDay
        schema:
          type: string
          examples:
          - '10:00'
          pattern: ^([01]?[0-9]|2[0-3]):[0-5][0-9]$
        description: Requested earliest time of each day (in the time zone of the request)
      - in: query
        name: latestTimeEachDay
        schema:
          type: string
          examples:
          - '16:00'
          pattern: ^([01]?[0-9]|2[0-3]):[0-5][0-9]$
        description: Requested latest time of each day (in the time zone of the request)
      - in: query
        name: maxOverlaps
        schema:
          type: string
          examples:
          - '0'
          default: '0'
          pattern: ^(?:(?!^-0$)-?(?:(?:0|[1-9]\d*)))$
        description: 'an integer >= 0 (default: 0)'
      - in: query
        name: padding
        schema:
          type: string
          examples:
          - '0'
          default: '0'
          pattern: ^(?:(?!^-0$)-?(?:(?:0|[1-9]\d*)))$
        description: Padding in minutes to add before and after busy times
      - in: query
        name: provider
        schema:
          anyOf:
          - type: array
            items:
              enum:
              - google
              - microsoft
          - const: google
          - const: microsoft
      - in: query
        name: slotDuration
        schema:
          type: string
          examples:
          - '0'
          default: '30'
          pattern: ^(?:(?!^-0$)-?(?:(?:0|[1-9]\d*)))$
        description: Duration of each slot in minutes
      summary: Get V1Organizations by org slug scheduling
      x-summary-source: derived
components:
  schemas:
    FreeBusyFailureReason:
      enum:
      - accessDenied
      - authorizationInvalid
      - insufficientScopes
      - invalidCalendarId
      - mailboxUnavailable
      - notFound
      - providerError
      - providerNotConfigured
      - rateLimited
      - tooManyCalendars
      description: 'Why a calendar or a user could not be read. What each value means and how to resolve it: https://docs.recal.dev/core/troubleshooting'
    FailedCalendar:
      type: object
      description: A calendar that could not be read
      properties:
        calendarId:
          type: string
        message:
          type: string
        provider:
          enum:
          - google
          - microsoft
        reason:
          $ref: '#/components/schemas/FreeBusyFailureReason'
      required:
      - calendarId
      - message
      - provider
      - reason
    FailedFreeBusyUser:
      type: object
      description: A user whose busy times are missing (failedCalendars empty) or incomplete (failedCalendars names the gaps)
      properties:
        customId:
          type: string
          examples:
          - user_123
        failedCalendars:
          type: array
          items:
            $ref: '#/components/schemas/FailedCalendar'
        message:
          type: string
        reason:
          $ref: '#/components/schemas/FreeBusyFailureReason'
      required:
      - customId
      - failedCalendars
      - message
      - reason
  securitySchemes:
    token:
      type: http
      scheme: bearer
      bearerFormat: recal-token
      description: Recal API token