Reonic Appointments API

Appointments on Reonic-hosted calendars only. External calendars (Google, Microsoft) cannot be read or written through the API.

Operations 4

GET /appointments List appointments #
POST /appointments/create Create appointment #
POST /appointments/{appointmentId}/update Update appointment #
POST /appointments/{appointmentId}/delete Delete appointment #

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/reonic-appointments-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

reonic-appointments-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Reonic REST Api v3 Appointments API
  description: The Reonic REST API v3 provides programmatic access to create and manage resources.
  version: 3.2.0
  contact:
    email: kontakt@reonic.de
    url: https://reonic.com
    name: Reonic GmbH
servers:
- url: '{apiBaseUrl}/rest/v3/'
security:
- X-Authorization: []
tags:
- name: Appointments
  description: Appointments on Reonic-hosted calendars only. External calendars (Google, Microsoft) cannot be read or written through the API.
paths:
  /appointments:
    get:
      summary: List appointments
      description: 'Lists appointments on Reonic calendars in a paginated format.


        **Allowed API keys:** Read-only, Read and Write'
      tags:
      - Appointments
      parameters:
      - schema:
          type:
          - array
          - 'null'
          items:
            type: string
            format: uuid
          minItems: 1
          maxItems: 100
          description: Comma-separated list or repeated query param of calendar IDs to fetch appointments for.
          examples:
          - 123e4567-e89b-12d3-a456-426614174000
          - 123e4567-e89b-12d3-a456-426614174000, 123e4567-e89b-12d3-a456-426614174002
        required: false
        description: Comma-separated list or repeated query param of calendar IDs to fetch appointments for.
        name: calendarIds
        in: query
      - schema:
          type: string
          format: uuid
          description: Return only appointments linked to the given residential project. Mutually exclusive with `commercialProjectId`. Reference to [**Residential Projects**](#tag/residential-projects)
        required: false
        description: Return only appointments linked to the given residential project. Mutually exclusive with `commercialProjectId`. Reference to [**Residential Projects**](#tag/residential-projects)
        name: residentialProjectId
        in: query
      - schema:
          type: string
          format: uuid
          description: Return only appointments linked to the given commercial project. Mutually exclusive with `residentialProjectId`. Reference to [**Commercial Projects**](#tag/commercial-projects)
        required: false
        description: Return only appointments linked to the given commercial project. Mutually exclusive with `residentialProjectId`. Reference to [**Commercial Projects**](#tag/commercial-projects)
        name: commercialProjectId
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Filter records where start is after this datetime (exclusive)
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Filter records where start is after this datetime (exclusive)
        name: start.gt
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Defaults to the day one year from now.
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Defaults to the day one year from now.
        name: start.lt
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Defaults to now, so that by default only upcoming appointments are returned.
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Defaults to now, so that by default only upcoming appointments are returned.
        name: end.gt
        in: query
      - schema:
          type:
          - string
          - 'null'
          format: date-time
          description: Filter records where end is before this datetime (exclusive)
          example: '2026-01-01T15:30:00.000Z'
        required: false
        description: Filter records where end is before this datetime (exclusive)
        name: end.lt
        in: query
      - schema:
          type: integer
          minimum: 1
          default: 1
          description: 'Page number, starting from 1. Default: 1.'
        required: false
        description: 'Page number, starting from 1. Default: 1.'
        name: page
        in: query
      - schema:
          type: integer
          minimum: 1
          maximum: 200
          default: 50
          description: 'Number of items per page. Default: 50. Max: 200.'
        required: false
        description: 'Number of items per page. Default: 50. Max: 200.'
        name: itemsPerPage
        in: query
      - schema:
          type:
          - string
          - 'null'
          default: start
          description: 'Sort order. Use field names for ascending (e.g. "createdAt"), minus sign for descending (e.g. "-createdAt"). Chain with commas (e.g. "createdAt,editedAt"). Sortable fields: start, end. Defaults to start.'
          examples:
          - start
          - -start
          - end,-start
        required: false
        description: 'Sort order. Use field names for ascending (e.g. "createdAt"), minus sign for descending (e.g. "-createdAt"). Chain with commas (e.g. "createdAt,editedAt"). Sortable fields: start, end. Defaults to start.'
        name: sort
        in: query
      - schema:
          type: string
          example: no-cache
        required: false
        name: Reonic-Cache-Control
        in: header
        description: Set to 'no-cache' to bypass the 1-hour response cache and force a fresh read. The fresh response is then written back to the cache for subsequent callers. Forced refreshes count against the uncached rate-limit bucket (30/min); only cache hits count against the cached bucket (500/min).
      responses:
        '200':
          description: Paginated list of appointments
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                          example: 123e4567-e89b-12d3-a456-426614174000
                        calendarId:
                          type: string
                          format: uuid
                          example: 123e4567-e89b-12d3-a456-426614174000
                        title:
                          type: string
                          default: ''
                        customerPortalTitle:
                          type:
                          - string
                          - 'null'
                        description:
                          type:
                          - string
                          - 'null'
                        customerPortalDescription:
                          type:
                          - string
                          - 'null'
                        visibleInCustomerPortal:
                          type: boolean
                          description: Whether this appointment is visible in the customer portal or not.
                        start:
                          type: string
                          format: date-time
                          example: '2026-01-01T15:30:00.000Z'
                        end:
                          type: string
                          format: date-time
                          example: '2026-01-01T15:30:00.000Z'
                        allDay:
                          type: boolean
                        location:
                          type:
                          - string
                          - 'null'
                        residentialProjectId:
                          type:
                          - string
                          - 'null'
                          format: uuid
                        commercialProjectId:
                          type:
                          - string
                          - 'null'
                          format: uuid
                        attendeeIds:
                          type: array
                          items:
                            type: string
                            format: uuid
                          description: List of users attending this appointment. Reference to [**Users**](#tag/users)
                      required:
                      - id
                      - calendarId
                      - customerPortalTitle
                      - description
                      - customerPortalDescription
                      - visibleInCustomerPortal
                      - start
                      - end
                      - allDay
                      - location
                      - residentialProjectId
                      - commercialProjectId
                      - attendeeIds
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                        minimum: 1
                        description: Current page number
                      perPage:
                        type: integer
                        minimum: 1
                        description: Number of items per page
                      total:
                        type: integer
                        minimum: 0
                        description: Total number of items across all pages
                      totalPages:
                        type: integer
                        minimum: 1
                      next:
                        type:
                        - string
                        - 'null'
                        description: Path to the next page, or null if there is no next page
                      prev:
                        type:
                        - string
                        - 'null'
                        description: Path to the previous page, or null if there is no previous page
                    required:
                    - page
                    - perPage
                    - total
                    - totalPages
                    - next
                    - prev
                required:
                - data
                - pagination
      operationId: getAppointments
      x-operation-id-source: derived
  /appointments/create:
    post:
      summary: Create appointment
      description: 'Create an appointment on a Reonic calendar.


        **Allowed API keys:** Read and Write'
      tags:
      - Appointments
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                calendarId:
                  type: string
                  format: uuid
                title:
                  type: string
                  minLength: 1
                  maxLength: 2000
                customerPortalTitle:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 2000
                description:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 5000
                customerPortalDescription:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 5000
                visibleInCustomerPortal:
                  type: boolean
                  default: false
                  description: 'Whether this appointment is visible in the customer portal or not. Default: `false`'
                start:
                  type: string
                  format: date-time
                  example: '2026-01-01T15:30:00.000Z'
                  description: Appointment start. When `allDay` is `true`, only the date portion is used and the time component is ignored.
                end:
                  type: string
                  format: date-time
                  example: '2026-01-01T15:30:00.000Z'
                  description: Appointment end. When `allDay` is `true`, only the date portion is used and the time component is ignored.
                allDay:
                  type: boolean
                  description: When `true`, `start` and `end` are treated as dates only — the time component is ignored and `end` must be at least one full day after `start`. When `false`, `start` and `end` are treated as exact datetimes.
                attendeeIds:
                  type:
                  - array
                  - 'null'
                  items:
                    type: string
                    format: uuid
                  maxItems: 100
                  description: Users attending this appointment. Reference to [**Users**](#tag/users)
                location:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 2000
                residentialProjectId:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  description: Mutually exclusive with `commercialProjectId`. Reference to [**Residential Projects**](#tag/residential-projects)
                commercialProjectId:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  description: Mutually exclusive with `residentialProjectId`. Reference to [**Commercial Projects**](#tag/commercial-projects)
              required:
              - calendarId
              - title
              - start
              - end
              - allDay
              additionalProperties: false
      responses:
        '201':
          description: The created appointment
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    example: 123e4567-e89b-12d3-a456-426614174000
                  calendarId:
                    type: string
                    format: uuid
                    example: 123e4567-e89b-12d3-a456-426614174000
                  title:
                    type: string
                    default: ''
                  customerPortalTitle:
                    type:
                    - string
                    - 'null'
                  description:
                    type:
                    - string
                    - 'null'
                  customerPortalDescription:
                    type:
                    - string
                    - 'null'
                  visibleInCustomerPortal:
                    type: boolean
                    description: Whether this appointment is visible in the customer portal or not.
                  start:
                    type: string
                    format: date-time
                    example: '2026-01-01T15:30:00.000Z'
                  end:
                    type: string
                    format: date-time
                    example: '2026-01-01T15:30:00.000Z'
                  allDay:
                    type: boolean
                  location:
                    type:
                    - string
                    - 'null'
                  residentialProjectId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  commercialProjectId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  attendeeIds:
                    type: array
                    items:
                      type: string
                      format: uuid
                    description: List of users attending this appointment. Reference to [**Users**](#tag/users)
                required:
                - id
                - calendarId
                - customerPortalTitle
                - description
                - customerPortalDescription
                - visibleInCustomerPortal
                - start
                - end
                - allDay
                - location
                - residentialProjectId
                - commercialProjectId
                - attendeeIds
      operationId: postAppointmentsCreate
      x-operation-id-source: derived
  /appointments/{appointmentId}/update:
    post:
      summary: Update appointment
      description: 'Update fields of an appointment on a Reonic calendar. Omit fields to leave them untouched, send `null` to clear them (where possible) or send a value to replace it.


        **Allowed API keys:** Read and Write'
      tags:
      - Appointments
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: appointmentId
        in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  minLength: 1
                  maxLength: 2000
                customerPortalTitle:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 2000
                description:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 5000
                customerPortalDescription:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 5000
                visibleInCustomerPortal:
                  type: boolean
                  description: Whether this appointment is visible in the customer portal or not.
                start:
                  type: string
                  format: date-time
                  example: '2026-01-01T15:30:00.000Z'
                  description: Appointment start. When `allDay` is `true`, only the date portion is used and the time component is ignored.
                end:
                  type: string
                  format: date-time
                  example: '2026-01-01T15:30:00.000Z'
                  description: Appointment end. When `allDay` is `true`, only the date portion is used and the time component is ignored.
                allDay:
                  type: boolean
                  description: When `true`, `start` and `end` are treated as dates only — the time component is ignored and `end` must be at least one full day after `start`. When `false`, `start` and `end` are treated as exact datetimes.
                attendeeIds:
                  type:
                  - array
                  - 'null'
                  items:
                    type: string
                    format: uuid
                  maxItems: 100
                  description: Users attending this appointment. Reference to [**Users**](#tag/users)
                location:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 2000
                residentialProjectId:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  description: Mutually exclusive with `commercialProjectId`. Reference to [**Residential Projects**](#tag/residential-projects)
                commercialProjectId:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  description: Mutually exclusive with `residentialProjectId`. Reference to [**Commercial Projects**](#tag/commercial-projects)
              additionalProperties: false
      responses:
        '200':
          description: The updated appointment
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    example: 123e4567-e89b-12d3-a456-426614174000
                  calendarId:
                    type: string
                    format: uuid
                    example: 123e4567-e89b-12d3-a456-426614174000
                  title:
                    type: string
                    default: ''
                  customerPortalTitle:
                    type:
                    - string
                    - 'null'
                  description:
                    type:
                    - string
                    - 'null'
                  customerPortalDescription:
                    type:
                    - string
                    - 'null'
                  visibleInCustomerPortal:
                    type: boolean
                    description: Whether this appointment is visible in the customer portal or not.
                  start:
                    type: string
                    format: date-time
                    example: '2026-01-01T15:30:00.000Z'
                  end:
                    type: string
                    format: date-time
                    example: '2026-01-01T15:30:00.000Z'
                  allDay:
                    type: boolean
                  location:
                    type:
                    - string
                    - 'null'
                  residentialProjectId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  commercialProjectId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  attendeeIds:
                    type: array
                    items:
                      type: string
                      format: uuid
                    description: List of users attending this appointment. Reference to [**Users**](#tag/users)
                required:
                - id
                - calendarId
                - customerPortalTitle
                - description
                - customerPortalDescription
                - visibleInCustomerPortal
                - start
                - end
                - allDay
                - location
                - residentialProjectId
                - commercialProjectId
                - attendeeIds
      operationId: postAppointmentsByAppointmentIdUpdate
      x-operation-id-source: derived
  /appointments/{appointmentId}/delete:
    post:
      summary: Delete appointment
      description: 'Delete an appointment on a Reonic calendar.


        **Allowed API keys:** Read and Write'
      tags:
      - Appointments
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: appointmentId
        in: path
      responses:
        '200':
          description: ID of the deleted appointment
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                    required:
                    - id
                    additionalProperties: false
                required:
                - data
      operationId: postAppointmentsByAppointmentIdDelete
      x-operation-id-source: derived
components:
  securitySchemes:
    X-Authorization:
      type: apiKey
      in: header
      name: X-Authorization
x-tagGroups:
- name: People
  tags:
  - Contacts
  - Users
  - Teams
- name: Projects
  tags:
  - Residential Projects
  - Commercial Projects
- name: Working on a project
  tags:
  - Notes
  - Tasks
  - Files
  - File Folders
  - Activities
  - Time Tracking
  - Checklists
  - Checklist Templates
  - Signature Requests
- name: Calendar
  tags:
  - Calendars
  - Calendar Categories
  - Appointments
- name: Catalog
  tags:
  - Components
  - Planning Templates
  - Planning Packages
  - Offer Templates
- name: Workspace setup
  tags:
  - Kanban Boards
  - Kanban Columns
  - Tags
  - Lead Sources
- name: Wiki
  tags:
  - Wiki
- name: Services
  tags:
  - Photogrammetry
- name: API helpers
  tags:
  - Upload
  - Links
- name: Integrations
  tags:
  - Webhooks
- name: Guides
  tags:
  - Migrating from API v2 to v3
  - Changelog