Skip to main content

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🎫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🎫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

{
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

{
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

{
people(filter:{connectedDataSourceId:{eq:"your-connector-Id"}}){
id
name
connectedDataSourceId
emails { address }
identities {
... on EmailIdentity { value }
}
}
}