Preskoči na sadržaj

Oglasi i pretraga ​

GET /v1/properties · GET /v1/properties/{idOrSlug} · opseg public:read

Šta sajt vidi ​

Javni API nikad ne vraća sve iz baze agencije, već samo oglase koji su:

  1. aktivni (status: "active"; ne nacrti, rezervisani, prodati, izdati ni arhivirani) i nisu obrisani;
  2. objavljeni na sajt: agencija ima kanal „Vaš sajt“ i oglas je na njega objavljen. Kanal nastaje sa prvim ključem; ako je u njemu uključeno „Automatski objavljuj nove oglase na sajtu“, svaki novi aktivan oglas se pojavi na sajtu sam, inače agencija bira oglase. Ako je kanal isključen, sajt ne vidi nijedan oglas;
  3. kod ključa za filijalu: oglasi te filijale.

Interna polja (beleške, vlasnik, ko je uneo oglas, dodatna polja za portale) se nikad ne vraćaju.

Pretraga ​

http
GET /api/v1/properties?dealType=sale&type=apartment&city=Beograd&municipality=Vračar&priceMax=250000&roomsMin=2&sort=priceAsc&page=1&pageSize=12
x-api-key: pk_…
ParametarTipZnačenje
qstring (≤ 200)slobodan tekst: pretraga celog teksta oglasa, plus delimično poklapanje u šifri (reference), naslovu i ulici
typeapartment | house | land | commercial | garage | office | othervrsta nekretnine
dealTypesale | rentprodaja ili izdavanje
citystringgrad, tačan naziv bez obzira na velika/mala slova (beograd = Beograd)
municipalitystringopština ili deo naziva (Vrač pogađa Vračar)
priceMin, priceMaxbrojcena u valuti oglasa (uključivo)
areaMin, areaMaxbrojpovršina u m² (uključivo)
roomsMin, roomsMaxbrojbroj soba (može 2.5)
featuresstringlista odvojena zarezom; oglas mora imati sve navedene, tačno kako su zapisane (Lift,Terasa,Parking)
bboxminLng,minLat,maxLng,maxLatsamo oglasi sa koordinatama unutar pravougaonika (za mapu)
sortnewest (podrazumevano) | oldest | priceAsc | priceDesc | areaAsc | areaDesc | relevanceredosled; relevance ima smisla uz q
page, pageSizeceo brojstrana (od 1) i veličina strane (1–100, podrazumevano 20)

Odgovor je paginiran: { items, page, pageSize, total }. Filijalu određuje ključ: ključ za filijalu vraća samo njene oglase. % i _ u pretrazi su obični znakovi, ne džokeri.

Lista nosi samo naslovnu sliku

U listi images sadrži samo naslovnu fotografiju, a imageCount ukupan broj fotografija. Sve fotografije vraća detalj oglasa.

Vrednosti features su srpski nazivi iz kataloga u aplikaciji, npr. Lift, Terasa, Parking, Garažno mesto, Klima, Novogradnja, Renoviran, Uknjižen, Odmah useljiv, Pet friendly. Agencija može upisati i sopstvene, pa listu za filtere na sajtu najbolje napravite iz stvarnih oglasa.

Detalj oglasa ​

http
GET /api/v1/properties/trosoban-stan-vracar-p-1042
x-api-key: pk_…

idOrSlug je UUID oglasa (id) ili njegov slug. Oglas koji ne postoji, nije aktivan ili nije objavljen na sajt vraća 404 NOT_FOUND; tada sajt treba da vrati svoju stranicu 404 (ili 410 za oglas koji je postojao).

Slug se menja sa naslovom

slug je naslov u obliku za URL plus šifra oglasa (trosoban-stan-vracar-p-1042). Kada agent promeni naslov, menja se i slug, a stari slug više ne radi. Dva sigurna rešenja:

  • adrese sa id-em: /nekretnine/{id}/{slug}; učitajte oglas po id, a ako se slug u adresi razlikuje, uradite 301 na novu adresu;
  • adrese sa slugom: kada detalj vrati 404, uzmite šifru sa kraja sluga (p-1042), potražite GET /v1/properties?q=P-1042, i ako stavka ima tačno tu reference, uradite 301 na njen novi slug.

Model oglasa (PublicProperty) ​

json
{
  "id": "5b1f0c7e-3a2d-4c51-9a7e-0f9a1f6d2c11",
  "reference": "P-1042",
  "slug": "trosoban-stan-vracar-p-1042",
  "title": "Trosoban stan, Vračar",
  "description": "Svetao, renoviran stan na drugom spratu…",
  "type": "apartment",
  "dealType": "sale",
  "status": "active",
  "price": 245000,
  "currency": "EUR",
  "pricePerSqm": 3500,
  "areaSqm": 70,
  "landAreaSqm": null,
  "rooms": 3,
  "bedrooms": 2,
  "bathrooms": 1,
  "floor": 2,
  "totalFloors": 5,
  "yearBuilt": 1972,
  "heating": "central",
  "furnished": "semi",
  "features": ["Lift", "Terasa", "Uknjižen"],
  "location": {
    "country": "RS", "city": "Beograd", "municipality": "Vračar", "neighborhood": "Crveni krst",
    "street": "Maksima Gorkog", "streetNumber": "12", "postalCode": "11000", "lat": 44.7953, "lng": 20.4781
  },
  "agentId": "a7c2…",
  "branchId": null,
  "agent": { "id": "a7c2…", "name": "Jelena Petrović", "phone": "+381 64 111 2233", "email": "jelena@agencija.rs" },
  "images": [
    {
      "id": "c0de…", "propertyId": "5b1f…", "position": 0, "alt": null, "isCover": true, "status": "ready",
      "originalName": "dnevna-soba.jpg", "createdAt": "2026-10-01T09:12:00.000Z",
      "variants": [
        { "name": "thumb", "url": "https://app.propertio.rs/media/…/thumb.webp?md5=…&expires=1792483200", "width": 320, "height": 213, "bytes": 14873, "format": "webp" },
        { "name": "card", "url": "https://app.propertio.rs/media/…/card.webp?md5=…&expires=1792483200", "width": 800, "height": 533, "bytes": 61230, "format": "webp" },
        { "name": "large", "url": "https://app.propertio.rs/media/…/large.webp?md5=…&expires=1792483200", "width": 1600, "height": 1066, "bytes": 198004, "format": "webp" }
      ]
    }
  ],
  "imageCount": 14,
  "createdAt": "2026-09-30T08:00:00.000Z",
  "updatedAt": "2026-10-18T14:21:00.000Z",
  "publishedAt": "2026-10-01T09:30:00.000Z"
}
PoljeNapomena
referencešifra oglasa u agenciji (npr. P-1042); prikažite je posetiocu, agenti po njoj traže oglas
price, currencycena u valuti oglasa; kod izdavanja je mesečna
pricePerSqmmože biti null
roomsbroj soba, može biti decimalan (2.5)
heatingcentral, gas, electric, floor, heat_pump, wood, none, other ili null
furnishedyes, no, semi ili null
locationadresa kakva je u oglasu; lat/lng mogu biti null. Dogovorite sa agencijom da li sajt prikazuje ulicu i broj
agentagent koji vodi oglas (null ako nije dodeljen)
images[].variantsthumb (320 px), card (800 px), large (1600 px); potpisani linkovi koji ističu, vidi Slike
imageCountsamo u listi
publishedAtkada je oglas poslednji put postao aktivan (posle rezervacije ili arhive se pomera)

Opcionalna polja mogu izostati ili biti null; tretirajte oba isto. Nova polja se mogu pojaviti; ignorišite ih.

Sitemap i statičko generisanje ​

Za sve oglase prođite kroz strane sa pageSize=100 (ili properties.all() u SDK-u) i za lastmod koristite updatedAt. Pošto linkovi slika ističu za 24 h, statički sajt treba ponovo da se izgradi bar jednom dnevno (bolje na nekoliko sati), ili da slike učitava pri prikazu.

ts
import { PropertioClient } from "@propertio/sdk";

const propertio = new PropertioClient({ baseUrl: "https://app.propertio.rs/api", apiKey: process.env.PROPERTIO_API_KEY! });
const urls: string[] = [];
for await (const p of propertio.properties.all({ dealType: "sale" })) {
  urls.push(`<url><loc>https://www.agencija.rs/nekretnine/${p.slug}</loc><lastmod>${p.updatedAt}</lastmod></url>`);
}