Skip to content

Offers ​

The Offer object represents a buyer's offer on a property in the EstatePrime system. This object is returned in JSON format, containing all available values for an offer including its negotiation rounds and associated contacts.

Object ​

The Offer object represents an individual offer record. Below are the fields included in an Offer object:

Example (internal listing) ​

json
{
  "id": 54,
  "status": "under_negotiation",
  "is_active": true,
  "request_id": 88,
  "store_id": 2,
  "created_by": 3,
  "date_created": "2025-03-05 09:00:00",
  "date_updated": "2025-03-12 16:30:00",
  "currency": "EUR",
  "current_listing_price": 180000,
  "loan_percentage": 0,
  "notes": "Buyer is highly motivated.",
  "external_contact": false,
  "listing": {
    "external": false,
    "listing_id": 120
  },
  "contacts": [23, 45],
  "rounds": [
    {
      "id": 1,
      "type": "offer_submitted",
      "amount": 165000,
      "current_listing_price": 180000,
      "notes": null,
      "created_by": 3,
      "date_created": "2025-03-05 09:00:00"
    },
    {
      "id": 2,
      "type": "counter_offer",
      "amount": 172000,
      "current_listing_price": 180000,
      "notes": "Owner willing to negotiate.",
      "created_by": 3,
      "date_created": "2025-03-08 11:00:00"
    }
  ]
}

Example (external listing) ​

When the offer is on an off-system property, the listing object contains a full snapshot of the external property instead of an internal listing ID:

json
{
  "id": 57,
  "status": "submitted",
  "is_active": true,
  "request_id": 91,
  "store_id": 2,
  "created_by": 5,
  "date_created": "2025-03-10 14:00:00",
  "date_updated": "2025-03-10 14:00:00",
  "currency": "EUR",
  "current_listing_price": 240000,
  "loan_percentage": 30,
  "notes": null,
  "external_contact": false,
  "listing": {
    "external": true,
    "address": "Tsimiski 15, Thessaloniki",
    "price": 240000,
    "owner_name": "Maria Georgiou",
    "listing_code": "EXT-00451",
    "availability": "sale",
    "category": "residential",
    "subcategory": "apartment",
    "size": "95.00",
    "area_level1": 5,
    "area_level2": 12,
    "area_level3": null,
    "listing_link": "https://portal.example.com/listing/451",
    "notes": null
  },
  "contacts": [30],
  "rounds": []
}
  • id (int): The system id of the offer.
  • status (string): The current offer status. Possible values: draft, submitted, under_negotiation, accepted, rejected, withdrawn.
  • is_active (boolean): Whether the offer is currently active.
  • request_id (int, nullable): The ID of the linked buyer request, or null if not linked.
  • store_id (int): The ID of the office/store this offer belongs to.
  • created_by (int): The user ID of the user who created the offer.
  • date_created (string): The date and time the offer was created in YYYY-MM-DD HH:MM:SS format.
  • date_updated (string): The date and time the offer was last updated in YYYY-MM-DD HH:MM:SS format.
  • currency (string): The currency code (e.g., EUR).
  • current_listing_price (int): The listing's asking price at the time the offer was made.
  • loan_percentage (int): The percentage of the purchase to be financed by a bank loan. 0 if no loan.
  • notes (string, nullable): Optional notes about the offer.
  • external_contact (boolean): Indicates if the buyer is outside the system (not a stored contact).
  • listing (object): Information about the property being offered on. Contains one of two shapes:
    • When external is false: { "external": false, "listing_id": 120 } — refers to an internal listing.
    • When external is true: Contains a full snapshot of the off-system property. Fields include:
      • address (string, nullable): The property address.
      • price (int, nullable): The asking price.
      • owner_name (string, nullable): The property owner's name.
      • listing_code (string, nullable): An external reference code.
      • availability (string, nullable): Possible values: sale, rent, auction, shortterm.
      • category (string, nullable): Possible values: residential, commercial, land, other.
      • subcategory (string, nullable): The property subcategory.
      • size (decimal, nullable): The property size in square meters.
      • area_level1 (int, nullable): Region ID.
      • area_level2 (int, nullable): Municipality/district ID.
      • area_level3 (int, nullable): Neighbourhood ID.
      • listing_link (string, nullable): A URL link to the external listing.
      • notes (string, nullable): Notes about the external property.
  • contacts (array of integers): A list of contact IDs (the buyers) associated with the offer.
  • rounds (array of objects): The negotiation history of the offer, ordered chronologically. Each object includes:
    • id (int): The system id of the round.
    • type (string): The type of negotiation event. Possible values: offer_submitted, counter_offer, buyer_revision, accepted, rejected, withdrawn, note.
    • amount (int, nullable): The offered amount for this round, or null for informational entries (e.g., note).
    • current_listing_price (int, nullable): The listing's asking price at the time of this round.
    • notes (string, nullable): Notes about this negotiation round.
    • created_by (int): The user ID of the user who logged this round.
    • date_created (string): The date and time this round was created in YYYY-MM-DD HH:MM:SS format.

Get offers ​

/api/offers (GET) ​

Fetch a paginated list of offers.

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.
    • status (string): Filter by offer status. Possible values: draft, submitted, under_negotiation, accepted, rejected, withdrawn.
    • is_active (boolean): Filter by active state (true or false).
    • listing_id (int): Filter by internal listing ID.
    • request_id (int): Filter by linked buyer request ID.
    • store_id (int): Filter by office/store ID.
    • created_by (int): Filter by the user ID who created the offer.
    • contact_id (int): Filter by associated contact 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,
  "status": "under_negotiation",
  "is_active": true,
  "store_id": 2,
  "date_created": {
    "min": "2025-01-01 00:00:00",
    "max": null
  }
}

Response ​

  • 200 OK: Returns a JSON array of offer objects.

Example Response ​

json
{
  "status": 200,
  "page": 1,
  "total_pages": 3,
  "results_per_page": 50,
  "total_results": 127,
  "data": [
    {
      "id": 54,
      "status": "under_negotiation",
      "is_active": true,
      "request_id": 88,
      "store_id": 2,
      "created_by": 3,
      "date_created": "2025-03-05 09:00:00",
      "date_updated": "2025-03-12 16:30:00",
      "currency": "EUR",
      "current_listing_price": 180000,
      "loan_percentage": 0,
      "notes": "Buyer is highly motivated.",
      "external_contact": false,
      "listing": {
        "external": false,
        "listing_id": 120
      },
      "contacts": [23, 45]
    }
    //Rest of the data...
  ]
}

Note: The list response does not include the rounds array. Use the single endpoint to retrieve the full negotiation history.

Get single offer ​

/api/offers/{id} (GET) ​

Get a single offer by its id.

Request ​

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

Example Response ​

json
{
  "status": 200,
  "data": {
    "id": 54,
    "status": "under_negotiation",
    "is_active": true,
    "request_id": 88,
    "store_id": 2,
    "created_by": 3,
    "date_created": "2025-03-05 09:00:00",
    "date_updated": "2025-03-12 16:30:00",
    "currency": "EUR",
    "current_listing_price": 180000,
    "loan_percentage": 0,
    "notes": "Buyer is highly motivated.",
    "external_contact": false,
    "listing": {
      "external": false,
      "listing_id": 120
    },
    "contacts": [23, 45],
    "rounds": [
      {
        "id": 1,
        "type": "offer_submitted",
        "amount": 165000,
        "current_listing_price": 180000,
        "notes": null,
        "created_by": 3,
        "date_created": "2025-03-05 09:00:00"
      },
      {
        "id": 2,
        "type": "counter_offer",
        "amount": 172000,
        "current_listing_price": 180000,
        "notes": "Owner willing to negotiate.",
        "created_by": 3,
        "date_created": "2025-03-08 11:00:00"
      }
    ]
  }
}

Response ​

  • 200 OK: Returns the full JSON object of the offer including all negotiation rounds.

Last updated on September 16th, 2026.