Arthur Online · Arazzo Workflow

Arthur Online - applicant to tenancy

Version 1.0.0

The UK lettings funnel in Arthur Online: confirm the entity, create an applicant, book a viewing on a unit, record the offer, convert the viewing into a tenancy, add the tenant and register the deposit. Every operationId is verified against the derived Arthur API v2 specs. Arthur has no sandbox - run this against a real entity you control, with strict=true on writes.

1 workflow 6 source APIs 1 provider
View Spec View on GitHub Real EstateUnited KingdomProperty ManagementPropTechRentalsLettingsTenancyMaintenanceProperty ListingsSocial HousingStudent HousingBlock ManagementArazzoWorkflows

Provider

arthur-online

Workflows

applicantToTenancy
Create an applicant, view a unit, take the offer and open the tenancy.
Runs the full lettings funnel. Steps 2 and later all require the entity id resolved in step 1 in the X-EntityID header.
9 steps inputs: applicant, entityId, offer, tenancy, tenant, unitId, viewing outputs: applicantId, tenancyId, tenantId, viewingId
1
confirmEntity
$sourceDescriptions.entities.listEntities
Confirm which Arthur entity this token can address.
2
createApplicant
$sourceDescriptions.applicants.addApplicant
Create the applicant. strict=true so an unknown source is rejected, not created.
3
bookViewing
$sourceDescriptions.units.addViewingOnUnit
Book a viewing of the unit for this applicant.
4
attachApplicantToViewing
$sourceDescriptions.viewings.listApplicantsOnViewing
Confirm the applicant is attached to the viewing.
5
submitOffer
$sourceDescriptions.viewings.submitOfferOnViewing
Record the applicant's offer against the viewing.
6
convertToTenancy
$sourceDescriptions.viewings.addTenancyOnViewing
Convert the accepted viewing into a tenancy. Not idempotent - never auto-retry.
7
addTenant
$sourceDescriptions.tenancies.addTenantOnTenancy
Add the tenant to the tenancy.
8
inviteTenantToPortal
$sourceDescriptions.tenants.inviteTenant
Invite the tenant into the Arthur tenant portal.
9
registerDeposit
$sourceDescriptions.tenancies.registerDepositOnTenancy
Read the deposit registration state on the new tenancy.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Arthur Online - applicant to tenancy
  version: 1.0.0
  description: >-
    The UK lettings funnel in Arthur Online: confirm the entity, create an applicant, book a
    viewing on a unit, record the offer, convert the viewing into a tenancy, add the tenant and
    register the deposit. Every operationId is verified against the derived Arthur API v2 specs.
    Arthur has no sandbox - run this against a real entity you control, with strict=true on writes.
sourceDescriptions:
  - name: entities
    url: ../openapi/arthur-online-entities-openapi.yml
    type: openapi
  - name: applicants
    url: ../openapi/arthur-online-applicants-openapi.yml
    type: openapi
  - name: viewings
    url: ../openapi/arthur-online-viewings-openapi.yml
    type: openapi
  - name: units
    url: ../openapi/arthur-online-units-openapi.yml
    type: openapi
  - name: tenancies
    url: ../openapi/arthur-online-tenancies-openapi.yml
    type: openapi
  - name: tenants
    url: ../openapi/arthur-online-tenants-openapi.yml
    type: openapi
workflows:
  - workflowId: applicantToTenancy
    summary: Create an applicant, view a unit, take the offer and open the tenancy.
    description: >-
      Runs the full lettings funnel. Steps 2 and later all require the entity id resolved in
      step 1 in the X-EntityID header.
    inputs:
      type: object
      required: [entityId, unitId, applicant]
      properties:
        entityId:
          type: string
          description: The Arthur entity to operate in, sent as X-EntityID on every call.
        unitId:
          type: integer
          description: The lettable unit being viewed.
        applicant:
          type: object
          description: Applicant fields as documented on the Add Applicant operation.
        viewing:
          type: object
          description: Viewing fields - viewing_date, viewing_time, duration, notes.
        offer:
          type: object
          description: Offer fields - offer amount and offer_frequency.
        tenancy:
          type: object
          description: Tenancy fields - start_date, end_date, rent and frequency.
        tenant:
          type: object
          description: Tenant person fields.
    steps:
      - stepId: confirmEntity
        description: Confirm which Arthur entity this token can address.
        operationId: $sourceDescriptions.entities.listEntities
        parameters:
          - name: X-EntityID
            in: header
            value: $inputs.entityId
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          entities: $response.body#/data
      - stepId: createApplicant
        description: Create the applicant. strict=true so an unknown source is rejected, not created.
        operationId: $sourceDescriptions.applicants.addApplicant
        parameters:
          - name: X-EntityID
            in: header
            value: $inputs.entityId
          - name: strict
            in: query
            value: true
        requestBody:
          contentType: application/json
          payload: $inputs.applicant
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          applicantId: $response.body#/data/id
      - stepId: bookViewing
        description: Book a viewing of the unit for this applicant.
        operationId: $sourceDescriptions.units.addViewingOnUnit
        parameters:
          - name: unit_id
            in: path
            value: $inputs.unitId
          - name: X-EntityID
            in: header
            value: $inputs.entityId
          - name: strict
            in: query
            value: true
        requestBody:
          contentType: application/json
          payload: $inputs.viewing
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          viewingId: $response.body#/data/id
      - stepId: attachApplicantToViewing
        description: Confirm the applicant is attached to the viewing.
        operationId: $sourceDescriptions.viewings.listApplicantsOnViewing
        parameters:
          - name: viewing_id
            in: path
            value: $steps.bookViewing.outputs.viewingId
          - name: X-EntityID
            in: header
            value: $inputs.entityId
        successCriteria:
          - condition: $statusCode == 200
      - stepId: submitOffer
        description: Record the applicant's offer against the viewing.
        operationId: $sourceDescriptions.viewings.submitOfferOnViewing
        parameters:
          - name: viewing_id
            in: path
            value: $steps.bookViewing.outputs.viewingId
          - name: X-EntityID
            in: header
            value: $inputs.entityId
          - name: strict
            in: query
            value: true
        requestBody:
          contentType: application/json
          payload: $inputs.offer
        successCriteria:
          - condition: $statusCode == 200
      - stepId: convertToTenancy
        description: Convert the accepted viewing into a tenancy. Not idempotent - never auto-retry.
        operationId: $sourceDescriptions.viewings.addTenancyOnViewing
        parameters:
          - name: viewing_id
            in: path
            value: $steps.bookViewing.outputs.viewingId
          - name: X-EntityID
            in: header
            value: $inputs.entityId
          - name: strict
            in: query
            value: true
        requestBody:
          contentType: application/json
          payload: $inputs.tenancy
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          tenancyId: $response.body#/data/id
      - stepId: addTenant
        description: Add the tenant to the tenancy.
        operationId: $sourceDescriptions.tenancies.addTenantOnTenancy
        parameters:
          - name: tenancy_id
            in: path
            value: $steps.convertToTenancy.outputs.tenancyId
          - name: X-EntityID
            in: header
            value: $inputs.entityId
          - name: strict
            in: query
            value: true
        requestBody:
          contentType: application/json
          payload: $inputs.tenant
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          tenantId: $response.body#/data/id
      - stepId: inviteTenantToPortal
        description: Invite the tenant into the Arthur tenant portal.
        operationId: $sourceDescriptions.tenants.inviteTenant
        parameters:
          - name: tenant_id
            in: path
            value: $steps.addTenant.outputs.tenantId
          - name: X-EntityID
            in: header
            value: $inputs.entityId
        successCriteria:
          - condition: $statusCode == 200
      - stepId: registerDeposit
        description: Read the deposit registration state on the new tenancy.
        operationId: $sourceDescriptions.tenancies.registerDepositOnTenancy
        parameters:
          - name: id
            in: path
            value: $steps.convertToTenancy.outputs.tenancyId
          - name: X-EntityID
            in: header
            value: $inputs.entityId
        successCriteria:
          - condition: $statusCode == 200
    outputs:
      applicantId: $steps.createApplicant.outputs.applicantId
      viewingId: $steps.bookViewing.outputs.viewingId
      tenancyId: $steps.convertToTenancy.outputs.tenancyId
      tenantId: $steps.addTenant.outputs.tenantId