Hometrack Reporting API

The Reporting API from Hometrack — 7 operation(s) for reporting.

Operations 7

GET /api/reporting/moveToBlobStorage Called via a scheduled task, this method uploads all files from the report directory to blob storage and then deletes them. #
GET /api/reporting/PropertyValuation/{token}/{transactionReference} Downloads the previously generated Property Valuation Report file #
GET /api/reporting/TestGet For test purpose #
POST /api/reporting/TestPost For test purpose #
POST /api/reporting/PropertyValuation Requests a Property Valuation Report #
GET /api/reporting/PropertyValuation/config/{token} Retrieves IDs and Names of PVR Configuration Umbraco nodes #
POST /api/reporting/{token} The main report processing endpoint. Report Processor calls this method with the message body from *-Created queues #

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/hometrack-reporting-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

hometrack-reporting-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hometrack API Public Reporting API
  description: Hometrack API for public consumption
  version: '1.0'
  x-api-evangelist-provenance:
    provider: Hometrack
    portal: https://developer.hometrack.com
    harvested: '2026-07-26'
    method: Azure API Management developer data-plane, anonymous
    sources:
    - url: https://developer.hometrack.com/developer/apis/hometrack-api-public?api-version=2022-04-01-preview&export=true&format=openapi-link
      status: 200
      note: OpenAPI 3.0.1 export (info/servers/securitySchemes verbatim; paths empty in export)
    - url: https://developer.hometrack.com/developer/apis/hometrack-api-public/operations?api-version=2022-04-01-preview
      status: 200
      note: operation list
    - url: https://developer.hometrack.com/developer/apis/hometrack-api-public/operations/{operationId}?api-version=2022-04-01-preview
      status: 200
      note: per-operation request/response metadata
    - url: https://developer.hometrack.com/developer/apis/hometrack-api-public/schemas?api-version=2022-04-01-preview
      status: 200
      note: component schema documents
    note: paths and components.schemas were reassembled verbatim from Hometrack's own APIM operation and schema metadata; nothing was invented.
servers:
- url: https://api.hometrack.com
- url: https://api.hometrack.local
security:
- {}
- apiKeyHeader: []
- apiKeyQuery: []
tags:
- name: Reporting
paths:
  /api/reporting/moveToBlobStorage:
    get:
      operationId: ReportingApi_MoveToBlobStorage
      summary: 'Called via a scheduled task, this method uploads all files from the report directory

        to blob storage and then deletes them.'
      description: 'Called via a scheduled task, this method uploads all files from the report directory

        to blob storage and then deletes them.'
      responses:
        '200':
          description: OK
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingMoveToBlobStorageGet200ApplicationXmlResponse'
              example: <ApiReportingMoveToBlobStorageGet200ApplicationXmlResponse />
            text/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingMoveToBlobStorageGet200TextXmlResponse'
              example: <ApiReportingMoveToBlobStorageGet200TextXmlResponse />
            application/json:
              schema:
                $ref: '#/components/schemas/ApiReportingMoveToBlobStorageGet200ApplicationJsonResponse'
              example: {}
            text/json:
              schema:
                $ref: '#/components/schemas/ApiReportingMoveToBlobStorageGet200TextJsonResponse'
              example: {}
      tags:
      - Reporting
  /api/reporting/PropertyValuation/{token}/{transactionReference}:
    get:
      operationId: ReportingApi_RetrievePropertyValuationReport
      summary: Downloads the previously generated Property Valuation Report file
      description: Downloads the previously generated Property Valuation Report file
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
        description: Client's authentication token
      - name: transactionReference
        in: path
        required: true
        schema:
          type: string
        description: The report's transaction ID
      responses:
        '200':
          description: OK - when the report is found and available, includes the binary file stream of the PDF
          content:
            application/pdf:
              schema:
                $ref: '#/components/schemas/ApiReportingPropertyValuationTokenTransactionReferenceGet200ApplicationPdfRe'
            application/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingPropertyValuationTokenTransactionReferenceGet200ApplicationXmlRe'
              example: <ApiReportingPropertyValuationTokenTransactionReferenceGet200ApplicationXmlRe />
        '202':
          description: Accepted - the report has not finished generating - try again later
          content:
            application/pdf:
              schema:
                $ref: '#/components/schemas/ApiReportingPropertyValuationTokenTransactionReferenceGet202ApplicationPdfRe'
            application/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingPropertyValuationTokenTransactionReferenceGet202ApplicationXmlRe'
              example: <ApiReportingPropertyValuationTokenTransactionReferenceGet202ApplicationXmlRe />
        '403':
          description: Forbidden - the authentication token is invalid
          content:
            application/pdf:
              schema:
                type: string
            application/xml:
              schema:
                type: string
        '404':
          description: Not Found - no record of transactionId found
          content:
            application/pdf:
              schema:
                type: string
            application/xml:
              schema:
                type: string
        '410':
          description: Gone - the record for that transactionId was found, but the associated PDF file cannot be found
          content:
            application/pdf:
              schema:
                type: string
            application/xml:
              schema:
                type: string
        '499':
          description: Client Closed Request - production failed when the production of the report failed for an unknown reason - please contact our customer support
          content:
            application/pdf:
              schema:
                type: string
            application/xml:
              schema:
                type: string
        '500':
          description: Internal Server Error - an unexpected error has occured
          content:
            application/pdf:
              schema:
                type: string
            application/xml:
              schema:
                type: string
        '503':
          description: Service Unavailable - this or a dependent service is unavailable
          content:
            application/pdf:
              schema:
                type: string
            application/xml:
              schema:
                type: string
      tags:
      - Reporting
  /api/reporting/TestGet:
    get:
      operationId: ReportingApi_TestGet
      summary: For test purpose
      description: For test purpose
      responses:
        '200':
          description: OK
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingTestGetGet200ApplicationXmlResponse'
              example: <ApiReportingTestGetGet200ApplicationXmlResponse />
            text/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingTestGetGet200TextXmlResponse'
              example: <ApiReportingTestGetGet200TextXmlResponse />
            application/json:
              schema:
                $ref: '#/components/schemas/ApiReportingTestGetGet200ApplicationJsonResponse'
              example: {}
            text/json:
              schema:
                $ref: '#/components/schemas/ApiReportingTestGetGet200TextJsonResponse'
              example: {}
      tags:
      - Reporting
  /api/reporting/TestPost:
    post:
      operationId: ReportingApi_TestPost
      summary: For test purpose
      description: For test purpose
      responses:
        '200':
          description: OK
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingTestPostPost200ApplicationXmlResponse'
              example: <ApiReportingTestPostPost200ApplicationXmlResponse />
            text/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingTestPostPost200TextXmlResponse'
              example: <ApiReportingTestPostPost200TextXmlResponse />
            application/json:
              schema:
                $ref: '#/components/schemas/ApiReportingTestPostPost200ApplicationJsonResponse'
              example: {}
            text/json:
              schema:
                $ref: '#/components/schemas/ApiReportingTestPostPost200TextJsonResponse'
              example: {}
      tags:
      - Reporting
  /api/reporting/PropertyValuation:
    post:
      operationId: ReportingApi_RequestPropertyValuationReport
      summary: Requests a Property Valuation Report
      description: Requests a Property Valuation Report
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PropertyValuationReportRequest'
            example:
              Address: string
              Postcode: string
              Bedrooms: 0
              PropertyType: string
              Receptions: 0
              YearBuilt: 0
              FloorArea: 0
              ValuationDate: string
              Bathrooms: 0
              BrandCode: string
              NoBill: true
              NoBillSecret: string
              PreparedFor: string
              BranchId: string
              Token: string
              TransactionId: string
          text/json:
            schema:
              $ref: '#/components/schemas/PropertyValuationReportRequest'
            example:
              Address: string
              Postcode: string
              Bedrooms: 0
              PropertyType: string
              Receptions: 0
              YearBuilt: 0
              FloorArea: 0
              ValuationDate: string
              Bathrooms: 0
              BrandCode: string
              NoBill: true
              NoBillSecret: string
              PreparedFor: string
              BranchId: string
              Token: string
              TransactionId: string
      responses:
        '201':
          description: Created - request accepted and property valuation processed
        '400':
          description: Bad Request - request parameters do not pass the validation
        '402':
          description: Payment Required - the license has lapsed or the report volume has been used up
        '403':
          description: Forbidden - the authentication token is invalid
        '409':
          description: Conflict - non-unique transaction ID is provided
        '499':
          description: Client Closed Request - production failed when the confidence level for the subject property was lower than the minimum level specified in configuration
        '500':
          description: Internal Server Error - an unexpected error has occured
        '503':
          description: Service Unavailable - this or a dependent service is unavailable
      tags:
      - Reporting
  /api/reporting/PropertyValuation/config/{token}:
    get:
      operationId: ReportingApi_GetPvrConfigurations
      summary: Retrieves IDs and Names of PVR Configuration Umbraco nodes
      description: 'Requires a PVR account type with permission: pvr.configuration.list'
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
        description: Client's authentication token
      responses:
        '200':
          description: OK - Returns PVR Configurations
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PvrConfigsResponse'
              example:
                pvrConfigs:
                - name: string
                  id: 0
                pvrV2Configs:
                - name: string
                  id: 0
        '401':
          description: Unauthorized - the authentication token is invalid
          content:
            application/json:
              schema:
                type: string
        '403':
          description: Forbidden - the account does not have permission
          content:
            application/json:
              schema:
                type: string
        '500':
          description: Internal Server Error - an unexpected error has occured
          content:
            application/json:
              schema:
                type: string
      tags:
      - Reporting
  /api/reporting/{token}:
    post:
      operationId: ReportingApi_ProcessPropertyValuation
      summary: "The main report processing endpoint. \nReport Processor calls this method with the message body from *-Created queues"
      description: "The main report processing endpoint. \nReport Processor calls this method with the message body from *-Created queues"
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/xml:
            schema:
              $ref: '#/components/schemas/CreatedReportModel'
            example: "<CreatedReportModel>\n  <AccountApiKey>00000000-0000-0000-0000-000000000000</AccountApiKey>\n  <OrderUniqueIdentifier>00000000-0000-0000-0000-000000000000</OrderUniqueIdentifier>\n  <UniqueIdentifier>string</UniqueIdentifier>\n  <OrderNumber>string</OrderNumber>\n  <ReportType>string</ReportType>\n  <BrandCode>string</BrandCode>\n  <Recipient>string</Recipient>\n  <PreparedFor>string</PreparedFor>\n  <ContactDetail>\n    <UniqueId>00000000-0000-0000-0000-000000000000</UniqueId>\n    <Title>string</Title>\n    <Firstname>string</Firstname>\n    <Surname>string</Surname>\n    <EmailAddress>string</EmailAddress>\n    <CompanyName>string</CompanyName>\n    <JobTitle>string</JobTitle>\n    <Fullname>string</Fullname>\n    <DeliveryEmail>string</DeliveryEmail>\n    <Telephone>string</Telephone>\n  </ContactDetail>\n  <ReportParameters />\n  <FileName>string</FileName>\n  <FilePath>string</FilePath>\n  <IsApiReport>true</IsApiReport>\n  <IsLandingPageReport>true</IsLandingPageReport>\n  <TransactionReference>string</TransactionReference>\n  <AdditionalReportDetails />\n  <DateCreated>string</DateCreated>\n</CreatedReportModel>"
          text/xml:
            schema:
              $ref: '#/components/schemas/CreatedReportModel'
            example: "<CreatedReportModel>\n  <AccountApiKey>00000000-0000-0000-0000-000000000000</AccountApiKey>\n  <OrderUniqueIdentifier>00000000-0000-0000-0000-000000000000</OrderUniqueIdentifier>\n  <UniqueIdentifier>string</UniqueIdentifier>\n  <OrderNumber>string</OrderNumber>\n  <ReportType>string</ReportType>\n  <BrandCode>string</BrandCode>\n  <Recipient>string</Recipient>\n  <PreparedFor>string</PreparedFor>\n  <ContactDetail>\n    <UniqueId>00000000-0000-0000-0000-000000000000</UniqueId>\n    <Title>string</Title>\n    <Firstname>string</Firstname>\n    <Surname>string</Surname>\n    <EmailAddress>string</EmailAddress>\n    <CompanyName>string</CompanyName>\n    <JobTitle>string</JobTitle>\n    <Fullname>string</Fullname>\n    <DeliveryEmail>string</DeliveryEmail>\n    <Telephone>string</Telephone>\n  </ContactDetail>\n  <ReportParameters />\n  <FileName>string</FileName>\n  <FilePath>string</FilePath>\n  <IsApiReport>true</IsApiReport>\n  <IsLandingPageReport>true</IsLandingPageReport>\n  <TransactionReference>string</TransactionReference>\n  <AdditionalReportDetails />\n  <DateCreated>string</DateCreated>\n</CreatedReportModel>"
          application/x-www-form-urlencoded:
            schema:
              type: string
          application/json:
            schema:
              $ref: '#/components/schemas/CreatedReportModel'
            example:
              AccountApiKey: 00000000-0000-0000-0000-000000000000
              OrderUniqueIdentifier: 00000000-0000-0000-0000-000000000000
              UniqueIdentifier: string
              OrderNumber: string
              ReportType: string
              BrandCode: string
              Recipient: string
              PreparedFor: string
              ContactDetail:
                UniqueId: 00000000-0000-0000-0000-000000000000
                Title: string
                Firstname: string
                Surname: string
                EmailAddress: string
                CompanyName: string
                JobTitle: string
                Fullname: string
                DeliveryEmail: string
                Telephone: string
              ReportParameters: {}
              FileName: string
              FilePath: string
              IsApiReport: true
              IsLandingPageReport: true
              TransactionReference: string
              AdditionalReportDetails: {}
              DateCreated: string
          text/json:
            schema:
              $ref: '#/components/schemas/CreatedReportModel'
            example:
              AccountApiKey: 00000000-0000-0000-0000-000000000000
              OrderUniqueIdentifier: 00000000-0000-0000-0000-000000000000
              UniqueIdentifier: string
              OrderNumber: string
              ReportType: string
              BrandCode: string
              Recipient: string
              PreparedFor: string
              ContactDetail:
                UniqueId: 00000000-0000-0000-0000-000000000000
                Title: string
                Firstname: string
                Surname: string
                EmailAddress: string
                CompanyName: string
                JobTitle: string
                Fullname: string
                DeliveryEmail: string
                Telephone: string
              ReportParameters: {}
              FileName: string
              FilePath: string
              IsApiReport: true
              IsLandingPageReport: true
              TransactionReference: string
              AdditionalReportDetails: {}
              DateCreated: string
      responses:
        '200':
          description: OK
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingTokenPost200ApplicationXmlResponse'
              example: <ApiReportingTokenPost200ApplicationXmlResponse />
            text/xml:
              schema:
                $ref: '#/components/schemas/ApiReportingTokenPost200TextXmlResponse'
              example: <ApiReportingTokenPost200TextXmlResponse />
            application/json:
              schema:
                $ref: '#/components/schemas/ApiReportingTokenPost200ApplicationJsonResponse'
              example: {}
            text/json:
              schema:
                $ref: '#/components/schemas/ApiReportingTokenPost200TextJsonResponse'
              example: {}
      tags:
      - Reporting
components:
  schemas:
    ApiReportingTokenPost200TextJsonResponse:
      type: object
    ApiReportingTestGetGet200ApplicationXmlResponse:
      type: object
    ApiReportingTestGetGet200TextXmlResponse:
      type: object
    ApiReportingPropertyValuationTokenTransactionReferenceGet202ApplicationPdfRe:
      type: object
    CreatedReportModel:
      description: Used to pass the data required to send the report to a customer.
      type: object
      properties:
        AccountApiKey:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        OrderUniqueIdentifier:
          format: uuid
          description: ''
          type: string
          example: 00000000-0000-0000-0000-000000000000
        UniqueIdentifier:
          description: Report unique identifier to get and update the ReportProductionLog record.
          type: string
        OrderNumber:
          description: ''
          type: string
        ReportType:
          description: ''
          type: string
        BrandCode:
          description: ''
          type: string
        Recipient:
          description: ''
          type: string
        PreparedFor:
          description: Used in PVR header
          type: string
        ContactDetail:
          $ref: '#/components/schemas/ProcessContact'
          description: Customer details
        ReportParameters:
          description: ''
          type: object
          additionalProperties:
            type: string
        FileName:
          description: This is the report file name, including extension.
          type: string
        FilePath:
          description: This is the full path with the file name and extension.
          type: string
        IsApiReport:
          description: If true the email will be not sent.
          type: boolean
        IsLandingPageReport:
          description: 'If true, then several steps in transformation process will be ignored to improve performance.

            TransactionId value will be required too.'
          type: boolean
        TransactionReference:
          description: Required to retrieve the report path for a landing page order
          type: string
        AdditionalReportDetails:
          description: 'Used to pass the additional information to the report transformation process.

            Will be NOT stored anywhere(Salesforce, DB, Logs), and only used to produce the report.'
          type: object
          additionalProperties:
            type: object
        DateCreated:
          format: date-time
          type: string
    ApiReportingMoveToBlobStorageGet200TextXmlResponse:
      type: object
    ApiReportingTokenPost200ApplicationXmlResponse:
      type: object
    ApiReportingTestPostPost200TextJsonResponse:
      type: object
    PvrConfigsResponse:
      description: Used for getting Pvr configuration from umbraco
      type: object
      properties:
        pvrConfigs:
          description: An array of v1 configurations
          type: array
          items:
            $ref: '#/components/schemas/PvrConfigModel'
        pvrV2Configs:
          description: An array of v2 configurations
          type: array
          items:
            $ref: '#/components/schemas/PvrConfigModel'
    PropertyValuationReportRequest:
      description: Property valuation report request model.
      required:
      - Address
      - Postcode
      - Bedrooms
      - PropertyType
      - Token
      - TransactionId
      type: object
      properties:
        Address:
          description: '[Required] Address'
          type: string
        Postcode:
          description: '[Required] Postcode'
          type: string
        Bedrooms:
          format: int32
          description: '[Required] Bedroom count. Must be an integer 1 to 10.'
          maximum: 10
          minimum: 1
          type: integer
        PropertyType:
          description: '[Required] Property type. It should be one of the following values:

            <ul><li>Bungalow - Semi-Detached</li><li>Bungalow - Detached</li><li>Bungalow - End Terrace</li><li>Bungalow - Mid Terrace</li><li>Flat - Converted</li><li>Flat - Purpose Built</li><li>House - End Terrace</li><li>House - Mid Terrace</li><li>House - Semi-Detached</li><li>House - Detached</li></ul>

            We also accept the following alternative values:

            <ul><li>semi detached bungalow</li><li>detached bungalow</li><li>end terrace bungalow</li><li>mid terrace bungalow</li><li>converted flat</li><li>purpose built flat</li><li>end terrace house</li><li>mid terrace house</li><li>semi detached house</li><li>detached house</li></ul>'
          type: string
        Receptions:
          format: int32
          description: '[Optional] Receptions count. Must be an integer 1 to 5.'
          maximum: 5
          minimum: 1
          type: integer
        YearBuilt:
          format: int32
          description: "[Optional] Year built. \nAn integer between 1500 and the current year, or null."
          type: integer
        FloorArea:
          format: double
          description: '[Optional] Floor area, in sq m.'
          type: number
        ValuationDate:
          format: date-time
          description: "[Optional] Date to apply to the valuation. \nValid range is from 1 Jan 1999 to today.\nIf null, then today's date applied."
          type: string
        Bathrooms:
          format: int32
          description: '[Optional] The number of bathrooms.'
          maximum: 10
          minimum: 1
          type: integer
        BrandCode:
          description: '[Optional] If a brand with this code is set up in our system, the report will be generated with the respective brand options.'
          type: string
        NoBill:
          description: '[Optional] If set to true, the NoBillSecret will be checked against the whitelist.

            On success the report will be created in test mode and transaction will not be synced to Salesforce.'
          type: boolean
        NoBillSecret:
          description: '[Optional] If a value is supplied and paired with NoBill set to true, it will be checked against the whitelist.

            On success the report will be created in test mode and transaction will not be synced to Salesforce.'
          type: string
        PreparedFor:
          description: '[Optional] If specified, will be displayed on front page before valuation address'
          type: string
        BranchId:
          description: '[Optional] Zoopla partner/ branch ID'
          type: string
        Token:
          description: '[Required] Once authenticated, the client will use the received token for all subsequent API calls.'
          type: string
        TransactionId:
          description: '[Required] A unique ID for the transaction request, generated by the customer. The field allows only alphanumeric characters, hyphens (-) and underscores (_).'
          type: string
    ApiReportingPropertyValuationTokenTransactionReferenceGet200ApplicationPdfRe:
      type: object
    ApiReportingTestPostPost200ApplicationJsonResponse:
      type: object
    PvrConfigModel:
      description: Used for getting Pvr configuration from umbraco
      type: object
      properties:
        name:
          description: Configuration name
          type: string
        id:
          format: int32
          description: Configuration Id
          type: integer
    ApiReportingTokenPost200ApplicationJsonResponse:
      type: object
    ApiReportingTokenPost200TextXmlResponse:
      type: object
    ApiReportingMoveToBlobStorageGet200ApplicationJsonResponse:
      type: object
    ApiReportingTestGetGet200TextJsonResponse:
      type: object
    ApiReportingPropertyValuationTokenTransactionReferenceGet202ApplicationXmlRe:
      type: object
    ProcessContact:
      type: object
      properties:
        UniqueId:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        Title:
          type: string
        Firstname:
          type: string
        Surname:
          type: string
        EmailAddress:
          type: string
        CompanyName:
          type: string
        JobTitle:
          type: string
        Fullname:
          type: string
        DeliveryEmail:
          type: string
        Telephone:
          type: string
    ApiReportingTestPostPost200TextXmlResponse:
      type: object
    ApiReportingPropertyValuationTokenTransactionReferenceGet200ApplicationXmlRe:
      type: object
    ApiReportingTestPostPost200ApplicationXmlResponse:
      type: object
    ApiReportingMoveToBlobStorageGet200TextJsonResponse:
      type: object
    ApiReportingMoveToBlobStorageGet200ApplicationXmlResponse:
      type: object
    ApiReportingTestGetGet200ApplicationJsonResponse:
      type: object
  securitySchemes:
    apiKeyHeader:
      type: apiKey
      name: Ocp-Apim-Subscription-Key
      in: header
    apiKeyQuery:
      type: apiKey
      name: subscription-key
      in: query