Apex27 Portal API

The Apex27 Portal API is the per-tenant, website-facing API that drives search and enquiry on Apex27-built agency websites. Its documented operations are get-listings, get-listing, get-search-options, get-statistics, contact, request-valuation, add-favourite and remove-favourite, spanning sales, lettings and land inventory with sort and filter options. It has no shared host — the base URL is the agency's own portal domain with /api appended (the vendor's published credential uses the placeholder https://portal-abcd1234.apex27.co.uk/api) — and it authenticates with an `api_key` query-string parameter issued under Admin Panel > Websites > [Your Website] > Integrations. No public documentation page for it was found.

OpenAPI Specification

apex27-portal-api-openapi.yml Raw ↑
# generated: 2026-07-26
# method: derived
# source: https://www.npmjs.com/package/n8n-nodes-apex27portal (v0.1.0, dist/nodes/Apex27Portal/Apex27Portal.node.js)
openapi: 3.1.0
info:
  title: Apex27 Portal API
  version: 0.1.0
  summary: Per-tenant, website-facing search and enquiry API powering Apex27-built estate agency websites.
  description: 'API Evangelist DERIVED description of the Apex27 Portal API.


    Apex27 publishes no OpenAPI, Swagger or reference documentation for this surface. This document was
    derived mechanically from Apex27''s OWN published n8n community node — npm n8n-nodes-apex27portal@0.1.0,
    publisher "james_apex27" — which contains the complete operation set, query and form parameters, enumerations
    and the auth mechanism.


    It is NOT a provider-published contract. The Portal API has no shared host: the base URL is each agency''s
    own Apex27 portal domain with `/api` appended. The server URL below uses the vendor''s OWN published
    placeholder host verbatim; substitute the agency domain. Authentication is an `api_key` query-string
    parameter issued under Admin Panel > Websites > [Your Website] > Integrations tab > Portal API section.'
  contact:
    name: Apex27
    url: https://apex27.co.uk/contact-apex27
  x-apievangelist-provenance:
    method: derived
    generated: '2026-07-26'
    provider_published: false
    source: https://www.npmjs.com/package/n8n-nodes-apex27portal (v0.1.0, dist/nodes/Apex27Portal/Apex27Portal.node.js)
    source_publisher: james_apex27 (Apex27)
    evidence:
    - kind: npm-package
      url: https://registry.npmjs.org/n8n-nodes-apex27portal
      note: v0.1.0 — Apex27Portal.node.js holds every endpoint and parameter reproduced here.
    - kind: npm-package
      url: https://registry.npmjs.org/n8n-nodes-apex27portal
      note: Apex27PortalApi.credentials.js declares the api_key query parameter and the https://portal-abcd1234.apex27.co.uk/api
        base-URL placeholder used as the server below.
    caveat: Per-tenant API. There is no shared production host to probe, so no live status codes were
      recorded for this surface.
servers:
- url: https://portal-abcd1234.apex27.co.uk/api
  description: Per-tenant portal host. Vendor-published placeholder — replace with the agency's own Apex27
    website domain + /api.
security:
- PortalApiKey: []
tags:
- name: Listings
  description: Portal inventory search and retrieval.
- name: Enquiries
  description: Website enquiries and valuation requests.
- name: Favourites
  description: Saved listings for a portal contact.
- name: Statistics
  description: Portal inventory statistics.
paths:
  /get-listings:
    get:
      operationId: getListings
      summary: Search listings
      description: Search the agency portal inventory across sales, lettings, commercial and land.
      tags:
      - Listings
      parameters:
      - &id001
        name: api_key
        in: query
        required: true
        schema:
          type: string
        description: Portal API key, issued under Admin Panel > Websites > [Your Website] > Integrations
          tab > Portal API section.
      - name: transaction_type
        in: query
        required: false
        schema:
          type: string
          enum: &id006
          - sales
          - lettings
          - commercial_sales
          - commercial_lettings
          - holiday_lettings
          - land
        description: Required if property_class is not set.
      - name: property_class
        in: query
        required: false
        schema:
          type: string
          enum:
          - sale
          - rent
        description: Required if transaction_type is not set.
      - name: city
        in: query
        required: false
        schema:
          type: string
      - name: county
        in: query
        required: false
        schema:
          type: string
      - name: country
        in: query
        required: false
        schema:
          type: string
      - name: location
        in: query
        required: false
        schema:
          type: string
      - name: property_type
        in: query
        required: false
        schema:
          type: string
      - name: keywords[]
        in: query
        required: false
        schema:
          type: array
        description: Repeatable keyword filter.
      - name: min_price
        in: query
        required: false
        schema:
          type: number
      - name: max_price
        in: query
        required: false
        schema:
          type: number
      - name: min_beds
        in: query
        required: false
        schema:
          type: integer
      - name: max_beds
        in: query
        required: false
        schema:
          type: integer
      - name: min_baths
        in: query
        required: false
        schema:
          type: integer
      - name: website_status
        in: query
        required: false
        schema:
          type: string
      - name: search_region_ids[]
        in: query
        required: false
        schema:
          type: array
        description: Repeatable search-region identifier filter.
      - name: main_search_region_id
        in: query
        required: false
        schema:
          type: integer
      - name: min_gross_yield
        in: query
        required: false
        schema:
          type: number
      - name: overseas
        in: query
        required: false
        schema:
          type: integer
          enum:
          - 0
          - 1
        description: Boolean flag sent as 1 or 0.
      - name: featured
        in: query
        required: false
        schema:
          type: integer
          enum:
          - 0
          - 1
        description: Boolean flag sent as 1 or 0.
      - name: include_sstc
        in: query
        required: false
        schema:
          type: integer
          enum:
          - 0
          - 1
        description: Include Sold STC / Let Agreed. Sent as 1 or 0.
      - name: sw
        in: query
        required: false
        schema:
          type: string
        description: South-west corner of a bounding box.
      - name: ne
        in: query
        required: false
        schema:
          type: string
        description: North-east corner of a bounding box.
      - name: image_count
        in: query
        required: false
        schema:
          type: integer
      - &id002
        name: image_size
        in: query
        required: false
        schema:
          type: string
          enum:
          - tiny
          - small
          - medium
          - large
          - custom
      - &id003
        name: image_mode
        in: query
        required: false
        schema:
          type: string
      - &id004
        name: image_width
        in: query
        required: false
        schema:
          type: integer
      - &id005
        name: image_height
        in: query
        required: false
        schema:
          type: integer
      - name: sort
        in: query
        required: false
        schema:
          type: string
          enum:
          - featured
          - newest
          - oldest
          - highest_price
          - lowest_price
          - nearest
          - newly_instructed
      - name: page
        in: query
        required: false
        schema:
          type: integer
      - name: page_size
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
  /get-listing:
    get:
      operationId: getListing
      summary: Get a listing
      description: Retrieve a single listing by identifier, with image rendering options.
      tags:
      - Listings
      parameters:
      - *id001
      - name: id
        in: query
        required: true
        schema:
          type: integer
      - *id002
      - *id003
      - *id004
      - *id005
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
  /get-search-options:
    get:
      operationId: getSearchOptions
      summary: Get search options
      description: Retrieve the filter vocabularies (regions, property types, price bands) the portal
        search accepts.
      tags:
      - Listings
      parameters:
      - *id001
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
  /get-statistics:
    get:
      operationId: getStatistics
      summary: Get portal statistics
      description: Retrieve portal inventory statistics for a transaction type over an optional date range.
      tags:
      - Statistics
      parameters:
      - *id001
      - name: transaction_type
        in: query
        required: true
        schema:
          type: string
          enum: *id006
      - name: date_start
        in: query
        required: false
        schema:
          type: string
        description: ISO date.
      - name: date_end
        in: query
        required: false
        schema:
          type: string
        description: ISO date.
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
  /contact:
    post:
      operationId: contactAgent
      summary: Send an enquiry to the agent
      description: Submit a website enquiry against a listing, a listing reference or a branch.
      tags:
      - Enquiries
      parameters:
      - *id001
      requestBody:
        required: true
        description: Form-encoded enquiry. The vendor node posts this as application/x-www-form-urlencoded.
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - first_name
              - last_name
              - email
              properties:
                first_name:
                  type: string
                last_name:
                  type: string
                email:
                  type: string
                  format: email
                listing_id:
                  type: integer
                  description: One of listing_id, listing_reference or branch_id targets the enquiry.
                listing_reference:
                  type: string
                branch_id:
                  type: integer
                request_listing_details:
                  type: integer
                  enum:
                  - 0
                  - 1
                request_viewing:
                  type: integer
                  enum:
                  - 0
                  - 1
                request_valuation:
                  type: integer
                  enum:
                  - 0
                  - 1
                source_id:
                  type: integer
              additionalProperties: true
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
  /request-valuation:
    post:
      operationId: requestValuation
      summary: Request a valuation
      description: Submit a market-appraisal request from the agency website.
      tags:
      - Enquiries
      parameters:
      - *id001
      requestBody:
        required: true
        description: Form-encoded valuation request.
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - first_name
              - last_name
              - email
              - address_1
              - city
              - postal_code
              - transaction_type
              properties:
                first_name:
                  type: string
                last_name:
                  type: string
                email:
                  type: string
                  format: email
                address_1:
                  type: string
                city:
                  type: string
                postal_code:
                  type: string
                transaction_type:
                  type: string
                  enum: *id006
                title:
                  type: string
                  enum:
                  - mr
                  - mrs
                  - miss
                  - ms
                  - dr
                  - prof
                country:
                  type: string
                tenure:
                  type: string
                  enum:
                  - freehold
                  - leasehold
                  - share_of_freehold
                  - commonhold
                condition:
                  type: string
                  enum:
                  - new_build
                  - good
                  - average
                  - poor
                furnished:
                  type: string
                  enum:
                  - furnished
                  - part_furnished
                  - unfurnished
                outside_spaces[]:
                  type: array
                  items:
                    type: string
                latitude:
                  type: number
                longitude:
                  type: number
              additionalProperties: true
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
  /add-favourite:
    post:
      operationId: addFavourite
      summary: Add a listing to a contact favourites
      description: Save a listing against a portal contact.
      tags:
      - Favourites
      parameters:
      - *id001
      requestBody:
        required: true
        description: Form-encoded favourite.
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - listing_id
              - contact_id
              properties:
                listing_id:
                  type: integer
                contact_id:
                  type: integer
              additionalProperties: true
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
  /remove-favourite:
    post:
      operationId: removeFavourite
      summary: Remove a listing from a contact favourites
      description: Remove a saved listing from a portal contact.
      tags:
      - Favourites
      parameters:
      - *id001
      requestBody:
        required: true
        description: Form-encoded favourite.
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
              - listing_id
              - contact_id
              properties:
                listing_id:
                  type: integer
                contact_id:
                  type: integer
              additionalProperties: true
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          description: Unauthorised. The api_key query parameter is missing or invalid for this portal.
components:
  securitySchemes:
    PortalApiKey:
      type: apiKey
      in: query
      name: api_key
      description: Portal API key from Admin Panel > Websites > [Your Website] > Integrations tab > Portal
        API section.