Kadence Public API

OAuth2-secured API for the Kadence hybrid-workplace platform: buildings, floors, neighborhoods, spaces, bookings (create/cancel/check-in/check-out), users, visits, and visitors. Hydra / JSON-LD (API Platform), 25 operations.

OpenAPI Specification

kadence-public-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Kadence Public API
  description: |-
    Kadence is the all-in-one software platform that helps your team thrive at hybrid work. With our public API you'll have the capability to seamlessly integrate your own applications with the Kadence, boosting employee productivity, enabling in-person collaboration, and maximizing your workspace to do more with less. To get started, check out our developer [getting started guide](https://help.kadence.co/kb/guide/en/api-getting-started-developer-guide-yUYh7DBxBW/). You can also check out our sample applications on [GitHub](https://github.com/wearekadence/kadence-public-api-examples).

    ## Regional Environments

    Kadence supports dedicated environments for different geographical regions. When setting up your API integration, make sure you're using the correct base URLs for your region.

    **EU region: (default)**

    - Auth: [https://login.onkadence.co](https://login.onkadence.co)
    - API: [https://api.onkadence.co](https://api.onkadence.co)

    **US region:**

    - Auth: [https://login.us.onkadence.co](https://login.us.onkadence.co)
    - API: [https://api.us.onkadence.co](https://api.us.onkadence.co)

    Your region is determined by where your Kadence account was set up. If you're unsure which region you're on, contact your account administrator or reach out to Kadence support.

    Use the correct auth URL when obtaining your access token, and the correct endpoint for all subsequent requests. Mixing URLs across regions will result in authentication errors.
  version: 1.2.0
  x-logo:
    url: https://static.onkadence.co/assets/images/email-header-logo@3x.png
    backgroundColor: '#FAFAFA'
    altText: Kadence logo
servers:
- url: https://api.onkadence.co
  description: Production
- url: https://api.us.onkadence.co
  description: Production (US)
paths:
  /v1/public/bookable-days:
    get:
      operationId: api_v1publicbookable-days_get_collection
      tags:
      - Bookable Day
      responses:
        '200':
          description: Bookable Day collection
          content:
            application/ld+json:
              schema:
                type: object
                properties:
                  hydra:member:
                    type: array
                    items:
                      $ref: '#/components/schemas/Bookable.Day.jsonld-public_bookable_day'
                  hydra:totalItems:
                    type: integer
                    minimum: 0
                required:
                - hydra:member
            text/csv:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Bookable.Day-public_bookable_day'
      summary: Get a collection of Bookable Days
      description: Get a list of all days that a booking can be made for specific user in a specific building.
      parameters:
      - name: buildingId
        in: query
        description: The building identifier to get a collection of bookable days for.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01CBCV1CT3BM8A52SEJ2J5F4EB
      - name: userId
        in: query
        description: The user identifier to get a collection of bookable days for.
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01CADV1CT3BM8A52SEJ2J5F4EB
      - name: Accept
        in: header
        description: ''
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: application/ld+json
      deprecated: false
  /v1/public/bookable-days/{id}:
    get:
      operationId: api_v1publicbookable-days_id_get
      tags:
      - Bookable Day
      responses:
        '204':
          description: Bookable Day resource
          content:
            application/ld+json:
              schema: null
            text/csv:
              schema: null
        '404':
          description: Resource not found
      summary: Retrieves a Bookable Day resource.
      description: Retrieves a Bookable Day resource.
      parameters:
      - name: id
        in: path
        description: Bookable Day identifier
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
      deprecated: false
  /v1/public/bookable-onsite-passes:
    get:
      operationId: api_v1publicbookable-onsite-passes_get
      tags:
      - Bookable Onsite Pass
      responses:
        '200':
          description: Bookable Onsite Pass resource
          content:
            application/ld+json:
              schema:
                $ref: '#/components/schemas/Bookable.Onsite.Pass.jsonld-public_bookable_onsite_pass'
            text/csv:
              schema:
                $ref: '#/components/schemas/Bookable.Onsite.Pass-public_bookable_onsite_pass'
        '404':
          description: Resource not found
      summary: Get a description of onsite availability for a building in a time period
      description: ''
      parameters:
      - name: buildingId
        in: query
        description: The building identifier to get onsite pass information for
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01CBCV1CT3BM8A52SEJ2J5F4EB
      - name: startDateTime
        in: query
        description: Proposed UTC booking start date time in format YYYY-MM-DDThh:mm:ss
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-07-03T09:00:00'
      - name: endDateTime
        in: query
        description: Proposed UTC booking end date time in format YYYY-MM-DDThh:mm:ss
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-07-03T09:00:00'
      deprecated: false
  /v1/public/bookable-spaces:
    get:
      operationId: api_v1publicbookable-spaces_get_collection
      tags:
      - Bookable Space
      responses:
        '200':
          description: Bookable Space collection
          content:
            application/ld+json:
              schema:
                type: object
                properties:
                  hydra:member:
                    type: array
                    items:
                      $ref: '#/components/schemas/Bookable.Space.jsonld-public_bookable_space.list'
                  hydra:totalItems:
                    type: integer
                    minimum: 0
                required:
                - hydra:member
            text/csv:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Bookable.Space-public_bookable_space.list'
      summary: Get Bookable Spaces
      description: Get a list of all the spaces on a specific floor, which may be booked for a specific user during a specific time period.
      parameters:
      - name: Accept
        in: header
        description: ''
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: application/ld+json
      - name: floorId
        in: query
        description: Floor identifier
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01GTBV1CT3BM8A42SEJ2J5F4EG
      - name: userId
        in: query
        description: User identifier
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01GTBV1CT3BM8A42SEJ2J5F4EG
      - name: startDateTime
        in: query
        description: UTC Booking start date time in format YYYY-MM-DDThh:mm:ss
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-07-03T09:00:00'
      - name: endDateTime
        in: query
        description: UTC Booking start date time in format YYYY-MM-DDThh:mm:ss
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-07-03T17:00:00'
      - name: spaceType
        in: query
        description: The type of resource that you require. Defaults to desk
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
          enum:
          - desk
          - private_office
          - room
          - onsite
          - locker
          - pod
          - parking
        style: form
        explode: false
        allowReserved: false
        example: desk
      deprecated: false
  /v1/public/bookings:
    get:
      operationId: api_v1publicbookings_get_collection
      tags:
      - Booking
      responses:
        '200':
          description: Booking collection
          content:
            application/ld+json:
              schema:
                type: object
                properties:
                  hydra:member:
                    type: array
                    items:
                      $ref: '#/components/schemas/Booking.jsonld-public_booking'
                  hydra:totalItems:
                    type: integer
                    minimum: 0
                required:
                - hydra:member
            text/csv:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Booking-public_booking'
      summary: Get a collection of bookings
      description: Get a collection of bookings for your tenant
      parameters:
      - name: Accept
        in: header
        description: ''
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: application/ld+json
      - name: id
        in: query
        description: Booking identifier
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01GTBV1CT3BM8A42SEJ2J5F4EG
      - name: startDate
        in: query
        description: Booking start date in format YYYY-MM-DD (deprecated for startDateTime)
        required: false
        deprecated: true
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01'
      - name: endDate
        in: query
        description: Booking end date in format YYYY-MM-DD (deprecated for endDateTime)
        required: false
        deprecated: true
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-02'
      - name: startDateTime[local_before]
        in: query
        description: Filter by Booking start date-time on or before this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[local_before]
        in: query
        description: Filter by Booking end date-time on or before this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[local_strictly_before]
        in: query
        description: Filter by Booking end date-time before this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[local_after]
        in: query
        description: Filter by Booking end date-time on or after this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[local_strictly_after]
        in: query
        description: Filter by Booking end date-time after this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[before]
        in: query
        description: Filter by Booking end date-time on or before this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[strictly_before]
        in: query
        description: Filter by Booking end date-time before this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[after]
        in: query
        description: Filter by Booking end date-time on or after this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: endDateTime[strictly_after]
        in: query
        description: Filter by Booking end date-time after this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: startDateTime[local_strictly_before]
        in: query
        description: Filter by Booking start date-time before this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: startDateTime[local_after]
        in: query
        description: Filter by Booking start date-time on or after this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: startDateTime[local_strictly_after]
        in: query
        description: Filter by Booking start date-time after this date-time (adjusted to building timezone)
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: startDateTime[before]
        in: query
        description: Filter by Booking start date-time on or before this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: startDateTime[strictly_before]
        in: query
        description: Filter by Booking start date-time before this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: startDateTime[after]
        in: query
        description: Filter by Booking start date-time on or after this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: startDateTime[strictly_after]
        in: query
        description: Filter by Booking start date-time after this date-time
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: '2023-01-01T14:00:00'
      - name: type
        in: query
        description: Booking type. If booking type is a room, we are interacting with Google or Microsoft's APIs.
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
          enum:
          - desk
          - private_office
          - room
          - onsite
          - locker
          - pod
          - parking
        style: form
        explode: false
        allowReserved: false
        example: desk
      - name: status
        in: query
        description: Booking status.
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
          enum:
          - booked
          - checkedIn
          - checkedOut
          - completed
          - cancelled
          - noCheckIn
        style: form
        explode: false
        allowReserved: false
        example: booked
      - name: buildingId
        in: query
        description: Building identifier
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 02GTBV1CT3BM8A42SEJ2J5F4EB
      - name: floorId
        in: query
        description: Floor identifier
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01BTBV1CT3BM8A42SEJ2J5F4EB
      - name: neighbourhoodId
        in: query
        description: Neighbourhood identifier
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01BTBV1CT3BM8A42SEJ2J5F4EB
      - name: spaceId
        in: query
        description: Space identifier
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: form
        explode: false
        allowReserved: false
        example: 01CBCV1CT3BM8A52SEJ2J5F4EB
      - name: order[startDate]
        in: query
        description: Order by start date
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
          enum:
          - asc
          - desc
        style: form
        explode: false
        allowReserved: false
        example: asc
      - name: order[endDate]
        in: query
        description: Order by end date
        required: false
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
          enum:
          - asc
          - desc
        style: form
        explode: false
        allowReserved: false
        example: asc
      - name: page
        in: query
        description: The collection page number
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: integer
          default: 1
        style: form
        explode: false
        allowReserved: false
      - name: itemsPerPage
        in: query
        description: The number of items per page
        required: false
        deprecated: false
        allowEmptyValue: true
        schema:
          type: integer
          default: 50
          minimum: 0
          maximum: 500
        style: form
        explode: false
        allowReserved: false
      deprecated: false
    post:
      operationId: api_v1publicbookings_post
      tags:
      - Booking
      responses:
        '201':
          description: Booking resource created
          content:
            application/ld+json:
              schema:
                $ref: '#/components/schemas/Booking.jsonld-public_booking'
            text/csv:
              schema:
                $ref: '#/components/schemas/Booking-public_booking'
          links: null
        '400':
          description: Invalid input
        '422':
          description: Unprocessable entity
      summary: Create a booking
      description: Create a desk or onsite booking
      parameters: []
      requestBody:
        description: The new Booking resource
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  type: string
                  description: The user identifier of the user the booking is for
                  example: 01H59ZGH7HDQ4KAAN6RR1X8V7V
                startDateTime:
                  type: string
                  description: UTC Booking start date time in format YYYY-MM-DDThh:mm:ss
                  example: '2023-07-03T09:00:00'
                endDateTime:
                  type: string
                  description: UTC Booking end date time in format YYYY-MM-DDThh:mm:ss
                  example: '2023-07-03T17:00:00'
                buildingId:
                  type: string
                  description: Required for onsite bookings only - the id of the Building the booking is for.
                  example: 01H59ZGH7HDQ4KAAN6RR1X8V7V
                spaceId:
                  type: string
                  description: Required for desk bookings only - the id of the Space the booking is for.
                  example: 01H59ZGH7HDQ4KAAN6RR1X8V7V
                title:
                  type: string
                  description: Used only for room bookings. Required for room bookings. The title.
                  example: Room booking for Room 001
                  maxLength: 255
                description:
                  type: string
                  description: Used only for room bookings. A detailed description of the booking.
                  example: ''
                  maxLength: 4000
                onlineMeeting:
                  type: boolean
                  description: Used only for room bookings. Indicates if the booking includes an online meeting link.
                  example: true
                attendees:
                  type: array
                  description: Used only for room bookings. List of attendees for the booking, including their details.
                  items:
                    oneOf:
                    - type: object
                      description: Internal user
                      required:
                      - userId
                      example:
                        userId: 01GTBV1CT3BM8A42SEJ2J5FJ2J
                      properties:
                        userId:
                          type: string
                          description: Attendee ID
                    - type: object
                      description: External user (guest)
                      required:
                      - emailAddress
                      example:
                        emailAddress: internal@example.com
                        displayName: John Doe
                      properties:
                        emailAddress:
                          type: string
                          description: Attendee email
                          example: example@example.com
                        displayName:
                          type: string
                          description: Attendee name
                          example: John Doe
              required:
              - userId
              - startDateTime
              - endDateTime
        required: false
      deprecated: false
  /v1/public/bookings/{id}:
    get:
      operationId: api_v1publicbookings_id_get
      tags:
      - Booking
      responses:
        '200':
          description: Booking resource
          content:
            application/ld+json:
              schema:
                $ref: '#/components/schemas/Booking.jsonld-public_booking'
            text/csv:
              schema:
                $ref: '#/components/schemas/Booking-public_booking'
        '404':
          description: Resource not found
      summary: Get a single booking by identifier
      description: Get a single booking if you know it's identifier.
      parameters:
      - name: id
        in: path
        description: Booking identifier
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: 01GTBV1CT3BM8A42SEJ2J5F4EG
      - name: Accept
        in: header
        description: ''
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: application/ld+json
      deprecated: false
  /v1/public/bookings/{id}/cancel:
    post:
      operationId: api_v1publicbookings_idcancel_post
      tags:
      - Booking
      responses:
        '201':
          description: Booking resource created
          content:
            application/ld+json:
              schema:
                $ref: '#/components/schemas/Booking.jsonld-public_booking'
            text/csv:
              schema:
                $ref: '#/components/schemas/Booking-public_booking'
          links: null
        '400':
          description: Invalid input
        '422':
          description: Unprocessable entity
      summary: Cancel a booking
      description: |-
        Cancel a booking. Cancellation will not be possible if the booking
                        has already been cancelled or completed. By adding a userId to the body of the request the public api can attempt this operation
                        on behalf of a specific user.
      parameters:
      - name: id
        in: path
        description: Booking identifier
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: 01GTBV1CT3BM8A42SEJ2J5F4EG
      - name: Accept
        in: header
        description: ''
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: application/ld+json
      requestBody:
        description: The new Booking resource
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  type: string
                  description: |-
                    The user identifier of the user the request is on behalf of.
                                                            If set the API will check to ensure this user has the permission to cancel this booking.
            example:
              userId: 01GTBV1CT3BM8A42SEJ2J5F4EG
        required: false
      deprecated: false
  /v1/public/bookings/{id}/check-in:
    post:
      operationId: api_v1publicbookings_idcheck-in_post
      tags:
      - Booking
      responses:
        '201':
          description: Booking resource created
          content:
            application/ld+json:
              schema:
                $ref: '#/components/schemas/Booking.jsonld-public_booking'
            text/csv:
              schema:
                $ref: '#/components/schemas/Booking-public_booking.check_in'
        '400':
          description: Invalid input
        '422':
          description: Unprocessable entity
      summary: Check in to a booking
      description: Check in to a booking on behalf of a user using a specified method. Check in will not be possible if self-certification is required by the building and the user's whose booking it is has not self-certified for the day of the booking.
      parameters:
      - name: id
        in: path
        description: Booking identifier
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: 01GTBV1CT3BM8A42SEJ2J5F4EG
      - name: Accept
        in: header
        description: ''
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        style: simple
        explode: false
        allowReserved: false
        example: application/ld+json
      requestBody:
        description: The new Booking resource
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  type: string
                  description: The user identifier to check in on behalf of. This would be the user performing an action like the user using the door access system.
                method:
                  type: string
                  nullable: true
                  enum:
                  - doorAccess
                  - wifi
                  - geofence
                  - sensor
                  description: The method used to check in.
              required:
              - userId
            example:
              userId: 01GTBV1CT3BM8A42SEJ2J5F4EG
              method: doorAccess
        required: false
      deprecated: false
  /v1/public/bookings/{id}/check-out:
    post:
      operationId: api_v1publicbookings_idcheck-out_post
      tags:
      - Booking
      responses:
        '201':
          description: Booking resource created
          content:
            application/ld+json:
              schema:
                $ref: '#/components/schemas/Booking.jsonld-public_booking'
            text/csv:
              schema:
                $ref: '#/components/schemas/Booking-public_booking.check_out'
        '400':
          description: Invalid input
        '422':
          description: Unprocessable entity
      summary: Check out of a booking
      description: Check out of a booking on behalf of a user using a specified method. Check out will not be possible if self-certification is required by the building and the user's whose booking it is has not self-certified for the day of the booking.
      parameters:
      - name: id
        in: path
        description: Booking identifier
        required: true
        deprecated: false
        allowEmptyValue: false
        schema:
          type: string
        st

# --- truncated at 32 KB (231 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kadence/refs/heads/main/openapi/kadence-public-api-openapi.yml