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 - ForceContractsExchanged - ForceCompletion - SoldSubjectToEscrow - PendingEscrow - Closing - ForceAcceptableOffer - ForceAcceptableOfferNotMarketed - ForceContractsExchangedCoolingOffPeriod - InstantValuation - FakeValuation - Cancelled type: string Purplebricks.Viewings.Business.Commands.CancelViewingCommand: type: object properties: loggedInUserId: type: integer format: int32 impersonatorUserId: type: integer format: int32 viewingId: type: integer format: int32 cancellationReason: type: string nullable: true additionalProperties: false Purplebricks.Viewings.Business.Models.AiConfirmRequestSlotInputModel: type: object properties: bookingId: type: integer format: int32 viewingId: type: integer format: int32 sellerUserId: type: integer format: int32 propertyId: type: integer format: int32 additionalProperties: false Purplebricks.Viewings.Business.Models.AiRescheduleRequestSlotInputModel: type: object properties: bookingId: type: integer format: int32 viewingId: type: integer format: int32 sellerUserId: type: integer format: int32 propertyId: type: integer format: int32 eventStart: type: string format: date-time additionalProperties: false Purplebricks.Viewings.Business.Models.BlandBookViewingInputModel: type: object properties: propertyId: type: integer format: int32 userId: type: integer format: int32 eventStart: type: string format: date-time phoneHome: maxLength: 20 type: string nullable: true phoneMobile: maxLength: 20 type: string nullable: true primaryContactNumber: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.ContactNumberType' bookingProcess: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.BookingProcess' additionalProperties: false Purplebricks.Viewings.Business.Models.BookViewingInputModel: type: object properties: appointmentId: type: string format: uuid propertyId: type: integer format: int32 eventStart: type: string format: date-time contactDetails: $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.ViewingCustomerContactDetailsInputModel' tenantAdditionalData: $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.ViewingTenantAdditionalDataInputModel' buyerAdditionalData: $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.ViewingBuyerAdditionalDataInputModel' process: type: string nullable: true viewingId: type: string format: uuid enquiryId: type: string nullable: true additionalProperties: false Purplebricks.Viewings.Business.Models.BookingRequestStatus: enum: - SlotNotAvailable - Confirmed - AwaitingConfirmation - PropertySold - PropertyWithdrawn type: string Purplebricks.Viewings.Business.Models.CreatioFeedbackDetail: type: object properties: viewingDate: type: string format: date-time address: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AddressViewModel' isSales: type: boolean comments: type: string nullable: true presentationScore: type: integer format: int32 nullable: true suitabilityScore: type: integer format: int32 nullable: true priceScore: type: integer format: int32 nullable: true additionalProperties: false Purplebricks.Viewings.Business.Models.UserViewingDetail: type: object properties: address: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AddressViewModel' viewingDate: type: string format: date-time status: type: string nullable: true isSales: type: boolean conductingAppointment: type: string nullable: true viewingId: type: integer format: int32 propertyId: type: integer format: int32 viewer: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.EventUserDetailsViewModel' host: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.EventUserDetailsViewModel' seller: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.EventUserDetailsViewModel' bookedByUser: type: boolean userRole: type: string nullable: true additionalProperties: false Purplebricks.Viewings.Business.Models.ViewingBuyerAdditionalDataInputModel: type: object properties: moveTimeframe: type: string format: date-time viewingPurpose: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.ViewingAdditional.ViewingPurpose' hasPortfolio: type: boolean nullable: true propertyToSell: type: boolean saleProgression: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.Offer.SaleProgressOption' timeOnMarket: type: string format: date-time nullable: true mortgageRequired: type: boolean mortgageStatus: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.ViewingAdditional.MortgageAgreementStatus' investmentConsented: type: boolean nullable: true mabConsented: type: boolean additionalProperties: false Purplebricks.Viewings.Business.Models.ViewingCustomerContactDetailsInputModel: type: object properties: phoneHome: maxLength: 20 type: string nullable: true phoneOther: maxLength: 20 type: string nullable: true phoneMobile: maxLength: 20 type: string nullable: true primaryContactNumber: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.ContactNumberType' additionalProperties: false Purplebricks.Viewings.Business.Models.ViewingDetail: type: object properties: address: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.AddressViewModel' viewingDate: type: string format: date-time status: type: string nullable: true isSales: type: boolean conductingAppointment: type: string nullable: true viewingId: type: integer format: int32 propertyId: type: integer format: int32 viewer: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.EventUserDetailsViewModel' host: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.EventUserDetailsViewModel' seller: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.EventUserDetailsViewModel' additionalProperties: false Purplebricks.Viewings.Business.Models.ViewingTenantAdditionalDataInputModel: type: object properties: moveTimeframe: type: string format: date-time nullable: true terms: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.Offer.TenantTerms' lettingTerms: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.Property.LettingTerms' employmentStatus: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.Offer.EmploymentStatus' poorCreditHistory: type: boolean havePets: type: boolean isSmoker: type: boolean otherPets: maxLength: 500 type: string nullable: true additionalProperties: false Purplebricks.Viewings.Business.ViewModels.AddressViewModel: type: object properties: line1: type: string nullable: true line2: type: string nullable: true town: type: string nullable: true county: type: string nullable: true country: type: string nullable: true postcode: type: string nullable: true additionalProperties: false Purplebricks.Viewings.Business.ViewModels.AiSellerRequestSlotResponse: type: object properties: success: type: boolean message: type: string nullable: true confirmedOrNewSlotUtc: type: string format: date-time nullable: true additionalProperties: false Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel: type: object properties: eventId: type: integer format: int32 nullable: true propertyId: type: integer format: int32 nullable: true listingId: type: string nullable: true status: $ref: '#/components/schemas/Purplebricks.Viewings.Business.Models.BookingRequestStatus' bookingProcess: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.BookingProcess' start: type: string format: date-time end: type: string format: date-time propertyTimeZone: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.IanaTimeZone' street: type: string nullable: true town: type: string nullable: true county: type: string nullable: true postcode: type: string nullable: true isAccompaniedViewing: type: boolean hostName: type: string nullable: true hostPhoneNumber: type: string nullable: true expertPhoto: type: string nullable: true trustPilotId: type: string nullable: true additionalProperties: false Purplebricks.Viewings.Business.ViewModels.EventUserDetailsViewModel: type: object properties: id: type: integer format: int32 title: type: string nullable: true forename: type: string nullable: true surname: type: string nullable: true email: type: string nullable: true phone: type: string nullable: true additionalProperties: false Purplebricks.Viewings.Business.ViewModels.OpenDaysViewModel: type: object properties: start: type: string format: date-time end: type: string format: date-time propertyTimeZone: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.IanaTimeZone' additionalProperties: false Purplebricks.Viewings.Business.ViewModels.PropertyViewModel: type: object properties: propertyId: type: integer format: int32 nullable: true listingId: type: string nullable: true toLet: type: boolean street: type: string nullable: true town: type: string nullable: true county: type: string nullable: true postcode: type: string nullable: true fullAddress: type: string nullable: true tenancyChecksViewModel: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.TenancyChecksViewModel' email: type: string nullable: true loggedIn: type: boolean existingCustomer: type: boolean nullable: true propertyToSell: type: boolean nullable: true saleProgression: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.Offer.SaleProgressOption' portal: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.PortalType' lastActionCompleted: $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.WorkflowStepType' confirmation: $ref: '#/components/schemas/Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel' mainImageUrl: type: string nullable: true userId: type: integer format: int32 closingDate: type: string format: date-time nullable: true hasAccompaniedViewing: type: boolean accompaniedViewingExpertId: type: integer format: int32 nullable: true expertId: type: integer format: int32 additionalProperties: false Purplebricks.Viewings.Business.ViewModels.TenancyChecksViewModel: type: object properties: dhsPermitted: type: boolean petsPermitted: type: boolean smokersPermitted: type: boolean dhsBlocked: type: boolean petsBlocked: type: boolean smokersBlocked: type: boolean studentLet: type: boolean shared: type: boolean additionalProperties: false Purplebricks.Viewings.DataModels.Enums.AccessDetails.AccessVia: enum: - Seller - Tenant - KeySafe - Other - Viewber type: string Purplebricks.Viewings.DataModels.Enums.AccessDetails.KeySafeOwnershipType: enum: - Ordered - Own - Viewber type: string Purplebricks.Viewings.DataModels.Enums.AccessDetails.KeySafeViewingCriteria: enum: - AsAndWhen - ViaSeller - ViaTenant type: string Purplebricks.Viewings.DataModels.Enums.AccessDetails.RelationshipToOwner: enum: - EstateOrLettingsAgency - Photographer - FriendOrFamilyMember - Concierge type: string Purplebricks.Viewings.DataModels.Enums.AccessDetails.ViewberViewingCriteria: enum: - AsAndWhen - ViaSeller - ViaTenant type: string Purplebricks.Viewings.DataModels.Models.AccessDetails.AccessDetailEntry: type: object properties: id: type: string nullable: true accessVia: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.AccessVia' firstName: type: string nullable: true lastName: type: string nullable: true phoneNumber: type: string nullable: true actionDate: type: string format: date-time version: type: integer format: int32 additionalProperties: false Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsBaseModel: type: object properties: agentName: type: string nullable: true accessVia: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.AccessVia' firstName: type: string nullable: true lastName: type: string nullable: true phoneNumber: type: string nullable: true emailAddress: type: string nullable: true keySafeOwnershipType: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.KeySafeOwnershipType' keySafeViewingCriteria: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.KeySafeViewingCriteria' keySafeLocation: type: string nullable: true keySafeCode: type: string nullable: true notes: type: string nullable: true loggingHistory: type: array items: type: string nullable: true sellerIds: type: array items: type: integer format: int32 nullable: true tenants: type: array items: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsTenant' nullable: true otherDetails: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsOther' viewberDetails: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsViewberDetails' additionalProperties: false Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsModel: type: object properties: agentName: type: string nullable: true accessVia: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.AccessVia' firstName: type: string nullable: true lastName: type: string nullable: true phoneNumber: type: string nullable: true emailAddress: type: string nullable: true keySafeOwnershipType: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.KeySafeOwnershipType' keySafeViewingCriteria: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.KeySafeViewingCriteria' keySafeLocation: type: string nullable: true keySafeCode: type: string nullable: true notes: type: string nullable: true loggingHistory: type: array items: type: string nullable: true sellerIds: type: array items: type: integer format: int32 nullable: true tenants: type: array items: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsTenant' nullable: true otherDetails: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsOther' viewberDetails: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsViewberDetails' id: type: string nullable: true propertyId: type: integer format: int32 actionDate: type: string format: date-time version: type: integer format: int32 canEdit: type: boolean canView: type: boolean additionalProperties: false Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsOther: type: object properties: firstName: type: string nullable: true lastName: type: string nullable: true phoneNumber: type: string nullable: true emailAddress: type: string nullable: true keyCollectionAddress: type: string nullable: true relationshipToOwner: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.RelationshipToOwner' additionalProperties: false Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsResponseModel: type: object properties: propertyId: type: integer format: int32 canEdit: type: boolean canView: type: boolean propertyAccessDetails: type: array items: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsModel' nullable: true additionalProperties: false Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsSummaryModel: type: object properties: propertyId: type: integer format: int32 hasAccessDetails: type: boolean readOnly: true count: type: integer format: int32 accessDetails: type: array items: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Models.AccessDetails.AccessDetailEntry' nullable: true additionalProperties: false Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsTenant: type: object properties: firstName: type: string nullable: true lastName: type: string nullable: true phoneNumber: type: string nullable: true emailAddress: type: string nullable: true additionalProperties: false Purplebricks.Viewings.DataModels.Models.AccessDetails.PropertyAccessDetailsViewberDetails: type: object properties: agentName: type: string nullable: true keysHeld: type: string nullable: true viewingCriteria: $ref: '#/components/schemas/Purplebricks.Viewings.DataModels.Enums.AccessDetails.ViewberViewingCriteria' additionalProperties: false securitySchemes: Bearer: type: apiKey description: Authorization header using Bearer scheme name: Authorization in: header security: - Bearer: []