Docs Portal
Connector Guides
API ReferenceConsole

Willow Ticket Source

Willow logo

The Willow Ticket Source connector integrates with the Willow platform to ingest ticket and service request data into the Mapped graph in real time. It receives webhook events from Willow whenever tickets are created or updated, and transforms them into Service Requests and Work Orders with associated people, places, and asset relationships.

Use Cases

Potential use cases include:

  • Unified CMMS visibility: View all Willow service requests and work orders alongside data from other building systems in a single graph
  • Cross-system ticket routing: Enable downstream destinations (e.g. Tririga, ServiceNow) to receive enriched ticket data with standardized entity types and relationships
  • Facilities analytics: Query service request and work order data by building, priority, status, and assignee to identify trends and optimize maintenance operations

Configuration

Authentication

FieldRequiredDescriptionWhere to Find
Base URLYesYour Willow instance API base URLProvided by your Willow administrator (e.g. https://your-instance.app.willowinc.com/api/v3)
Client IDYesAzure AD application (client) IDAzure Portal → App Registrations → Your Willow app → Application (client) ID
Client SecretYesAzure AD application client secretAzure Portal → App Registrations → Your Willow app → Certificates & Secrets

When you save the Auth configuration, the connector validates your credentials by requesting a token from the Willow API. If authentication fails, you will see an error message.

Site Selection (Mapping)

After authentication, you must select which buildings (sites) the connector should receive tickets for.

FieldRequiredDescription
Selected SitesYesOne or more Willow buildings from which to sync tickets

The dropdown is populated with all buildings from your Willow instance. Only tickets associated with a selected building will be processed; tickets from other buildings are silently dropped.

Webhook

After saving the site selection, the connector automatically creates a webhook receiver in Mapped. The Webhook section displays the receiver details needed to configure your Willow instance to send ticket events to Mapped. Share these details with your Willow administrator to complete the integration.

Advanced Options

OptionDefaultDescription
Enable Willow Sourced Tickets OnlytrueWhen enabled, only tickets originating from the Willow platform are published to the graph. Disable to include tickets from external integrations.
Combine Category and Job TypefalseWhen enabled, the service request's category and jobType fields are concatenated with a hyphen (e.g. "Maintenance-HVAC") into a single compound value. This is useful for downstream systems that need a richer job type classification.

Combine Category and Job Type -- Behavior Details

This option only affects Service Requests. Work Orders are not affected.

jobTypecategoryResult
MaintenanceHVACMaintenance-HVAC
Maintenance(empty)Maintenance
(empty)HVACHVAC
(empty)(empty)(null)

Mapped Concepts

Overview

The connector creates two primary entity types depending on the ticket's status:

  • Service Request: Created for tickets with status Unscheduled or Canceled
  • Work Order: Created for tickets with any other status (eg In Progress, Completed, On Hold)

Both entity types establish relationships with People (reporters, creators, assignees), People Groups (work groups), and Places/Things (buildings, rooms, equipment) referenced in the ticket.

Mapped Entities

Willow DataMapped EntityConditionKey Fields
Ticket (Unscheduled/Canceled)ServiceRequestticketStatus is Unscheduled or Canceledsummary, description, jobPriority, sector, requestStatus, referenceUrl
Ticket (all other statuses)WorkOrderticketStatus is anything elsesummary, description, jobStatus, jobSubStatus, jobPriority, jobType, sector, dueDate, dateClosed, dateCompleted, referenceUrl, problemDescription, resolutionDescription
Ticket ReporterPersonReporter has email addressname, email-based identity
Ticket CreatorPersonCreator has email address (Work Orders only)name, email-based identity
Ticket User AssigneePersonUser assignee has email addressname, email-based identity
Ticket Work GroupPeopleGroupWork group is assignedname, external identity, optional member person
Ticket LocationsPlace (via identity reference)Location twin IDs in ticketResolved via Willow twin API and ontology mapping
Ticket Asset TwinThing (via identity reference)Asset twin ID in ticketResolved via Willow twin API and ontology mapping

Service Request Fields

GraphQL FieldSourceDescription
summaryTicket summaryBrief description of the request
descriptionTicket descriptionDetailed information
jobPriorityTicket priority levelUrgency (e.g. high, medium, low)
sectorTicket category nameCategory of the request (e.g. HVAC, Plumbing)
requestStatusTicket status nameCurrent status (e.g. Unscheduled, Canceled)
referenceUrlWillow URL or Insight URLLink back to the original ticket in Willow
identitiesTicket IDExternal identity: urn:willowinc:ticket:id:{ticketId}

Work Order Fields

GraphQL FieldSourceDescription
summaryTicket summaryBrief description
descriptionTicket descriptionDetailed information
jobStatusTicket status nameCurrent status (e.g. In Progress, Completed)
jobSubStatusTicket sub-status nameMore specific status
jobPriorityTicket priority levelUrgency level
jobTypeTicket job type nameType of work (e.g. Maintenance, Repair)
sectorTicket category nameCategory
dueDateTicket due dateWhen the work is expected to be done
dateClosedTicket closed dateWhen the ticket was closed
dateCompletedTicket resolved dateWhen the work was completed
externalDateCreatedTicket created dateWhen the ticket was originally created in Willow
externalDateUpdatedTicket updated dateLast update time in Willow
referenceUrlWillow URL or Insight URLLink back to the original ticket
problemDescriptionTicket service neededWhat service was requested
resolutionDescriptionTicket solutionHow the issue was resolved
subjectTicket causeRoot cause of the issue
identitiesTicket IDExternal identity: urn:willowinc:ticket:id:{ticketId}

Mapped Points & Time Series

This connector does not create time series points. It creates entity data only.

Graph Diagrams

Work Order Relationships

Diagram of Work Order relationships: isReportedBy Person - Reporter, isCreatedBy Person - Creator, hasAssignee Person - Assignee, hasAssignedGroup PeopleGroup - Work Group which hasMember Person - Assignee, relatesTo Place - Building, Space or Floor, and relatesTo Thing - Equipment.

Service Request Relationships

Diagram of Service Request relationships: isReportedBy Person - Reporter, isResponsibilityOf PeopleGroup - Work Group, which hasMember Person - Assignee, relatesTo Place - Building, Space or Floor, and relatesTo Thing - Equipment.

Sample Code

List all Service Requests from this connector

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
  serviceRequests(filter: {connectedDataSourceId: {eq: "your-connector-Id"}}) {
    id
    summary
    description
    jobPriority
    sector
    requestStatus
    referenceUrl
    isReportedBy {
      name
      emails {
        address
      }
    }
    isResponsibilityOf {
      name
      hasMember {
        name
      }
    }
    relatesTo {
      ... on Building {
        id
        name
      }
      ... on Space {
        id
        name
        exactType
      }
      ... on Thing {
        id
        name
        exactType
      }
    }
    identities {
      ... on ExternalIdentity {
        value
        scope
        scopeId
      }
    }
  }
}

List all Work Orders from this connector

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{
  workOrders(filter: {connectedDataSourceId: {eq: "your-connector-Id"}}) {
    id
    mappingKey
    summary
    description
    jobStatus
    jobPriority
    jobType
    sector
    referenceUrl
    problemDescription
    resolutionDescription
    isReportedBy {
      name
      emails {
        address
      }
    }
    isCreatedBy {
      name
    }
    hasAssignee {
      name
      emails {
        address
      }
    }
    hasAssignedGroup {
      name
      hasMember {
        name
      }
    }
    relatesTo {
      ... on Building {
        id
        name
      }
      ... on Space {
        id
        name
        exactType
      }
      ... on Thing {
        id
        name
        exactType
      }
    }
    identities {
      ... on ExternalIdentity {
        value
        scope
        scopeId
      }
    }
  }
}

Find people associated with this connector's tickets

Request Response
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  people(filter: {connectedDataSourceId: {eq: "your-connector-Id"}}) {
    id
    name
    connectedDataSourceId
    emails {
      address
    }
    identities {
      ... on EmailIdentity {
        value
      }
    }
  }
}