Zoopla · AsyncAPI Specification

Zoopla Lead Push Service

Version 1.0.0

API Evangelist derivation of Zoopla's Lead Push Service. Zoopla publishes no AsyncAPI document; this document is derived from the published push-service documentation at https://developers.zoopla.co.uk/leads/docs/push-service and binds each event to the message schema already declared in Zoopla's own Swagger 2.0 Leads contract. Nothing here is invented — the channel is the member-hosted endpoint Zoopla POSTs to, the two messages are the documented `applicant` and `appraisal` envelopes, and the security schemes are the two inbound methods Zoopla supports (OAuth 2.0 client credentials against the member's token endpoint, or a static API key sent verbatim as the Authorization header value).

View Spec View on GitHub Real EstateUnited KingdomProperty ListingsProperty PortalPropTechRentalsEstate AgentsLeadsCRM IntegrationAsyncAPIWebhooksEvents

Channels

leads
The member's configured recipient endpoint. Zoopla sends one HTTP POST per lead. When one endpoint receives both types, the top-level key on the payload distinguishes them.

Messages

applicantLead
Applicant lead
A consumer has enquired about buying or renting a property.
appraisalLead
Appraisal lead
A property owner has requested a valuation.

Servers

https
consumer
The member-hosted endpoint Zoopla delivers leads to. Zoopla is the client here; the host is whatever the member configures with Zoopla, and a single endpoint may receive both lead types or separate endpoints may be configured per type.

AsyncAPI Specification

Raw ↑
asyncapi: 3.0.0
info:
  title: Zoopla Lead Push Service
  version: '1.0.0'
  description: >-
    API Evangelist derivation of Zoopla's Lead Push Service. Zoopla publishes no
    AsyncAPI document; this document is derived from the published push-service
    documentation at https://developers.zoopla.co.uk/leads/docs/push-service and
    binds each event to the message schema already declared in Zoopla's own
    Swagger 2.0 Leads contract. Nothing here is invented — the channel is the
    member-hosted endpoint Zoopla POSTs to, the two messages are the documented
    `applicant` and `appraisal` envelopes, and the security schemes are the two
    inbound methods Zoopla supports (OAuth 2.0 client credentials against the
    member's token endpoint, or a static API key sent verbatim as the
    Authorization header value).
  contact:
    name: Zoopla Member Services
    email: members@zoopla.co.uk
    url: https://developers.zoopla.co.uk/leads/docs/push-service
  x-apievangelist:
    generated: '2026-07-26'
    method: derived
    source: https://developers.zoopla.co.uk/leads/docs/push-service
    published_by_provider: false
defaultContentType: application/json
servers:
  consumer:
    host: 'your-endpoint.example.com'
    protocol: https
    description: >-
      The member-hosted endpoint Zoopla delivers leads to. Zoopla is the client
      here; the host is whatever the member configures with Zoopla, and a single
      endpoint may receive both lead types or separate endpoints may be
      configured per type.
    security:
      - $ref: '#/components/securitySchemes/memberOAuth2'
      - $ref: '#/components/securitySchemes/memberApiKey'
channels:
  leads:
    address: '/'
    description: >-
      The member's configured recipient endpoint. Zoopla sends one HTTP POST per
      lead. When one endpoint receives both types, the top-level key on the
      payload distinguishes them.
    servers:
      - $ref: '#/servers/consumer'
    messages:
      applicantLead:
        $ref: '#/components/messages/applicantLead'
      appraisalLead:
        $ref: '#/components/messages/appraisalLead'
operations:
  receiveApplicantLead:
    action: receive
    channel:
      $ref: '#/channels/leads'
    summary: Receive an applicant lead (a consumer looking to buy or rent).
    description: >-
      Delivered in real time. Retried for 24 hours if the member endpoint is
      unavailable; leads are retained for 30 days in total with no self-service
      replay after the retry window. The same lead is also retrievable from
      GET /applicant-leads on the Leads poll API.
    messages:
      - $ref: '#/channels/leads/messages/applicantLead'
  receiveAppraisalLead:
    action: receive
    channel:
      $ref: '#/channels/leads'
    summary: Receive an appraisal lead (an owner asking for a valuation).
    description: >-
      Delivered in real time under the same retry and retention rules. Also
      retrievable from GET /appraisal-leads on the Leads poll API.
    messages:
      - $ref: '#/channels/leads/messages/appraisalLead'
components:
  messages:
    applicantLead:
      name: applicantLead
      title: Applicant lead
      summary: A consumer has enquired about buying or renting a property.
      contentType: application/json
      payload:
        type: object
        required: [applicant]
        properties:
          applicant:
            $ref: '../openapi/zoopla-leads-api-openapi.json#/definitions/Applicant'
      examples:
        - name: applicantLeadExample
          summary: Example applicant payload published in the push-service docs.
          payload:
            $ref: '../examples/zoopla-push-applicant-lead.json'
    appraisalLead:
      name: appraisalLead
      title: Appraisal lead
      summary: A property owner has requested a valuation.
      contentType: application/json
      payload:
        type: object
        required: [appraisal]
        properties:
          appraisal:
            $ref: '../openapi/zoopla-leads-api-openapi.json#/definitions/Appraisal'
      examples:
        - name: appraisalLeadExample
          summary: Example appraisal payload published in the push-service docs.
          payload:
            $ref: '../examples/zoopla-push-appraisal-lead.json'
  securitySchemes:
    memberOAuth2:
      type: oauth2
      description: >-
        Zoopla mints a token from the member's own token endpoint using
        grant_type=client_credentials with the client_id and client_secret the
        member supplied, then presents it as `Authorization: Bearer {token}`.
        Client credentials is the only grant supported.
      flows:
        clientCredentials:
          tokenUrl: 'https://your-token-endpoint.example.com/oauth2/token'
          availableScopes: {}
    memberApiKey:
      type: httpApiKey
      description: >-
        A static key supplied by the member, sent verbatim as the Authorization
        header value with no scheme prefix.
      name: Authorization
      in: header