Arthur Online · Arazzo Workflow

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

Provider

arthur-online

Workflows

maintenanceDispatch
Task to work order to quote to invoice.
9 steps inputs: entityId, message, propertyId, statusUpdate, subtask, task, workorder outputs: taskId, workorderId
1
raiseTask
Raise the task against the property. Not idempotent - never auto-retry.
4
dispatchWorkorder
Create the work order from the task and assign the contractor.
8
readQuotes
Quote acceptance happens in the Arthur apps; read the state back here.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
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: tasksApi
  url: ../openapi/arthur-online-tasks-api-openapi.yml
  type: openapi
- name: workordersApi
  url: ../openapi/arthur-online-workorders-api-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.tasksApi.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.tasksApi.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.tasksApi.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.tasksApi.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.workordersApi.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.workordersApi.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.workordersApi.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.workordersApi.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.workordersApi.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

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/arthur-online-maintenance-dispatch"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.