Arthur Online - maintenance dispatch
Version 1.0.0
Raise a maintenance task against a property, break it into subtasks, dispatch it to a contractor as a work order, open the conversation and read back quotes and invoices. Approval steps (manager approves completion, owner accepts a quote) are UI-only in Arthur and appear here as read-backs rather than calls.
1 workflow
2 source APIs
1 provider
View Spec
View on GitHub
Real EstateUnited KingdomProperty ManagementPropTechRentalsLettingsTenancyMaintenanceProperty ListingsSocial HousingStudent HousingBlock ManagementArazzoWorkflows
maintenanceDispatch
Task to work order to quote to invoice.
9 steps
inputs: entityId, message, propertyId, statusUpdate, subtask, task, workorder
outputs: taskId, workorderId
1
raiseTask
$sourceDescriptions.properties.addTaskOnProperty
Raise the task against the property. Not idempotent - never auto-retry.
2
addSubtask
$sourceDescriptions.maintenance.createSubtaskOnTask
3
moveTaskLive
$sourceDescriptions.maintenance.updateStatusOnTask
4
dispatchWorkorder
$sourceDescriptions.maintenance.createWorkorderOnTask
Create the work order from the task and assign the contractor.
5
confirmContractor
$sourceDescriptions.maintenance.listContractorsOnWorkorder
6
whoCanBeMessaged
$sourceDescriptions.maintenance.getRecipientsForWorkorder
7
openConversation
$sourceDescriptions.maintenance.createConversationOnWorkorder
8
readQuotes
$sourceDescriptions.maintenance.listQuotesOnWorkorder
Quote acceptance happens in the Arthur apps; read the state back here.
9
readInvoices
$sourceDescriptions.maintenance.listInvoicesOnWorkorder
arazzo: 1.0.1
info:
title: Arthur Online - maintenance dispatch
version: 1.0.0
description: >-
Raise a maintenance task against a property, break it into subtasks, dispatch it to a
contractor as a work order, open the conversation and read back quotes and invoices.
Approval steps (manager approves completion, owner accepts a quote) are UI-only in Arthur
and appear here as read-backs rather than calls.
sourceDescriptions:
- name: properties
url: ../openapi/arthur-online-properties-openapi.yml
type: openapi
- name: maintenance
url: ../openapi/arthur-online-maintenance-openapi.yml
type: openapi
workflows:
- workflowId: maintenanceDispatch
summary: Task to work order to quote to invoice.
inputs:
type: object
required: [entityId, propertyId, task]
properties:
entityId: {type: string, description: Sent as X-EntityID on every call.}
propertyId: {type: integer, description: The property the issue belongs to.}
task: {type: object, description: Task fields as documented on Add Task on Property.}
subtask: {type: object, description: Subtask fields.}
workorder: {type: object, description: Work order fields including the contractor assignment.}
message: {type: object, description: Conversation fields for the contractor thread.}
statusUpdate: {type: object, description: The task status transition payload.}
steps:
- stepId: raiseTask
description: Raise the task against the property. Not idempotent - never auto-retry.
operationId: $sourceDescriptions.properties.addTaskOnProperty
parameters:
- {name: property_id, in: path, value: $inputs.propertyId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
- {name: strict, in: query, value: true}
requestBody:
contentType: application/json
payload: $inputs.task
successCriteria:
- condition: $statusCode == 200
outputs:
taskId: $response.body#/data/id
- stepId: addSubtask
operationId: $sourceDescriptions.maintenance.createSubtaskOnTask
parameters:
- {name: task_id, in: path, value: $steps.raiseTask.outputs.taskId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
- {name: strict, in: query, value: true}
requestBody:
contentType: application/json
payload: $inputs.subtask
successCriteria:
- condition: $statusCode == 200
- stepId: moveTaskLive
operationId: $sourceDescriptions.maintenance.updateStatusOnTask
parameters:
- {name: task_id, in: path, value: $steps.raiseTask.outputs.taskId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
- {name: strict, in: query, value: true}
requestBody:
contentType: application/json
payload: $inputs.statusUpdate
successCriteria:
- condition: $statusCode == 200
- stepId: dispatchWorkorder
description: Create the work order from the task and assign the contractor.
operationId: $sourceDescriptions.maintenance.createWorkorderOnTask
parameters:
- {name: task_id, in: path, value: $steps.raiseTask.outputs.taskId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
- {name: strict, in: query, value: true}
requestBody:
contentType: application/json
payload: $inputs.workorder
successCriteria:
- condition: $statusCode == 200
outputs:
workorderId: $response.body#/data/id
- stepId: confirmContractor
operationId: $sourceDescriptions.maintenance.listContractorsOnWorkorder
parameters:
- {name: workorder_id, in: path, value: $steps.dispatchWorkorder.outputs.workorderId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
successCriteria:
- condition: $statusCode == 200
- stepId: whoCanBeMessaged
operationId: $sourceDescriptions.maintenance.getRecipientsForWorkorder
parameters:
- {name: workorder_id, in: path, value: $steps.dispatchWorkorder.outputs.workorderId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
successCriteria:
- condition: $statusCode == 200
- stepId: openConversation
operationId: $sourceDescriptions.maintenance.createConversationOnWorkorder
parameters:
- {name: workorder_id, in: path, value: $steps.dispatchWorkorder.outputs.workorderId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
- {name: strict, in: query, value: true}
requestBody:
contentType: application/json
payload: $inputs.message
successCriteria:
- condition: $statusCode == 200
- stepId: readQuotes
description: Quote acceptance happens in the Arthur apps; read the state back here.
operationId: $sourceDescriptions.maintenance.listQuotesOnWorkorder
parameters:
- {name: workorder_id, in: path, value: $steps.dispatchWorkorder.outputs.workorderId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
successCriteria:
- condition: $statusCode == 200
- stepId: readInvoices
operationId: $sourceDescriptions.maintenance.listInvoicesOnWorkorder
parameters:
- {name: workorder_id, in: path, value: $steps.dispatchWorkorder.outputs.workorderId}
- {name: X-EntityID, in: header, value: $inputs.entityId}
successCriteria:
- condition: $statusCode == 200
outputs:
taskId: $steps.raiseTask.outputs.taskId
workorderId: $steps.dispatchWorkorder.outputs.workorderId