Skip to content

External Listings ​

The ExternalListing object represents a competitor or off-system property listing tracked in EstatePrime. These are properties found on external portals or from other agencies — not managed directly in the system. This object is returned in JSON format, containing all available values for an external listing.

Object ​

The ExternalListing object represents an individual external listing record. Below are the fields included in an ExternalListing object:

Example ​

json
{
  "id": 55,
  "store_id": 2,
  "source_id": 3,
  "status": 1,
  "external_url": "https://portal.example.com/listing/12345",
  "availability": "sale",
  "category": "residential",
  "subcategory": "apartment",
  "price": 145000,
  "price_per_sqm": 1611.11,
  "size": 90,
  "floor": 3,
  "levels": 1,
  "rooms": 3,
  "wcs": 1,
  "bathrooms": 1,
  "kitchens": 1,
  "living_rooms": 1,
  "year_built": 2003,
  "description": "Bright apartment near the seafront with parking.",
  "location": {
    "address": "Nikis 22, Thessaloniki",
    "area_level1": 5,
    "area_level2": 12,
    "area_level3": null,
    "latitude": 40.6342,
    "longitude": 22.9394
  },
  "contact_full_name": "George Papadopoulos",
  "contact_email": "[email protected]",
  "contact_phones": "+306912345678",
  "created_by": 3,
  "date_created": "2025-03-01 10:15:00",
  "date_updated": "2025-03-15 14:00:00",
  "tags": [6, 11],
  "users": [3, 8],
  "photos": [
    "https://files.example.com/external-listings/55/photo1.jpg",
    "https://files.example.com/external-listings/55/photo2.jpg"
  ]
}
  • id (int): The system id of the external listing.
  • store_id (int): The ID of the office/store that tracks this listing.
  • source_id (int, nullable): The ID of the source (e.g., portal) where the listing was found.
  • status (int, nullable): The ID of the listing status. See Get statuses.
  • external_url (string, nullable): The URL of the listing on the external portal.
  • availability (string, nullable): The listing availability type. Possible values: sale, rent, auction, shortterm.
  • category (string, nullable): The property category. Possible values: residential, commercial, land, other.
  • subcategory (string, nullable): The property subcategory. Possible values: apartment, maisonette, detached, villa, loft, residential_building, apartment_complex, farmhouse, houseboat, other_residential, office, store, warehouse, hotel, commercial_building, hall, industrial_space, craft_space, other_commercial, plot, parcel, island, parking, business, air, other.
  • price (int, nullable): The listing price.
  • price_per_sqm (decimal, nullable): The price per square meter. Auto-calculated from price / size if not set directly.
  • size (int, nullable): The property size in square meters.
  • floor (float, nullable): The floor number of the property.
  • levels (int, nullable): The number of levels/floors the property spans.
  • rooms (int, nullable): The number of rooms/bedrooms.
  • wcs (int, nullable): Number of WCs.
  • bathrooms (int, nullable): Number of bathrooms.
  • kitchens (int, nullable): Number of kitchens.
  • living_rooms (int, nullable): Number of living rooms.
  • year_built (int, nullable): The year the property was built.
  • description (string, nullable): A description of the property.
  • location (object): Location data. Contains the following fields:
    • address (string, nullable): The street address.
    • area_level1 (int, nullable): Region ID.
    • area_level2 (int, nullable): Municipality/district ID.
    • area_level3 (int, nullable): Neighbourhood ID.
    • latitude (float, nullable): GPS latitude coordinate.
    • longitude (float, nullable): GPS longitude coordinate.
  • contact_full_name (string, nullable): The full name of the property owner/contact.
  • contact_email (string, nullable): The email address of the property owner/contact.
  • contact_phones (string, nullable): The phone number(s) of the property owner/contact.
  • created_by (int): The user ID of the user who created the record.
  • date_created (string): The date and time the record was created in YYYY-MM-DD HH:MM:SS format.
  • date_updated (string): The date and time the record was last updated in YYYY-MM-DD HH:MM:SS format.
  • tags (array of integers): A list of tag IDs associated with the listing.
  • users (array of integers): A list of user IDs (agents) following this listing.
  • photos (array of strings): A list of photo URLs for this listing.

Get external listings ​

/api/external-listings (GET) ​

Fetch a paginated list of external listings.

Request ​

  • Method: GET
  • Headers: Include authentication headers as described in the Authentication section.
  • Body: JSON object with the following optional parameters:
    • page (int): The page number to fetch. Defaults to 1.
    • availability (string): Filter by availability type. Possible values: sale, rent, auction, shortterm.
    • category (string): Filter by property category. Possible values: residential, commercial, land, other.
    • status (int): Filter by status ID.
    • store_id (int): Filter by office/store ID.
    • source_id (int): Filter by source ID.
    • price (object): Filter by price range. Must include:
      • min (int): The minimum price, or null for no lower limit.
      • max (int): The maximum price, or null for no upper limit.
    • size (object): Filter by size range. Must include:
      • min (int): The minimum size in square meters, or null for no lower limit.
      • max (int): The maximum size in square meters, or null for no upper limit.
    • area_level1 (int): Filter by region ID.
    • area_level2 (int): Filter by municipality/district ID.
    • date_created (object): Filter by creation date range. Must include:
      • min (string): The minimum date in YYYY-MM-DD HH:MM:SS format, or null for no lower limit.
      • max (string): The maximum date in YYYY-MM-DD HH:MM:SS format, or null for no upper limit.
    • date_updated (object): Filter by last update date range. Must include:
      • min (string): The minimum date in YYYY-MM-DD HH:MM:SS format, or null for no lower limit.
      • max (string): The maximum date in YYYY-MM-DD HH:MM:SS format, or null for no upper limit.

Example Body ​

json
{
  "page": 1,
  "availability": "sale",
  "category": "residential",
  "price": {
    "min": 100000,
    "max": 300000
  },
  "size": {
    "min": 70,
    "max": null
  },
  "area_level1": 5,
  "date_created": {
    "min": "2025-01-01 00:00:00",
    "max": null
  }
}

Response ​

  • 200 OK: Returns a JSON array of external listing objects.

Example Response ​

json
{
  "status": 200,
  "page": 1,
  "total_pages": 6,
  "results_per_page": 50,
  "total_results": 271,
  "data": [
    {
      "id": 55,
      "store_id": 2,
      "source_id": 3,
      "status": 1,
      "system_id": null,
      "external_url": "https://portal.example.com/listing/12345",
      "availability": "sale",
      "category": "residential",
      "subcategory": "apartment",
      "price": 145000,
      "price_per_sqm": 1611.11,
      "size": 90,
      "rooms": 3,
      "year_built": 2003,
      "address": "Nikis 22, Thessaloniki",
      "area_level1": 5,
      "area_level2": 12,
      "area_level3": null,
      "latitude": 40.6342,
      "longitude": 22.9394,
      "contact_full_name": "George Papadopoulos",
      "created_by": 3,
      "date_created": "2025-03-01 10:15:00",
      "date_updated": "2025-03-15 14:00:00",
      "tags": [6, 11],
      "users": [3, 8],
      "photos": [
        "https://files.example.com/external-listings/55/photo1.jpg"
      ]
    }
    //Rest of the data...
  ]
}

Note: The list response returns a trimmed set of fields. Location fields (address, area_level1, area_level2, area_level3, latitude, longitude) are returned as flat fields rather than nested inside a location object. Use the single endpoint for the full structured response.

Get single external listing ​

/api/external-listings/{id} (GET) ​

Get a single external listing by its id.

Request ​

  • Method: GET
  • Headers: Include authentication headers.
  • Path Params: The external listing id to be fetched.

Example Response ​

json
{
  "status": 200,
  "data": {
    "id": 55,
    "store_id": 2,
    "source_id": 3,
    "status": 1,
    "external_url": "https://portal.example.com/listing/12345",
    "availability": "sale",
    "category": "residential",
    "subcategory": "apartment",
    "price": 145000,
    "price_per_sqm": 1611.11,
    "size": 90,
    "floor": 3,
    "levels": 1,
    "rooms": 3,
    "wcs": 1,
    "bathrooms": 1,
    "kitchens": 1,
    "living_rooms": 1,
    "year_built": 2003,
    "description": "Bright apartment near the seafront with parking.",
    "location": {
      "address": "Nikis 22, Thessaloniki",
      "area_level1": 5,
      "area_level2": 12,
      "area_level3": null,
      "latitude": 40.6342,
      "longitude": 22.9394
    },
    "contact_full_name": "George Papadopoulos",
    "contact_email": "[email protected]",
    "contact_phones": "+306912345678",
    "created_by": 3,
    "date_created": "2025-03-01 10:15:00",
    "date_updated": "2025-03-15 14:00:00",
    "tags": [6, 11],
    "users": [3, 8],
    "photos": [
      "https://files.example.com/external-listings/55/photo1.jpg",
      "https://files.example.com/external-listings/55/photo2.jpg"
    ]
  }
}

Response ​

  • 200 OK: Returns the full JSON object of the external listing.

Create external listing ​

/api/external-listings (POST) ​

Create a new external listing.

Request ​

  • Method: POST
  • Headers: Include authentication headers.
  • Body: JSON object with the external listing details to be inserted.
    • created_by (int, required): The user ID creating this record.
    • store_id (int, required): The ID of the office/store that tracks this listing.
    • source_id (int): The ID of the source (e.g., portal) where the listing was found. See Get external listing sources.
    • status (int): The ID of the listing status. See Get statuses. Defaults to the default status if omitted.
    • external_url (string): The URL of the listing on the external portal.
    • availability (string): Possible values: sale, rent, auction, shortterm.
    • category (string): Possible values: residential, commercial, land, other.
    • subcategory (string): Must belong to the given category. Requires category to also be set. Valid combinations:
      • residential: apartment, maisonette, detached, villa, loft, residential_building, apartment_complex, farmhouse, houseboat, other_residential.
      • commercial: office, store, warehouse, hotel, commercial_building, hall, industrial_space, craft_space, other_commercial.
      • land: plot, parcel, island.
      • other: parking, business, air, other.
    • price (int): The listing price.
    • price_per_sqm (decimal): The price per square meter. Auto-calculated from price / size if not set directly.
    • size (int): The property size in square meters.
    • floor (float): The floor number of the property.
    • levels (int): The number of levels/floors the property spans.
    • rooms (int): The number of rooms/bedrooms.
    • wcs (int): Number of WCs.
    • bathrooms (int): Number of bathrooms.
    • kitchens (int): Number of kitchens.
    • living_rooms (int): Number of living rooms.
    • year_built (int): The year the property was built.
    • description (string): A description of the property.
    • location (object): Location data. Contains the following fields:
      • address (string): The street address.
      • area_level1 (int): Region ID.
      • area_level2 (int): Municipality/district ID.
      • area_level3 (int): Neighbourhood ID.
      • latitude (float): GPS latitude coordinate. Can also be sent as a top-level latitude field instead of inside location.
      • longitude (float): GPS longitude coordinate. Can also be sent as a top-level longitude field instead of inside location.
    • contact_full_name (string): The full name of the property owner/contact.
    • contact_email (string): The email address of the property owner/contact.
    • contact_phones (string): The phone number(s) of the property owner/contact.
    • tags (array of integers): A list of tag IDs to associate with the listing. See Get external listing tags.
    • users (array of integers): A list of user IDs (agents) to follow this listing.
    • photos (array of strings): A list of photo URLs to import. Only image/jpeg, image/png and image/webp are accepted; each is downloaded and stored against the listing in the given order.

Example Body ​

json
{
  "created_by": 3,
  "store_id": 2,
  "source_id": 3,
  "availability": "sale",
  "category": "residential",
  "subcategory": "apartment",
  "price": 145000,
  "size": 90,
  "rooms": 3,
  "year_built": 2003,
  "description": "Bright apartment near the seafront with parking.",
  "location": {
    "address": "Nikis 22, Thessaloniki",
    "area_level1": 5,
    "area_level2": 12,
    "latitude": 40.6342,
    "longitude": 22.9394
  },
  "contact_full_name": "George Papadopoulos",
  "contact_email": "[email protected]",
  "contact_phones": "+306912345678",
  "tags": [6, 11],
  "users": [3, 8],
  "photos": [
    "https://portal.example.com/photos/12345/1.jpg"
  ]
}

Response ​

  • 200 OK: Returns the created external listing object, in the same format as the single endpoint.

Example Response ​

json
{
  "status": 200,
  "data": {
    "id": 55,
    "store_id": 2,
    "source_id": 3,
    "status": 1,
    "external_url": null,
    "availability": "sale",
    "category": "residential",
    "subcategory": "apartment",
    "price": 145000,
    "price_per_sqm": 1611.11,
    "size": 90,
    "floor": null,
    "levels": null,
    "rooms": 3,
    "wcs": null,
    "bathrooms": null,
    "kitchens": null,
    "living_rooms": null,
    "year_built": 2003,
    "description": "Bright apartment near the seafront with parking.",
    "location": {
      "address": "Nikis 22, Thessaloniki",
      "area_level1": 5,
      "area_level2": 12,
      "area_level3": null,
      "latitude": 40.6342,
      "longitude": 22.9394
    },
    "contact_full_name": "George Papadopoulos",
    "contact_email": "[email protected]",
    "contact_phones": "+306912345678",
    "created_by": 3,
    "date_created": "2025-03-01 10:15:00",
    "date_updated": "2025-03-01 10:15:00",
    "tags": [6, 11],
    "users": [3, 8],
    "photos": [
      "https://files.example.com/external-listings/55/photo1.jpg"
    ]
  }
}

Get external listing statuses ​

/api/external-listings/statuses (GET) ​

Fetch the available external listing statuses.

Request ​

  • Method: GET
  • Headers: Include authentication headers.

Response ​

  • 200 OK: Returns a JSON array of available statuses.

Example Response ​

json
{
  "status": 200,
  "data": [
    {
      "id": 1,
      "name": "New"
    },
    {
      "id": 2,
      "name": "Contacted"
    },
    {
      "id": 3,
      "name": "Viewing Scheduled"
    }
  ]
}

Get external listing sources ​

/api/external-listings/sources (GET) ​

Fetch the available external listing sources.

Request ​

  • Method: GET
  • Headers: Include authentication headers.

Response ​

  • 200 OK: Returns a JSON array of available sources.

Example Response ​

json
{
  "status": 200,
  "data": [
    {
      "id": 1,
      "name": "Spitogatos"
    },
    {
      "id": 2,
      "name": "XE.gr"
    },
    {
      "id": 3,
      "name": "Manual Entry"
    }
  ]
}

Get external listing tags ​

/api/external-listings/tags (GET) ​

Fetch the available external listing tags.

Request ​

  • Method: GET
  • Headers: Include authentication headers.

Response ​

  • 200 OK: Returns a JSON array of available tags.

Example Response ​

json
{
  "status": 200,
  "data": [
    {
      "id": 6,
      "name": "Price Drop"
    },
    {
      "id": 11,
      "name": "High Potential"
    }
  ]
}

Get external listing custom fields ​

/api/external-listings/custom-fields (GET) ​

Fetch the available custom fields for external listings.

Request ​

  • Method: GET
  • Headers: Include authentication headers.

Response ​

  • 200 OK: Returns a JSON array of available custom fields for external listings.

Example Response ​

json
{
  "status": 200,
  "data": [
    {
      "id": 1,
      "name": "Agent Notes",
      "type": "textarea"
    },
    {
      "id": 2,
      "name": "Lead Quality",
      "type": "select",
      "options": [
        {
          "id": 1,
          "name": "Hot"
        },
        {
          "id": 2,
          "name": "Warm"
        },
        {
          "id": 3,
          "name": "Cold"
        }
      ]
    }
  ]
}

Available custom field types ​

  • text: Text up to 255 characters.
  • textarea: Text up to 2500 characters.
  • wysiwyg: Text with HTML format.
  • number: Integer or decimal.
  • formatted_number: Integer or decimal that is formatted. E.g. 1,000,000.25.
  • select: Single select with options.
  • select_multi: Multiple select with options.
  • checkbox: Boolean.
  • file: Single file. (As a URL)
  • file_multi: Array of multiple files. (As URLs)
  • image: Single image. (As a URL)
  • image_multi: Array of multiple images. (As URLs)
  • address: Address. (E.g. Bellariastraße 6, 1010 Wien, Austria)
  • url: URL.
  • date: Date in YYYY-MM-DD format. (E.g. 2025-10-18)
  • datetime: Datetime in YYYY-MM-DD HH:MM:SS format. (E.g. 2025-10-18 18:24:10)
  • currency: Integer or decimal formatted as a currency. E.g. 1,000,000.25€.
  • user: Application user_id.
  • user_multi: An array of application user_id values.
  • contact: Another contact's id.
  • contact_multi: An array of multiple contact ids.

Last updated on September 16th, 2026.