Docs Portal
Documentation
API ReferenceConsole

Tactic Room Reservations

Tactic logo

The Tactic connector ingests workplace room-scheduling data from Tactic into the Mapped graph. It imports your Tactic offices as Buildings and your bookable meeting rooms as Spaces, then continuously polls Tactic for reservations and materializes them as Calendar Events attached to each room's booking calendar.

This gives the Mapped Graph a live, structured view of when and where rooms are booked. This data that can be forwarded downstream (for example, to the Willow Events Destination Connector) to drive energy optimization and space-utilization use cases.

Use Cases

  • Occupancy-driven energy optimization: Feed room booking schedules to downstream systems so HVAC and lighting can be pre-conditioned only for rooms that are actually reserved.
  • Space utilization analytics: Analyze reservation history per room and building to understand demand, identify under-used spaces, and inform real-estate decisions.
  • Unified scheduling view: Combine Tactic room bookings with other building data in the Mapped graph for a single source of truth on space usage.

Configuration

Auth Requirements

The connector authenticates against the Tactic Public API v1 using a static API key (bearer token).

FieldRequiredDescription
API KeyYesA Tactic Public API key. Provided by your Tactic administrator from the Tactic admin console.

Entity Import

This connector uses the Mapped entities framework (not legacy place mappings). Import happens in two stages, each presented as its own step in the configuration UI:

  • Offices — Load your Tactic offices and select which ones to import as Buildings.
  • Resources — Load meeting rooms and select which ones to import as Spaces. Rooms can optionally be filtered by office. Only rooms of type meeting room are imported.

Each selected entity is reviewed and merged into the Graph, where you can adjust the mapped name (and space code for rooms) before saving.

Poll Settings

OptionDefaultDescription
Offices to PollAllSelect which offices are included when polling for reservation events. If no offices are selected, all offices with merged rooms are polled.
Current Events PollEnabledPolls Tactic for new and updated reservations every 30 minutes.
Future Events PollEnabledPolls Tactic for upcoming reservations across a 30-day lookahead, once per day.

Backfill

The Backfill section lets you import historical reservations for a specific date range on demand. Select a start and end date and start the backfill; large ranges are automatically chunked into 7-day windows to respect Tactic API limits. Only one backfill can run at a time. Progress is reported in the connector logs.

Mapped Concepts

API to Mapped Entities

Tactic API ModelMapped EntityexactTypeNotes
OfficeBuildingBuildingNamed from the Tactic office name.
Resource (meeting room)SpaceSpaceisPartOf its office Building. Only meeting rooms are imported.
(per room, automatic)SpaceBookingCalendarSpace_Booking_CalendarOne booking calendar is created per imported room, linked to the room via hasCalendar.
ReservationCalendarEventCalendar_EventAttached to the room's booking calendar via hasCalendarEvent; hasLocation points to the room.

Relationships

  • A Building contains its rooms — each Space isPartOf its Building (inverse: Building.hasPart / Building.spaces).
  • Each Space hasCalendar a SpaceBookingCalendar (inverse: SpaceBookingCalendar.isCalendarOf).
  • A SpaceBookingCalendar hasCalendarEvent for each reservation.
  • Each CalendarEvent hasLocation set to the booked Space, carries startTime / endTime, and holds an external identity of the form urn:tactic:reservation:id:<reservation-id>.

Only reservations in an accepted or cancelled state are processed; pending reservations are ignored. If a reservation is moved to a different room, the event's link to the previous room's calendar is removed on the next merge.

Sample Code

List the buildings and rooms created by this connector

Request Response
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  connectors(filter: {id: {eq: "your-connector-Id"}}) {
    id
    name
    buildings {
      id
      name
      exactType
      mappingKey
      spaces {
        id
        name
        exactType
        mappingKey
      }
    }
  }
}

Read a room's booking calendar and its events

Request Response
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  connectors(filter: {id: {eq: "CONV5emwbkMNooPqq4FCfaEGs"}}) {
    spaces {
      id
      name
      exactType
      mappingKey
      isPartOf {
        id
        name
        exactType
      }
      hasCalendar {
        id
        name
        exactType
        mappingKey
        hasCalendarEvent {
          id
          name
          exactType
          mappingKey
          exactType
          startTime
          endTime
        }
      }
    }
  }
}

Graph Diagrams

Tactic Graph shape. Building hasPart Space, which hasCalendar Space_Booking_Calendar, which hasCalendarEvent Calendar_Event. Calendar_Event hasLocation Space.