Four valuation tools. Apartments, houses and land plots are supported; the express valuation and the report refuse commercial property and residential complexes with 422 business_rule; the rent estimate works for commercial property too.
Express valuation
POST /valuation/express - scope tools:valuation, immediate. One API call plus the express valuation price.
| Field | Type | Required | Description |
|---|---|---|---|
propertyCategory | string | no | apartment (default), house, land; commercial is refused with 422, any other value (there is no complex) with 400 |
totalArea | number | one of three | area, m² |
areaM2 | number | one of three | same as totalArea |
landPlotArea | number | one of three | plot area, m²; counts as the area only for land |
addressText | string | recommended | address as one line |
country, city, postalCode | string | no | address in parts |
lat, lon | number | no | coordinates |
rooms | number | no | rooms |
yearBuilt | number | no | year built |
floor, floorsTotal | number | no | floor and number of floors |
houseLevels | number | no | levels in the house |
heatingType | string | no | heating |
price | number | no | your price - compared with the estimate |
currency | string | no | result currency |
language | string | no | not used: the express answer has no explanation text |
targetId | string | no | your listing id: repeat estimates of the same listing are served from cache for 7 days |
curl -X POST https://developers.grem.capital/api/v1/valuation/express \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5b8c3f7e-2a71-4c55-8d0e-9f1a6b2c4d10" \
-d '{"propertyCategory":"apartment","addressText":"Torstraße 12, Berlin","totalArea":64,"rooms":2,"currency":"EUR"}'
Response:
| Field | Description |
|---|---|
estimate.pricePoint | estimated value |
estimate.rangeLow, estimate.rangeHigh | range |
estimate.confidence | confidence level: low, medium or high |
estimate.confidenceScore | confidence as a number from 0 to 1 |
estimate.currency | currency |
estimate.analogs | comparable listings found for the estimate: title, address, area, rooms, pricePerM2, originalPrice, adjustedPrice, adjustments, weight, provenance, source, sourceUrl |
degraded | true for a rough estimate without market data; such an estimate is not charged |
No area or an unknown propertyCategory - 400 validation; commercial property - 422 business_rule with code: commercial_unsupported.
Full valuation report
POST /valuation/report - scope tools:valuation, job. A report with market analysis and a PDF. Required fields depend on propertyCategory. Send only the fields of your category: a field of another category (for example houseLevels for an apartment, parking for a house) is refused with 400. Apartment only: livingArea, kitchenArea, bathrooms, ceilingHeight, floor, storeys, balcony, elevator, parking, houseType, apartmentType. House only: houseLevels. Land only: zoning. House and land: utilities.
| Field | Type | Description |
|---|---|---|
propertyCategory | string | apartment, house or land - required |
address | object | required: country, city, street (may be empty), streetNumber, location (lat, lng) |
totalArea | number | m²; required for apartments and houses |
landPlotArea | number | m²; required for houses; land needs this or totalArea |
condition | string | condition; required for apartments and houses |
apartmentType | string | apartment: Residential, Commercial, Industrial, Land plot or Complex - required |
houseType | string | apartment: building type - required |
floor, storeys | number | apartment: floor and floors in the building - required |
balcony, elevator | yes/no | apartment: required |
houseLevels | number | house: levels, 1 to 10 - required |
rooms | number | apartment, house: rooms |
livingArea, kitchenArea, bathrooms, ceilingHeight | number | apartment only: optional details |
yearConstruction | number | apartment, house: year built |
wallMaterial, heatingType | string | apartment, house: wall material, heating; for a house heatingType is one of central, autonomous, boiler, fireplace, mixed, gas, electric, heat_pump, solid_fuel, underfloor, none |
furnished | yes/no | apartment, house: furniture |
parking | yes/no | apartment only: parking |
zoning | string | land only: zoning |
utilities | object | house and land: gas, water, sewage, electricity (yes/no) |
price | number | your price - compared with the estimate |
currency | string | UAH, USD, EUR, AZN, GBP, AED, CNY, TRY, GEL |
language | string | report language: eng, rus, ukr, deu, spa, aze, arb, fra, zho, tur |
objectId | string | your listing id, if you are valuing it |
comments | string | a comment for the valuation |
curl -X POST https://developers.grem.capital/api/v1/valuation/report \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"propertyCategory": "apartment",
"address": { "country": "Germany", "city": "Berlin", "street": "Torstraße", "streetNumber": "12" },
"currency": "EUR", "language": "eng",
"apartmentType": "Residential", "houseType": "panel",
"totalArea": 64, "rooms": 2, "floor": 3, "storeys": 5,
"balcony": true, "elevator": false, "condition": "good"
}'
202 response: { "jobId": "...", "status": "processing", "state": "running" }. The finished job (GET /valuation/report/jobs/{id}) holds:
| Field | Description |
|---|---|
metrics | figures: potPrice, priceRangeLow, priceRangeHigh, avgPrice, analogCount, growth - market value, its range, price per m², number of comparables, growth % |
confidence, priceMethod, estimateType | how reliable the value is (high…very_low), how it was calculated, point or range |
currency | currency of every figure |
justification | why the value is what it is |
recommendations | pricing and selling recommendations |
pdfMeta | PDF report data |
analogs | comparable listings the value rests on (the same table as in the PDF): title, address, area, rooms, pricePerM2, originalPrice, adjustedPrice, adjustments, weight, provenance, source, sourceUrl. provenance: model_estimate - a benchmark without a listing behind it |
Commercial property (including apartmentType Commercial or Industrial) is refused with 422 business_rule and code: commercial_unsupported - estimate its rent with POST /valuation/rent. A residential complex (apartmentType: Complex) - 422 with code: complex_unsupported: value one apartment or house in it.
PDF: GET /artifacts/v1/ai/appraisal/reports/{id}/pdf. Events - valuation.completed / valuation.failed.
Rent estimate
POST /valuation/rent - scope tools:rent, immediate. Describe the property with fields or pass the objectId of your own or a public listing.
| Field | Type | Description |
|---|---|---|
objectId | string | a listing instead of a description |
city | string | required without objectId |
totalArea | number | m²; required without objectId |
country, district, street | string | address |
propertyCategory | string | property type |
rooms, floor | number | rooms, floor |
furnished | yes/no | furnished |
condition | string | condition |
rentTerm | string | long - monthly rent (default), short - daily rent. Two different markets |
occupancyPct | number | daily rent: expected occupancy, 10 to 100 % |
monthRentalRate | number | your monthly rate - the response shows how it compares with the market |
declaredDayRate | number | your nightly rate |
currency | string | result currency |
curl -X POST https://developers.grem.capital/api/v1/valuation/rent \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"propertyCategory":"apartment","country":"Germany","city":"Berlin","totalArea":50,"rooms":2,"currency":"EUR"}'
Response:
| Field | Description |
|---|---|
id | estimate id; PDF - GET /artifacts/v1/ai/appraisal/rent/{id}/pdf |
currency | currency |
rent.monthlyRent | market rent per month |
rent.low, rent.high | range |
rent.annualRent | per year |
rent.pricePerM2 | per m² per month |
rent.grossYieldPct | gross yield against the property price, %, when the price is known |
rent.confidence | confidence |
rent.basedOn | how many comparable listings the estimate rests on |
rent.termBasis | long or short |
comps | every listing considered and its fate in the estimate: address, area, rooms, monthlyRent/dayRent, effectiveMonthly, term, status, usedInEstimate, source, url |
Without area or city - 400 with a detail like "Missing or invalid: totalArea".
Report review
POST /valuation/review - scope tools:review. Upload a valuation report (PDF, DOCX, DOC, RTF; up to 40 MB) - GREM reads it and checks the value against market data.
Body - multipart/form-data:
| Part | Description |
|---|---|
file | the report document (or a document part) |
language | result language, rus by default |
currency | currency, USD by default |
curl -X POST https://developers.grem.capital/api/v1/valuation/review \
-H "Authorization: Bearer gsk_live_xxx" \
-F "[email protected]" \
-F "language=eng" -F "currency=EUR"
The document is read right away. The 202 response holds jobId, status and state:
action_required(status: need_confirm) -extractedholds the data read from the document. Check it and confirm:POST /valuation/review/jobs/{id}/confirm(Jobs and results). After confirmation the job moves torunning.failed(status: rejected) - the document is not a real-estate valuation report.
The finished result - GET /valuation/review/jobs/{id}; the review report - GET /artifacts/v1/ai/appraisal/reviews/{id}/report.pdf or report.docx. Events - review.completed / review.failed; webhook tracking starts after the confirmation.