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 May 9th, 2026.