Docs

Listings

Last updated: 2026-10-038 min read

Three listing types (kind): property - for sale, rental - for rent, complex - residential complex. Reading is free and open to any key; creating, editing and deleting need the objects:write scope and are not charged either.

List

curl "https://developers.grem.capital/api/v1/objects?kind=property&city=Berlin&limit=20" \
  -H "Authorization: Bearer gsk_live_xxx"

GET /objects:

ParameterDescription
kindrequired: property, rental or complex; case does not matter
city, countryexact-match filters
priceMin, priceMaxprice, in US dollars (by the normalized price)
areaMin, areaMaxarea, m²
roomsrooms (property and rental); may be fractional
type, residentialTypecategory - codes from the dictionaries (property and rental)
pagepage, from 1; a smaller value is treated as 1
limitper page, default 20, 1-50; a value outside is cut into the range
sortnewest (default) or oldest
scopeagency keys only: by default the agency's listings; catalog - the public catalog

Response: data - the listings, paginate - currentPage, totalPages, totalCount.

limit and page outside the range are cut into it, not refused. Other invalid values of a known parameter (an unknown enum value, a non-integer page, text instead of a number) are refused with 400 validation naming the field.

One listing

GET /objects/{kind}/{id} - one listing in the same shape. Unknown id - 404. An agency key can add scope=catalog to get the public view.

Listing shape

FieldDescription
id, kind, name, slugidentity
statusfor someone else's listing - active or sold
typecategory - code
price, currencyprice; complex has price: { from, to, currency }
constructionYearyear built, an integer or null
addressfull address, with street and coordinates
nativeAreaUnitthe unit the listing was entered in (for display); areas come as { "value": 50, "unit": "m2" }
photosphotos: id, isMain, mimetype, variants, ready
processingStatusready, processing or failed - whether the photos are ready
promotedthe listing is promoted
authorthe listing's agent or agency

Categories and other attributes are codes; translated labels are in the dictionaries. Complex also has apartmentPlans (floor plans) and progress (construction progress).

ready: false on a photo means the watermarked variants are still being generated. Show a placeholder and re-read the listing later - do not cache an unfinished image.

What you see: any listing - the public card, as on the site; your listings - the full owner view. Nobody gets the owner's contacts, seller data from imports, moderation notes or originals without the watermark.

Create, edit, delete

ActionRequestResponse
CreatePOST /objects/{kind}201 with the listing
EditPUT /objects/{kind}/{id}the listing; owner only, otherwise 404
DeleteDELETE /objects/{kind}/{id}a draft is deleted for good, a published listing is archived; a listing with an active commission contract - 409 conflict
curl -X POST https://developers.grem.capital/api/v1/objects/property \
  -H "Authorization: Bearer gsk_live_xxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 9a1d2c3b-4e5f-4a6b-8c7d-0e1f2a3b4c5d" \
  -d '{
    "name": "2-room flat, Torstraße 12",
    "type": "Residential",
    "address": { "country": "Germany", "city": "Berlin", "street": "Torstraße", "streetNumber": "12" },
    "price": 320000, "currency": "EUR",
    "spaceAll": 64, "rooms": 2, "floor": 3, "buildingFloor": 5,
    "photos": ["https://example.com/1.jpg"],
    "publish": false
  }'
  • publish: false (default) - a draft, not in the catalog; publish: true - published. Publishing needs at least 1 photo for property and rental, 2 for complex.
  • Not every account role may create every kind - same as in the cabinet.
  • Unknown fields are ignored. Take category codes from the dictionaries. The codes of condition, conditionType and amenities (camelCase, like needsRenovation, fridge) are listed in the write schema itself (the tables below and /openapi.json) - GET /dictionaries does not decode them.
  • Areas: a number in m² or { "value": 700, "unit": "ft2" }.
  • PUT without photos keeps the existing photos.
  • Idempotency-Key on create prevents a duplicate on retry.

Photos

photos is an array; each item is:

  • a public https://... address - GREM downloads the image itself;
  • the id of a file uploaded with POST /uploads (Files).

An address that cannot be downloaded is skipped and reported in the response warnings. With strictPhotos: true such a request fails with 422 instead.

Property fields

Required: name, type, address, price.

FieldDescription
typeResidential, Commercial, Industrial or Land plot
residentialType, commercialType, industrialTypesubtype - a code or an array of codes
marketSegmentprimary (new build) or secondary
descriptiondescription, up to 5000 characters
addresscountry, city (required), district, region, street, streetNumber, postalCode, location
price, currencyprice; currency UAH, USD, EUR, AZN, GBP, AED, CNY, TRY, GEL
constructionYearyear, 1700-2100
spaceAll, spaceLiving, spaceKitchen, effectiveArea, auxiliaryArea, landPlotAreaareas
rooms, bedrooms, numberOfBathrooms, balconies, numberWindows, unitsCountcounts
floor, buildingFloor, ceilingHeightfloor, floors, ceiling height
conditionneedsRenovation, partialRenovation, renovated, designer, shellCore, newFromDeveloper
buildingTypenewBuilding, secondary, stalinka, khrushchevka, brezhnevka, czech, gostinka, prerevolutionary, townhouseRow, detached, other
wallMaterialType, constructionTech, kitchenTypewall material, construction technology, kitchen type
amenities, buildingAmenitiesin-unit and building amenities - arrays of codes
utilitySystem, heating, windowView, balcony, parkingutilities, heating, view, balcony, parking
safetyshelterNearby, powerBackup, autonomousHeating, waterReserve, starlink, gasAvailable, internetAvailable, elevatorWorks (yes/no)
accessibilityramp, groundLevelEntrance, wideDoors, disabledParking, wheelchairElevator (yes/no)
programseOselya, eVidnovlennya, mortgageEligible, installment
monthRentalRate, annualIncome, annualYield, paybackPeriod, propertyTax, insuranceCost, managementFee, repairsReserveinvestment figures
commissioncommission for agents: payer, type, value
tour3D tour: kind, url
complexIdthe complex the unit belongs to
photos, videomedia
publish, strictPhotossee above

Rental fields

Required: name, type (Residential, Commercial, Industrial), address, price. Most fields are as for property; rental-specific ones:

FieldDescription
rentalTypelong - long-term, short - daily
price, dayPrice, depositrate, daily rate, deposit
totalArea, totalFloors, bathroomsarea, floors, bathrooms
minRentTime, minTermMonthsminimum term
availableFromavailable from
checkIn, checkOutcheck-in and check-out time: from, to — hours of the day (15 = 15:00)
withChildren, withPetschildren allowed; pets: yes, no, with someone
furniture, furnitureListfurniture
conditionTypecondition - the same values as condition for property
onsiteAmenities, internalFeatureamenities
utilitiesIncluded, utilitiesCostutilities
checkInPay, onlinePay, bankTransfer, reportingDocumentspayment methods and documents

Complex fields

Required: name, address.

FieldDescription
description, descriptionPresentation, descriptionSocialdescriptions
pricefrom, to, currency
spaceunit areas: from, to
apartTypeunit types
classeconomy, comfort, comfortPlus, business, premium, elite
stageplanning, excavation, construction, finishing, commissioned, delivered
completionQuartercompletion quarter
queuesphases: name, stage, completionQuarter
sectionsNumber, floors, apartmentsNumber, parkingSpacescounts
installment, installmentTermsinstalments: downPaymentPct, termMonths, interestRate
infrastructureinfrastructure - an array of codes
territoryDescription, parkingDescription, infrastructureDescriptiondescriptions
apartmentPlansfloor plans: apartType, area, price, description, photos
progressconstruction progress: title, date, description, photos

The full schema of each kind with every value - components ObjectWriteProperty, ObjectWriteRental, ObjectWriteComplex in /openapi.json. They are generated from the same checks the server runs.

Agency key

RequestWhat it does
PATCH /objects/{kind}/{id}/agencymove a listing into the agency or back to personal: body {"targetAgencyId": "<id>"} or {"targetAgencyId": null}; without the field - into the key's agency
PATCH /objects/{kind}/{id}/assigneeassign an agent: {"assignTo": "<user id>"}

With a personal key both answer 403. A listing cannot move directly from one agency to another (409 conflict) - move it to personal first. Assigning an agent to a personal listing, or to someone who is not an active member of the agency, is 409 conflict too. Permissions: into the agency - the listing's author; back to personal - a manager, the agency owner or the author; assign anyone - manager and above, an agent - only themselves.

Events

object.created, object.updated, object.published, object.deleted - see Webhooks.

Was this article helpful?