Purplebricks Viewings API

Viewing and appointment service: appointments, open days, property access details, per-property and per-user viewing surfaces, and a Bland voice-agent integration surface. Documents 409 conflict and 429 rate-limit responses on booking operations.

OpenAPI Specification

purplebricks-viewings-v1-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Purplebricks.Viewings.Api 1.0 - Customer Experience
  description: '### Purplebricks Viewings API.

    ### [Purplebricks.Viewings.Api Git Repository](https://dev.azure.com/purplebricks/BackEnd/_git/viewings)'
  version: '1.0'
servers:
- url: https://api.purplebricks.co.uk/viewings-api
paths:
  /v1/accessdetails/{propertyId}:
    get:
      tags:
      - AccessDetails
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: userId
        in: query
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsResponseModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsResponseModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsResponseModel'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
    post:
      tags:
      - AccessDetails
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsBaseModel'
          text/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsBaseModel'
          application/*+json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsBaseModel'
      responses:
        '200':
          description: Success
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FluentValidation.Results.ValidationFailure'
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FluentValidation.Results.ValidationFailure'
            text/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FluentValidation.Results.ValidationFailure'
  /v1/accessdetails/{propertyId}/summary:
    get:
      tags:
      - AccessDetails
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsSummaryModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsSummaryModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsSummaryModel'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '403':
          description: Forbidden
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/accessdetails/{propertyId}/revealkeysafecode:
    get:
      tags:
      - AccessDetails
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: userId
        in: query
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsResponseModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsResponseModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsResponseModel'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '403':
          description: Forbidden
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '500':
          description: Server Error
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/appointments:
    post:
      tags:
      - Appointments
      summary: Books a viewing appointment.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.BookViewingInputModel'
          text/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.BookViewingInputModel'
          application/*+json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.BookViewingInputModel'
      responses:
        '201':
          description: The appointment was successfully created.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel'
        '400':
          description: The appointment request is invalid.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '401':
          description: The user is unauthorised.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '403':
          description: The appointment was not created because the property is sold or withdrawn.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '409':
          description: The appointment was not created because the viewing slot is not available.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '429':
          description: Too Many Requests
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/appointments/cancel:
    post:
      tags:
      - Appointments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Commands.CancelViewingCommand'
          text/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Commands.CancelViewingCommand'
          application/*+json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Commands.CancelViewingCommand'
      responses:
        '200':
          description: Success
  /v1/bland/viewing:
    post:
      tags:
      - Bland
      summary: Books a viewing appointment via Bland AI integration.
      requestBody:
        description: The booking details from Bland AI.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.BlandBookViewingInputModel'
          text/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.BlandBookViewingInputModel'
          application/*+json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.BlandBookViewingInputModel'
      responses:
        '201':
          description: The appointment was successfully created.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel'
        '400':
          description: The appointment request is invalid.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '401':
          description: The user is unauthorised.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '403':
          description: The appointment was not created because the property is sold or withdrawn.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '409':
          description: The appointment was not created because the viewing slot is not available.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '429':
          description: Too Many Requests
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/bland/viewing/confirmrequestslot:
    post:
      tags:
      - Bland
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.AiConfirmRequestSlotInputModel'
          text/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.AiConfirmRequestSlotInputModel'
          application/*+json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.AiConfirmRequestSlotInputModel'
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AiSellerRequestSlotResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AiSellerRequestSlotResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AiSellerRequestSlotResponse'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/bland/viewing/reschedulerequestslot:
    post:
      tags:
      - Bland
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.AiRescheduleRequestSlotInputModel'
          text/json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.AiRescheduleRequestSlotInputModel'
          application/*+json:
            schema:
              $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.AiRescheduleRequestSlotInputModel'
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AiSellerRequestSlotResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AiSellerRequestSlotResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AiSellerRequestSlotResponse'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/properties/{propertyId}/opendays/upcoming:
    get:
      tags:
      - OpenDays
      summary: Returns the details of any upcoming open days for a property. May return an empty result
        set.
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: The open day list was successfully retrieved.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.OpenDaysViewModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.OpenDaysViewModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.OpenDaysViewModel'
        '404':
          description: The property could not be found.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/properties/{propertyId}/opendays/past:
    get:
      tags:
      - OpenDays
      summary: Returns the details of any past open days for a property. May return an empty result set.
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: The open day list was successfully retrieved.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.OpenDaysViewModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.OpenDaysViewModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.OpenDaysViewModel'
        '401':
          description: The user is unauthorised.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
        '404':
          description: The property could not be found.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/properties/{propertyId}:
    get:
      tags:
      - Properties
      summary: Returns the basic details of a property for which a viewing appointment can be booked against.
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: The property was successfully retrieved.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.PropertyViewModel'
            application/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.PropertyViewModel'
            text/json:
              schema:
                $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.PropertyViewModel'
        '404':
          description: The property could not be found.
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails'
  /v1/creatio/properties/{propertyId}/viewings:
    get:
      tags:
      - Properties
      parameters:
      - name: propertyId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.ViewingDetail'
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.ViewingDetail'
            text/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.ViewingDetail'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '500':
          description: Server Error
  /v1/creatio/users/{userId}/viewings:
    get:
      tags:
      - Users
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.UserViewingDetail'
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.UserViewingDetail'
            text/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.UserViewingDetail'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '500':
          description: Server Error
  /v1/creatio/users/{userId}/viewings/feedback:
    get:
      tags:
      - Users
      parameters:
      - name: userId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Success
          content:
            text/plain:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.CreatioFeedbackDetail'
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.CreatioFeedbackDetail'
            text/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.CreatioFeedbackDetail'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: string
            application/json:
              schema:
                type: string
            text/json:
              schema:
                type: string
        '500':
          description: Server Error
components:
  schemas:
    FluentValidation.Results.ValidationFailure:
      type: object
      properties:
        propertyName:
          type: string
          nullable: true
        errorMessage:
          type: string
          nullable: true
        attemptedValue:
          nullable: true
        customState:
          nullable: true
        severity:
          $ref: '#/components/schemas/FluentValidation.Severity'
        errorCode:
          type: string
          nullable: true
        formattedMessagePlaceholderValues:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    FluentValidation.Severity:
      enum:
      - Error
      - Warning
      - Info
      type: string
    Microsoft.AspNetCore.Mvc.ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
    Purplebricks.DatabaseModel.Enumerations.BookingProcess:
      enum:
      - SellerBookValuation
      - BuyerBookViewing
      - CallCentreBookValuation
      - CallCentreBookViewing
      - SellerRearrange
      - BuyerRearrange
      - LpeRearrange
      - LpeBookViewing
      - BuyingAgentBookViewing
      - RemortgageInstantValuation
      - AiVoiceAgent
      - AiWhatsAppAgent
      - AiSmsAgent
      type: string
    Purplebricks.DatabaseModel.Enumerations.ContactNumberType:
      enum:
      - Home
      - Mobile
      - Other
      type: string
    Purplebricks.DatabaseModel.Enumerations.IanaTimeZone:
      enum:
      - NotSet
      - EuropeLondon
      - AustraliaPerth
      - AustraliaEucla
      - AustraliaAdelaide
      - AustraliaBrokenHill
      - AustraliaDarwin
      - AustraliaBrisbane
      - AustraliaCurrie
      - AustraliaHobart
      - AustraliaLindeman
      - AustraliaMelbourne
      - AustraliaSydney
      - AustraliaLordHowe
      - AntarcticaMacquarie
      - AmericaLosAngeles
      - AmericaNewYork
      - AmericaDetroit
      - AmericaKentuckyLouisville
      - AmericaKentuckyMonticello
      - AmericaIndianaIndianapolis
      - AmericaIndianaVincennes
      - AmericaIndianaWinamac
      - AmericaIndianaMarengo
      - AmericaIndianaPetersburg
      - AmericaIndianaVevay
      - AmericaChicago
      - AmericaIndianaTellCity
      - AmericaIndianaKnox
      - AmericaMenominee
      - AmericaNorthDakotaCenter
      - AmericaNorthDakotaNewSalem
      - AmericaNorthDakotaBeulah
      - AmericaBoise
      - AmericaPhoenix
      - AmericaAnchorage
      - AmericaJuneau
      - AmericaSitka
      - AmericaYakutat
      - AmericaNome
      - AmericaAdak
      - AmericaMetlakatla
      - PacificHonolulu
      - AmericaDenver
      - PacificAuckland
      type: string
    Purplebricks.DatabaseModel.Enumerations.Offer.EmploymentStatus:
      enum:
      - Employed
      - SelfEmployed
      - Retired
      - Student
      - DSS
      - Unemployed
      type: string
    Purplebricks.DatabaseModel.Enumerations.Offer.SaleProgressOption:
      enum:
      - NotOnTheMarket
      - OnTheMarket
      - SSTC
      - Pending
      type: string
    Purplebricks.DatabaseModel.Enumerations.Offer.TenantTerms:
      enum:
      - SixMonths
      - TwelveMonths
      - EighteenMonths
      - TwentyFourMonths
      type: string
    Purplebricks.DatabaseModel.Enumerations.PortalType:
      enum:
      - Rightmove
      - Zoopla
      - Globrix
      - PrimeLocation
      - PropertyPal
      - PropertyNews
      - S1Homes
      - Domain
      - RealEstate
      - TradeMe
      type: string
    Purplebricks.DatabaseModel.Enumerations.Property.LettingTerms:
      enum:
      - SixMonths
      - OneYearOrMore
      type: string
    Purplebricks.DatabaseModel.Enumerations.ViewingAdditional.MortgageAgreementStatus:
      enum:
      - NotYetArranged
      - AgreedInPrinciple
      - PreQualified
      - PreApproved
      type: string
    Purplebricks.DatabaseModel.Enumerations.ViewingAdditional.ViewingPurpose:
      enum:
      - ToOccupy
      - DevelopmentOpportunity
      - BtlInvestment
      type: string
    Purplebricks.DatabaseModel.Enumerations.WorkflowStepType:
      enum:
      - Create
      - BookValuation
      - Valuation
      - Instruct
      - CreateAdvert
      - RejectAdvert
      - AmendAdvert
      - ApproveAdvert
      - SchedulePendingRegCert
      - Schedule
      - PublishPendingRegCert
      - Publish
      - Withdraw
      - Suspend
      - SuspendByUser
      - SuspendAccount
      - UnderOffer
      - SoldSubjectToContract
      - DiyAdvertStarted
      - LetSubjectToContract
      - DeclineOffer
      - UpdateProperty
      - AcceptableOffer
      - ApplicationReceived
      - AcceptableOfferNotMarketed
      - WithdrawOffer
      - UpdateAdvert
      - DiyAdvertCreated
      - DiyAdvertRejected
      - ApprovePhoto
      - ContractsExchanged
      - Completion
      - DiyAdvertAmended
      - DiyAdvertRejectAmendments
      - SchedulePendingContract
      - PublishPendingContract
      - UpdatePropertyDiary
      - ContractsExchangedCoolingOffPeriod
      - ForceSold
      - ForceSoldSubjectToContract

# --- truncated at 32 KB (54 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/purplebricks/refs/heads/main/openapi/purplebricks-viewings-v1-openapi.yml