> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.kodelabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Condeco API

> Connect Condeco API to KODE OS for reservations data

> Connect Condeco API to KODE OS for reservations data integration

## Overview

Use this integration to bring Condeco room and desk reservations into KODE OS. Discovery, REST polling, and webhooks keep utilization, bookings, and workspace status aligned with your building operations.

| Property            | Value                |
| ------------------- | -------------------- |
| **System Type**     | Reservations         |
| **Communication**   | REST + Webhook       |
| **Collection**      | Hybrid (Pull + Push) |
| **Collection Mode** | SNAPSHOT             |

## Supported Capabilities

* Discover Devices & Points
* Collect Sensor Data
* Collect Non-Sensor Data
* Receive Webhook Data
* Collect Historical Data

## Prerequisites

* An active account with Condeco API and access to their API or developer portal
* OAuth client credentials (Client ID and Client Secret) from the Condeco API developer portal
* KODE OS environment with access to Data Sources

## Generate API Credentials

1. Log in to the Condeco API developer portal or admin console
2. Navigate to the API or developer settings section
3. Create a new API application or client
4. Note the **Client ID** and **Client Secret** -- you will need these when configuring the connector in KODE OS
5. Note the **Auth URL** for OAuth token exchange

## Configure Webhook

This integration uses webhooks for real-time data delivery. After creating the connector in KODE OS:

1. Copy the webhook URL provided on the connector detail page
2. In the Condeco API platform, navigate to the webhook or notification settings
3. Add a new webhook endpoint using the KODE OS URL
4. Configure the authentication header as specified on the connector detail page
5. Save and enable the webhook

## Configure Connector in KODE OS

1. Navigate to **Data Sources** in your building
2. Click **API Catalog** and search for **Condeco API**
3. Click **+ Add Datasource**
4. Fill in the fields below and complete the three-page setup flow

| Field                                  | Required | Type     | Description                                                |
| -------------------------------------- | -------- | -------- | ---------------------------------------------------------- |
| **URL**                                | Yes      | text     | The base URL or IP address of the external system          |
| **Auth URL**                           | Yes      | text     | The OAuth authorization URL for token exchange             |
| **Client ID**                          | Yes      | password | The OAuth client ID from the vendor's developer portal     |
| **Client Secret**                      | Yes      | password | The OAuth client secret from the vendor's developer portal |
| **Location ID**                        | Yes      | password | The location identifier in the external system             |
| **External Booking Subscription Key**  | Yes      | password |                                                            |
| **Hierarchy Mapping Subscription Key** | Yes      | password |                                                            |
| **Primary Key**                        | No       | password |                                                            |
| **Non-Sensor Data Config**             | Yes      | dropdown | Configuration for non-sensor data collection types         |

## Discover Devices and Points

After configuring the connector, click **Discover** on the connector detail page. KODE OS will query the Condeco API system and return a list of available devices and their data points.

Review the discovered items and select the devices you want to register in KODE OS.

For more details on the discovery process, see the [Discovery guide](/products/integrations/capabilities/discovery).

## Devices and Points

When you discover devices from Condeco API, KODE OS maps them to the following device types and data points:

### Presence / Occupancy Sensor

Canonical Type: `presenceDetection`

| # | Point               | Description                                                                | Unit | Writable | Ontology Field     | Collection |
| - | ------------------- | -------------------------------------------------------------------------- | ---- | -------- | ------------------ | ---------- |
| 1 | `resource_occupied` | **True** -- space is currently occupied / **False** -- space is unoccupied | --   | No       | `occupancy_status` | Webhook    |

## What Data You Get

### Point History

Time-series readings including resource\_occupied, collected at regular intervals from connected devices

### Bookings

Space reservation records including attendees, check-in/out times, confirmation status, and room/space details

KODE OS maps Condeco API data to these standard fields:

| KODE Field           | Source Field                                                                                       | Notes                |
| -------------------- | -------------------------------------------------------------------------------------------------- | -------------------- |
| **id**               | `bookingId`                                                                                        | --                   |
| **category**         | `BookingCategory.DESK.getDisplayName(`                                                             | --                   |
| **locationId**       | `floorNumber`                                                                                      | --                   |
| **locationName**     | `floorName`                                                                                        | --                   |
| **startDateTime**    | `startDate`                                                                                        | --                   |
| **endDateTime**      | `endDate`                                                                                          | --                   |
| **createdBy**        | `deskCreatorUserName`                                                                              | --                   |
| **createdAt**        | `createdOn`                                                                                        | --                   |
| **status**           | `deskBookingsStatuses.get(bookingStatus`                                                           | --                   |
| **attendeeId**       | `deskBookedToUserID`                                                                               | --                   |
| **attendeeName**     | `deskBookedToUserName`                                                                             | --                   |
| **attendeeEmail**    | `deskBookedToUserEmail`                                                                            | --                   |
| **attendeeCompany**  | `deskBookedToUserCompany`                                                                          | --                   |
| **attendeePhone**    | `deskBookedToUserTelephone`                                                                        | --                   |
| **customFields**     | `(custom fields)`                                                                                  | custom fields object |
| **id**               | `bookingID`                                                                                        | --                   |
| **category**         | `BookingCategory.ROOM.getDisplayName(`                                                             | --                   |
| **title**            | `meetingTitle`                                                                                     | --                   |
| **status**           | `roomBookingsStatuses.get(status`                                                                  | --                   |
| **locationId**       | `locationId`                                                                                       | --                   |
| **locationName**     | `locationName`                                                                                     | --                   |
| **hostName**         | `hostName`                                                                                         | --                   |
| **hostEmail**        | `hostEmail`                                                                                        | --                   |
| **attendeeId**       | `requesterId`                                                                                      | --                   |
| **attendeeEmail**    | `requesterEmail`                                                                                   | --                   |
| **attendeeName**     | `requesterName`                                                                                    | --                   |
| **createdAt**        | `createdOn`                                                                                        | --                   |
| **updatedAt**        | `lastModifiedOn`                                                                                   | --                   |
| **checkInDateTime**  | `bookingRealStartTime`                                                                             | --                   |
| **checkOutDateTime** | `bookingRealEndTime`                                                                               | --                   |
| **startDateTime**    | `bookingStart`                                                                                     | --                   |
| **endDateTime**      | `bookingEnd`                                                                                       | --                   |
| **createdBy**        | `creatorName`                                                                                      | --                   |
| **customFields**     | `(custom fields)`                                                                                  | custom fields object |
| **id**               | `(formatted)`                                                                                      | --                   |
| **category**         | `BookingCategory.CATERING.getDisplayName(`                                                         | --                   |
| **title**            | `name`                                                                                             | --                   |
| **description**      | `meetingTitle`                                                                                     | --                   |
| **status**           | `approvalStatus`                                                                                   | --                   |
| **locationName**     | `roomName`                                                                                         | --                   |
| **hostName**         | `hostName`                                                                                         | --                   |
| **startDateTime**    | `getCollectTimeFromBuildingTz( deliveryTime, CONDECO_VENDOR_ITEMS_DATE_FORMATTER, buildingTz`      | --                   |
| **endDateTime**      | `pickup`                                                                                           | --                   |
| **createdBy**        | `requesterName`                                                                                    | --                   |
| **hostPhone**        | `hostPhone`                                                                                        | --                   |
| **hostEmail**        | `hostEmail`                                                                                        | --                   |
| **attendeePhone**    | `requesterPhone`                                                                                   | --                   |
| **attendeeEmail**    | `requesterEmail`                                                                                   | --                   |
| **customFields**     | `(custom fields)`                                                                                  | custom fields object |
| **createdAt**        | `getMillisFromWindowsTzToLocalTz( collection, timezone, String.valueOf(locationHierarchy.regionId` | --                   |
| **createdAt**        | `getMillisFromWindowsTzToLocalTz( collection, timezone, String.valueOf(locationHierarchy.regionId` | conditional          |

### Polling Schedule

* **Point History** -- Default polling: 1 days (min: 1 days, max: 1 days)
* **Booking** -- Default polling: 1 hours (min: 1 hours, max: 1 days)

For more details on collection modes, see the [Data Collection guide](/products/integrations/capabilities/data-collection).

## Use Cases

Once connected, this integration enables you to:

* Centralize space and resource booking data across platforms
* Track no-show rates and actual utilization versus bookings
* Coordinate meeting room conditions (HVAC, lighting) with reservation schedules

## Troubleshooting

<AccordionGroup>
  <Accordion title="Authentication or connection error">
    Verify that the credentials are correct and have not expired. Check that the URL is reachable from the KODE OS environment. Ensure the Client ID and Client Secret match the values from the Condeco developer portal.
  </Accordion>

  <Accordion title="Webhook data not arriving">
    Verify the webhook URL is correctly registered in the Condeco platform. Check that the authentication header matches the value from the KODE OS connector detail page. Ensure the Condeco system can reach the KODE OS webhook endpoint over the network.
  </Accordion>

  <Accordion title="Discovery returns no devices">
    Verify the connector credentials have sufficient permissions in the Condeco system to list devices. Run a test connection first to confirm connectivity. Some systems require specific API scopes or roles for device enumeration.
  </Accordion>

  <Accordion title="Data collection stops or gaps appear">
    Check the connector status on the Data Sources page. If the status shows an error, review the error logs on the connector detail page. Common causes include expired credentials, network changes, or rate limiting by the Condeco API.
  </Accordion>
</AccordionGroup>
