Purplebricks Appointments API

The Appointments API from Purplebricks — 2 operation(s) for appointments.

Operations 2

POST /v1/appointments Books a viewing appointment.
POST /v1/appointments/cancel

Documentation

Specifications

Other Resources

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • 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 API
curl "https://apis.io/api/v1/apis/purplebricks-appointments-api"
All apis
curl "https://apis.io/api/v1/apis?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.

OpenAPI Specification

purplebricks-appointments-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Purplebricks.Viewings.Api 1.0 - Customer Experience Appointments API
  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
security:
- Bearer: []
tags:
- name: Appointments
paths:
  /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
components:
  schemas:
    Purplebricks.Viewings.Business.Models.ViewingTenantAdditionalDataInputModel:
      type: object
      properties:
        moveTimeframe:
          type:
          - string
          - 'null'
          format: date-time
        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
          - 'null'
      additionalProperties: false
    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
          - 'null'
      additionalProperties: false
    Purplebricks.DatabaseModel.Enumerations.Property.LettingTerms:
      enum:
      - SixMonths
      - OneYearOrMore
      type: string
    Purplebricks.DatabaseModel.Enumerations.ViewingAdditional.MortgageAgreementStatus:
      enum:
      - NotYetArranged
      - AgreedInPrinciple
      - PreQualified
      - PreApproved
      type: string
    Purplebricks.Viewings.Business.Models.BookingRequestStatus:
      enum:
      - SlotNotAvailable
      - Confirmed
      - AwaitingConfirmation
      - PropertySold
      - PropertyWithdrawn
      type: string
    Purplebricks.Viewings.Business.Models.ViewingCustomerContactDetailsInputModel:
      type: object
      properties:
        phoneHome:
          maxLength: 20
          type:
          - string
          - 'null'
        phoneOther:
          maxLength: 20
          type:
          - string
          - 'null'
        phoneMobile:
          maxLength: 20
          type:
          - string
          - 'null'
        primaryContactNumber:
          $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.ContactNumberType'
      additionalProperties: false
    Purplebricks.DatabaseModel.Enumerations.ViewingAdditional.ViewingPurpose:
      enum:
      - ToOccupy
      - DevelopmentOpportunity
      - BtlInvestment
      type: string
    Purplebricks.DatabaseModel.Enumerations.BookingProcess:
      enum:
      - SellerBookValuation
      - BuyerBookViewing
      - CallCentreBookValuation
      - CallCentreBookViewing
      - SellerRearrange
      - BuyerRearrange
      - LpeRearrange
      - LpeBookViewing
      - BuyingAgentBookViewing
      - RemortgageInstantValuation
      - AiVoiceAgent
      - AiWhatsAppAgent
      - AiSmsAgent
      type: string
    Purplebricks.DatabaseModel.Enumerations.Offer.SaleProgressOption:
      enum:
      - NotOnTheMarket
      - OnTheMarket
      - SSTC
      - Pending
      type: string
    Microsoft.AspNetCore.Mvc.ProblemDetails:
      type: object
      properties:
        type:
          type:
          - string
          - 'null'
        title:
          type:
          - string
          - 'null'
        status:
          type:
          - integer
          - 'null'
          format: int32
        detail:
          type:
          - string
          - 'null'
        instance:
          type:
          - string
          - 'null'
      additionalProperties: {}
    Purplebricks.Viewings.Business.ViewModels.BookViewingConfirmationViewModel:
      type: object
      properties:
        eventId:
          type:
          - integer
          - 'null'
          format: int32
        propertyId:
          type:
          - integer
          - 'null'
          format: int32
        listingId:
          type:
          - string
          - 'null'
        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
          - 'null'
        town:
          type:
          - string
          - 'null'
        county:
          type:
          - string
          - 'null'
        postcode:
          type:
          - string
          - 'null'
        isAccompaniedViewing:
          type: boolean
        hostName:
          type:
          - string
          - 'null'
        hostPhoneNumber:
          type:
          - string
          - 'null'
        expertPhoto:
          type:
          - string
          - 'null'
        trustPilotId:
          type:
          - string
          - 'null'
      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
          - 'null'
        viewingId:
          type: string
          format: uuid
        enquiryId:
          type:
          - string
          - 'null'
      additionalProperties: false
    Purplebricks.DatabaseModel.Enumerations.Offer.EmploymentStatus:
      enum:
      - Employed
      - SelfEmployed
      - Retired
      - Student
      - DSS
      - Unemployed
      type: string
    Purplebricks.DatabaseModel.Enumerations.Offer.TenantTerms:
      enum:
      - SixMonths
      - TwelveMonths
      - EighteenMonths
      - TwentyFourMonths
      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.ContactNumberType:
      enum:
      - Home
      - Mobile
      - Other
      type: string
    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
          - 'null'
        propertyToSell:
          type: boolean
        saleProgression:
          $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.Offer.SaleProgressOption'
        timeOnMarket:
          type:
          - string
          - 'null'
          format: date-time
        mortgageRequired:
          type: boolean
        mortgageStatus:
          $ref: '#/components/schemas/Purplebricks.DatabaseModel.Enumerations.ViewingAdditional.MortgageAgreementStatus'
        investmentConsented:
          type:
          - boolean
          - 'null'
        mabConsented:
          type: boolean
      additionalProperties: false
  securitySchemes:
    Bearer:
      type: apiKey
      description: Authorization header using Bearer scheme
      name: Authorization
      in: header