Alto (Vebra / Zoopla) · Authentication Profile

Alto Vebra Authentication

Authentication

Alto (Vebra / Zoopla) secures its APIs with apiKey and oauth2 across 5 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the clientCredentials flow(s).

Real EstateUnited KingdomPropTechProperty ListingsCRMProperty ManagementRentalsConveyancingEstate AgencyTenancyWebhooksEventsLettingsSales ProgressionProperty DataReal Estate Software
Methods: apiKey, oauth2 Schemes: 5 OAuth flows: clientCredentials API key in: header

Security Schemes

Bearer apiKey
· in: header (Authorization)
alto-token oauth2
· flows: clientCredentials
AgencyRef apiKey
· in: header (AgencyRef)
OAuth2 oauth2
· flows: clientCredentials
oAuthSample oauth2
· flows: clientCredentials

Source

Authentication Profile

Raw ↑
generated: '2026-07-26'
method: searched
source: openapi/alto-api-openapi.json, openapi/zoopla-leads-api-openapi.json, openapi/zoopla-premium-listing-activations-openapi.json,
  openapi/zoopla-weekly-featured-property-openapi.json
docs:
- https://developers.vebraalto.com/guides/authenticating-your-requests/
- https://developers.zoopla.co.uk/docs/authentication
- https://developers.zoopla.co.uk/leads/docs/push-service
- https://developers.vebraalto.com/guides/webhooks/
summary:
  types:
  - apiKey
  - oauth2
  api_key_in:
  - header
  oauth2_flows:
  - clientCredentials
  model: >-
    Two independent OAuth 2.0 client-credentials estates behind one company. Alto issues a Bearer
    JWT from a /token endpoint on the API host itself; Zoopla issues one from a separate
    authorization server at services-auth.services.zoopla.co.uk. Neither is self-serve: Alto
    credentials require an integration registered in Alto Connect under an existing Vebra
    Solutions contract, and Zoopla ships the client_secret PGP-encrypted to a public key the
    partner supplies out of band. Alto adds a second, non-OAuth authorization dimension — the
    AgencyRef header — which is the real multi-tenant boundary and is issued per activating
    agency by email.
  credential_delivery: out-of-band (email); the Zoopla client_secret is PGP-encrypted to a key
    the partner exports and hands over
  self_serve: false
schemes:
- name: Bearer
  type: apiKey
  in: header
  parameter: Authorization
  description: >-
    Declared in the Alto OpenAPI as an apiKey-in-header scheme with the description "Please
    enter JWT with Bearer into field" — an OpenAPI modelling shortcut. The real mechanism is an
    OAuth 2.0 client-credentials Bearer JWT (see the alto-token scheme below); the spec does not
    model the token endpoint.
  applied: global security requirement on the Alto API
  sources:
  - openapi/alto-api-openapi.json
- name: alto-token
  type: oauth2
  documented_only: true
  description: >-
    Not declared in the OpenAPI; documented in prose at
    https://developers.vebraalto.com/guides/authenticating-your-requests/. Base64-encode
    "clientId:clientSecret", send it as an HTTP Basic Authorization header to the token endpoint
    with Content-Type application/x-www-form-urlencoded and body grant_type=client_credentials.
    The returned token is presented as "Authorization: Bearer <token>".
  flows:
  - flow: clientCredentials
    tokenUrl: https://api.alto.zoopladev.co.uk/token
    client_authentication: client_secret_basic
    scopes: 101
    scopes_artifact: scopes/alto-vebra-scopes.yml
    note: >-
      The documented token endpoint is on the SANDBOX host. The production equivalent
      (https://api.alto.zoopla.co.uk/token) returns 404 to an anonymous probe. Scopes are
      published in operation description prose, not in a securitySchemes flow object.
  sources:
  - https://developers.vebraalto.com/guides/authenticating-your-requests/
- name: AgencyRef
  type: apiKey
  in: header
  parameter: AgencyRef
  role: tenancy
  description: >-
    Per-agency tenant selector required on every Alto call alongside the Bearer token. Issued to
    the partner by email when an individual agency activates the integration
    (https://developers.vebraalto.com/guides/activation-request-emails/). A missing or incorrect
    AgencyRef yields 403, not 401 — see errors/alto-vebra-problem-types.yml.
  applied: declared as a header parameter on 110 of the 112 Alto operations
  sources:
  - openapi/alto-api-openapi.json
  - https://developers.vebraalto.com/guides/error-codes/
- name: OAuth2
  type: oauth2
  flows:
  - flow: clientCredentials
    tokenUrl: https://services-auth.services.zoopla.co.uk/oauth2/token
    client_authentication: client_secret_basic
    scopes: 2
    audience: https://services.zoopla.co.uk
    note: The Leads spec documents an additional `audience` form parameter on the token request.
  sources:
  - openapi/zoopla-leads-api-openapi.json
- name: oAuthSample
  type: oauth2
  description: This API uses OAuth 2 with the client credentials grant flow.
  flows:
  - flow: clientCredentials
    tokenUrl: https://services-auth.services.zoopla.co.uk/oauth2/token
    client_authentication: client_secret_basic
    scopes: 1
  sources:
  - openapi/zoopla-premium-listing-activations-openapi.json
  - openapi/zoopla-weekly-featured-property-openapi.json
identity_provider:
  host: https://id.vebraalto.com
  vendor: Auth0
  role: Alto Connect / Developer Portal human login (NOT the API token issuer)
  discovery: well-known/alto-vebra-openid-configuration.json
  grant_types_supported:
  - client_credentials
  - authorization_code
  - refresh_token
  - urn:ietf:params:oauth:grant-type:device_code
  - urn:ietf:params:oauth:grant-type:token-exchange
  - urn:ietf:params:oauth:grant-type:jwt-bearer
  dpop_supported: true
inbound_callback_auth:
  description: >-
    Alto authenticates ITSELF to the partner when delivering webhooks; the partner chooses the
    method during onboarding. Documented at https://developers.vebraalto.com/guides/webhooks/.
  methods:
  - type: apiKey
    header: x-signature
    description: Shared secret presented by Alto on each callback.
  - type: http
    scheme: basic
    description: HTTP Basic username/password issued to Alto during onboarding.
  - type: oauth2
    flow: clientCredentials
    description: Alto obtains a bearer token from the partner's own authorization server.
  zoopla_push:
    docs: https://developers.zoopla.co.uk/leads/docs/push-service
    methods:
    - type: oauth2
      flow: clientCredentials
      description: Zoopla calls a token endpoint the partner supplies, then sends Authorization
        Bearer.
    - type: apiKey
      header: Authorization
      description: Key used verbatim as the Authorization header value.
gaps:
- No mutualTLS, no openIdConnect scheme and no PKCE anywhere on the API surface — every path is
  machine-to-machine client credentials.
- Neither the Alto nor the Zoopla token endpoint publishes RFC 8414 metadata; the only discovery
  document in the estate belongs to the human-login Auth0 tenant.
- The Alto OpenAPI models the Bearer JWT as an apiKey scheme, so generated clients will not know
  a token endpoint exists.