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
nullif 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:SSformat. - date_updated (string): The date and time the offer was last updated in
YYYY-MM-DD HH:MM:SSformat. - 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.
0if 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
externalisfalse:{ "external": false, "listing_id": 120 }— refers to an internal listing. - When
externalistrue: 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.
- When
- 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
nullfor 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:SSformat.
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 to1.status(string): Filter by offer status. Possible values:draft,submitted,under_negotiation,accepted,rejected,withdrawn.is_active(boolean): Filter by active state (trueorfalse).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 inYYYY-MM-DD HH:MM:SSformat, ornullfor no lower limit.max(string): The maximum date inYYYY-MM-DD HH:MM:SSformat, ornullfor no upper limit.
date_updated(object): Filter by last update date range. Must include:min(string): The minimum date inYYYY-MM-DD HH:MM:SSformat, ornullfor no lower limit.max(string): The maximum date inYYYY-MM-DD HH:MM:SSformat, ornullfor 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
roundsarray. 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.

